def login_to_registry(client: docker.DockerClient, registry: DockerRegistry): """ Logs in to Docker registry (if it is remote). Corresponding credentials should be specified as environment variables per registry: e.g., if registry host is "168.32.25.1:5000" then "168_32_25_1_5000_USERNAME" and "168_32_25_1_5000_PASSWORD" variables should be specified :param client: Docker client instance :param registry: Docker registry descriptor :return: nothing """ if isinstance(registry, RemoteDockerRegistry): host_for_env = registry.host.replace('.', '_').replace(':', '_') username_var = f'{host_for_env}_username'.upper() username = os.getenv(username_var) password_var = f'{host_for_env}_password'.upper() password = os.getenv(password_var) if username and password: client.login(registry=registry.host, username=username, password=password) logger.info('Logged in to remote registry at host %s', registry.host) else: logger.warning( 'Skipped logging in to remote registry at host %s because no credentials given. ' + 'You could specify credentials as %s and %s environment variables.', registry.host, username_var, password_var)
def _new_client(self) -> DockerClient: """Make a new Docker client.""" client = DockerClient(base_url=current_app.config['DOCKER_HOST']) # Log in to the ECR registry with Docker only if we require the # ability to pull the converter image. if current_app.config['CONVERTER_IMAGE_PULL']: username, password = self._get_ecr_login() ecr_registry, _ = self.image[0].split('/', 1) client.login(username, password, registry=ecr_registry) return client
def perform_logins(self, client: DockerClient): self._logger.info('Running logins for docker client') if not self.has_providers: self._logger.info('No providers present, skipping...') return for entry in self._providers.values(): provider = entry[self.PROVIDER_KEY] if provider.should_authenticate(entry[self.LAST_LOGIN_KEY]): (user, password, registry) = provider.obtain_auth() client.login(username=user, password=password, registry=registry) entry['last_login'] = datetime.now()
def docker_login(client: docker.DockerClient, username: str, password: str, registry: Optional[str] = 'https://index.docker.io/v1/'): """ Log in to a docker registry given username, password and registry (optional) """ logger.info(f'Logging into registry {registry} as {username}') r = client.login(username, password, registry=registry) if 'Status' in r.keys() and 'succeeded' in r['Status'].lower(): return True raise ValueError(f'Username/password incorrect for registry {registry}')
class SwarmClient(object): # def __init__(self, dockerhost,username,password,registry): def __init__(self, dockerhost): self.url = 'tcp://' + dockerhost self.client = DockerClient(base_url=self.url) # self.client.login(username='******', password='******', email='*****@*****.**', registry='sigmaxm.com') # self.client.login(username=username, password=password,email='*****@*****.**',registry=registry) def reglogin(self, username='******', password='******', email='*****@*****.**', registry='sigmaxm.com'): # def reglogin(self, username, password,registry): # res = self.client.login() email = '*****@*****.**' res = self.client.login(username=username, password=password, email=email, registry=registry) return res def managerdetails(self): res = self.client.api.nodes(filters={'role': 'manager'}) resList = [] for r in res: _tempdict = {} _tempdict['managerhostname'] = r['Description']['Hostname'] _tempdict['managerip'] = r['Status']['Addr'] _tempdict['engineversion'] = r['Description']['Engine'][ 'EngineVersion'] _tempdict['managerstatus'] = r['Status']['State'] _tempdict['availability'] = r['Spec']['Availability'] _tempdict['state'] = r['Status']['State'] resList.append(_tempdict) return resList def workerdetails(self): res = self.client.api.nodes(filters={'role': 'worker'}) resList = [] for r in res: _tempdict = {} _tempdict['workerhostname'] = r['Description']['Hostname'] _tempdict['workerip'] = r['Status']['Addr'] _tempdict['engineversion'] = r['Description']['Engine'][ 'EngineVersion'] _tempdict['workerstatus'] = r['Status']['State'] _tempdict['availability'] = r['Spec']['Availability'] _tempdict['state'] = r['Status']['State'] resList.append(_tempdict) return resList def createservice(self, service_name, host_port, container_port, image, replicas=1, command=None): # resources = types.Resources(cpu_reservation=1000000000) policy = types.RestartPolicy(condition="none") replica_mode = types.ServiceMode(mode='replicated', replicas=replicas) endpointSpec = docker.types.EndpointSpec( ports={host_port: container_port}) # service = self.client.services.create(name=service_name,image=image, command=['sleep', '120'], resources=resources, restart_policy=policy,endpoint_spec=endpointSpec,mode=replica_mode) service = self.client.services.create(name=service_name, image=image, restart_policy=policy, endpoint_spec=endpointSpec, mode=replica_mode) return service def remove_service(self, service_name): sn = self.client.services.get(service_name) return sn.remove()