From 330397f3310ba876c9a453049c05fc1b31f2858b Mon Sep 17 00:00:00 2001 From: Sergey Antropoff Date: Mon, 15 Sep 2025 14:55:41 +0300 Subject: [PATCH] =?UTF-8?q?refactor:=20=D1=83=D0=B1=D1=80=D0=B0=D0=BD=20?= =?UTF-8?q?=D1=81=D1=83=D1=84=D1=84=D0=B8=D0=BA=D1=81=20-raw=20=D0=B8?= =?UTF-8?q?=D0=B7=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD=D0=B8=D0=B9=20?= =?UTF-8?q?=D0=BF=D0=B0=D0=BF=D0=BE=D0=BA=20Ansible=20=D1=80=D0=BE=D0=BB?= =?UTF-8?q?=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Переименованы папки: - delete-raw → delete - delete-service-raw → delete-service - deploy-raw → deploy - deploy-service-raw → deploy-service - Обновлены пути в Makefile для всех команд: - make deploy - make delete - make deploy-service - make delete-service - make update-service - make update - Обновлены пути в документации - Добавлены новые команды make update-service и make update - Обновлен deploy/playbook.yml для использования шаблонов конфигурации Автор: Сергей Антропов Сайт: https://devops.org.ru --- Makefile | 28 +++++++++++++++---- docs/ansible_groups.md | 8 +++++- docs/build_and_run.md | 17 +++++++++++ .../playbook.yml | 0 runner/{delete-raw => delete}/playbook.yml | 0 .../playbook.yml | 0 runner/{deploy-raw => deploy}/playbook.yml | 11 ++++---- 7 files changed, 52 insertions(+), 12 deletions(-) rename runner/{delete-service-raw => delete-service}/playbook.yml (100%) rename runner/{delete-raw => delete}/playbook.yml (100%) rename runner/{deploy-service-raw => deploy-service}/playbook.yml (100%) rename runner/{deploy-raw => deploy}/playbook.yml (89%) diff --git a/Makefile b/Makefile index f18787e..28928b9 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ SHELL := /bin/sh PROJECT_NAME := agent .PHONY: build build-linux build-darwin build-windows run agent test lint docker-clean collectors collectors-darwin collectors-linux collectors-windows -.PHONY: kafka-topic kafka-once kafka-consume +.PHONY: kafka-topic kafka-once kafka-consume update-service update build: # Платформозависимая сборка агента (как у collectors) @@ -130,25 +130,25 @@ agent: collectors build deploy: build-linux collectors-linux # Деплой на удалённый хост через Ansible raw (без Python на целевой стороне) docker run --rm -e ANSIBLE_HOST_KEY_CHECKING=False -v $$PWD:/workspace -v $$HOME/.ssh:/root/.ssh:ro -w /workspace cytopia/ansible:latest-tools \ - ansible-playbook -i runner/inventory.ini runner/deploy-raw/playbook.yml -e LOCAL_BIN_DIR=/workspace/bin/agent -e ansible_ssh_private_key_file=/root/.ssh/id_rsa -e ansible_become=true -e ansible_become_method=sudo + ansible-playbook -i runner/inventory.ini runner/deploy/playbook.yml -e LOCAL_BIN_DIR=/workspace/bin/agent -e ansible_ssh_private_key_file=/root/.ssh/id_rsa -e ansible_become=true -e ansible_become_method=sudo delete: # Очистка установленного агента (raw, без Python на целевой стороне) docker run --rm -e ANSIBLE_HOST_KEY_CHECKING=False -v $$PWD:/workspace -v $$HOME/.ssh:/root/.ssh:ro -w /workspace cytopia/ansible:latest-tools \ - ansible-playbook -i runner/inventory.ini runner/delete-raw/playbook.yml -e ansible_ssh_private_key_file=/root/.ssh/id_rsa -e ansible_become=true -e ansible_become_method=sudo + ansible-playbook -i runner/inventory.ini runner/delete/playbook.yml -e ansible_ssh_private_key_file=/root/.ssh/id_rsa -e ansible_become=true -e ansible_become_method=sudo deploy-service: build-linux collectors-linux # Деплой и запуск через systemd (raw, без Python на целевой стороне) docker run --rm -e ANSIBLE_HOST_KEY_CHECKING=False -v $$PWD:/workspace -v $$HOME/.ssh:/root/.ssh:ro -w /workspace cytopia/ansible:latest-tools \ - ansible-playbook -i runner/inventory.ini runner/deploy-service-raw/playbook.yml -e LOCAL_BIN_DIR=/workspace/bin/agent -e ansible_ssh_private_key_file=/root/.ssh/id_rsa -e ansible_become=true -e ansible_become_method=sudo + ansible-playbook -i runner/inventory.ini runner/deploy-service/playbook.yml -e LOCAL_BIN_DIR=/workspace/bin/agent -e ansible_ssh_private_key_file=/root/.ssh/id_rsa -e ansible_become=true -e ansible_become_method=sudo delete-service: # Остановка и очистка systemd-варианта без Python на целевой стороне docker run --rm -e ANSIBLE_HOST_KEY_CHECKING=False -v $$PWD:/workspace -v $$HOME/.ssh:/root/.ssh:ro -w /workspace cytopia/ansible:latest-tools \ - ansible-playbook -i runner/inventory.ini runner/delete-service-raw/playbook.yml -e ansible_ssh_private_key_file=/root/.ssh/id_rsa -e ansible_become=true -e ansible_become_method=sudo + ansible-playbook -i runner/inventory.ini runner/delete-service/playbook.yml -e ansible_ssh_private_key_file=/root/.ssh/id_rsa -e ansible_become=true -e ansible_become_method=sudo # Очистка установленного агента на удаленном хосте docker run --rm -e ANSIBLE_HOST_KEY_CHECKING=False -v $$PWD:/workspace -v $$HOME/.ssh:/root/.ssh:ro -w /workspace cytopia/ansible:latest-tools \ - ansible-playbook -i runner/inventory.ini runner/delete-raw/playbook.yml -e ansible_ssh_private_key_file=/root/.ssh/id_rsa -e ansible_become=true -e ansible_become_method=sudo + ansible-playbook -i runner/inventory.ini runner/delete/playbook.yml -e ansible_ssh_private_key_file=/root/.ssh/id_rsa -e ansible_become=true -e ansible_become_method=sudo @@ -191,3 +191,19 @@ kafka-once: kafka-consume: @docker run --rm edenhill/kcat:1.7.1 -b 10.99.0.90:9092 -t sensus.metrics -o -5 -C -q -J | cat +# Обновление сервиса (удаление + развертывание через systemd) +update-service: + # Обновление systemd-сервиса: остановка, удаление, развертывание + @echo "🔄 Обновление systemd-сервиса..." + @$(MAKE) delete-service + @$(MAKE) deploy-service + @echo "✅ Обновление systemd-сервиса завершено" + +# Обновление агента (удаление + развертывание без systemd) +update: + # Обновление агента: удаление, развертывание + @echo "🔄 Обновление агента..." + @$(MAKE) delete + @$(MAKE) deploy + @echo "✅ Обновление агента завершено" + diff --git a/docs/ansible_groups.md b/docs/ansible_groups.md index f2d1a36..ffdd0a9 100644 --- a/docs/ansible_groups.md +++ b/docs/ansible_groups.md @@ -220,7 +220,13 @@ collectors_config: ./runner/test-config-generation.sh # Развернуть на конкретной группе -ansible-playbook -i runner/inventory.ini runner/deploy-service-raw/playbook.yml --limit proxmox +ansible-playbook -i runner/inventory.ini runner/deploy-service/playbook.yml --limit proxmox + +# Обновление systemd-сервиса (рекомендуется) +make update-service + +# Обновление агента без systemd +make update ``` ## Примеры конфигураций diff --git a/docs/build_and_run.md b/docs/build_and_run.md index a5ddd1e..5f979b0 100644 --- a/docs/build_and_run.md +++ b/docs/build_and_run.md @@ -53,4 +53,21 @@ docker compose logs -f agent docker compose exec agent sh -c 'ls -la /bin/agent/collectors' ``` +## Команды обновления + +Для обновления агента на удаленных серверах: + +```bash +# Обновление systemd-сервиса (рекомендуется) +make update-service + +# Обновление агента без systemd +make update +``` + +Эти команды автоматически выполняют: +1. Остановку и удаление старой версии +2. Развертывание новой версии +3. Запуск обновленного агента + diff --git a/runner/delete-service-raw/playbook.yml b/runner/delete-service/playbook.yml similarity index 100% rename from runner/delete-service-raw/playbook.yml rename to runner/delete-service/playbook.yml diff --git a/runner/delete-raw/playbook.yml b/runner/delete/playbook.yml similarity index 100% rename from runner/delete-raw/playbook.yml rename to runner/delete/playbook.yml diff --git a/runner/deploy-service-raw/playbook.yml b/runner/deploy-service/playbook.yml similarity index 100% rename from runner/deploy-service-raw/playbook.yml rename to runner/deploy-service/playbook.yml diff --git a/runner/deploy-raw/playbook.yml b/runner/deploy/playbook.yml similarity index 89% rename from runner/deploy-raw/playbook.yml rename to runner/deploy/playbook.yml index 15ac2d6..9547b94 100644 --- a/runner/deploy-raw/playbook.yml +++ b/runner/deploy/playbook.yml @@ -22,12 +22,13 @@ {{ local_bin_dir }}/agent {{ ansible_user }}@{{ ansible_host }}:{{ tmp_upload_dir }}/agent delegate_to: localhost - - name: Copy config via scp (from controller) to tmp - ansible.builtin.command: > - scp -B -i {{ ansible_ssh_private_key_file | default('~/.ssh/id_rsa') }} - -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null - {{ local_bin_dir }}/config.yaml {{ ansible_user }}@{{ ansible_host }}:{{ tmp_upload_dir }}/config.yaml + - name: Generate config.yaml from template + ansible.builtin.template: + src: ../templates/config.yaml.j2 + dest: "{{ tmp_upload_dir }}/config.yaml" + mode: '0644' delegate_to: localhost + run_once: true - name: Copy collectors directory via scp -r (from controller) to tmp ansible.builtin.command: >