From ce2b667d49cf7f4aa7f63e62d30f5e2059667880 Mon Sep 17 00:00:00 2001 From: CVL-GitHub <jupiter.hu@monash.edu> Date: Wed, 16 Sep 2015 09:39:45 +1000 Subject: [PATCH] fixed mysql broken in centos 6, add karaage scripts --- roles/karaage3.1.17/tasks/karaage.yml | 19 ++ .../templates/karaage3-wsgi.conf.j2 | 9 +- roles/karaage3.1.17/templates/kg_add_admin.j2 | 50 +++++ roles/karaage3.1.17/templates/kg_init.j2 | 211 ++++++++++++++++++ roles/mysql/tasks/mysql_server.yml | 20 +- 5 files changed, 291 insertions(+), 18 deletions(-) create mode 100755 roles/karaage3.1.17/templates/kg_add_admin.j2 create mode 100755 roles/karaage3.1.17/templates/kg_init.j2 diff --git a/roles/karaage3.1.17/tasks/karaage.yml b/roles/karaage3.1.17/tasks/karaage.yml index 65eb0582..41110636 100644 --- a/roles/karaage3.1.17/tasks/karaage.yml +++ b/roles/karaage3.1.17/tasks/karaage.yml @@ -82,6 +82,18 @@ name: "Templating Karaage settings" template: src=settings.py.j2 dest=/etc/karaage3/settings.py owner=root group={{ apache_user }} mode=0640 sudo: true +- + name: "Templating project conf" + template: src=kginit.conf.j2 dest=/etc/karaage3/kginit.conf owner=root group={{ apache_user }} mode=0640 + sudo: true +- + name: "Templating project init script" + template: src=kg_init.j2 dest=/usr/bin/kg_init owner=root mode=755 + sudo: true +- + name: "Templating adding admin role script" + template: src=kg_add_admin.j2 dest=/usr/bin/kg_add_admin owner=root mode=755 + sudo: true - name: "Creating karaage3 in /var directories log, lib " file: path={{ item }} state=directory owner=root group={{ apache_user }} mode=0775 @@ -148,6 +160,13 @@ sudo: true when: karaage_db_init.stdout.find("0") == 0 +- + name: "Create projects" + shell: kg_init /etc/karaage3/kginit.conf {{ admin_password }} + sudo: true + when: karaage_db_init.stdout.find("0") == 0 + + - name: install postfix apt: name=postfix state=present sudo: true diff --git a/roles/karaage3.1.17/templates/karaage3-wsgi.conf.j2 b/roles/karaage3.1.17/templates/karaage3-wsgi.conf.j2 index ac304e22..efcf68c9 100644 --- a/roles/karaage3.1.17/templates/karaage3-wsgi.conf.j2 +++ b/roles/karaage3.1.17/templates/karaage3-wsgi.conf.j2 @@ -31,6 +31,13 @@ Alias /kgfiles "/var/cache/karaage3/files" </IfVersion> </Location> +<Location /karaage/samlredirect> +AuthType Shibboleth +ShibRequireSession On +ShibUseHeaders On +require valid-user +</Location> + <Location /karaage/aafbootstrap> AuthType Shibboleth ShibRequireSession On @@ -38,7 +45,7 @@ ShibUseHeaders On require valid-user </Location> -<Location /karaage/projects/joinprojects/> +<Location /karaage/profile/saml> AuthType Shibboleth ShibRequireSession On ShibUseHeaders On diff --git a/roles/karaage3.1.17/templates/kg_add_admin.j2 b/roles/karaage3.1.17/templates/kg_add_admin.j2 new file mode 100755 index 00000000..24b59648 --- /dev/null +++ b/roles/karaage3.1.17/templates/kg_add_admin.j2 @@ -0,0 +1,50 @@ +#!/usr/bin/python + +import os +os.environ['DJANGO_SETTINGS_MODULE'] = "karaage.conf.settings" + +import sys, traceback +from django.contrib.auth.models import User +from django.db.models import Q +from karaage.people.models import Person, Group +import karaage.people.managers +from karaage.people.forms import AddPersonForm, AdminPersonForm, PersonForm +from karaage.projects.models import Project +from karaage.machines.models import MachineCategory +import logging +from django.conf import settings +from karaage.institutes.models import Institute, InstituteDelegate +from karaage.machines.models import Account + +from karaage.people.models import Person, Group +import django +django.setup() + +def addAdminRole(username): + try: + person = Person.objects.get(username = username) + if person and person.is_admin == False: + person.is_admin = True + person.save() + print "User %s has been added to admin role" %(username) + except Person.DoesNotExist: + print "User %s does not exist" %(username) + except: + print "Exception %s" % traceback.format_exc() + +def usage(): + print "Usage: add_admin <username>" + +def main(argv): + if len(sys.argv) < 2: + usage() + else: + username = argv[0] + if not username: + print "Invalid user name" + addAdminRole(username) + + +if __name__ == '__main__': + main(sys.argv[1:]) + diff --git a/roles/karaage3.1.17/templates/kg_init.j2 b/roles/karaage3.1.17/templates/kg_init.j2 new file mode 100755 index 00000000..4424d42f --- /dev/null +++ b/roles/karaage3.1.17/templates/kg_init.j2 @@ -0,0 +1,211 @@ +#!/usr/bin/python + +import os, sys +os.environ['DJANGO_SETTINGS_MODULE'] = "karaage.conf.settings" +from django.conf import settings +from karaage.projects.models import Project +from karaage.institutes.models import Institute +from karaage.machines.models import MachineCategory +from karaage.people.models import Person, Group + +DEBUG = False +class HpcIdInit(): + import django + django.setup() + + def __init__(self, configfile, password, debug = True): + import json + self.path = configfile + self.password = password + self.debug = debug + if self.path and os.path.exists(self.path): + with open(self.path) as data: + config_data = json.load(data) + self.project = config_data["project"] + self.mc = config_data["machine_category"] + self.user = config_data["superuser"] + else: + log("Invalid input data") + + def log(self, message): + if self.debug: + print message + else: + pass + + def getGroup(self, name): + group = None + try: + group =Group.objects.get(name = name) + if group: + self.log("Find group %s" %(name)) + except: + self.log("Group %s not found" %(name)) + finally: + return group + + def getProject(self, name): + + self.log("Get Project 1 %s" %(name)) + project = None + try: + project = Project.objects.get(name = name) + if project: + self.log("Find project %s" %(project.name)) + group = project.group + if group: + self.log("Group name = %s" %(group.name)) + else: + self.log("Project %s not found" %(project.name)) + except Project.DoesNotExist: + self.log("project %s does not exists" %(name)) + except: + self.log("Exception: ", traceback.format_exc()) + finally: + return project + + def createProject(self, pid, name, institute_name, superuser): + project = None + try: + institute = self.getInstitute(institute_name) + if institute: + self.log("Find insititute %s" %(institute.name)) + project = Project.objects.create(pid = pid, name = name, institute = institute, group = institute.group, is_active = True, is_approved = True, approved_by = superuser) + if project: + self.log("Create project OK") + else: + self.log("Create project failed") + + else: + self.log("Insititute %s does not exist" %(institute_name)) + except: + self.log("Exception: ", traceback.format_exc()) + finally: + return project + + def getInstitute(self, name): + institute = None + try: + institute = Institute.objects.get(name = name) + if institute: + self.log("Institute %s exist" %(institute.name)) + group = institute.group + if group: + self.log("Group name = %s" %(group.name)) + else: + self.log("Institute %s not found" %(name)) + except Institute.DoesNotExist: + self.log("Institute %s not found" %(name)) + finally: + return institute + + def getDefaultDatastore(self): + for key, value in settings.MACHINE_CATEGORY_DATASTORES.items(): + if value: + return key + return None + + def getMachineCategory(self, name): + mc = None + self.log("Running getMachineGategory %s" %(name)) + try: + mc = MachineCategory.objects.get(name = name) + if mc: + self.log("Find machine category %s" %(mc.name)) + else: + slef.log("Not found machine category %s" %(name)) + + except MachineCategory.DoesNotExist: + self.log("Machine category %s dose not exist" %(name)) + except: + self.log("Except to create machine category %s" %(traceback.format_exc())) + finally: + return mc + + def getOrCreateMachineCategory(self, name): + mc = None + try: + self.log("getOrCreateMachineCategory %s" %(name)) + mc = self.getMachineCategory(name) + if not mc: + datastore = self.getDefaultDatastore() + self.log("datastore = '%s'" %(datastore)) + mc = MachineCategory.objects.get_or_create(name = name, datastore = datastore) + self.log("after create machine catetory '%s'" %(name)) + if mc: + self.log("Create MachineCategory %s OK" %(mc.name)) + else: + self.log("Create MachineCategory failed") + except: + self.log("Except to create machine category %s" %(traceback.format_exc())) + finally: + return mc + + def getUser(self, username): + person = None + try: + person = Person.objects.get(username__exact=username) + except Person.DoesNotExist: + log("Person %s not found" %(username)) + finally: + return person + + def createSuperUser(self, user): + person = None + try: + institute = Institute.objects.get(name = user["institute_name"]) + if institute: + person = Person.objects.create(username = user["username"], email = user["email"], password = self.password, short_name = user["short_name"], full_name = user["full_name"], is_admin = True, is_active = True, institute = institute) + person.full_clean() + except: + log("Create super user exception: %s" %(traceback.format_exc())) + finally: + return person + + def setup(self): + self.log("Password = %s, debug = %s" %(self.password, self.debug)) + su = self.getUser(self.user["username"]) + if su: + self.log("Find super user %s" %(su.username)) + else: + su = self.createSuperUser(self.user) + if su: + self.log("Create super user %s OK" %(su.username)) + else: + self.log("Create super user %s failed" %(self.user["username"])) + if self.mc: + mc = self.getOrCreateMachineCategory(self.mc) + if mc: + self.log("Get machine category = '%s'" %(mc.name)) + else: + self.log("Failed to get machine category = '%s'" %(self.mc)) + if su: + for p in self.project: + project = self.getProject(p["project_name"]) + if project: + self.log("Find project %s" %(project.name)) + else: + self.log("Create project name = %s, pid = %s, institute name = %s" %(p["project_name"], p["pid"], p["institute_name"])) + project = self.createProject(p["pid"], p["project_name"], p["institute_name"], su) + if project: + self.log("Create project %s OK." %(project.name)) + else: + self.log("Create project %s failed." %(p["project_name"])) + break + +def main(argv): + config_path = None + if len(sys.argv) > 2: + config_path = argv[0] + password = argv[1] + debug = DEBUG + if len(sys.argv) > 3: + debug = argv[2] + init = HpcIdInit(config_path, password, debug) + init.log("Password = %s, debug = %s" %(password, debug)) + init.setup() + else: + print "Usage: kg_init <config file> <superuser password> <option: debug True | False>" +if __name__ == '__main__': + main(sys.argv[1:]) + diff --git a/roles/mysql/tasks/mysql_server.yml b/roles/mysql/tasks/mysql_server.yml index f446c6da..6bd8c447 100644 --- a/roles/mysql/tasks/mysql_server.yml +++ b/roles/mysql/tasks/mysql_server.yml @@ -5,24 +5,10 @@ sudo: true when: ansible_os_family == "Debian" -- name: Installing MySQL RedHat - yum: name="{{ item }}" state=latest - with_items: - - python - - python-devel - - mysql-devel - - mysql-libs - - MySQL-python - - mysql-server +- name: "Remove rdo repo broken in RH" + file: path=/etc/yum.repos.d/rdo-release.repo state=absent sudo: true - when: ansible_os_family == "RedHat" and ansible_distribution_major_version < 7 - -- name: Installing MySQL RedHat - yum: name="{{ item }}" state=latest - with_items: - - mariadb-server - sudo: true - when: ansible_os_family == "RedHat" and ansible_distribution_major_version >= 7 + when: ansible_os_family == "RedHat" - name: Installing MySQL RedHat yum: name={{ item }} -- GitLab