summaryrefslogtreecommitdiffstats
path: root/tests/lib/installers/fuel
blob: 85865720453ee0d6118f25ccaf62842c510be469 (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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
#!/bin/bash

if [[ "congress " == "$INSPECTOR_TYPE" ]]; then
    die $LINENO "fuel does not support congress yet..."
fi

COMPUTE_USER=${COMPUTE_USER:-root}
ssh_opts_cpu="$ssh_opts -i instack_key"

function get_installer_ip {
    is_set INSTALLER_IP && return
    INSTALLER_IP=$(get_first_vnic_ip fuel-master)
}

function get_controller_ips {
    is_set CONTROLLER_IPS && return
    CONTROLLER_IPS=$(ssh $ssh_opts_cpu root@$INSTALLER_IP \
                     "fuel node | grep controller | cut -d '|' -f 5|xargs")
    die_if_not_set $LINENO CONTROLLER_IPS "No controller IPs"
}

function installer_get_ssh_keys {
    if [[ -e instack_key ]]; then
        echo "test existing instack_key..."
        ssh $ssh_opts_cpu root@${INSTALLER_IP} "hostname" && return
    fi
    echo "getting instack_key from fuel node..."
    sshpass -p r00tme scp $ssh_opts root@${INSTALLER_IP}:.ssh/id_rsa instack_key
    sudo chown $(whoami):$(whoami) instack_key
    chmod 400 instack_key
}

function installer_apply_patches {
    # TODO(r-mibu): fix the followings in upstream (fuel)
    for node in $CONTROLLER_IPS;do
        echo "check controller configuration for doctor ($node)"
        ssh $ssh_opts_cpu "root@$node" '
            set -x
            date
            echo "### apply patches (installer=fuel)"

            ep_conf=/etc/ceilometer/event_pipeline.yaml
            entry="- notifier://?topic=alarm.all"
            if ! grep -q -e "$entry" $ep_conf; then
                echo "modify the ceilometer config"
                echo "          $entry    # added by doctor script" >> $ep_conf
                service ceilometer-agent-notification restart
            fi

            # TODO(r-mibu): enable this section once congress 4.0.0 is available
            if false; then
            co_conf=/etc/congress/congress.conf
            entry="congress.datasources.doctor_driver.DoctorDriver"
            if ! grep -q -e "^drivers.*$entry" $co_conf; then
                echo "modify the congress config"
                sed -i -e "/^drivers/s/$/,$entry    # added by doctor script/" \
                    $co_conf
                service congress-server restart
            fi

            rule="-m multiport -p tcp --dports 1789"
            rule+=" -m comment --comment doctor-congress"
            rule+=" -j ACCEPT"
            if ! iptables -C INPUT $rule; then
                iptables -I INPUT $rule
            fi

            ha_conf=/etc/haproxy/conf.d/180-congress.cfg
            if [[ ! -e $ha_conf ]]; then
                sed -e "1i# generated by doctor script" \
                    -e "s/9696/1789/" \
                    -e "s/neutron/congress/" \
                    /etc/haproxy/conf.d/085-neutron.cfg > $ha_conf
                ip netns exec haproxy /usr/lib/ocf/resource.d/fuel/ns_haproxy restart
            fi
            fi

            np_conf=/etc/nova/policy.json
            if [ -e $np_conf ]; then
                entry="os_compute_api:servers:show:host_status"
                new="rule:admin_or_owner"
                np_backup="${np_conf}-doctor-saved"
                if grep -q "${entry}.*${new}" $np_conf; then
                    echo "Not modifying nova policy"
                elif grep -q "${entry}" $np_conf; then
                    echo "modify nova policy"
                    cp $np_conf $np_backup
                    oldline=$(grep "$entry" $np_conf)
                    newline=$(echo "$oldline" | sed "s/rule.*\"/$new\"/")
                    sed -i "s/$oldline/$newline/" $np_conf
                    service nova-api restart
                else
                    echo "add nova policy"
                    cp $np_conf $np_backup
                    sed -i "/{/a \    \"${entry}\": \"$new\"" $np_conf
                    service nova-api restart
                fi
            else
                # policy.json does not exist in Ocata.
                echo "$np_conf does not exist. Creating new one."
                echo -e "{\n    \"context_is_admin\":  \"role:admin\"," > $np_conf
                echo -e "    \"owner\" : \"user_id:%(user_id)s\"," >> $np_conf
                echo -e "    \"admin_or_owner\": \"rule:context_is_admin or rule:owner\"," >> $np_conf
                echo -e "    \"os_compute_api:servers:show:host_status\":  \"rule:admin_or_owner\" \n}" >> $np_conf
                np_rm="${np_conf}-doctor-rm"
                cp $np_conf $np_rm
                service nova-api restart
            fi
            ' > installer_apply_patches_$node.log 2>&1
    done
}

function setup_installer {
    get_installer_ip
    installer_get_ssh_keys
    get_controller_ips
    installer_apply_patches
    #Might take a moment for nova-api to restart
    sleep 20
    if ! openstack flavor show $VM_FLAVOR ; then
        openstack flavor create --ram 512 --disk 1 $VM_FLAVOR \
            && touch created_doctor_flavor
    fi
}

function get_compute_ip_from_hostname {
    local compute_host=$1

    compute_host_in_undercloud=${compute_host%%.*}
    node_id=$(echo $compute_host_in_undercloud | cut -d "-" -f 2)
    COMPUTE_IP=$(sshpass -p r00tme ssh 2>/dev/null $ssh_opts root@${INSTALLER_IP} \
         "fuel node|awk -F '|' -v id=$node_id '{if (\$1 == id) print \$5}' |xargs")
    die_if_not_set $LINENO COMPUTE_IP "Could get IP address of $compute_host."
}

function installer_revert_patches {
    # TODO(r-mibu): fix the followings in upstream (fuel)
    get_controller_ips
    for node in $CONTROLLER_IPS;do
        echo "restore controller configuration if touched ($node)"
        ssh $ssh_opts_cpu "root@$node" '
            set -x
            echo "### revert patches (installer=fuel)"
            date

            # TODO(r-mibu): enable this section once congress 4.0.0 is available
            if false; then
            ha_conf=/etc/haproxy/conf.d/180-congress.cfg
            if grep -q "# generated by doctor script" $ha_conf; then
                rm -f $ha_conf
                ip netns exec haproxy /usr/lib/ocf/resource.d/fuel/ns_haproxy restart
            fi

            rule="-m multiport -p tcp --dports 1789"
            rule+=" -m comment --comment doctor-congress"
            rule+=" -j ACCEPT"
            if iptables -C INPUT $rule; then
                iptables -D INPUT $rule
            fi

            co_conf=/etc/congress/congress.conf
            entry="congress.datasources.doctor_driver.DoctorDriver"
            if grep -q -e "^drivers.*$entry    # added by doctor script" $co_conf; then
                echo "modify the congress config"
                sed -i -e "/^drivers/s/^\(.*\),$entry/\1/" $co_conf
                service congress-server restart
            fi
            fi

            ep_conf=/etc/ceilometer/event_pipeline.yaml
            if grep -q "# added by doctor script" $ep_conf; then
                sed -ie "/# added by doctor script/d" $ep_conf
                service ceilometer-agent-notification restart
            fi

            np_conf=/etc/nova/policy.json
            np_backup="${np_conf}-doctor-saved"
            np_rm="${np_conf}-doctor-rm"
            if [ -e $np_backup ]; then
                cp -f $np_backup $np_conf
                rm $np_backup
                service nova-api restart
            elif [ -e $np_rm ]; then
                rm $np_conf
                rm $np_rm
                service nova-api restart
            fi
            ' >> installer_apply_patches_$node.log 2>&1
    done
}

function cleanup_installer {
    if [[ -e created_doctor_flavor ]] && openstack flavor show $VM_FLAVOR ; then
        openstack flavor delete $VM_FLAVOR && rm -f created_doctor_flavor
    fi
    installer_revert_patches
}