示例#1
0
文件: docker.py 项目: koskotG/ebonite
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)
示例#2
0
 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
示例#3
0
    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}')
示例#5
0
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()