def main(): argument_spec = dict( containers=dict(type='bool', default=False), containers_filters=dict(type='dict'), images=dict(type='bool', default=False), images_filters=dict(type='dict'), networks=dict(type='bool', default=False), networks_filters=dict(type='dict'), volumes=dict(type='bool', default=False), volumes_filters=dict(type='dict'), builder_cache=dict(type='bool', default=False), ) client = AnsibleDockerClient( argument_spec=argument_spec, # supports_check_mode=True, min_docker_api_version='1.25', min_docker_version='2.1.0', ) # Version checks cache_min_version = '3.3.0' if client.module.params['builder_cache'] and client.docker_py_version < LooseVersion(cache_min_version): msg = "Error: docker version is %s. Minimum version required for builds option is %s. Use `pip install --upgrade docker` to upgrade." client.fail(msg % (docker_version, cache_min_version)) result = dict() if client.module.params['containers']: filters = clean_dict_booleans_for_docker_api(client.module.params.get('containers_filters')) res = client.prune_containers(filters=filters) result['containers'] = res.get('ContainersDeleted') or [] result['containers_space_reclaimed'] = res['SpaceReclaimed'] if client.module.params['images']: filters = clean_dict_booleans_for_docker_api(client.module.params.get('images_filters')) res = client.prune_images(filters=filters) result['images'] = res.get('ImagesDeleted') or [] result['images_space_reclaimed'] = res['SpaceReclaimed'] if client.module.params['networks']: filters = clean_dict_booleans_for_docker_api(client.module.params.get('networks_filters')) res = client.prune_networks(filters=filters) result['networks'] = res.get('NetworksDeleted') or [] if client.module.params['volumes']: filters = clean_dict_booleans_for_docker_api(client.module.params.get('volumes_filters')) res = client.prune_volumes(filters=filters) result['volumes'] = res.get('VolumesDeleted') or [] result['volumes_space_reclaimed'] = res['SpaceReclaimed'] if client.module.params['builder_cache']: res = client.prune_builds() result['builder_cache_space_reclaimed'] = res['SpaceReclaimed'] client.module.exit_json(**result)
def __init__(self, client, results): super(DockerSwarmManager, self).__init__() self.client = client self.results = results self.verbose_output = self.client.module.params['verbose_output'] listed_objects = ['tasks', 'services', 'nodes'] self.client.fail_task_if_not_swarm_manager() self.results['swarm_facts'] = self.get_docker_swarm_facts() for docker_object in listed_objects: if self.client.module.params[docker_object]: returned_name = docker_object filter_name = docker_object + "_filters" filters = clean_dict_booleans_for_docker_api( client.module.params.get(filter_name)) self.results[returned_name] = self.get_docker_items_list( docker_object, filters) if self.client.module.params['unlock_key']: self.results[ 'swarm_unlock_key'] = self.get_docker_swarm_unlock_key()
def __init__(self, client): self.client = client self.parameters = TaskParameters(client) self.check_mode = self.client.check_mode self.results = { u'changed': False, u'actions': [] } self.diff = self.client.module._diff self.diff_tracker = DifferenceTracker() self.diff_result = dict() self.existing_network = self.get_existing_network() if not self.parameters.connected and self.existing_network: self.parameters.connected = container_names_in_network(self.existing_network) if (self.parameters.ipam_options['subnet'] or self.parameters.ipam_options['iprange'] or self.parameters.ipam_options['gateway'] or self.parameters.ipam_options['aux_addresses']): self.parameters.ipam_config = [self.parameters.ipam_options] if self.parameters.driver_options: self.parameters.driver_options = clean_dict_booleans_for_docker_api(self.parameters.driver_options) state = self.parameters.state if state == 'present': self.present() elif state == 'absent': self.absent() if self.diff or self.check_mode or self.parameters.debug: if self.diff: self.diff_result['before'], self.diff_result['after'] = self.diff_tracker.get_before_after() self.results['diff'] = self.diff_result
def __init__(self, client, results): super(ImageManager, self).__init__() self.client = client self.results = results parameters = self.client.module.params self.check_mode = self.client.check_mode self.source = parameters['source'] build = parameters['build'] or dict() self.archive_path = parameters.get('archive_path') self.cache_from = build.get('cache_from') self.container_limits = build.get('container_limits') self.dockerfile = build.get('dockerfile') self.force_source = parameters.get('force_source') self.force_absent = parameters.get('force_absent') self.force_tag = parameters.get('force_tag') self.load_path = parameters.get('load_path') self.name = parameters.get('name') self.network = build.get('network') self.extra_hosts = clean_dict_booleans_for_docker_api( build.get('etc_hosts')) self.nocache = build.get('nocache', False) self.build_path = build.get('path') self.pull = build.get('pull') self.target = build.get('target') self.repository = parameters.get('repository') self.rm = build.get('rm', True) self.state = parameters.get('state') self.tag = parameters.get('tag') self.http_timeout = build.get('http_timeout') self.push = parameters.get('push') self.buildargs = build.get('args') self.use_config_proxy = build.get('use_config_proxy') # If name contains a tag, it takes precedence over tag parameter. if not is_image_name_id(self.name): repo, repo_tag = parse_repository_tag(self.name) if repo_tag: self.name = repo self.tag = repo_tag if self.state == 'present': self.present() elif self.state == 'absent': self.absent()
def __init__(self, client, results): super(DockerHostManager, self).__init__() self.client = client self.results = results self.verbose_output = self.client.module.params['verbose_output'] listed_objects = ['volumes', 'networks', 'containers', 'images'] self.results['host_info'] = self.get_docker_host_info() if self.client.module.params['disk_usage']: self.results['disk_usage'] = self.get_docker_disk_usage_facts() for docker_object in listed_objects: if self.client.module.params[docker_object]: returned_name = docker_object filter_name = docker_object + "_filters" filters = clean_dict_booleans_for_docker_api(client.module.params.get(filter_name)) self.results[returned_name] = self.get_docker_items_list(docker_object, filters)
def main(): argument_spec = dict( containers=dict(type='bool', default=False), containers_filters=dict(type='dict'), images=dict(type='bool', default=False), images_filters=dict(type='dict'), networks=dict(type='bool', default=False), networks_filters=dict(type='dict'), volumes=dict(type='bool', default=False), volumes_filters=dict(type='dict'), builder_cache=dict(type='bool', default=False), ) client = AnsibleDockerClient( argument_spec=argument_spec, # supports_check_mode=True, min_docker_api_version='1.25', min_docker_version='2.1.0', ) # Version checks cache_min_version = '3.3.0' if client.module.params[ 'builder_cache'] and client.docker_py_version < LooseVersion( cache_min_version): msg = "Error: Docker SDK for Python's version is %s. Minimum version required for builds option is %s. Use `pip install --upgrade docker` to upgrade." client.fail(msg % (docker_version, cache_min_version)) try: result = dict() if client.module.params['containers']: filters = clean_dict_booleans_for_docker_api( client.module.params.get('containers_filters')) res = client.prune_containers(filters=filters) result['containers'] = res.get('ContainersDeleted') or [] result['containers_space_reclaimed'] = res['SpaceReclaimed'] if client.module.params['images']: filters = clean_dict_booleans_for_docker_api( client.module.params.get('images_filters')) res = client.prune_images(filters=filters) result['images'] = res.get('ImagesDeleted') or [] result['images_space_reclaimed'] = res['SpaceReclaimed'] if client.module.params['networks']: filters = clean_dict_booleans_for_docker_api( client.module.params.get('networks_filters')) res = client.prune_networks(filters=filters) result['networks'] = res.get('NetworksDeleted') or [] if client.module.params['volumes']: filters = clean_dict_booleans_for_docker_api( client.module.params.get('volumes_filters')) res = client.prune_volumes(filters=filters) result['volumes'] = res.get('VolumesDeleted') or [] result['volumes_space_reclaimed'] = res['SpaceReclaimed'] if client.module.params['builder_cache']: res = client.prune_builds() result['builder_cache_space_reclaimed'] = res['SpaceReclaimed'] client.module.exit_json(**result) except DockerException as e: client.fail('An unexpected docker error occurred: {0}'.format(e), exception=traceback.format_exc()) except RequestException as e: client.fail( 'An unexpected requests error occurred when docker-py tried to talk to the docker daemon: {0}' .format(e), exception=traceback.format_exc())