def get_facts(self): ''' Lookup and inspect each image name found in the names parameter. :returns array of image dictionaries ''' results = [] names = self.name if not isinstance(names, list): names = [names] for name in names: if is_image_name_id(name): self.log('Fetching image %s (ID)' % (name)) image = self.client.find_image_by_id(name) else: repository, tag = utils.parse_repository_tag(name) if not tag: tag = 'latest' self.log('Fetching image %s:%s' % (repository, tag)) image = self.client.find_image(name=repository, tag=tag) if image: results.append(image) return results
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(ImageManager, self).__init__() self.client = client self.results = results parameters = self.client.module.params self.check_mode = self.client.check_mode self.archive_path = parameters.get('archive_path') self.cache_from = parameters.get('cache_from') self.container_limits = parameters.get('container_limits') self.dockerfile = parameters.get('dockerfile') self.force = parameters.get('force') self.load_path = parameters.get('load_path') self.name = parameters.get('name') self.network = parameters.get('network') self.nocache = parameters.get('nocache') self.path = parameters.get('path') self.pull = parameters.get('pull') self.repository = parameters.get('repository') self.rm = parameters.get('rm') self.state = parameters.get('state') self.tag = parameters.get('tag') self.http_timeout = parameters.get('http_timeout') self.push = parameters.get('push') self.buildargs = parameters.get('buildargs') # 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 in ['present', 'build']: self.present() elif self.state == 'absent': self.absent()
def absent(self): ''' Handles state = 'absent', which removes an image. :return None ''' name = self.name if is_image_name_id(name): image = self.client.find_image_by_id(name) else: image = self.client.find_image(name, self.tag) if self.tag: name = "%s:%s" % (self.name, self.tag) if image: if not self.check_mode: try: self.client.remove_image(name, force=self.force_absent) except Exception as exc: self.fail("Error removing image %s - %s" % (name, str(exc))) self.results['changed'] = True self.results['actions'].append("Removed image %s" % (name)) self.results['image']['state'] = 'Deleted'