--- /dev/null
+#!/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()
+ 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")
+ person_fields = {'email': config.nova_admin_email,
+ 'first_name': config.nova_admin_user,
+ 'last_name': config.nova_admin_user,
+ '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()
+
+
+