#!/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 }