diff options
author | Lénaïc Huard <lhuard@amadeus.com> | 2015-08-13 14:45:25 +0200 |
---|---|---|
committer | Lénaïc Huard <lhuard@amadeus.com> | 2015-11-13 15:45:35 +0100 |
commit | 332aa8c8219ba99510090ce2412326780ad9ce74 (patch) | |
tree | 46338502de5ce2bf7f3c7e9b8b1e3c80011a7011 /filter_plugins | |
parent | 0bcea6eaf24b796ba6b2658c213c8bc24783d498 (diff) | |
download | openshift-332aa8c8219ba99510090ce2412326780ad9ce74.tar.gz openshift-332aa8c8219ba99510090ce2412326780ad9ce74.tar.bz2 openshift-332aa8c8219ba99510090ce2412326780ad9ce74.tar.xz openshift-332aa8c8219ba99510090ce2412326780ad9ce74.zip |
Better structure the output of the list playbook
The list playbook listed the IPs of the VMs without logging their role like:
TASK: [debug ] ************************************************************
ok: [10.64.109.37] => {
"msg": "public:10.64.109.37 private:192.168.165.5"
}
ok: [10.64.109.47] => {
"msg": "public:10.64.109.47 private:192.168.165.6"
}
ok: [10.64.109.36] => {
"msg": "public:10.64.109.36 private:192.168.165.4"
}
ok: [10.64.109.215] => {
"msg": "public:10.64.109.215 private:192.168.165.2"
}
The list playbook now prints the information in a more structured way with
a list of masters, a list of nodes and the subtype of the nodes like:
TASK: [debug ] ************************************************************
ok: [localhost] => {
"msg": {
"lenaicnewlist": {
"master": [
{
"name": "10.64.109.215",
"private IP": "192.168.165.2",
"public IP": "10.64.109.215",
"subtype": "default"
}
],
"node": [
{
"name": "10.64.109.47",
"private IP": "192.168.165.6",
"public IP": "10.64.109.47",
"subtype": "compute"
},
{
"name": "10.64.109.37",
"private IP": "192.168.165.5",
"public IP": "10.64.109.37",
"subtype": "compute"
},
{
"name": "10.64.109.36",
"private IP": "192.168.165.4",
"public IP": "10.64.109.36",
"subtype": "infra"
}
]
}
}
}
Diffstat (limited to 'filter_plugins')
-rw-r--r-- | filter_plugins/oo_filters.py | 57 |
1 files changed, 56 insertions, 1 deletions
diff --git a/filter_plugins/oo_filters.py b/filter_plugins/oo_filters.py index 9a17913c4..cf141d4f8 100644 --- a/filter_plugins/oo_filters.py +++ b/filter_plugins/oo_filters.py @@ -401,6 +401,60 @@ class FilterModule(object): "certificate names in host inventory")) return certificates + @staticmethod + def oo_pretty_print_cluster(data): + ''' Read a subset of hostvars and build a summary of the cluster + in the following layout: + +"c_id": { + "master": [ + { "name": "c_id-master-12345", "public IP": "172.16.0.1", "private IP": "192.168.0.1", "subtype": "default" }] + "node": [ + { "name": "c_id-node-infra-23456", "public IP": "172.16.0.2", "private IP": "192.168.0.2", "subtype": "infra" }, + { "name": "c_id-node-compute-23456", "public IP": "172.16.0.3", "private IP": "192.168.0.3", "subtype": "compute" }, + ... + ]} + ''' + + def _get_tag_value(tags, key): + ''' Extract values of a map implemented as a set. + Ex: tags = { 'tag_foo_value1', 'tag_bar_value2', 'tag_baz_value3' } + key = 'bar' + returns 'value2' + ''' + for tag in tags: + # Skip tag_env-host-type to avoid ambiguity with tag_env + if tag[:17] == 'tag_env-host-type': + continue + if tag[:len(key)+4] == 'tag_' + key: + return tag[len(key)+5:] + raise KeyError(key) + + def _add_host(clusters, + env, + host_type, + host): + ''' Add a new host in the clusters data structure ''' + if env not in clusters: + clusters[env] = {} + if host_type not in clusters[env]: + clusters[env][host_type] = [] + clusters[env][host_type].append(host) + + clusters = {} + for host in data: + try: + _add_host(clusters=clusters, + env=_get_tag_value(host['group_names'], 'env'), + host_type=_get_tag_value(host['group_names'], 'host-type'), + host={'name': host['inventory_hostname'], + 'public IP': host['ansible_ssh_host'], + 'private IP': host['ansible_default_ipv4']['address'], + 'subtype': _get_tag_value(host['group_names'], 'sub-host-type')}) + except KeyError: + pass + return clusters + def filters(self): ''' returns a mapping of filters to methods ''' return { @@ -418,5 +472,6 @@ class FilterModule(object): "oo_filter_list": self.oo_filter_list, "oo_parse_heat_stack_outputs": self.oo_parse_heat_stack_outputs, "oo_parse_certificate_names": self.oo_parse_certificate_names, - "oo_haproxy_backend_masters": self.oo_haproxy_backend_masters + "oo_haproxy_backend_masters": self.oo_haproxy_backend_masters, + "oo_pretty_print_cluster": self.oo_pretty_print_cluster } |