コード例 #1
0
ファイル: __init__.py プロジェクト: genorch/genorch
    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)
コード例 #2
0
ファイル: __init__.py プロジェクト: genorch/genorch
    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
コード例 #3
0
ファイル: swarm.py プロジェクト: genorch/genorch
 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'])
コード例 #4
0
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)
コード例 #5
0
ファイル: server.py プロジェクト: genorch/genorch
 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])
コード例 #6
0
ファイル: swarm.py プロジェクト: genorch/genorch
    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)