summaryrefslogtreecommitdiffstats
path: root/tests/lib/inspectors/congress
blob: 048252524d216c594a62e87a2f02dbaa93a86e10 (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
#!/bin/bash

function _congress_add_rule {
    name=$1
    policy=$2
    rule=$3

    if ! openstack congress policy rule list $policy | grep -q -e "// Name: $name$" ; then
        openstack congress policy rule create --name $name $policy "$rule"
    fi
}

function _congress_del_rule {
    name=$1
    policy=$2

    if openstack congress policy rule list $policy | grep -q -e "^// Name: $name$" ; then
        openstack congress policy rule delete $policy $name
    fi
}

function _congress_add_rules {
    _congress_add_rule host_down classification \
        'host_down(host) :-
            doctor:events(hostname=host, type="compute.host.down", status="down")'

    _congress_add_rule active_instance_in_host classification \
        'active_instance_in_host(vmid, host) :-
            nova:servers(id=vmid, host_name=host, status="ACTIVE")'

    _congress_add_rule host_force_down classification \
        'execute[nova:services.force_down(host, "nova-compute", "True")] :-
            host_down(host)'

    _congress_add_rule error_vm_states classification \
        'execute[nova:servers.reset_state(vmid, "error")] :-
            host_down(host),
            active_instance_in_host(vmid, host)'
}

function start_inspector_congress {
    nova_api_min_version="2.11"
    nova_api_version=$(openstack congress datasource list | \
                       grep nova | grep -Po "(?<='api_version': ')[^']*")
    [[ -z $nova_api_version ]] && nova_api_version="2.0"
    if [[ "$nova_api_version" < "$nova_api_min_version" ]]; then
        echo "ERROR: Congress Nova datasource API version < $nova_api_min_version ($nova_api_version)"
        exit 1
    fi
    openstack congress driver list | grep -q " doctor "
    openstack congress datasource list | grep -q " doctor " || {
        openstack congress datasource create doctor doctor
    }
    _congress_add_rules

}

function stop_inspector_congress {
    _congress_del_rule host_force_down classification
    _congress_del_rule error_vm_states classification
    _congress_del_rule active_instance_in_host classification
    _congress_del_rule host_down classification

}

function cleanup_inspector_congress {
    # Noop
    return
}