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)
42 site = Sites(api, {'login_base': site_fields['login_base']})[0]
47 # ensure admin, pi, tech and user roles exist
48 roles = ['admin', 'pi', 'tech', 'user']
52 tmp_roles = Roles(api, role)
58 logger.info("bootstrap: adding role %s" % role)
59 Role(api, {'name': role}).sync()
61 # bootstrap admin user
62 persons = Persons(api, {'email': config.nova_admin_email})
64 logger.info("bootstrap: adding admin user record")
65 name = config.nova_admin_user[:config.nova_admin_user.index('@')]
66 person_fields = {'email': config.nova_admin_user,
69 'password': config.nova_admin_password,
70 'tenant_id': site['tenant_id'],
71 'keystone_id': admin.id,
74 person = Person(api, fields=person_fields)
80 # add admin person to admin site
81 site.add_person({'email': person['email']})
84 if 'admin' not in person['roles']:
85 person.add_role('admin', site['login_base'])
88 if __name__ == '__main__':