Пример #1
0
    def container_status_change(self, status=None, containerName=None, kwargs=None):
        """Change status of docker container

        :param str status: Docker container status to be changed to
        :param str containerName: Name of Docker container
        :returns: None
        :rtype: NoneType


        """
        if status is None:
            Console.info("No status specified")
            return

        try:
            container = self.client.containers.get(containerName)
            # need to check this ..
            if status is "start":
                container.start(**kwargs)
            elif status is "pause":
                container.pause(**kwargs)
            elif status is "unpause":
                container.unpause(**kwargs)
            elif status is "stop":
                container.stop(**kwargs)
            else:
                Console.error('Invalid Commmand')
                return

            container = self.client.containers.get(containerName)
            filter = {}
            container_dict = container.__dict__['attrs']
            filter['Id'] = container_dict['Id']
            filter['Ip'] = os.environ["DOCKER_HOST"].split(':')[0]
            container_dict['Ip'] = os.environ["DOCKER_HOST"].split(':')[0]
            Rest.post('Container', container_dict, filter)
            Console.ok('Container ' + container.name + ' status changed to ' + status)
        except docker.errors.APIError as e:
            Console.error(e.explanation)
            return
    def join(self, addr, type, kwargs=None):
        """Creates docker Swarm
        :param str addr: Address of Swarm Manager
        :returns: None
        :rtype: NoneType


        """
        man_list = []
        man_list.append(addr)
        savehost = os.environ["DOCKER_HOST"]
        os.environ["DOCKER_HOST"] = addr.split(':')[0] + ":4243"

        self.client = docker.from_env()
        if type not in ['Manager', 'Worker']:
            Console.error('Valid values are Manager or Worker')
            return

        token = self.client.swarm.attrs['JoinTokens']
        os.environ["DOCKER_HOST"] = savehost
        self.client = docker.from_env()
        rcode = self.client.swarm.join(remote_addrs=man_list,
                                       join_token=token[type],
                                       listen_addr="0.0.0.0:2377",
                                       **kwargs)
        filter = {}
        filter['Ip'] = os.environ["DOCKER_HOST"].split(':')[0]
        scode, hosts = Rest.get('Host', filter)
        d = {}
        for host in hosts:
            d['Ip'] = host['Ip']
            d['Name'] = host['Name']
            d['Port'] = host['Port']
            d['Swarmmode'] = type
            d['SwarmmanagerIp'] = addr.split(':')[0]
            d['Swarmhost'] = True
        Rest.post('Host', d, filter)
        self.node_refresh()
        Console.ok("Node Joined Swarm")
    def network_refresh(self, kwargs=None):
        """List of docker networks


        :returns: None
        :rtype: NoneType


        """
        filter = {}
        scode, hosts = Rest.get('Host', filter)
        filter = {}
        n = 1
        e = {}
        data = []
        for host in hosts:
            os.environ["DOCKER_HOST"] = host['Ip'] + ":" + str(host['Port'])
            filter = {}
            filter['Ip'] = os.environ["DOCKER_HOST"].split(':')[0]
            if host['Swarmmode'] == 'Worker':
                Rest.delete('Network', filter)
                continue
            self.client = docker.from_env()
            try:
                networks = self.client.networks.list(**kwargs)
            except docker.errors.APIError as e:
                Console.error(e.explanation)
                return

            if len(networks) == 0:
                Console.info("No network exist" + host['Ip'])
                continue

            for networkm in networks:
                network = networkm.__dict__['attrs']
                network['Ip'] = os.environ["DOCKER_HOST"].split(':')[0]
                data.append(network)
                d = {}
                d['Ip'] = os.environ["DOCKER_HOST"].split(':')[0]
                d['Id'] = network['Id']
                d['Name'] = network['Name']
                d['Containers'] = network['Containers']
                e[n] = d
                n = n + 1
            r = Rest.delete('Network', filter)
        r = Rest.post('Network', data)
        Console.ok(
            str(Printer.dict_table(e, order=['Ip', 'Id', 'Name',
                                             'Containers'])))
Пример #4
0
    def network_create(self, networkName=None, kwargs=None):
        """Creates docker network


        :param str image: Available images for docker
        :param str networkName: Name of docker container
        :param list arg: custom args for container
        :returns: str networkID: Id of the docker Container
        :rtype: NoneType


        """
        try:
            network = self.client.networks.create(name=networkName, **kwargs)
            data = []
            network_dict = network.__dict__['attrs']
            network_dict['Ip'] = os.environ["DOCKER_HOST"].split(':')[0]
            data.append(network_dict)
            Rest.post('Network', data)
            Console.ok("Network %s is created" % network.Name)
            return network.id
        except docker.errors.APIError as e:
            Console.error(e.explanation)
            return
    def leave(self, kwargs=None):
        """Creates docker Swarm

        :returns: None
        :rtype: NoneType


        """

        rcode = self.client.swarm.leave(True, **kwargs)
        filter = {}
        filter['Ip'] = os.environ["DOCKER_HOST"].split(':')[0]
        scode, hosts = Rest.get('Host', filter)
        d = {}
        for host in hosts:
            d['Ip'] = host['Ip']
            d['Name'] = host['Name']
            d['Port'] = host['Port']
            d['Swarmmode'] = ''
            d['SwarmmanagerIp'] = ''
            d['Swarmhost'] = False
        Rest.post('Host', d, filter)
        self.node_refresh()
        Console.ok("Node left Swarm")
    def host_create(self, addr, hostName=None):
        """Creates docker host


        :param str addr: Address for docker
        :param str hostName: Name of docker host
        :returns: None
        :rtype: NoneType


        """
        try:
            host = {}
            host['Name'] = hostName
            host['Ip'] = addr.split(':')[0]
            host['Port'] = int(addr.split(':')[1])
            host['Swarmmode'] = ''
            host['SwarmmanagerIp'] = ''
            host['Swarmhost'] = False
            filter = {}
            filter['Ip'] = addr.split(':')[0]
            try:
                scode, hosts = Rest.get('Host')
            except Exception as e:
                Console.error(e.message)
                return
            if len(hosts) != 0:
                Console.ok('Host ' + hostName +
                           ' is Added and is the default swarm host')
                return

            r = Rest.post('Host', host, filter)
            Console.ok('Host ' + hostName +
                       ' is Added and is the default swarm host')
        except Exception as e:
            Console.error(e.message)
            return