-
Notifications
You must be signed in to change notification settings - Fork 1
/
site.deploy.yml
112 lines (101 loc) · 3.83 KB
/
site.deploy.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
---
# site.deploy.yml
# To deploy the LAPP roles, we want to first ensure the host meets basic
# requirements. We don't need to gather facts (gather_facts) about this
# point. If any of the pretasks or tasks return an error, we will abort
# the deployment (any_errors_fatal).
- name: check that hosts meet the basic requirements
any_errors_fatal: true
gather_facts: false
hosts: all
# Pretask: Confirm Python exists on the host. If Python exists, we'll collect
# facts about the host (setup) for use in subsequent tasks.
pre_tasks:
- name: check if some version of Python is installed and accessible
raw: |-
command -v python3 || command -v python
changed_when: false
- name: Gather facts for later tasks
setup:
# Tasks to check for the OS, LAPP services, and if Ansible
# is managing the host.
tasks:
# Check for the following supported OSs on the host:
# CentOS: 7.6, 7.7, 7.8, 7.9, 8.0, 8.1, 8.2, 8.3
# Debian: Stretch (9), Buster (10)
# Ubuntu: Xenial Xerus (16.04), Bionic Beaver (18.04), Focal Fossa (20.04)
- name: check if host OS is supported
fail:
msg: >-
{{ ansible_distribution }} {{ ansible_distribution_version }}
is not supported.
changed_when: false
failed_when: >-
ansible_distribution not in targets.keys()
or (ansible_distribution_release not in target_versions
and ansible_distribution_version not in target_versions)
vars:
targets:
CentOS: ["7.6", "7.7", "7.8", "7.9", "8.0", "8.1", "8.2", "8.3"]
Debian: ["stretch", "buster"]
Ubuntu: ["xenial", "bionic", "focal"]
target_versions: "{{ targets[ansible_distribution] }}"
- name: check if this host is managed by Ansible
command: >
ls /etc/ansible/nextcloud-lapp
changed_when: ansible_deployed.rc > 0
failed_when: false
register: ansible_deployed
# If ansible_deployed.changed is True, check for core LAPP services
# by checking their respective commands.
# If LAPP services already exist, lamp_installed.changed is True.
- name: check if core LAPP services are present
command: >
command -v {{ item }}
changed_when: lapp_installed.rc < 1
failed_when: false
register: lapp_installed
with_items:
- apachectl
- php
- php-fpm
- postgresql
when:
- ansible_deployed.changed
# If lamp_installed.changed and ansible_deployed.changed are both True,
# LAPP services are installed but the host isn't managed by Ansible.
# Abort the run and advise the removal of the LAPP services.
- name: Fail if Ansible isn't managing this host
fail:
msg: >
Core LAPP services are installed, but this host isn't
managed by Ansible! This playbook is intended to be run on
hosts that are not already configured. Please remove the
following packages: Apache, PHP, PHP-FPM, PostgreSQL
when:
- lapp_installed.changed
- ansible_deployed.changed
# If we haven't failed by this point, we're ready to prep for
# service and Nextcloud deployment.
- name: Deploy Nextcloud to defined hosts in the 'nextcloud' group
any_errors_fatal: true
gather_facts: false
hosts: nextcloud
pre_tasks:
- name: Create /etc/ansible
file:
path: /etc/ansible
state: directory
- name: Add file confirming this host is managed by Ansible
file:
path: /etc/ansible/nextcloud-lapp
state: touch
access_time: preserve
modification_time: preserve
# Install the LAPP services, Nextcloud, Redis, and Let's Encrypt
roles:
- role: inmotionhosting.apache
- role: inmotionhosting.postgresql
- role: inmotionhosting.php_fpm
- role: inmotionhosting.letsencrypt
- role: inmotionhosting.nextcloud