ansible-role-openstack-oper.../library/service_map_facts.py

100 lines
2.8 KiB
Python

#!/usr/bin/env python
import docker
from ansible.module_utils._text import to_native
from ansible.module_utils.basic import AnsibleModule
ANSIBLE_METADATA = {
'metadata_version': '1.1',
'status': ['preview'],
'supported_by': 'community'
}
def get_docker_containers(module, container_list):
from requests.exceptions import ConnectionError
if len(container_list) == 0:
pass
client = docker.from_env()
try:
containers = client.containers.list()
docker_list = [{'container_name': i.attrs['Name'].strip('/')} for i
in containers if i.attrs['Name'].strip('/') in
container_list]
return docker_list
except docker.errors.APIError as e:
module.fail_json(
msg='Error listing containers: {}'.format(to_native(e)))
except ConnectionError as e:
module.fail_json(
msg='Error connecting to Docker: {}'.format(to_native(e))
)
def get_systemd_services(module, service_unit_list):
if len(service_unit_list) == 0:
pass
systemctl_path = \
module.get_bin_path("systemctl",
opt_dirs=["/usr/bin", "/usr/local/bin"])
if systemctl_path is None:
return None
systemd_list = []
for i in service_unit_list:
rc, stdout, stderr = \
module.run_command("{} is-enabled {}".format(systemctl_path, i),
use_unsafe_shell=True)
if stdout == "enabled\n":
state_val = "enabled"
else:
state_val = "disabled"
systemd_list.append({"name": i, "state": state_val})
return systemd_list
def run_module():
module_args = dict(operations_service_map=dict(type=dict, required=True),
operations_service_names=dict(type=list, required=True),
)
module = AnsibleModule(
argument_spec=module_args,
supports_check_mode=True
)
service_map = module.params.get('service_map')
service_names = module.params.get('services')
services_to_restart = {i: service_map[i] for i in service_names}
container_list = [j for i in service_names
for j in services_to_restart[i]['container_name']]
service_unit_list = [j for i in service_names
for j in services_to_restart[i]['systemd_unit']]
result = dict(
ansible_facts=dict(
docker_containers_to_restart=get_docker_containers(
module, container_list),
systemd_services_to_restart=get_systemd_services(
module, service_unit_list),
)
)
if module.check_mode:
return result
module.exit_json(**result)
def main():
run_module()
if __name__ == "__main__":
main()