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, 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() pull = parameters['pull'] or dict() self.archive_path = parameters['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['force_source'] self.force_absent = parameters['force_absent'] self.force_tag = parameters['force_tag'] self.load_path = parameters['load_path'] self.name = parameters['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['repository'] self.rm = build.get('rm', True) self.state = parameters['state'] self.tag = parameters['tag'] self.http_timeout = build.get('http_timeout') self.pull_platform = pull.get('platform') self.push = parameters['push'] self.buildargs = build.get('args') self.build_platform = build.get('platform') 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 # Sanity check: fail early when we know that something will fail later if self.repository and is_image_name_id(self.repository): self.fail("`repository` must not be an image ID; got: %s" % self.repository) if not self.repository and self.push and is_image_name_id(self.name): self.fail( "Cannot push an image by ID; specify `repository` to tag and push the image with ID %s instead" % self.name) if self.state == 'present': self.present() elif self.state == 'absent': self.absent()
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() pull = parameters['pull'] or dict() self.archive_path = parameters['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['force_source'] self.force_absent = parameters['force_absent'] self.force_tag = parameters['force_tag'] self.load_path = parameters['load_path'] self.name = parameters['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['repository'] self.rm = build.get('rm', True) self.state = parameters['state'] self.tag = parameters['tag'] self.http_timeout = build.get('http_timeout') self.pull_platform = pull.get('platform') self.push = parameters['push'] self.buildargs = build.get('args') self.build_platform = build.get('platform') 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 __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_config: try: for ipam_config in self.parameters.ipam_config: validate_cidr(ipam_config['subnet']) except ValueError as e: self.client.fail(str(e)) 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 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( to_native(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(to_native(e)), exception=traceback.format_exc())