150 lines
4.2 KiB
YAML
150 lines
4.2 KiB
YAML
|
|
---
|
||
|
|
# Create Incus containers for Veza V5 Ultra deployment
|
||
|
|
# Creates all necessary containers with proper networking
|
||
|
|
|
||
|
|
- name: Create Incus containers for Veza V5 Ultra
|
||
|
|
hosts: edge
|
||
|
|
become: true
|
||
|
|
gather_facts: true
|
||
|
|
|
||
|
|
vars:
|
||
|
|
containers:
|
||
|
|
- name: veza-haproxy
|
||
|
|
image: debian/bookworm
|
||
|
|
profile: veza
|
||
|
|
cpu: 2
|
||
|
|
memory: 2GB
|
||
|
|
disk: 10GB
|
||
|
|
ip: 10.10.0.100
|
||
|
|
ports:
|
||
|
|
- "80:80"
|
||
|
|
- "443:443"
|
||
|
|
- name: veza-backend
|
||
|
|
image: debian/bookworm
|
||
|
|
profile: veza
|
||
|
|
cpu: 4
|
||
|
|
memory: 4GB
|
||
|
|
disk: 20GB
|
||
|
|
ip: 10.10.0.101
|
||
|
|
ports:
|
||
|
|
- "8080:8080"
|
||
|
|
- name: veza-chat
|
||
|
|
image: debian/bookworm
|
||
|
|
profile: veza
|
||
|
|
cpu: 2
|
||
|
|
memory: 2GB
|
||
|
|
disk: 10GB
|
||
|
|
ip: 10.10.0.102
|
||
|
|
ports:
|
||
|
|
- "8081:8081"
|
||
|
|
- name: veza-stream
|
||
|
|
image: debian/bookworm
|
||
|
|
profile: veza
|
||
|
|
cpu: 2
|
||
|
|
memory: 2GB
|
||
|
|
disk: 20GB
|
||
|
|
ip: 10.10.0.103
|
||
|
|
ports:
|
||
|
|
- "8082:8082"
|
||
|
|
- name: veza-web
|
||
|
|
image: debian/bookworm
|
||
|
|
profile: veza
|
||
|
|
cpu: 2
|
||
|
|
memory: 2GB
|
||
|
|
disk: 10GB
|
||
|
|
ip: 10.10.0.104
|
||
|
|
ports:
|
||
|
|
- "3000:3000"
|
||
|
|
|
||
|
|
tasks:
|
||
|
|
- name: Create Veza containers
|
||
|
|
command: |
|
||
|
|
incus launch {{ item.image }} {{ item.name }} \
|
||
|
|
--profile {{ item.profile }} \
|
||
|
|
--config limits.cpu={{ item.cpu }} \
|
||
|
|
--config limits.memory={{ item.memory }} \
|
||
|
|
--config limits.disk={{ item.disk }} \
|
||
|
|
--config boot.autostart=true \
|
||
|
|
--config boot.autostart.delay=10
|
||
|
|
register: container_create_result
|
||
|
|
failed_when: false
|
||
|
|
loop: "{{ containers }}"
|
||
|
|
|
||
|
|
- name: Display container creation results
|
||
|
|
debug:
|
||
|
|
msg: "Container {{ item.item.name }}: {{ 'Created' if item.rc == 0 else 'Failed' }}"
|
||
|
|
loop: "{{ container_create_result.results }}"
|
||
|
|
|
||
|
|
- name: Configure container networking
|
||
|
|
command: |
|
||
|
|
incus config device set {{ item.name }} eth0 ipv4.address={{ item.ip }}/24
|
||
|
|
register: network_config_result
|
||
|
|
failed_when: false
|
||
|
|
loop: "{{ containers }}"
|
||
|
|
|
||
|
|
- name: Display networking results
|
||
|
|
debug:
|
||
|
|
msg: "Network config {{ item.item.name }}: {{ 'Success' if item.rc == 0 else 'Failed' }}"
|
||
|
|
loop: "{{ network_config_result.results }}"
|
||
|
|
|
||
|
|
- name: Add proxy devices for external access
|
||
|
|
command: |
|
||
|
|
incus config device add {{ item.name }} proxy{{ loop.index0 }} proxy \
|
||
|
|
listen=tcp:0.0.0.0:{{ port.split(':')[0] }} \
|
||
|
|
connect=tcp:127.0.0.1:{{ port.split(':')[1] }}
|
||
|
|
register: proxy_result
|
||
|
|
failed_when: false
|
||
|
|
loop: "{{ containers }}"
|
||
|
|
vars:
|
||
|
|
port_list: "{{ item.ports | default([]) }}"
|
||
|
|
when: item.ports is defined and item.ports | length > 0
|
||
|
|
|
||
|
|
- name: Start all containers
|
||
|
|
command: incus start {{ item.name }}
|
||
|
|
register: start_result
|
||
|
|
failed_when: false
|
||
|
|
loop: "{{ containers }}"
|
||
|
|
|
||
|
|
- name: Display start results
|
||
|
|
debug:
|
||
|
|
msg: "Container {{ item.item.name }}: {{ 'Started' if item.rc == 0 else 'Failed to start' }}"
|
||
|
|
loop: "{{ start_result.results }}"
|
||
|
|
|
||
|
|
- name: Wait for containers to be ready
|
||
|
|
wait_for:
|
||
|
|
port: 22
|
||
|
|
host: "{{ item.ip }}"
|
||
|
|
timeout: 60
|
||
|
|
register: container_ready
|
||
|
|
failed_when: false
|
||
|
|
loop: "{{ containers }}"
|
||
|
|
|
||
|
|
- name: Display container readiness
|
||
|
|
debug:
|
||
|
|
msg: "Container {{ item.item.name }} ({{ item.item.ip }}): {{ 'Ready' if item.skipped else 'Not ready' }}"
|
||
|
|
loop: "{{ container_ready.results }}"
|
||
|
|
|
||
|
|
- name: List all containers
|
||
|
|
command: incus list
|
||
|
|
register: container_list
|
||
|
|
|
||
|
|
- name: Display container list
|
||
|
|
debug:
|
||
|
|
var: container_list.stdout_lines
|
||
|
|
|
||
|
|
- name: Show container network configuration
|
||
|
|
command: incus network show veza-ovn
|
||
|
|
register: network_show
|
||
|
|
|
||
|
|
- name: Display network configuration
|
||
|
|
debug:
|
||
|
|
var: network_show.stdout_lines
|
||
|
|
|
||
|
|
post_tasks:
|
||
|
|
- name: Verify all containers are running
|
||
|
|
command: incus list --format=json
|
||
|
|
register: containers_json
|
||
|
|
|
||
|
|
- name: Display running containers
|
||
|
|
debug:
|
||
|
|
msg: "Running containers: {{ containers_json.stdout | from_json | map(attribute='name') | list }}"
|