def create_service(self, opts): for target in self.targets: docker_client = docker.DockerClient('tcp://' + common.translate_id(target)[0] + ':' + cfg.docker['API_PORT']) if "sub_driver" in opts: sub_driver_name = opts['sub_driver'] sub_driver = getattr(docker_client, sub_driver_name) del opts['sub_driver'] if sub_driver_name == 'swarm': sub_driver_opts = opts['opts'] node_type = sub_driver_opts['type'] if node_type == 'manager': sub_driver.init('eth0:' + cfg.docker['SWARM_PORT'], '0.0.0.0:' + cfg.docker['SWARM_PORT']) db.vms.update(insert_join_token(sub_driver.attrs['JoinTokens']), where('name') == target) elif node_type == 'worker': manager = db.vms.get(where('name') == sub_driver_opts['managers'][0]) sub_driver.join([common.id_to_swarm(sub_driver_opts['managers'][0])], manager['docker']['join_tokens']['Worker'], '0.0.0.0:' + cfg.docker['SWARM_PORT']) else: if 'volumes' in opts: mounts = list(map(lambda x: docker.types.Mount(x.split(':')[1], x.split(':')[0], 'bind'), opts['volumes'])) del opts['volumes'] opts['mounts'] = mounts docker_client.containers.run(**opts, detach=True) else: docker_client.containers.run(**opts, detach=True)
def __init__(self, targets): ansible_cfg = cfg['ansible'] self.loader = DataLoader() self.passwords = {} self.options = Options() self.options.become_method = ansible_cfg['BECOME_METHOD'] self.options.become_user = ansible_cfg['BECOME_USER'] self.options.become = True self.options.private_key_file = ansible_cfg['PRIVATE_SSH_KEY'] self.options.connection = ansible_cfg['CONNECTION'] self.options.forks = 1 ips = [] for target in targets: ips.extend(common.translate_id(target)) ips.append('') self.inventory = InventoryManager(loader=self.loader, sources=','.join(ips)) self.variable_manager = VariableManager(loader=self.loader, inventory=self.inventory) self.passwords = {'become_pass': ansible_cfg['BECOME_PASS']} self.options.hostlist = ips
def add_worker(self, vm): docker_client = docker.DockerClient('tcp://' + common.translate_id(vm['id'])[0] + ':' + cfg.docker['API_PORT']) swarm_client = docker_client.swarm manager = db.vms.get(where('name') == self.init['id']) swarm_client.join([common.id_to_swarm(self.init['id'])], manager['docker']['join_tokens']['Worker'], '0.0.0.0:' + cfg.docker['SWARM_PORT'])
def parse(load): if os.environ.get('ANSIBLE_CONFIG') is None: os.environ['ANSIBLE_CONFIG'] = cfg.ansible['ANSIBLE_CONFIG'] click.secho('ansible.cfg location: %s' % os.environ.get('ANSIBLE_CONFIG'), fg='yellow') env = Environment(loader=FileSystemLoader('./')) env.globals.update(translate_id=translate_id, id_to_swarm=id_to_swarm) m = env.get_template(load).render() m = yaml.load(m) for provider in m['project']['topology']['provider']: for region in provider['region']: for vm in region['vms']: click.secho('virtual machine => provider: %s, region: %s' % (provider['name'], region['name']), fg="green") servers = db.vms.search(where('name') == vm['id']) if len(servers) == 0: Server(vm['id'], vm['image'], vm['flavor'], region['name'], provider['name'], vm['networks'], vm.get('key', None)).create() if 'config' in vm: Service(vm['config']['provider'], [vm['id']], vm['config']['opts']).create() else: click.secho('Server exists!', fg='yellow') if 'services' in m['project']: for service in m['project']['services']: click.secho('service => provider: %s, type: %s' % (service['provider'], service['type']), fg="blue") Service(service['provider'], service['targets'], service['opts']).create() clusters = [] if 'clusters' in m['project']: for cluster in m['project']['clusters']: Cluster(cluster['id'], cluster['vms'], cluster['provider']).create() click.secho('cluster => provider: %s, id: %s' % (cluster['provider'], cluster['id']), fg="blue") targets = {'targets': []} for vm in cluster['vms']: targets['targets'].append(translate_id(vm['id'])[0] + ':6634') clusters.append(targets) with open('data/targets.json', 'w') as fp: json.dump(clusters, fp)
def truncate(): vms = db.vms.all() for vm in vms: provider = BaseProvider.get(vm['provider'])(vm['region']) provider.delete_server(vm['_id']) click.secho('server => provider: %s, id: %s' % (vm['provider'], vm['name']), fg="red") ips = [] ips.extend(common.translate_id(vm['name'])) for ip in ips: system("ssh-keygen -f ~/.ssh/known_hosts -R " + ip) db.vms.remove(eids=[vm.eid])
def create_cluster(self): self.init = {} for vm in self.vms: docker_client = docker.DockerClient( 'tcp://' + common.translate_id(vm['id'])[0] + ':' + cfg.docker['API_PORT']) swarm_client = docker_client.swarm if vm['role'] == 'manager': swarm_client.init('eth0:' + cfg.docker['SWARM_PORT'], '0.0.0.0:' + cfg.docker['SWARM_PORT']) db.vms.update( insert_join_token(swarm_client.attrs['JoinTokens']), where('name') == vm['id']) self.vms.remove(vm) self.init = vm break for vm in self.vms: if vm['role'] == 'manager': self.add_manager(vm) elif vm['role'] == 'worker': self.add_worker(vm)