veza/ansible/playbooks/20-incus-containers.yml

150 lines
4.2 KiB
YAML
Raw Normal View History

---
# 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 }}"