initial checkin
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Fri, 5 Oct 2012 15:15:56 +0000 (11:15 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Fri, 5 Oct 2012 15:15:56 +0000 (11:15 -0400)
bootstrap.py [new file with mode: 0755]

diff --git a/bootstrap.py b/bootstrap.py
new file mode 100755 (executable)
index 0000000..d29cc3e
--- /dev/null
@@ -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()
+
+    
+