ansible(raw): make raw roles default; remove python-based roles; update docs [author: Сергей Антропов https://devops.org.ru]

This commit is contained in:
Sergey Antropoff 2025-09-08 15:43:42 +03:00
parent 3db64fe543
commit ff3c3f6f9e
6 changed files with 14 additions and 237 deletions

View File

@ -97,24 +97,24 @@ agent: collectors build
deploy: build-linux collectors-linux
# Деплой на удалённый хост через Ansible (контейнер)
# Деплой на удалённый хост через 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/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-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
delete:
# Очистка установленного агента без 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/delete/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-raw/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
# Деплой и запуск через 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/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-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
delete-service:
# Остановка сервиса и очистка
# Остановка сервиса и очистка (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-service/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-raw/playbook.yml -e ansible_ssh_private_key_file=/root/.ssh/id_rsa -e ansible_become=true -e ansible_become_method=sudo
deploy-raw: build-linux collectors-linux
# Деплой без Python на целевом хосте (raw + scp)
@ -137,7 +137,7 @@ delete-service-raw:
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
# Очистка установленного агента на удаленном хосте
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/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-raw/playbook.yml -e ansible_ssh_private_key_file=/root/.ssh/id_rsa -e ansible_become=true -e ansible_become_method=sudo
test:

View File

@ -4,14 +4,14 @@
Варианты развертывания:
- Docker Compose: файл `docker-compose.yml`
- Systemd сервис: через роль `runner/deploy-service` (юнит находится в `runner/sensusagent.service` при необходимости)
- Ansible-плейбуки: `runner/deploy`, `runner/delete`, а также service-варианты
- Systemd сервис: через raw-роль `runner/deploy-service-raw` (юнит находится в `runner/sensusagent.service` при необходимости)
- Ansible-плейбуки (без Python на целевом хосте): `runner/deploy-raw`, `runner/delete-raw`, а также service-варианты `*-raw`
Подготовка удаленного хоста:
- Доступ по SSH (ключ находится у оператора)
- Права `sudo` для установки зависимостей
Быстрый деплой (одноразовый запуск агента без systemd):
Быстрый деплой (одноразовый запуск агента без systemd, raw):
```bash
make deploy
```
@ -25,12 +25,12 @@ make deploy
make delete
```
Деплой и запуск через systemd:
Деплой и запуск через systemd (raw):
```bash
make deploy-service
```
Остановка и очистка systemd-варианта:
Остановка и очистка systemd-варианта (raw):
```bash
make delete-service
```

View File

@ -1,31 +0,0 @@
---
- hosts: all
gather_facts: no
become: true
become_user: root
become_method: sudo
vars:
remote_dir: /opt/sensusagent
tasks:
- name: Stop service
ansible.builtin.systemd:
name: sensusagent
state: stopped
enabled: false
ignore_errors: true
- name: Remove unit file
ansible.builtin.file:
path: /etc/systemd/system/sensusagent.service
state: absent
ignore_errors: true
- name: Reload systemd
ansible.builtin.command: systemctl daemon-reload
ignore_errors: true
- name: Remove remote directory
ansible.builtin.file:
path: "{{ remote_dir }}"
state: absent

View File

@ -1,33 +0,0 @@
---
- hosts: all
gather_facts: no
become: true
become_user: root
become_method: sudo
vars:
remote_dir: /opt/sensusagent
tasks:
- name: Stop sensusagent systemd service if present
ansible.builtin.systemd:
name: sensusagent
state: stopped
ignore_errors: yes
- name: Find running agent PIDs by full path
ansible.builtin.shell: "pgrep -f '^{{ remote_dir }}/agent( |$)' || true"
register: agent_pids
changed_when: false
failed_when: false
- name: Kill agent PIDs if any
ansible.builtin.shell: "kill -TERM {{ item }}"
loop: "{{ agent_pids.stdout_lines }}"
when: agent_pids.stdout != ''
changed_when: true
failed_when: false
- name: Remove remote directory
ansible.builtin.file:
path: "{{ remote_dir }}"
state: absent

View File

@ -1,56 +0,0 @@
---
- hosts: all
gather_facts: no
become: true
become_user: root
become_method: sudo
vars:
remote_dir: /opt/sensusagent
local_bin_dir: "{{ LOCAL_BIN_DIR | default('./bin/agent') }}"
tasks:
- name: Create remote dir
ansible.builtin.file:
path: "{{ remote_dir }}"
state: directory
mode: '0755'
- name: Copy agent binary (linux)
ansible.builtin.copy:
src: "{{ local_bin_dir }}/agent"
dest: "{{ remote_dir }}/agent"
mode: '0755'
- name: Copy config
ansible.builtin.copy:
src: "{{ local_bin_dir }}/config.yaml"
dest: "{{ remote_dir }}/config.yaml"
mode: '0644'
- name: Copy collectors directory
ansible.builtin.copy:
src: "{{ local_bin_dir }}/collectors/"
dest: "{{ remote_dir }}/collectors/"
mode: '0755'
directory_mode: '0755'
- name: Ensure collectors executable recursively
ansible.builtin.file:
path: "{{ remote_dir }}/collectors"
recurse: yes
mode: '0755'
- name: Install systemd unit
ansible.builtin.copy:
src: runner/sensusagent.service
dest: /etc/systemd/system/sensusagent.service
mode: '0644'
- name: Reload systemd
ansible.builtin.command: systemctl daemon-reload
- name: Enable and start service
ansible.builtin.systemd:
name: sensusagent
state: started
enabled: true

View File

@ -1,103 +0,0 @@
---
- hosts: all
gather_facts: yes
become: true
become_user: root
become_method: sudo
vars:
remote_dir: /opt/sensusagent
local_bin_dir: "{{ LOCAL_BIN_DIR | default('./bin/agent') }}"
tasks:
- name: Detect package manager (Debian/Ubuntu)
ansible.builtin.stat:
path: /etc/debian_version
register: debian_like
- name: Detect package manager (RHEL/CentOS)
ansible.builtin.stat:
path: /etc/redhat-release
register: rhel_like
- name: Update apt cache (tolerate broken third-party repos)
ansible.builtin.shell: |
apt-get update -o Acquire::AllowInsecureRepositories=true -o Acquire::https::Verify-Peer=false -o Acquire::https::Verify-Host=false || true
when: debian_like.stat.exists
- name: Install required packages on Debian/Ubuntu
ansible.builtin.apt:
name:
- sysstat # iostat
- iotop
- smartmontools # smartctl
- nvme-cli
- mdadm
- lsscsi
- sg3-utils
- pciutils
state: present
force_apt_get: yes
allow_unauthenticated: yes
when: debian_like.stat.exists
- name: Install required packages on RHEL/CentOS
ansible.builtin.yum:
name:
- sysstat
- iotop
- smartmontools
- nvme-cli
- mdadm
- lsscsi
- sg3_utils
- pciutils
state: present
when: rhel_like.stat.exists
- name: Enable sysstat service if available
ansible.builtin.service:
name: sysstat
state: started
enabled: yes
ignore_errors: yes
- name: Create remote dir
ansible.builtin.file:
path: "{{ remote_dir }}"
state: directory
mode: '0755'
- name: Copy agent binary (linux)
ansible.builtin.copy:
src: "{{ local_bin_dir }}/agent"
dest: "{{ remote_dir }}/agent"
mode: '0755'
- name: Copy config
ansible.builtin.copy:
src: "{{ local_bin_dir }}/config.yaml"
dest: "{{ remote_dir }}/config.yaml"
mode: '0644'
- name: Copy collectors directory (no rsync required)
ansible.builtin.copy:
src: "{{ local_bin_dir }}/collectors/"
dest: "{{ remote_dir }}/collectors/"
mode: '0755'
directory_mode: '0755'
- name: Ensure collectors executable recursively
ansible.builtin.file:
path: "{{ remote_dir }}/collectors"
recurse: yes
mode: '0755'
# - name: Run agent once and capture JSON
# ansible.builtin.command: "{{ remote_dir }}/agent --once --mode stdout"
# environment:
# CONFIG_PATH: "{{ remote_dir }}/config.yaml"
# register: agent_output
# - name: Show agent JSON
# ansible.builtin.debug:
# var: agent_output.stdout