summaryrefslogtreecommitdiffstats
path: root/opts.sh
blob: 57c26f9cac0ead6e45506f8c9b3738777a212857 (plain)
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))