3 from PLC.Config import Config
4 from PLC.API import PLCAPI
5 from PLC.NovaShell import NovaShell
6 from PLC.Sites import Site, Sites
7 from PLC.Persons import Person, Persons
8 from PLC.Roles import Role, Roles
9 from PLC.Logger import logger
14 Create admin records in PLC database. Requires valid nova config settings.
16 # lookup admin account in nova
20 admin = nova.keystone.users.find(email=config.nova_admin_email)
21 tenant = nova.keystone.tenants.find(name=config.nova_admin_tenant)
23 # bootstrap admin site
24 sites = Sites(api, {'name': tenant.name, 'tenant_id': tenant.id})
26 logger.info("bootstrap: adding admin site record")
27 if tenant.description:
28 description = tenant.description
30 description = tenant.name
32 'tenant_id': tenant.id,
34 'login_base': tenant.name,
35 'abbreviated_name': 'Admin Site',
38 'description': description,
40 site = Site(api, fields=site_fields)
46 # ensure admin, pi, tech and user roles exist
47 roles = ['admin', 'pi', 'tech', 'user']
51 tmp_roles = Roles(api, role)
57 logger.info("bootstrap: adding role %s" % role)
58 Role(api, {'name': role}).sync()
60 # bootstrap admin user
61 persons = Persons(api, {'email': config.nova_admin_email})
63 logger.info("bootstrap: adding admin user record")
64 person_fields = {'email': config.nova_admin_email,
65 'first_name': config.nova_admin_user,
66 'last_name': config.nova_admin_user,
67 'password': config.nova_admin_password,
68 'tenant_id': site['tenant_id'],
69 'keystone_id': admin.id,
72 person = Person(api, fields=person_fields)
78 # add admin person to admin site
79 site.add_person({'email': person['email']})
82 if 'admin' not in person['roles']:
83 person.add_role('admin', site['login_base'])
86 if __name__ == '__main__':