Major Improvements: - Added retry deployment buttons in machine list for failed deployments - Added retry button in SSH console modal footer for enhanced UX - Enhanced deployment process with comprehensive cleanup of existing services - Improved binary installation with password-based sudo authentication - Updated configuration generation to include all required sections (agent, ai, network, security) - Fixed deployment verification and error handling Security Enhancements: - Enhanced verifiedStopExistingServices with thorough cleanup process - Improved binary copying with proper sudo authentication - Added comprehensive configuration validation UX Improvements: - Users can retry deployments without re-running machine discovery - Retry buttons available from both machine list and console modal - Real-time deployment progress with detailed console output - Clear error states with actionable retry options Technical Changes: - Modified ServiceDeployment.tsx with retry button components - Enhanced api/setup_manager.go with improved deployment functions - Updated main.go with command line argument support (--config, --setup) - Added comprehensive zero-trust security validation system 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
153 lines
4.8 KiB
YAML
153 lines
4.8 KiB
YAML
---
|
|
- name: Deploy BZZZ 1.0.2 to Cluster
|
|
hosts: bzzz_cluster
|
|
become: yes
|
|
vars:
|
|
bzzz_version: "1.0.2"
|
|
bzzz_binary_source: "{{ playbook_dir }}/build/bzzz-{{ bzzz_version }}"
|
|
bzzz_service_name: "bzzz"
|
|
backup_timestamp: "{{ ansible_date_time.epoch }}"
|
|
bzzz_config_paths:
|
|
- "/home/tony/chorus/project-queues/active/BZZZ/bzzz.yaml"
|
|
- "/home/tony/chorus/project-queues/active/BZZZ/config/bzzz.yaml"
|
|
- "/home/tony/.config/bzzz/config.yaml"
|
|
- "/etc/bzzz/config.yaml"
|
|
|
|
tasks:
|
|
- name: Check if BZZZ service is running
|
|
systemd:
|
|
name: "{{ bzzz_service_name }}"
|
|
register: bzzz_service_status
|
|
ignore_errors: yes
|
|
|
|
- name: Check for existing BZZZ config files
|
|
stat:
|
|
path: "{{ item }}"
|
|
register: config_file_checks
|
|
loop: "{{ bzzz_config_paths }}"
|
|
|
|
- name: Identify existing config files
|
|
set_fact:
|
|
existing_config_files: "{{ config_file_checks.results | selectattr('stat.exists') | map(attribute='item') | list }}"
|
|
|
|
- name: Display config file status
|
|
debug:
|
|
msg: |
|
|
Config file discovery:
|
|
{% for path in bzzz_config_paths %}
|
|
{{ path }}: {{ 'EXISTS' if path in existing_config_files else 'MISSING' }}
|
|
{% endfor %}
|
|
|
|
- name: Warn if no config files found
|
|
debug:
|
|
msg: |
|
|
⚠️ WARNING: No BZZZ config files found!
|
|
The embedded installation server should have generated a config file.
|
|
Expected locations:
|
|
{{ bzzz_config_paths | join('\n') }}
|
|
|
|
The service may fail to start without proper configuration.
|
|
when: existing_config_files | length == 0
|
|
|
|
- name: Display primary config file
|
|
debug:
|
|
msg: "✅ Using primary config file: {{ existing_config_files[0] }}"
|
|
when: existing_config_files | length > 0
|
|
|
|
- name: Validate primary config file content
|
|
shell: |
|
|
echo "Config file validation for: {{ existing_config_files[0] }}"
|
|
echo "File size: $(stat -c%s '{{ existing_config_files[0] }}') bytes"
|
|
echo "Last modified: $(stat -c%y '{{ existing_config_files[0] }}')"
|
|
echo ""
|
|
echo "Config file preview (first 10 lines):"
|
|
head -10 '{{ existing_config_files[0] }}'
|
|
register: config_validation
|
|
when: existing_config_files | length > 0
|
|
changed_when: false
|
|
|
|
- name: Display config file validation
|
|
debug:
|
|
msg: "{{ config_validation.stdout_lines }}"
|
|
when: existing_config_files | length > 0 and config_validation is defined
|
|
|
|
- name: Stop BZZZ service if running
|
|
systemd:
|
|
name: "{{ bzzz_service_name }}"
|
|
state: stopped
|
|
when: bzzz_service_status.status is defined and bzzz_service_status.status.ActiveState == "active"
|
|
|
|
- name: Backup existing BZZZ binary
|
|
copy:
|
|
src: "/usr/local/bin/bzzz"
|
|
dest: "/usr/local/bin/bzzz-backup-{{ backup_timestamp }}"
|
|
remote_src: yes
|
|
ignore_errors: yes
|
|
|
|
- name: Copy new BZZZ binary to target hosts
|
|
copy:
|
|
src: "{{ bzzz_binary_source }}"
|
|
dest: "/usr/local/bin/bzzz"
|
|
mode: '0755'
|
|
owner: root
|
|
group: root
|
|
|
|
- name: Verify binary was copied correctly
|
|
stat:
|
|
path: "/usr/local/bin/bzzz"
|
|
register: bzzz_binary_stat
|
|
|
|
- name: Fail if binary wasn't copied
|
|
fail:
|
|
msg: "BZZZ binary was not copied successfully"
|
|
when: not bzzz_binary_stat.stat.exists
|
|
|
|
- name: Check if systemd service file exists
|
|
stat:
|
|
path: "/etc/systemd/system/{{ bzzz_service_name }}.service"
|
|
register: service_file_stat
|
|
|
|
- name: Display service file status
|
|
debug:
|
|
msg: "Service file exists: {{ service_file_stat.stat.exists }}"
|
|
|
|
- name: Reload systemd daemon
|
|
systemd:
|
|
daemon_reload: yes
|
|
|
|
- name: Enable BZZZ service
|
|
systemd:
|
|
name: "{{ bzzz_service_name }}"
|
|
enabled: yes
|
|
|
|
- name: Start BZZZ service
|
|
systemd:
|
|
name: "{{ bzzz_service_name }}"
|
|
state: started
|
|
|
|
- name: Wait for service to be active
|
|
wait_for:
|
|
timeout: 30
|
|
delegate_to: localhost
|
|
|
|
- name: Check BZZZ service status
|
|
systemd:
|
|
name: "{{ bzzz_service_name }}"
|
|
register: final_service_status
|
|
|
|
- name: Display service status
|
|
debug:
|
|
msg: |
|
|
Service: {{ bzzz_service_name }}
|
|
Active: {{ final_service_status.status.ActiveState }}
|
|
Sub-State: {{ final_service_status.status.SubState }}
|
|
Host: {{ inventory_hostname }}
|
|
|
|
- name: Get recent service logs
|
|
command: journalctl -u {{ bzzz_service_name }} --since "2 minutes ago" --no-pager -n 20
|
|
register: service_logs
|
|
changed_when: false
|
|
|
|
- name: Display recent service logs
|
|
debug:
|
|
msg: "{{ service_logs.stdout_lines }}" |