summaryrefslogtreecommitdiffstats
path: root/opts.sh
blob: 020fb44f1e424ec27bddb5de14edbe6fe1ae764f (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
#!/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
    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
    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
        playbook=$action
    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  --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))