Some checks failed
LNM Migration CI / build-runner (push) Has been cancelled
Ledger OpenAPI CI / deprecation-check (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Airgap Sealed CI Smoke / sealed-smoke (push) Has been cancelled
Ledger Packs CI / build-pack (push) Has been cancelled
Export Center CI / export-ci (push) Has been cancelled
Ledger OpenAPI CI / validate-oas (push) Has been cancelled
Ledger OpenAPI CI / check-wellknown (push) Has been cancelled
Ledger Packs CI / verify-pack (push) Has been cancelled
LNM Migration CI / validate-metrics (push) Has been cancelled
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
233 lines
7.6 KiB
YAML
233 lines
7.6 KiB
YAML
---
|
|
# Ansible Playbook for Zastava Agent VM/Bare-Metal Deployment
|
|
#
|
|
# Requirements:
|
|
# - Target hosts must have Docker installed and running
|
|
# - Ansible 2.10+ with community.docker collection
|
|
#
|
|
# Usage:
|
|
# ansible-playbook -i inventory.yml zastava-agent.yml \
|
|
# -e zastava_tenant=my-tenant \
|
|
# -e scanner_backend_url=https://scanner.internal
|
|
#
|
|
# Variables (can be set in inventory or via -e):
|
|
# zastava_tenant: Tenant identifier (required)
|
|
# scanner_backend_url: Scanner backend URL (required)
|
|
# zastava_version: Version to deploy (default: latest)
|
|
# zastava_node_name: Override node name (default: hostname)
|
|
# zastava_health_port: Health check port (default: 8080)
|
|
# docker_socket: Docker socket path (default: /var/run/docker.sock)
|
|
|
|
- name: Deploy StellaOps Zastava Agent
|
|
hosts: zastava_agents
|
|
become: true
|
|
|
|
vars:
|
|
zastava_version: "{{ zastava_version | default('latest') }}"
|
|
zastava_install_dir: /opt/stellaops/zastava-agent
|
|
zastava_config_dir: /etc/stellaops
|
|
zastava_data_dir: /var/lib/zastava-agent
|
|
zastava_user: zastava-agent
|
|
zastava_group: docker
|
|
zastava_health_port: "{{ zastava_health_port | default(8080) }}"
|
|
docker_socket: "{{ docker_socket | default('/var/run/docker.sock') }}"
|
|
download_base_url: "{{ download_base_url | default('https://releases.stellaops.org') }}"
|
|
|
|
pre_tasks:
|
|
- name: Validate required variables
|
|
ansible.builtin.assert:
|
|
that:
|
|
- zastava_tenant is defined and zastava_tenant | length > 0
|
|
- scanner_backend_url is defined and scanner_backend_url | length > 0
|
|
fail_msg: |
|
|
Required variables not set.
|
|
Please provide:
|
|
- zastava_tenant: Your tenant identifier
|
|
- scanner_backend_url: Scanner backend URL
|
|
|
|
- name: Check Docker service is running
|
|
ansible.builtin.systemd:
|
|
name: docker
|
|
state: started
|
|
check_mode: true
|
|
register: docker_status
|
|
|
|
- name: Fail if Docker is not available
|
|
ansible.builtin.fail:
|
|
msg: "Docker service is not running on {{ inventory_hostname }}"
|
|
when: docker_status.status.ActiveState != 'active'
|
|
|
|
tasks:
|
|
# =========================================================================
|
|
# User and Directory Setup
|
|
# =========================================================================
|
|
|
|
- name: Create zastava-agent system user
|
|
ansible.builtin.user:
|
|
name: "{{ zastava_user }}"
|
|
comment: StellaOps Zastava Agent
|
|
system: true
|
|
shell: /usr/sbin/nologin
|
|
groups: "{{ zastava_group }}"
|
|
create_home: false
|
|
state: present
|
|
|
|
- name: Create installation directory
|
|
ansible.builtin.file:
|
|
path: "{{ zastava_install_dir }}"
|
|
state: directory
|
|
owner: "{{ zastava_user }}"
|
|
group: "{{ zastava_group }}"
|
|
mode: '0755'
|
|
|
|
- name: Create configuration directory
|
|
ansible.builtin.file:
|
|
path: "{{ zastava_config_dir }}"
|
|
state: directory
|
|
owner: root
|
|
group: root
|
|
mode: '0755'
|
|
|
|
- name: Create data directory
|
|
ansible.builtin.file:
|
|
path: "{{ zastava_data_dir }}"
|
|
state: directory
|
|
owner: "{{ zastava_user }}"
|
|
group: "{{ zastava_group }}"
|
|
mode: '0750'
|
|
|
|
- name: Create event buffer directory
|
|
ansible.builtin.file:
|
|
path: "{{ zastava_data_dir }}/runtime-events"
|
|
state: directory
|
|
owner: "{{ zastava_user }}"
|
|
group: "{{ zastava_group }}"
|
|
mode: '0750'
|
|
|
|
# =========================================================================
|
|
# Download and Install Agent
|
|
# =========================================================================
|
|
|
|
- name: Determine architecture
|
|
ansible.builtin.set_fact:
|
|
arch_suffix: "{{ 'x64' if ansible_architecture == 'x86_64' else 'arm64' if ansible_architecture == 'aarch64' else ansible_architecture }}"
|
|
|
|
- name: Download Zastava Agent binary
|
|
ansible.builtin.get_url:
|
|
url: "{{ download_base_url }}/zastava-agent/{{ zastava_version }}/zastava-agent-linux-{{ arch_suffix }}.tar.gz"
|
|
dest: /tmp/zastava-agent.tar.gz
|
|
mode: '0644'
|
|
register: download_result
|
|
retries: 3
|
|
delay: 5
|
|
|
|
- name: Extract Zastava Agent
|
|
ansible.builtin.unarchive:
|
|
src: /tmp/zastava-agent.tar.gz
|
|
dest: "{{ zastava_install_dir }}"
|
|
remote_src: true
|
|
owner: "{{ zastava_user }}"
|
|
group: "{{ zastava_group }}"
|
|
extra_opts:
|
|
- --strip-components=1
|
|
notify: Restart zastava-agent
|
|
|
|
- name: Make agent binary executable
|
|
ansible.builtin.file:
|
|
path: "{{ zastava_install_dir }}/StellaOps.Zastava.Agent"
|
|
mode: '0755'
|
|
|
|
- name: Clean up downloaded archive
|
|
ansible.builtin.file:
|
|
path: /tmp/zastava-agent.tar.gz
|
|
state: absent
|
|
|
|
# =========================================================================
|
|
# Configuration
|
|
# =========================================================================
|
|
|
|
- name: Deploy environment configuration
|
|
ansible.builtin.template:
|
|
src: zastava-agent.env.j2
|
|
dest: "{{ zastava_config_dir }}/zastava-agent.env"
|
|
owner: root
|
|
group: "{{ zastava_group }}"
|
|
mode: '0640'
|
|
notify: Restart zastava-agent
|
|
|
|
# =========================================================================
|
|
# systemd Service
|
|
# =========================================================================
|
|
|
|
- name: Install systemd service unit
|
|
ansible.builtin.copy:
|
|
src: zastava-agent.service
|
|
dest: /etc/systemd/system/zastava-agent.service
|
|
owner: root
|
|
group: root
|
|
mode: '0644'
|
|
notify:
|
|
- Reload systemd
|
|
- Restart zastava-agent
|
|
|
|
- name: Enable and start zastava-agent service
|
|
ansible.builtin.systemd:
|
|
name: zastava-agent
|
|
state: started
|
|
enabled: true
|
|
daemon_reload: true
|
|
|
|
# =========================================================================
|
|
# Health Verification
|
|
# =========================================================================
|
|
|
|
- name: Wait for agent health endpoint
|
|
ansible.builtin.uri:
|
|
url: "http://localhost:{{ zastava_health_port }}/healthz"
|
|
method: GET
|
|
status_code: 200
|
|
register: health_result
|
|
retries: 30
|
|
delay: 2
|
|
until: health_result.status == 200
|
|
|
|
- name: Display agent status
|
|
ansible.builtin.debug:
|
|
msg: "Zastava Agent deployed successfully on {{ inventory_hostname }}"
|
|
|
|
handlers:
|
|
- name: Reload systemd
|
|
ansible.builtin.systemd:
|
|
daemon_reload: true
|
|
|
|
- name: Restart zastava-agent
|
|
ansible.builtin.systemd:
|
|
name: zastava-agent
|
|
state: restarted
|
|
|
|
# =============================================================================
|
|
# Post-deployment verification play
|
|
# =============================================================================
|
|
- name: Verify Zastava Agent Deployment
|
|
hosts: zastava_agents
|
|
become: false
|
|
gather_facts: false
|
|
|
|
tasks:
|
|
- name: Check agent readiness
|
|
ansible.builtin.uri:
|
|
url: "http://localhost:{{ zastava_health_port | default(8080) }}/readyz"
|
|
method: GET
|
|
return_content: true
|
|
register: ready_check
|
|
|
|
- name: Display deployment summary
|
|
ansible.builtin.debug:
|
|
msg: |
|
|
Zastava Agent Deployment Summary:
|
|
- Host: {{ inventory_hostname }}
|
|
- Status: {{ 'Ready' if ready_check.status == 200 else 'Not Ready' }}
|
|
- Health Endpoint: http://localhost:{{ zastava_health_port | default(8080) }}/healthz
|
|
- Tenant: {{ zastava_tenant }}
|
|
- Backend: {{ scanner_backend_url }}
|