def login(self, repository, creds=None): """Log into a registry if auth is provided""" if not creds: return # parse out the hostname since repo variable is hostname + path registry, _ = auth.resolve_repository_name(repository) registry_auth = { 'username': None, 'password': None, 'email': None, 'registry': registry } registry_auth.update(creds) if not registry_auth['username'] or not registry_auth['password']: msg = 'Registry auth requires a username and a password' logger.error(msg) raise PermissionDenied(msg) logger.info('Logging into Registry {} with username {}'.format( repository, registry_auth['username'])) # noqa response = self.client.login(**registry_auth) success = response.get('Status') == 'Login Succeeded' or response.get( 'username') == registry_auth['username'] # noqa if not success: raise PermissionDenied( 'Could not log into {} with username {}'.format( repository, registry_auth['username'])) # noqa logger.info('Successfully logged into {} with {}'.format( repository, registry_auth['username'])) # noqa
def login(self, repository, creds=None): """Log into a registry if auth is provided""" if not creds: return # parse out the hostname since repo variable is hostname + path registry, _ = auth.resolve_repository_name(repository) registry_auth = {"username": None, "password": None, "email": None, "registry": registry} registry_auth.update(creds) if not registry_auth["username"] or not registry_auth["password"]: msg = "Registry auth requires a username and a password" logger.error(msg) raise PermissionDenied(msg) logger.info("Logging into Registry {} with username {}".format(repository, registry_auth["username"])) # noqa response = self.client.login(**registry_auth) success = ( response.get("Status") == "Login Succeeded" or response.get("username") == registry_auth["username"] ) # noqa if not success: raise PermissionDenied( "Could not log into {} with username {}".format(repository, registry_auth["username"]) ) # noqa logger.info("Successfully logged into {} with {}".format(repository, registry_auth["username"])) # noqa
def login(self, repository, creds=None): """Log into a registry if auth is provided""" if not creds: return # parse out the hostname since repo variable is hostname + path registry, _ = auth.resolve_repository_name(repository) registry_auth = { 'username': None, 'password': None, 'email': None, 'registry': registry } registry_auth.update(creds) if not registry_auth['username'] or not registry_auth['password']: msg = 'Registry auth requires a username and a password' logger.error(msg) raise PermissionDenied(msg) logger.info('Logging into Registry {} with username {}'.format(repository, registry_auth['username'])) # noqa response = self.client.login(**registry_auth) success = response.get('Status') == 'Login Succeeded' or response.get('username') == registry_auth['username'] # noqa if not success: raise PermissionDenied('Could not log into {} with username {}'.format(repository, registry_auth['username'])) # noqa logger.info('Successfully logged into {} with {}'.format(repository, registry_auth['username'])) # noqa
def push_image(self, name, tag=None): ''' If the name of the image contains a repository path, then push the image. :param name Name of the image to push. :param tag Use a specific tag. :return: None ''' repository = name if not tag: repository, tag = parse_repository_tag(name) registry, repo_name = resolve_repository_name(repository) self.log("push %s to %s/%s:%s" % (self.name, registry, repo_name, tag)) if registry: self.results['actions'].append( "Pushed image %s to %s/%s:%s" % (self.name, registry, repo_name, tag)) self.results['changed'] = True if not self.check_mode: status = None try: for line in self.client.push(repository, tag=tag, stream=True, decode=True): self.log(line, pretty_print=True) if line.get('errorDetail'): raise Exception(line['errorDetail']['message']) status = line.get('status') except Exception as exc: if re.search('unauthorized', str(exc)): if re.search('authentication required', str(exc)): self.fail( "Error pushing image %s/%s:%s - %s. Try logging into %s first." % (registry, repo_name, tag, str(exc), registry)) else: self.fail( "Error pushing image %s/%s:%s - %s. Does the repository exist?" % (registry, repo_name, tag, str(exc))) self.fail("Error pushing image %s: %s" % (repository, str(exc))) self.results['image'] = self.client.find_image(name=repository, tag=tag) if not self.results['image']: self.results['image'] = dict() self.results['image']['push_status'] = status
def push_image(self, name, tag=None): ''' If the name of the image contains a repository path, then push the image. :param name Name of the image to push. :param tag Use a specific tag. :return: None ''' repository = name if not tag: repository, tag = parse_repository_tag(name) registry, repo_name = resolve_repository_name(repository) self.log("push %s to %s/%s:%s" % (self.name, registry, repo_name, tag)) if registry: self.results['actions'].append("Pushed image %s to %s/%s:%s" % (self.name, registry, repo_name, tag)) self.results['changed'] = True if not self.check_mode: status = None try: for line in self.client.push(repository, tag=tag, stream=True, decode=True): self.log(line, pretty_print=True) if line.get('errorDetail'): raise Exception(line['errorDetail']['message']) status = line.get('status') except Exception as exc: if re.search('unauthorized', str(exc)): if re.search('authentication required', str(exc)): self.fail("Error pushing image %s/%s:%s - %s. Try logging into %s first." % (registry, repo_name, tag, str(exc), registry)) else: self.fail("Error pushing image %s/%s:%s - %s. Does the repository exist?" % (registry, repo_name, tag, str(exc))) self.fail("Error pushing image %s: %s" % (repository, str(exc))) self.results['image'] = self.client.find_image(name=repository, tag=tag) if not self.results['image']: self.results['image'] = dict() self.results['image']['push_status'] = status