Устанавливает prometheus-node-exporter из официального репозитория Ubuntu 24 LTS (universe, сторонний репозиторий не добавляется) на всех узлах обеих сред (площадка A + Облачная площадка), безусловно. Сервис enabled+started, слушает стандартный порт :9100 (дефолт пакета, конфиг не переопределяется). Firewall-правил не требуется — в nftables.conf.j2 нет table inet filter с policy drop. Шаблоны FRR/nftables не затронуты: render-check.sh 6/6, render-check-cloud.sh 84/84, без изменений. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bc3HkMiDwooSyLBLoMKNyF
178 lines
5.9 KiB
YAML
178 lines
5.9 KiB
YAML
---
|
|
- name: Pre-flight | приватные интерфейсы должны быть уже сконфигурированы Terraform-слоем
|
|
ansible.builtin.assert:
|
|
that:
|
|
- priv1_iface in ansible_facts.interfaces
|
|
- priv2_iface in ansible_facts.interfaces
|
|
- ansible_facts[priv1_iface]['active'] | default(false)
|
|
- ansible_facts[priv2_iface]['active'] | default(false)
|
|
fail_msg: >-
|
|
Интерфейсы {{ priv1_iface }}/{{ priv2_iface }} не найдены или не активны.
|
|
Ожидается, что Terraform-провижининг уже создал и поднял их до запуска
|
|
этого playbook.
|
|
success_msg: "Приватные интерфейсы {{ priv1_iface }} и {{ priv2_iface }} на месте."
|
|
|
|
- name: Pre-flight | внешний интерфейс должен быть на месте (нужен для sNAT egress)
|
|
ansible.builtin.assert:
|
|
that:
|
|
- ext_iface in ansible_facts.interfaces
|
|
- ansible_facts[ext_iface]['active'] | default(false)
|
|
fail_msg: >-
|
|
Внешний интерфейс {{ ext_iface }} не найден или не активен — он нужен
|
|
как egress для sNAT (enable_snat: true).
|
|
success_msg: "Внешний интерфейс {{ ext_iface }} на месте."
|
|
when: enable_snat | bool
|
|
|
|
- name: Pre-flight | dnat_target_ip задан только вместе с enable_snat
|
|
ansible.builtin.assert:
|
|
that:
|
|
- enable_snat | bool
|
|
fail_msg: >-
|
|
dnat_target_ip задан ({{ dnat_target_ip }}), но enable_snat: false —
|
|
nftables.conf в этом случае вообще не разворачивается, DNAT-правило
|
|
применено не будет. Включите enable_snat: true.
|
|
success_msg: "DNAT на {{ dnat_target_ip }} будет применён (enable_snat: true)."
|
|
when: dnat_target_ip | length > 0
|
|
|
|
- name: Auto-update защита | отключить периодический apt (apt-daily/unattended-upgrades)
|
|
ansible.builtin.copy:
|
|
dest: /etc/apt/apt.conf.d/20auto-upgrades
|
|
content: |
|
|
APT::Periodic::Update-Package-Lists "0";
|
|
APT::Periodic::Unattended-Upgrade "0";
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
|
|
- name: Auto-update защита | замаскировать apt-daily таймеры/сервисы
|
|
ansible.builtin.systemd:
|
|
name: "{{ item }}"
|
|
masked: true
|
|
state: stopped
|
|
enabled: false
|
|
loop:
|
|
- apt-daily.timer
|
|
- apt-daily-upgrade.timer
|
|
- apt-daily.service
|
|
- apt-daily-upgrade.service
|
|
|
|
- name: Сеть | каталог для networkd drop-in существует
|
|
ansible.builtin.file:
|
|
path: /etc/systemd/networkd.conf.d
|
|
state: directory
|
|
owner: root
|
|
group: root
|
|
mode: "0755"
|
|
|
|
- name: Сеть | systemd-networkd не должен вычищать маршруты, поставленные не им (zebra)
|
|
ansible.builtin.copy:
|
|
dest: /etc/systemd/networkd.conf.d/99-keep-configuration.conf
|
|
content: |
|
|
[Network]
|
|
KeepConfiguration=yes
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
notify:
|
|
- Restart systemd-networkd
|
|
- Restart frr
|
|
|
|
- name: FRR APT-репозиторий | добавить GPG-ключ
|
|
ansible.builtin.get_url:
|
|
url: https://deb.frrouting.org/frr/keys.gpg
|
|
dest: /usr/share/keyrings/frrouting.gpg
|
|
mode: "0644"
|
|
|
|
- name: FRR APT-репозиторий | добавить источник пакетов
|
|
ansible.builtin.apt_repository:
|
|
repo: >-
|
|
deb [signed-by=/usr/share/keyrings/frrouting.gpg]
|
|
https://deb.frrouting.org/frr {{ ansible_distribution_release }} {{ frr_apt_series }}
|
|
filename: frr
|
|
state: present
|
|
update_cache: true
|
|
|
|
- name: Установить пакеты FRR
|
|
ansible.builtin.apt:
|
|
name: "{{ frr_packages }}"
|
|
state: present
|
|
|
|
- name: Конфиг | /etc/frr/daemons
|
|
ansible.builtin.template:
|
|
src: daemons.j2
|
|
dest: "{{ frr_daemons_path }}"
|
|
owner: frr
|
|
group: frr
|
|
mode: "0640"
|
|
notify: Restart frr
|
|
|
|
- name: Конфиг | /etc/frr/frr.conf
|
|
ansible.builtin.template:
|
|
src: frr.conf.j2
|
|
dest: "{{ frr_conf_path }}"
|
|
owner: frr
|
|
group: frr
|
|
mode: "0640"
|
|
notify: Restart frr
|
|
|
|
- name: Сеть | netplan-конфиг для dummy0 (anycast)
|
|
ansible.builtin.template:
|
|
src: dummy0.netplan.yml.j2
|
|
dest: "{{ netplan_dummy_config_path }}"
|
|
owner: root
|
|
group: root
|
|
mode: "0600"
|
|
notify:
|
|
- Apply netplan
|
|
- Restart frr
|
|
|
|
- name: FRR | сервис включён и запущен
|
|
ansible.builtin.systemd:
|
|
name: frr
|
|
enabled: true
|
|
state: started
|
|
|
|
- name: sNAT | включить net.ipv4.ip_forward персистентно
|
|
ansible.builtin.lineinfile:
|
|
path: /etc/sysctl.d/99-frr-anycast-forward.conf
|
|
line: net.ipv4.ip_forward=1
|
|
create: true
|
|
mode: "0644"
|
|
notify: Reload sysctl
|
|
when: enable_snat | bool
|
|
|
|
- name: sNAT | установить nftables
|
|
ansible.builtin.apt:
|
|
name: nftables
|
|
state: present
|
|
when: enable_snat | bool
|
|
|
|
- name: sNAT | конфиг /etc/nftables.conf (DNAT anycast + masquerade на внешнем интерфейсе)
|
|
ansible.builtin.template:
|
|
src: nftables.conf.j2
|
|
dest: "{{ nftables_conf_path }}"
|
|
owner: root
|
|
group: root
|
|
mode: "0640"
|
|
notify: Reload nftables
|
|
when: enable_snat | bool
|
|
|
|
- name: sNAT | сервис nftables включён и запущен
|
|
ansible.builtin.systemd:
|
|
name: nftables
|
|
enabled: true
|
|
state: started
|
|
when: enable_snat | bool
|
|
|
|
- name: Node Exporter | установить из официального репозитория Ubuntu
|
|
ansible.builtin.apt:
|
|
name: "{{ node_exporter_package }}"
|
|
state: present
|
|
update_cache: true
|
|
|
|
- name: Node Exporter | сервис включён и запущен (стандартный порт 9100)
|
|
ansible.builtin.systemd:
|
|
name: prometheus-node-exporter
|
|
enabled: true
|
|
state: started
|