playbooks/iot/playbook.yml
2023-07-14 10:09:28 +05:30

239 lines
7.0 KiB
YAML
Executable File

#################################################
# DO Community Playbooks: Docker
#################################################
---
- hosts: all
become: true
vars_files:
- vars/default.yml
tasks:
- getent:
database: passwd
key: "{{ mqtt_user }}"
split: ":"
# - name: "{{ getent_passwd[user][1] }} : {{ getent_passwd[user][2] }}"
# docker_image:
# name: "{{ mqtt_imag }}"
# source: pull
# force_source: yes
- name: Pull Mosquitto image
docker_image:
name: "{{ mqtt_image }}"
source: pull
force_source: yes
- name: Ensure Mosquitto Directory exists
file:
path: "{{ mqtt_directory }}"
state: directory
group: 0 # "{{ mqtt_user }}"
owner: 0 # "{{ mqtt_user }}"
mode: 0755
- name: Ensure Mosquitto Config Directory exists
file:
path: "{{ mqtt_directory }}/config"
state: directory
group: 0 # "{{ mqtt_user }}"
owner: 0 # "{{ mqtt_user }}"
mode: 0755
- name: Copy the Mosquitto conf file
template:
src: "files/mosquitto.conf"
dest: "{{ mqtt_directory }}/config/mosquitto.conf"
group: 1883 # "{{ mqtt_user }}"
owner: 1883 # "{{ mqtt_user }}"
mode: 0646
# - name: Check if Mosquitto passwd file exists
# stat: path="{{ mqtt_directory }}/config/passwd"
# register: status
- name: Ensure Mosquitto passwd file exists
template:
src: "files/passwd"
dest: "{{ mqtt_directory }}/config/passwd"
group: 1883 # "{{ mqtt_user }}"
owner: 1883 # "{{ mqtt_user }}"
mode: 0646
- name: Encrypt the docker file
command: docker exec -i mosquitto mosquitto_passwd -U /mosquitto/config/passwd
- name: Ensure Mosquitto Log Directory exists
file:
path: "{{ mqtt_directory }}/log"
state: directory
group: 0 # "{{ mqtt_user }}"
owner: 0 # "{{ mqtt_user }}"
mode: 0755
- name: Ensure Mosquitto log file exists
file:
path: "{{ mqtt_directory }}/log/mosquitto.log"
state: touch
group: 0 # "{{ mqtt_user }}"
owner: 0 # "{{ mqtt_user }}"
mode: 0646
- name: Create Mosquitto container
docker_container:
name: "{{ mqtt_container }}"
image: "{{ mqtt_image }}"
state: started
restart_policy: "unless-stopped"
# user: 0:0 # "{{ getent_passwd[mqtt_user][1] }}:{{ getent_passwd[mqtt_user][2] }}"
published_ports:
- 127.0.0.1:9001:9001
- 1883:1883
volumes:
- "{{ mqtt_directory }}/config:/mosquitto/config"
- "{{ mqtt_directory }}/data:/mosquitto/data"
- "{{ mqtt_directory }}/log:/mosquitto/log"
- getent:
database: passwd
key: "{{ user }}"
split: ":"
- name: Pull InfluxDB image
docker_image:
name: "{{ influx_image }}"
source: pull
force_source: yes
- name: Ensure Influx Directory exists
file:
path: "{{ influx_directory }}"
state: directory
group: "{{ user }}"
owner: "{{ user }}"
mode: 0755
- name: Ensure Influx Data Directory exists
file:
path: "{{ influx_directory }}/data"
state: directory
group: "{{ user }}"
owner: "{{ user }}"
mode: 0755
- name: Ensure Influx Config Directory exists
file:
path: "{{ influx_directory }}/config"
state: directory
group: "{{ user }}"
owner: "{{ user }}"
mode: 0755
- name: Create InfluxDB container
docker_container:
name: "{{ influx_container }}"
image: "{{ influx_image }}"
state: started
restart_policy: "unless-stopped"
user: "{{ getent_passwd[user][1] }}:{{ getent_passwd[user][2] }}"
published_ports:
- 127.0.0.1:8086:8086
volumes:
- "{{ influx_directory }}/data:/var/lib/influxdb2"
- "{{ influx_directory }}/config:/etc/influxdb2"
- name: Pull Node Red image
docker_image:
name: "{{ nodered_image }}"
source: pull
force_source: yes
- name: Ensure Node Red Directory exists
file:
path: "{{ nodered_directory }}"
state: directory
group: "{{ user }}"
owner: "{{ user }}"
mode: 0755
- name: Create Node Red container
docker_container:
name: "{{ nodered_container }}"
image: "{{ nodered_image }}"
state: started
restart_policy: "unless-stopped"
user: "{{ getent_passwd[user][1] }}:{{ getent_passwd[user][2] }}"
env:
TZ: "Asia/Kolkata"
links:
- "{{ mqtt_container }}:mqtt"
- "{{ influx_container }}:influx"
published_ports:
- 127.0.0.1:1880:1880
volumes:
- "{{ nodered_directory }}:/data"
- name: Pull Grafana image
docker_image:
name: "{{ grafana_image }}"
source: pull
force_source: yes
- name: Ensure Grafana Directory exists
file:
path: "{{ grafana_directory }}"
state: directory
group: "{{ user }}"
owner: "{{ user }}"
mode: 0755
- name: Create Grafana container
docker_container:
name: "{{ grafana_container }}"
image: "{{ grafana_image }}"
state: started
restart_policy: "unless-stopped"
user: "{{ getent_passwd[user][1] }}:{{ getent_passwd[user][2] }}"
env:
GF_SERVER_ROOT_URL: "https://{{ http_host }}"
GF_INSTALL_PLUGINS: "grafana-clock-panel, grafana-simple-json-datasource, natel-discrete-panel, briangann-gauge-panel, vonage-status-panel, neocat-cal-heatmap-panel, natel-plotly-panel"
GF_AUTH_ANONYMOUS_ENABLED: "true"
GF_AUTH_ANONYMOUS_ORG_NAME: "Public"
GF_AUTH_ANONYMOUS_ORG_ROLE: "Viewer"
GF_AUTH_ANONYMOUS_HIDE_VERSION: "true"
links:
- "{{ influx_container }}:influx"
published_ports:
- 127.0.0.1:3005:3000
volumes:
- "{{ grafana_directory }}:/var/lib/grafana"
- name: Check if Nginx conf file exists
stat: path="/etc/nginx/sites-available/{{ http_conf }}"
register: status
- name: No need to reload Nginx
debug: msg= {{ "No need to reload Nginx as sites-available entries have already been created" }}
- name: Set Nginx conf file
when: status.stat.exists == false
template:
src: "files/nginx.conf.j2"
dest: "/etc/nginx/sites-available/{{ http_conf }}"
- name: Enable new site
when: status.stat.exists == false
file:
src: "/etc/nginx/sites-available/{{ http_conf }}"
dest: "/etc/nginx/sites-enabled/{{ http_conf }}"
state: link
notify: Reload Nginx
handlers:
- name: Reload Nginx
service:
name: nginx
state: reloaded