From: Tony Mack Date: Fri, 5 Oct 2012 15:15:56 +0000 (-0400) Subject: initial checkin X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=ea6f96626a5049706f5946e45b74c7d0dd20222a;hp=76ec57ba2aed55654b1812eac469dd7f0dc2e606;p=plcapi.git initial checkin --- diff --git a/bootstrap.py b/bootstrap.py new file mode 100755 index 0000000..d29cc3e --- /dev/null +++ b/bootstrap.py @@ -0,0 +1,90 @@ +#!/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() + + +