Ejemplo n.º 1
0
async def destroy():
    model = Model()
    controller = Controller()
    await controller.connect(controller_endpoint, username, password, cacert)
    await model.connect_current()
    import ipdb
    ipdb.set_trace()
    await controller.destroy_model(model.info.uuid)
    model.disconnect()
    controller.disconnect()
Ejemplo n.º 2
0
async def set_controller_acc(c_name, access, user, username, password, url,
                             port):
    try:
        controllers = redis.StrictRedis(host=url,
                                        port=port,
                                        charset="utf-8",
                                        decode_responses=True,
                                        db=10)
        users = redis.StrictRedis(host=url,
                                  port=port,
                                  charset="utf-8",
                                  decode_responses=True,
                                  db=11)
        con = json.loads(controllers.get(c_name))
        usr = json.loads(users.get(user))
        logger.info('Connecting to controller %s', c_name)
        controller = Controller()
        await controller.connect(con['endpoints'][0], username, password,
                                 con['ca-cert'])
        logger.info('Connected to controller %s ', c_name)
        await controller.grant(user, acl=access)
        exists = False
        for contr in usr['controllers']:
            if contr['name'] == c_name:
                contr['access'] = access
                exists = True
                break
        if not exists:
            usr['controllers'].append({'name': c_name, 'access': access})
        logger.info('Controller access set for  %s ', c_name)
        if access == 'superuser':
            model = Model()
            models = []
            for mod in con['models']:
                logger.info('Setting up connection for model: %s', mod['name'])
                await model.connect(con['endpoints'][0], mod['uuid'], username,
                                    password, con['ca-cert'])
                await model.grant(user, acl='admin')
                models.append({'name': mod['name'], 'access': 'admin'})
                logger.info('Admin Access granted for for %s:%s', c_name,
                            mod['name'])
                for key in usr['ssh-keys']:
                    await model.add_ssh_key(user, key)
                model.disconnect()
            for contro in usr['controllers']:
                if contro['name'] == c_name:
                    contro['models'] = models
        users.set(user, json.dumps(usr))
        controller.disconnect()
    except Exception:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        lines = traceback.format_exception(exc_type, exc_value, exc_traceback)
        for l in lines:
            logger.error(l)
Ejemplo n.º 3
0
async def set_model_acc(c_name, m_name, access, user, username, password, url, port):
    try:
        controllers = redis.StrictRedis(host=url, port=port, charset="utf-8", decode_responses=True, db=10)
        users = redis.StrictRedis(host=url, port=port, charset="utf-8", decode_responses=True, db=11)
        controller = json.loads(controllers.get(c_name))
        usr = json.loads(users.get(user))
        for mod in controller['models']:
            if mod['name'] == m_name:
                model = Model()
                await model.connect(controller['endpoints'][0], mod['uuid'], username, password, controller['ca-cert'])
                await model.grant(user, acl=access)
                exists_con = False
                for con in usr['controllers']:
                    if con['name'] == c_name:
                        exists_mod = False
                        exists_con = True
                        for mod in con['models']:
                            if mod['name'] == m_name:
                                mod['access'] = access
                                exists_mod = True
                                break
                        if not exists_mod:
                            con['models'].append({'name': m_name, 'access': access})
                if not exists_con:
                    usr['controllers'].append({'name': c_name, 'access': 'login', 'models': [{'name': m_name, 'access': access}]})
                    contro = Controller()
                    await contro.connect(controller['endpoints'][0], username, password, controller['ca-cert'])
                    await contro.grant(user)
                    await contro.disconnect()
                logger.info('%s access granted on %s:%s for  %s', access, c_name, m_name, user)
                if access == 'admin' or access == 'write':
                    for key in usr['ssh-keys']:
                        await model.add_ssh_key(user, key)
                model.disconnect()
        controllers.set(c_name, json.dumps(controller))
        users.set(user, json.dumps(usr))
    except Exception:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        lines = traceback.format_exception(exc_type, exc_value, exc_traceback)
        for l in lines:
            logger.error(l)
Ejemplo n.º 4
0
async def deploy():
    # Create a Model instance. We need to connect our Model to a Juju api
    # server before we can use it.
    model = Model()

    # Connect to the currently active Juju model
    #await model.connect(controller_endpoint, model_uuid, username, password, cacert,)
    await model.connect(controller_endpoint, model_uuid, username, password,
                        cacert)

    # Deploy a single unit of the ubuntu charm, using revision 0 from the
    # stable channel of the Charm Store.

    ubuntu_app = await model.deploy(
        'ubuntu-0',
        application_name='ubuntu',
        series='xenial',
        channel='stable',
    )

    # Disconnect from the api server and cleanup.
    model.disconnect()