Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
.idea
.idea
.vscode
3 changes: 3 additions & 0 deletions playbook/ansible.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[defaults]
host_key_checking = False
inventory = inventory.ini
82 changes: 82 additions & 0 deletions playbook/compose_down_playbook.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
- hosts: server

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

нейминг файлов отличается. придерживайся одного принципа. либо через - либо через _

become: yes
become_method: sudo


tasks:

- docker_host_info:

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

для каждой таски можно добавить name и написать небольшое описание что она делает. считай сразу пишешь документацию

images: yes
containers: yes
register: docker_objects

- docker_container:
name: "{{ item.Id }}"
state: absent
loop: "{{ docker_objects.containers }}"
loop_control:
label: "{{ item.Id }}"

- docker_image:
name: item.RepoTags | first
state: absent
force_absent: yes
loop: "{{ docker_objects.images }}"
loop_control:
label: "{{ item.RepoTags | first }}"


- hosts: client
become: yes
become_method: sudo

tasks:

- docker_host_info:
images: yes
containers: yes
register: docker_objects

- docker_container:
name: "{{ item.Id }}"
state: absent
loop: "{{ docker_objects.containers }}"
loop_control:
label: "{{ item.Id }}"

- docker_image:
name: item.RepoTags | first
state: absent
force_absent: yes
loop: "{{ docker_objects.images }}"
loop_control:
label: "{{ item.RepoTags | first }}"


- hosts: gateway
become: yes
become_method: sudo

tasks:

- docker_host_info:
images: yes
containers: yes
register: docker_objects

- docker_container:
name: "{{ item.Id }}"
state: absent
loop: "{{ docker_objects.containers }}"
loop_control:
label: "{{ item.Id }}"

- docker_image:
name: item.RepoTags | first
state: absent
force_absent: yes
loop: "{{ docker_objects.images }}"
loop_control:
label: "{{ item.RepoTags | first }}"


192 changes: 192 additions & 0 deletions playbook/deploy-playbook.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
- hosts: gateway
become: yes
become_method: sudo
vars:
packages:
- net-tools
- docker.io
- docker-compose


tasks:

- name: installing packages

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

везде добавь name с описанием таски

ansible.builtin.apt:
pkg: "{{packages}}"
state: latest

# - name: import netplan cfg for gateway

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

такие рудементы не стоит хранить в публичной репе

# ansible.builtin.template:
# src: "{{gateway_net_src}}"
# dest: "{{gateway_net_dest}}"
# owner: root
# group: root
# mode: '0644'

- docker_host_info:
images: yes
containers: yes
register: docker_objects

- docker_container:
name: "{{ item.Id }}"
state: absent
loop: "{{ docker_objects.containers }}"
loop_control:
label: "{{ item.Id }}"

- docker_image:
name: item.RepoTags | first
state: absent
force_absent: yes
loop: "{{ docker_objects.images }}"
loop_control:
label: "{{ item.RepoTags | first }}"


- name: copying broker
ansible.builtin.copy:
src: "{{broker_src}}"
dest: "{{broker_dest}}"
owner: root
group: root
mode: '0644'

- name: starting mqtt broker
docker_container:
name: broker
image: eclipse-mosquitto
state: started
ports:
- "1883:1883"
volumes:
- "{{mosquitto_src}}"


- hosts: server
become: yes
become_method: sudo
vars:
packages:

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

все одинаковые таски просятся быть оформленными в роли. На самом деле на всех тачках ты делаешь одни и те же действия - ставишь докер и докер композ, запускаешь docker compose up. просто разные файлики и параметры

по сути пишется одна две роли и инклудятся в разные тачки. сейчас у тебя много дублирования

- net-tools
- python3-pip
- docker.io
- docker-compose

tasks:

- name: installing pkg
ansible.builtin.apt:
pkg: "{{ packages }}"
state: latest

- name: copying grafana and telegraf
ansible.builtin.copy:
src: "{{server_infra}}"
dest: "{{docker_src_server}}"
owner: "{{server_user}}"
group: "{{server_user}}"
mode: '0644'

# - name: restarting net adapter
# shell: ifconfig enp0s8 down

# - name: Update netplan cfg on server
# ansible.builtin.template:
# src: "{{server_net_src}}"
# dest: "{{server_net_dest}}"
# owner: root
# group: root
# mode: '0644'

- docker_host_info:
images: yes
containers: yes
register: docker_objects

- docker_container:
name: "{{ item.Id }}"
state: absent
loop: "{{ docker_objects.containers }}"
loop_control:
label: "{{ item.Id }}"

- docker_image:
name: item.RepoTags | first
state: absent
force_absent: yes
loop: "{{ docker_objects.images }}"
loop_control:
label: "{{ item.RepoTags | first }}"

- name: docker-compose up on server
docker_compose:
project_src: "{{docker_src_server}}"

# - name: netplan apply
# shell: netplan apply


- hosts: client
become: yes
become_method: sudo
vars:
packages:
- net-tools
- python3-pip
- docker.io
- docker-compose

tasks:


- name: installing pkg
ansible.builtin.apt:
pkg: "{{ packages }}"
state: latest

- name: copying simulator
ansible.builtin.copy:
src: "{{simulator_src}}"
dest: "{{simulator_dest}}"
owner: "{{client_user}}"
group: "{{client_user}}"
mode: '0644'

# - name: restarting net adapter
# shell: ifconfig enp0s8 down

# - name: cfg for client host
# ansible.builtin.template:
# src: "{{client_cfg_src}}"
# dest: "{{client_cfg_dest}}"
# owner: root
# group: root
# mode: '0644'

- docker_host_info:
images: yes
containers: yes
register: docker_objects

- docker_container:
name: "{{ item.Id }}"
state: absent
loop: "{{ docker_objects.containers }}"
loop_control:
label: "{{ item.Id }}"

- docker_image:
name: item.RepoTags | first
state: absent
force_absent: yes
loop: "{{ docker_objects.images }}"
loop_control:
label: "{{ item.RepoTags | first }}"

- name: docker-compose up on client
docker_compose:
project_src: "{{docker_src_client}}"



7 changes: 7 additions & 0 deletions playbook/group_vars/client_host
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
client_cfg_src: vms/client/00-installer-config.yaml
client_cfg_dest: /etc/netplan/00-installer-config.yaml
simulator_src: vms/client/simulator/
simulator_dest: /home/armitage/remote
client_user: armitage
docker_src_client: /home/armitage/remote
9 changes: 9 additions & 0 deletions playbook/group_vars/gateway_host
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
gateway_net_src: vms/gateway/00-installer-config.yaml
gateway_net_dest: /etc/netplan/00-installer-config.yaml
gateway_rules_src: vms/gateway/rules.v4
gateway_rules_dest: /etc/iptables/rules.v4
broker_src: vms/gateway/
broker_dest: /home/armitage/remote
gateway_user: armitage
mosquitto_src: /home/armitage/remote/mosquitto:/mosquitto/config
6 changes: 6 additions & 0 deletions playbook/group_vars/server_host
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
server_net_src: vms/server/00-installer-config.yaml
server_net_dest: /etc/netplan/00-installer-config.yaml
server_infra: vms/server/infra/
server_user: armitage
docker_src_server: /home/armitage/remote
26 changes: 26 additions & 0 deletions playbook/inventory.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
[cluster:vars]
ansible_ssh_pass = '{{my_ssh_pass}}'
ansible_sudo_pass= '{{my_cluster_sudo_pass}}'

[cluster]
server
gateway
client

[server_host:vars]
ansible_ssh_pass = '{{my_ssh_pass}}'
ansible_sudo_pass= '{{my_cluster_sudo_pass}}'
[server_host]
server ansible_host=192.168.0.167 ansible_ssh_user=armitage ansible_become=true StrictHostKeyChecking=no

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ansible_ssh_pass
ansible_sudo_pass
ansible_ssh_user
ansible_become
можно вынести в общие переменные для всех серверов. например в cluster:vars


[gateway_host:vars]
ansible_ssh_pass = '{{my_ssh_pass}}'
ansible_sudo_pass= '{{my_cluster_sudo_pass}}'
[gateway_host]
gateway ansible_host=192.168.0.144 ansible_ssh_user=armitage ansible_become=true

[client_host:vars]
ansible_ssh_pass = '{{my_ssh_pass}}'
ansible_sudo_pass= '{{my_cluster_sudo_pass}}'
[client_host]
client ansible_host=192.168.0.168 ansible_ssh_user=armitage ansible_become=true
9 changes: 9 additions & 0 deletions playbook/vms/client/00-installer-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
network:

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

это стоит оформить в виде темплейта с конфигурируемыми адресами

ethernets:
enp0s3:
dhcp4: true
enp0s8:
dhcp4: no
addresses: [ 192.168.5.10/24 ]
gateway4: 192.168.5.1
version: 2
1 change: 1 addition & 0 deletions playbook/vms/client/simulator/.env
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
SIM_HOST_IP=192.168.0.144
24 changes: 24 additions & 0 deletions playbook/vms/client/simulator/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
version: "3"

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

композ файлы можно также оформить в виде темплейта

services:
temp_sensor:
image: wuwun9/simulator
environment:
- SIM_HOST=$SIM_HOST_IP
- SIM_NAME=SIM_TEMPERATURE
- SIM_PERIOD=5
- SIM_TYPE=temperature
pressure_sensor:
image: wuwun9/simulator
environment:
- SIM_HOST=$SIM_HOST_IP
- SIM_NAME=SIM_PRESSURE
- SIM_PERIOD=10
- SIM_TYPE=pressure
current_sensor:
image: wuwun9/simulator
environment:
- SIM_HOST=$SIM_HOST_IP
- SIM_NAME=SIM_CURRENT
- SIM_PERIOD=1
- SIM_TYPE=current
Binary file not shown.
Binary file not shown.
File renamed without changes.
11 changes: 11 additions & 0 deletions playbook/vms/gateway/00-installer-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
network:
ethernets:
enp0s3:
dhcp4: true
enp0s8:
dhcp4: no
addresses: [ 192.168.7.1/24 ]
enp0s9:
dhcp4: no
addresses: [ 192.168.5.1/24 ]
version: 2
Loading