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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
#!/bin/bash
inventory="inventories/testing.erb"
group="nodes"
usage() {
cat << END
Usage: $0 [-i inventory] [-g group] <action> [extra-args-to-ansible]
Parameters:
inventory - specifies name of inventory to use (testing, staging, production)
group - specifies node group to use if role is considered in action
Actions:
-h - show help and exit
Initial system installation
all - full install, all the following steps in sequence:
local - configure local ssh client
prepare - perform all required pre-configuration before setting openshift
openshift - setup OpenShift cluster
gluster - configure gluster software and volumes
configure - configures OpenShift cluster (Storage, Users, OpenVPN tunnels)
projects - installs configuration files and OpenShift resources for KaaS and other configured projects
Scaling the cluster
nodes - complete action: prepares the nodes, scales up the cluster, and reconfigures storage
prepare - prepares the new nodes
openshift-nodes - scales OpenShift cluster (master scallability is not checked)
configure - Configures new nodes (Storage, Users, OpenVPN tunnels)
Configuration of new resources, etc.
users - configure user roles & passwords
storage - reconfigure Gluster and OpenShift volumes
projects - reconfigures OpenShift resources if necessary
vpn - reconfigure VPN tunnels
certs - re-generate OpenShift x509 certificates
check - check current setup and report if any maintenace should be peformed
setup <type> - executes specific configuration task from ands-openshift
Tasks: hostnames, users, ssh, storage, heketi
Custom actions
playbook.yml - execute the specified playbook (after ands_facts)
role - generates temporary playbook and executes the role
END
echo
[ -n "$1" ] && echo "Error: $1"
exit
}
apply() {
export ANSIBLE_HOST_KEY_CHECKING=False
[ -n "$1" ] || usage "No action specified"
action=$1
shift 1
if [ -f "$action" ]; then
if [[ "$action" == anslib/* ]]; then
echo "Executing a library playbook '$action'"
cat <<END > playbooks/tmp_play.yml
- name: Common setup procedures
hosts: $group
remote_user: root
roles:
- ands_facts
- import_playbook: ../$action
END
playbook="playbooks/tmp_play.yml"
clean="playbooks/tmp_play.*"
else
playbook=$action
fi
elif [ -d "roles/$action" ]; then
role=$action
else
usage "Role '$action' is not existing"
fi
clean=""
if [ -z "$playbook" ]; then
echo "Executing a specific role '$role' on '$group'"
playbook="playbooks/tmp_role.yml"
clean="playbooks/tmp_role.*"
cat <<END > playbooks/tmp_role.yml
- name: Common setup procedures
hosts: $group
remote_user: root
roles:
- ands_facts
- $role
END
fi
# ansible-playbook -vvv --vault-password-file .vault-pass -i $inventory $playbook $@
ansible-playbook --vault-password-file .vault-pass -i $inventory $playbook $@
if [ -n "$clean" ]; then
rm -rf "$clean"
fi
return $?
}
while getopts ":i:g:h" o; do
case "${o}" in
h)
usage
;;
i)
inventory=${OPTARG}
[ -f $inventory ] || [ -f inventories/${inventory}.erb ] || usage "Specified inventory '$inventory' is not found"
[ -f $inventory ] || inventory=inventories/${inventory}.erb
;;
g)
group=${OPTARG}
;;
\?)
usage "Invalid option: -$OPTARG"
;;
:)
usage "Option -$OPTARG requires an argument"
;;
*)
usage
;;
esac
done
shift $((OPTIND-1))
|