diff options
-rw-r--r-- | Jenkinsfile | 23 | ||||
-rw-r--r-- | moon_manager/moon_manager/__init__.py | 2 | ||||
-rw-r--r-- | moon_manager/moon_manager/api/slaves.py | 2 | ||||
-rw-r--r-- | moon_orchestrator/moon_orchestrator/__init__.py | 2 | ||||
-rw-r--r-- | python_moonclient/Changelog | 7 | ||||
-rw-r--r-- | python_moonclient/python_moonclient/__init__.py | 2 | ||||
-rw-r--r-- | python_moonclient/python_moonclient/scripts.py | 74 | ||||
-rw-r--r-- | python_moonclient/python_moonclient/slaves.py | 61 | ||||
-rw-r--r-- | python_moonclient/setup.py | 5 | ||||
-rw-r--r-- | tools/moon_jenkins/Dockerfile | 1 | ||||
-rw-r--r-- | tools/moon_jenkins/Jenkinsfile | 24 | ||||
-rw-r--r-- | tools/moon_jenkins/docker-compose.yml | 6 | ||||
-rw-r--r-- | tools/moon_jenkins/plugins.txt | 2 | ||||
-rw-r--r-- | tools/moon_jenkins/setenv.groovy | 34 |
14 files changed, 175 insertions, 70 deletions
diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 00000000..42756ece --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,23 @@ +properties([ + pipelineTriggers([cron('H * * * *')]) +]) +node { + checkout scm + def packages = ["python_moonutilities","python_moondb","python_moonclient"] + def subtests = [:] + for (x in packages) { + def pkg = x + subtests[pkg] = { + withDockerContainer('wukongsun/moon_python_unit_test') { + stage("Install prerequisites for package ${pkg}") { + sh("pip install pytest requests_mock requests --upgrade") + sh("cd ${pkg} && pip install -r tests/unit_python/requirements.txt && pip install .") + } + stage("Unit test for package ${pkg}") { + sh "cd ${pkg}/tests/unit_python && pytest ." + } + } + } + } + parallel subtests +}
\ No newline at end of file diff --git a/moon_manager/moon_manager/__init__.py b/moon_manager/moon_manager/__init__.py index 6f964a63..85c245e0 100644 --- a/moon_manager/moon_manager/__init__.py +++ b/moon_manager/moon_manager/__init__.py @@ -3,4 +3,4 @@ # license which can be found in the file 'LICENSE' in this package distribution # or at 'http://www.apache.org/licenses/LICENSE-2.0'. -__version__ = "4.3.2" +__version__ = "4.4.0" diff --git a/moon_manager/moon_manager/api/slaves.py b/moon_manager/moon_manager/api/slaves.py index d87b8aad..f5b3fa14 100644 --- a/moon_manager/moon_manager/api/slaves.py +++ b/moon_manager/moon_manager/api/slaves.py @@ -64,7 +64,7 @@ class Slaves(Resource): req = requests.get("http://{}:{}/slaves".format( self.orchestrator_hostname, self.orchestrator_port )) - return {"slaves": req.json()} + return {"slaves": req.json().get("slaves", dict())} @check_auth def patch(self, uuid=None, user_id=None): diff --git a/moon_orchestrator/moon_orchestrator/__init__.py b/moon_orchestrator/moon_orchestrator/__init__.py index 3276f42d..85c245e0 100644 --- a/moon_orchestrator/moon_orchestrator/__init__.py +++ b/moon_orchestrator/moon_orchestrator/__init__.py @@ -3,4 +3,4 @@ # license which can be found in the file 'LICENSE' in this package distribution # or at 'http://www.apache.org/licenses/LICENSE-2.0'. -__version__ = "4.3.1" +__version__ = "4.4.0" diff --git a/python_moonclient/Changelog b/python_moonclient/Changelog index f6f6c3a4..64ae76ba 100644 --- a/python_moonclient/Changelog +++ b/python_moonclient/Changelog @@ -30,3 +30,10 @@ CHANGES - moon_create_pdp - moon_send_authz_to_wrapper - Fix a bug in pdp library + +1.2.0 +----- +- Add some commands: + - moon_get_slaves + - moon_set_slave + - moon_delete_slave diff --git a/python_moonclient/python_moonclient/__init__.py b/python_moonclient/python_moonclient/__init__.py index 2302dea9..2c7f8f5c 100644 --- a/python_moonclient/python_moonclient/__init__.py +++ b/python_moonclient/python_moonclient/__init__.py @@ -3,4 +3,4 @@ # license which can be found in the file 'LICENSE' in this package distribution # or at 'http://www.apache.org/licenses/LICENSE-2.0'. -__version__ = "1.1.0" +__version__ = "1.2.0" diff --git a/python_moonclient/python_moonclient/scripts.py b/python_moonclient/python_moonclient/scripts.py index c880e497..74ed47fc 100644 --- a/python_moonclient/python_moonclient/scripts.py +++ b/python_moonclient/python_moonclient/scripts.py @@ -1,6 +1,6 @@ import logging from importlib.machinery import SourceFileLoader -from . import parse, models, policies, pdp, authz +from . import parse, models, policies, pdp, authz, slaves logger = logging.getLogger("moonclient.scripts") @@ -161,3 +161,75 @@ def map_pdp_to_project(): logger.info("Mapping: {}=>{}".format(args.filename[0], args.filename[1])) # TODO: check if pdp_id and keystone_project_id exist pdp.map_to_keystone(pdp_id=args.filename[0], keystone_project_id=args.filename[1]) + + +def get_slaves(): + requests_log = logging.getLogger("requests.packages.urllib3") + requests_log.setLevel(logging.WARNING) + requests_log.propagate = True + + args = parse.parse() + consul_host = args.consul_host + consul_port = args.consul_port + + models.init(consul_host, consul_port) + policies.init(consul_host, consul_port) + pdp.init(consul_host, consul_port) + slaves.init(consul_host, consul_port) + + for value in slaves.get_slaves().get('slaves', dict()): + if value['configured']: + print(" {} (configured)".format(value['name'])) + else: + print(" {} (not configured)".format(value['name'])) + + +def set_slave(): + requests_log = logging.getLogger("requests.packages.urllib3") + requests_log.setLevel(logging.WARNING) + requests_log.propagate = True + + args = parse.parse() + consul_host = args.consul_host + consul_port = args.consul_port + + models.init(consul_host, consul_port) + policies.init(consul_host, consul_port) + pdp.init(consul_host, consul_port) + slaves.init(consul_host, consul_port) + + slave_name = "kubernetes-admin@kubernetes" + if args.filename: + slave_name = args.filename + for value in slaves.set_slave(slave_name).get('slaves', dict()): + if value['configured']: + print(" {} (configured)".format(value['name'])) + else: + print(" {} (not configured)".format(value['name'])) + + +def delete_slave(): + requests_log = logging.getLogger("requests.packages.urllib3") + requests_log.setLevel(logging.WARNING) + requests_log.propagate = True + + args = parse.parse() + consul_host = args.consul_host + consul_port = args.consul_port + + models.init(consul_host, consul_port) + policies.init(consul_host, consul_port) + pdp.init(consul_host, consul_port) + slaves.init(consul_host, consul_port) + + slave_name = "kubernetes-admin@kubernetes" + if args.filename: + slave_name = args.filename + for value in slaves.delete_slave(slave_name).get('slaves', dict()): + if value['configured']: + print(" {} (configured)".format(value['name'])) + else: + print(" {} (not configured)".format(value['name'])) + + + diff --git a/python_moonclient/python_moonclient/slaves.py b/python_moonclient/python_moonclient/slaves.py new file mode 100644 index 00000000..3554341d --- /dev/null +++ b/python_moonclient/python_moonclient/slaves.py @@ -0,0 +1,61 @@ +import logging +import requests +import copy +from . import config + +logger = logging.getLogger("moonclient.slaves") + + +URL = None +HEADERS = None + + +def init(consul_host, consul_port): + conf_data = config.get_config_data(consul_host, consul_port) + global URL, HEADERS + URL = "http://{}:{}".format( + conf_data['manager_host'], + conf_data['manager_port']) + URL = URL + "{}" + HEADERS = {"content-type": "application/json"} + + +def get_slaves(): + req = requests.get(URL.format("/slaves")) + assert req.status_code == 200 + result = req.json() + assert type(result) is dict + assert "slaves" in result + return result + + +def set_slave(name): + slaves = get_slaves().get("slaves", []) + names = map(lambda x: x['name'], slaves) + assert name in names + req = requests.patch(URL.format("/slaves/{}".format(name)), + headers=HEADERS, + json={ + "op": "replace", + "variable": "configured", + "value": True + }) + assert req.status_code == 200 + result = req.json() + assert type(result) is dict + assert "slaves" in result + return get_slaves() + + +def delete_slave(name): + slaves = get_slaves().get("slaves", []) + names = map(lambda x: x['name'], slaves) + assert name in names + req = requests.patch(URL.format("/slaves/{}".format(name)), + headers=HEADERS, + json={ + "op": "replace", + "variable": "configured", + "value": False + }) + return get_slaves() diff --git a/python_moonclient/setup.py b/python_moonclient/setup.py index 709e3ffa..dcb90365 100644 --- a/python_moonclient/setup.py +++ b/python_moonclient/setup.py @@ -48,7 +48,10 @@ setup( 'moon_delete_pdp = python_moonclient.scripts:delete_pdp', 'moon_delete_policy = python_moonclient.scripts:delete_policy', 'moon_map_pdp_to_project = python_moonclient.scripts:map_pdp_to_project', - 'moon_send_authz_to_wrapper = python_moonclient.scripts:send_authz_to_wrapper' + 'moon_send_authz_to_wrapper = python_moonclient.scripts:send_authz_to_wrapper', + 'moon_get_slaves = python_moonclient.scripts:get_slaves', + 'moon_set_slave = python_moonclient.scripts:set_slave', + 'moon_delete_slave = python_moonclient.scripts:delete_slave' ], } diff --git a/tools/moon_jenkins/Dockerfile b/tools/moon_jenkins/Dockerfile index 573d4ac8..058f388c 100644 --- a/tools/moon_jenkins/Dockerfile +++ b/tools/moon_jenkins/Dockerfile @@ -3,7 +3,6 @@ FROM jenkinsci/blueocean ENV JAVA_OPTS="-Djenkins.install.runSetupWizard=false" COPY security.groovy /usr/share/jenkins/ref/init.groovy.d/security.groovy -COPY setenv.groovy /usr/share/jenkins/ref/init.groovy.d/setenv.groovy COPY plugins.txt /usr/share/jenkins/ref/plugins.txt RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/ref/plugins.txt
\ No newline at end of file diff --git a/tools/moon_jenkins/Jenkinsfile b/tools/moon_jenkins/Jenkinsfile deleted file mode 100644 index 7e0e07c0..00000000 --- a/tools/moon_jenkins/Jenkinsfile +++ /dev/null @@ -1,24 +0,0 @@ -pipeline { - agent { - docker { - image 'wukongsun/moon_python_unit_test' - args '-e moon_home=${moon_home}' - } - } - stages { - stage('Python Unit Test') { - steps { - script { - sh("cd ${moon_home}/tests/python_unit") - sh("bash run_tests") - } - } - } - stage('Functional Test') { - script { - sh("cd ${moon_home}/tests/functional") - sh("bash run_tests") - } - } - } -}
\ No newline at end of file diff --git a/tools/moon_jenkins/docker-compose.yml b/tools/moon_jenkins/docker-compose.yml index 2329f7bd..eb9354ce 100644 --- a/tools/moon_jenkins/docker-compose.yml +++ b/tools/moon_jenkins/docker-compose.yml @@ -1,12 +1,10 @@ version: '3.1' services: - jenkins: build: context: . - args: - image: blueocean:v0.3 + image: blueocean:v0.4 ports: - 8080:8080 - 50000:50000 @@ -19,4 +17,4 @@ services: user: root volumes: - jenkins-data: + jenkins-data:
\ No newline at end of file diff --git a/tools/moon_jenkins/plugins.txt b/tools/moon_jenkins/plugins.txt index 2463d029..65bae872 100644 --- a/tools/moon_jenkins/plugins.txt +++ b/tools/moon_jenkins/plugins.txt @@ -97,4 +97,4 @@ ssh-slaves pam-auth ldap email-ext -locale +locale
\ No newline at end of file diff --git a/tools/moon_jenkins/setenv.groovy b/tools/moon_jenkins/setenv.groovy deleted file mode 100644 index ab2dc137..00000000 --- a/tools/moon_jenkins/setenv.groovy +++ /dev/null @@ -1,34 +0,0 @@ -#!groovy - -import jenkins.* -import jenkins.model.* -import hudson.* -import hudson.model.* - -instance = Jenkins.getInstance() -globalNodeProperties = instance.getGlobalNodeProperties() - -envVarsNodePropertyList = globalNodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class) - -newEnvVarsNodeProperty = null -envVars = null - -if (envVarsNodePropertyList == null || envVarsNodePropertyList.size() == 0) { - newEnvVarsNodeProperty = new hudson.slaves.EnvironmentVariablesNodeProperty(); - globalNodeProperties.add(newEnvVarsNodeProperty) - envVars = newEnvVarsNodeProperty.getEnvVars() -} else { - envVars = envVarsNodePropertyList.get(0).getEnvVars() -} - -http_proxy = System.getenv()['http_proxy'] -https_proxy = System.getenv()['https_proxy'] - -if (http_proxy) { - envVars.put("http_proxy", System.getenv()['http_proxy']) -} -if (https_proxy) { - envVars.put("https_proxy", System.getenv()['https_proxy']) -} - -instance.save() |