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'])))
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