114 lines
3.5 KiB
YAML
114 lines
3.5 KiB
YAML
---
|
|
- name: Install Portainer server
|
|
hosts: watchtower
|
|
become: true
|
|
gather_facts: true
|
|
vars:
|
|
portainer_version: "latest"
|
|
portainer_data_dir: "/opt/portainer/data"
|
|
portainer_http_port: 9000
|
|
portainer_https_port: 9443
|
|
|
|
tasks:
|
|
- name: Ensure Portainer data directory exists
|
|
ansible.builtin.file:
|
|
path: "{{ portainer_data_dir }}"
|
|
state: directory
|
|
mode: '0755'
|
|
|
|
- name: Deploy Portainer server container
|
|
community.docker.docker_container:
|
|
name: portainer
|
|
image: "portainer/portainer-ce:{{ portainer_version }}"
|
|
state: started
|
|
restart_policy: always
|
|
recreate: false
|
|
pull: true
|
|
ports:
|
|
- "{{ portainer_http_port }}:9000"
|
|
- "{{ portainer_https_port }}:9443"
|
|
volumes:
|
|
- "/var/run/docker.sock:/var/run/docker.sock"
|
|
- "{{ portainer_data_dir }}:/data"
|
|
|
|
- name: Wait for Portainer server to become reachable
|
|
ansible.builtin.wait_for:
|
|
port: "{{ portainer_http_port }}"
|
|
delay: 5
|
|
timeout: 60
|
|
state: started
|
|
|
|
- name: Show Portainer server endpoints
|
|
ansible.builtin.debug:
|
|
msg:
|
|
- "Portainer server is running on {{ inventory_hostname }}"
|
|
- "HTTP: http://{{ ansible_default_ipv4.address }}:{{ portainer_http_port }}"
|
|
- "HTTPS: https://{{ ansible_default_ipv4.address }}:{{ portainer_https_port }}"
|
|
|
|
- name: Deploy Portainer agent service
|
|
hosts: swarm_managers[0]
|
|
become: true
|
|
gather_facts: false
|
|
vars:
|
|
portainer_agent_version: "2.33.6"
|
|
portainer_agent_port: 9001
|
|
portainer_agent_network: "portainer_agent_network"
|
|
|
|
tasks:
|
|
- name: Ensure Portainer overlay network exists
|
|
community.docker.docker_network:
|
|
name: "{{ portainer_agent_network }}"
|
|
driver: overlay
|
|
attachable: true
|
|
state: present
|
|
|
|
- name: Deploy Portainer agent as global swarm service
|
|
community.docker.docker_swarm_service:
|
|
name: portainer_agent
|
|
image: "portainer/agent:{{ portainer_agent_version }}"
|
|
state: present
|
|
mode: global
|
|
publish:
|
|
- published_port: "{{ portainer_agent_port }}"
|
|
target_port: 9001
|
|
protocol: tcp
|
|
networks:
|
|
- name: "{{ portainer_agent_network }}"
|
|
constraints:
|
|
- node.platform.os == linux
|
|
mounts:
|
|
- source: /var/run/docker.sock
|
|
target: /var/run/docker.sock
|
|
type: bind
|
|
- source: /var/lib/docker/volumes
|
|
target: /var/lib/docker/volumes
|
|
type: bind
|
|
- source: /
|
|
target: /host
|
|
type: bind
|
|
|
|
- name: Show Portainer agent deployment status
|
|
ansible.builtin.command: docker service ls --filter name=portainer_agent
|
|
register: portainer_agent_status
|
|
changed_when: false
|
|
|
|
- name: Display Portainer agent summary
|
|
ansible.builtin.debug:
|
|
msg:
|
|
- "Portainer agent service is deployed"
|
|
- "Network: {{ portainer_agent_network }}"
|
|
- "Status: {{ portainer_agent_status.stdout }}"
|
|
|
|
- name: Display Portainer installation summary
|
|
hosts: watchtower
|
|
gather_facts: true
|
|
|
|
tasks:
|
|
- name: Show post-install summary
|
|
ansible.builtin.debug:
|
|
msg:
|
|
- "Portainer installation complete"
|
|
- "Server URL: http://{{ ansible_default_ipv4.address }}:9000"
|
|
- "HTTPS URL: https://{{ ansible_default_ipv4.address }}:9443"
|
|
- "Add Swarm environment in Portainer using any manager IP on port 9001"
|