#!/usr/bin/python from PLC.Config import Config from PLC.API import PLCAPI from PLC.NovaShell import NovaShell from PLC.Sites import Site, Sites from PLC.Persons import Person, Persons from PLC.Roles import Role, Roles from PLC.Logger import logger def bootstrap(): """ Create admin records in PLC database. Requires valid nova config settings. """ # lookup admin account in nova api = PLCAPI() config = Config() nova = NovaShell() admin = nova.keystone.users.find(email=config.nova_admin_email) tenant = nova.keystone.tenants.find(name=config.nova_admin_tenant) # bootstrap admin site sites = Sites(api, {'name': tenant.name, 'tenant_id': tenant.id}) if not sites: logger.info("bootstrap: adding admin site record") if tenant.description: description = tenant.description else: description = tenant.name site_fields = { 'tenant_id': tenant.id, 'enabled': True, 'login_base': tenant.name, 'abbreviated_name': 'Admin Site', 'is_public': False, 'name': tenant.name, 'description': description, } site = Site(api, fields=site_fields) site.sync() site = Sites(api, {'login_base': site_fields['login_base']})[0] else: site = sites[0] # bootstrap roles # ensure admin, pi, tech and user roles exist roles = ['admin', 'pi', 'tech', 'user'] for role in roles: role_found = False try: tmp_roles = Roles(api, role) if tmp_roles: role_found = True except: pass if not role_found: logger.info("bootstrap: adding role %s" % role) Role(api, {'name': role}).sync() # bootstrap admin user persons = Persons(api, {'email': config.nova_admin_email}) if not persons: logger.info("bootstrap: adding admin user record") name = config.nova_admin_user[:config.nova_admin_user.index('@')] person_fields = {'email': config.nova_admin_user, 'first_name': name, 'last_name': name, 'password': config.nova_admin_password, 'tenant_id': site['tenant_id'], 'keystone_id': admin.id, 'enabled': True } person = Person(api, fields=person_fields) person.sync() else: person = persons[0] # add admin person to admin site site.add_person({'email': person['email']}) # check admin roles if 'admin' not in person['roles']: person.add_role('admin', site['login_base']) if __name__ == '__main__': bootstrap()