]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-build.git/commitdiff
Rename jenkins-node module for ansible v2 compatibility 497/head
authorDavid Galloway <dgallowa@redhat.com>
Thu, 29 Sep 2016 17:54:14 +0000 (13:54 -0400)
committerDavid Galloway <dgallowa@redhat.com>
Thu, 29 Sep 2016 17:57:32 +0000 (13:57 -0400)
Signed-off-by: David Galloway <dgallowa@redhat.com>
ansible/examples/slave.yml
ansible/examples/slave_static.yml
ansible/library/jenkins-node [deleted file]
ansible/library/jenkins_node [new file with mode: 0644]

index 5ecc0013c5461df6a614cceccca4a3ff55ebf17c..e61ea10179042691fccb1077452a0f488386ac8e 100644 (file)
         key: "{{ lookup('file', 'playbook/files/ssh/hostkeys/github.com.pub') }}"
 
     - name: register the new slave to jenkins master with ssh
-      jenkins-node:
+      jenkins_node:
         username: "{{ api_user }}"
         uri: "{{ api_uri }}"
         password: "{{ token }}"
       when: not use_jnlp
 
     - name: register the new slave to jenkins master with jnlp
-      jenkins-node:
+      jenkins_node:
         username: "{{ api_user }}"
         uri: "{{ api_uri }}"
         password: "{{ token }}"
index 3dffe8e9e2bc54ba5b0230e318452546f4cb3fa7..f9c5e138af8b339836254971a7b6717626120c89 100644 (file)
         key: "{{ lookup('file', 'files/ssh/hostkeys/github.com.pub') }}"
 
     - name: register the new slave to jenkins master with ssh
-      jenkins-node:
+      jenkins_node:
         username: "{{ api_user }}"
         uri: "{{ api_uri }}"
         password: "{{ token }}"
       when: not use_jnlp
 
     - name: register the new slave to jenkins master with jnlp
-      jenkins-node:
+      jenkins_node:
         username: "{{ api_user }}"
         uri: "{{ api_uri }}"
         password: "{{ token }}"
diff --git a/ansible/library/jenkins-node b/ansible/library/jenkins-node
deleted file mode 100644 (file)
index b8e83c7..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-DOCUMENTATION = """
-module: jenkins-node
-short_decription: Manage Jenkins nodes
-description:
-  - This module provides some management features to control Jenkins
-    nodes.
-
-options:
-  uri:
-    description:
-      - Base URI for the Jenkins instance
-    required: true
-
-  username:
-    description:
-      - The Jenkins username to log-in with.
-    required: true
-
-  password:
-    description:
-      - The Jenkins password (or API token) to log-in with.
-    required: true
-
-  operation:
-    description:
-      - Operation to perform
-    required: false
-    default: 'create'
-    choices: [ create, delete, enable, disable ]
-
-  name:
-    description:
-      - Node name
-    required: true
-
-  executors:
-    description:
-      - Number of executors in node
-    required: false
-    default: 2
-
-  description:
-    description:
-      - Description of the node
-    required: false
-    default: null
-
-  labels:
-    description:
-      - Labels to associate with a node, like "amd64" or "python"
-    required: false
-    default: null
-
-  exclusive:
-    description:
-      - Mark this node for tied jobs only
-    required: false
-    default: 'no'
-    choices: ['no', 'yes']
-
-  launcher:
-    description:
-      - Launcher method for a remote node (only needed for 'create' operations)
-    required: false
-    default: 'hudson.plugins.sshslaves.SSHLauncher'
-
-  remoteFS:
-    description:
-      - Path to the directory used for builds
-    required: false
-
-  credentialsId:
-    description:
-      - the ID of the user needed for authentication. Usually found in
-        credentials.xml or via the url
-       {host}/credential-store/domain/_/credential/{id}. By default this is an
-        SSH user account and key (see "launcher" above).
-
-  host:
-    description:
-      - hostname or IP for the host to connect to the slave
-
-requirements: ['python-jenkins']
-author:
-    - "Alfredo Deza"
-
-"""
-
-EXAMPLES = """
-# Create new node
-- name: Create new node
-  jenkins-node: uri={{ jenkins_uri }} username={{ user }} password={{ password }}
-           name={{ node_name }} operation=create
-
-# Delete an existing node
-- name: Delete a node
-  jenkins-node: uri={{ jenkins_uri }} username={{ user }} password={{ password }}
-           name={{ node_name }} operation=delete
-"""
-
-HAS_JENKINS_API = True
-try:
-    import jenkins
-except ImportError:
-    HAS_JENKINS_API = False
-
-
-def _jenkins(uri, username, password):
-    return jenkins.Jenkins(uri, username, password)
-
-
-def translate_params(params):
-    sanitized = {}
-    mapping = {
-        'executors': 'numExecutors',
-        'description': 'nodeDescription',
-    }
-    for k, v in params.items():
-        key = mapping.get(k, k)
-        sanitized[key] = v
-    return sanitized
-
-
-def create(uri, user, password, name, **kw):
-    launcher_params = {}
-    launcher_params['credentialsId'] = kw.pop('credentialsId', None)
-    launcher_params['host'] = kw.pop('host', None)
-    if all(launcher_params.values()) is False:
-        launcher_params = {}
-    params = translate_params(kw)
-    j = _jenkins(uri, user, password)
-    if j.node_exists(name):
-        return False, "Failed to create node '%s' - already exists." % name
-    j.create_node(name, launcher_params=launcher_params, **params)
-    if not j.node_exists(name):
-        return False, "Failed to create node '%s'." % name
-    return True, None
-
-
-def delete(uri, user, password, name, **kw):
-    j = _jenkins(uri, user, password)
-    if not j.node_exists(name):
-        return False, "Could not delete '%s' - unknown node." % name
-    j.delete_node(name)
-    if j.node_exists(name):
-        return False, "Failed to delete node '%s'." % name
-    return True, None
-
-
-def enable(uri, user, password, name, **kw):
-    j = _jenkins(uri, user, password)
-    if not j.node_exists(name):
-        return False, "Could not enable '%s' - unknown node." % name
-    j.enable_node(name)
-    return True, None
-
-
-def disable(uri, user, password, name, **kw):
-    j = _jenkins(uri, user, password)
-    if not j.node_exists(name):
-        return False, "Could not disable '%s' - unknown node." % name
-    j.disable_node(name)
-    return True, None
-
-
-def main():
-    module = AnsibleModule(
-        argument_spec=dict(
-            uri=dict(required=True),
-            username=dict(required=True),
-            password=dict(required=True),
-            operation=dict(default='create', choices=['create', 'delete', 'enable', 'disable']),
-            name=dict(required=True),
-            executors=dict(required=False, default=2),
-            description=dict(required=False, default=None),
-            labels=dict(required=False, default=None),
-            host=dict(required=False, default=None),
-            credentialsId=dict(required=False, default=None),
-            launcher=dict(required=False, default='hudson.plugins.sshslaves.SSHLauncher'),
-            remoteFS=dict(required=False, default=None),
-            exclusive=dict(required=False, default='no', type='bool'),
-        ),
-        supports_check_mode=False
-    )
-
-    if not HAS_JENKINS_API:
-        module.fail_json(msg="Could not import python module: jenkins. Please install the python-jenkins package.")
-
-    uri = module.params['uri']
-    username = module.params['username']
-    password = module.params['password']
-    operation = module.params.get('operation', 'create')
-    name = module.params['name']
-    executors = module.params['executors']
-    description = module.params.get('description')
-    labels = module.params.get('labels')
-    exclusive = module.params.get('exclusive', False)
-    host = module.params.get('host')
-    remoteFS = module.params.get('remoteFS')
-    credentialsId = module.params.get('credentialsId')
-    launcher = module.params.get('launcher', 'hudson.plugins.sshslaves.SSHLauncher')
-
-    api_calls = {
-        'create': create,
-        'delete': delete,
-        'enable': enable,
-        'disable': disable
-    }
-
-    try:
-        func = api_calls[operation]
-    except KeyError:
-        return module.fail_json(
-            msg="operation: %s is not supported. Choose one of: %s'" % (
-                operation, str(api_calls.keys()))
-        )
-
-    try:
-        changed, msg = func(
-            uri,
-            username,
-            password,
-            name,
-            executors=executors,
-            description=description,
-            labels=labels,
-            exclusive=exclusive,
-            host=host,
-            credentialsId=credentialsId,
-            launcher=launcher,
-            remoteFS=remoteFS,
-        )
-    except Exception as ex:
-        # Ensure that errors going out to Jenkins, specifically the network
-        # requests, can be properly translated into meaningful errors so that
-        # Ansible can report those back.
-        if ex.__class__.__name__ == 'HTTPError':
-            msg = "HTTPError %s: %s" % (ex.code, ex.url)
-        else:
-            message = getattr(ex, 'message', None)
-            msg = getattr(ex, 'msg', message)
-            msg = "%s: %s" % (ex.__class__.__name__, msg)
-        return module.fail_json(msg=msg)
-
-    args = {'changed': changed}
-    if msg:
-        args['msg'] = msg
-    module.exit_json(**args)
-
-
-# yep, everything: https://docs.ansible.com/developing_modules.html#common-module-boilerplate
-from ansible.module_utils.basic import *
-if __name__ == '__main__':
-    main()
diff --git a/ansible/library/jenkins_node b/ansible/library/jenkins_node
new file mode 100644 (file)
index 0000000..f37846d
--- /dev/null
@@ -0,0 +1,257 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+DOCUMENTATION = """
+module: jenkins_node
+short_decription: Manage Jenkins nodes
+description:
+  - This module provides some management features to control Jenkins
+    nodes.
+
+options:
+  uri:
+    description:
+      - Base URI for the Jenkins instance
+    required: true
+
+  username:
+    description:
+      - The Jenkins username to log-in with.
+    required: true
+
+  password:
+    description:
+      - The Jenkins password (or API token) to log-in with.
+    required: true
+
+  operation:
+    description:
+      - Operation to perform
+    required: false
+    default: 'create'
+    choices: [ create, delete, enable, disable ]
+
+  name:
+    description:
+      - Node name
+    required: true
+
+  executors:
+    description:
+      - Number of executors in node
+    required: false
+    default: 2
+
+  description:
+    description:
+      - Description of the node
+    required: false
+    default: null
+
+  labels:
+    description:
+      - Labels to associate with a node, like "amd64" or "python"
+    required: false
+    default: null
+
+  exclusive:
+    description:
+      - Mark this node for tied jobs only
+    required: false
+    default: 'no'
+    choices: ['no', 'yes']
+
+  launcher:
+    description:
+      - Launcher method for a remote node (only needed for 'create' operations)
+    required: false
+    default: 'hudson.plugins.sshslaves.SSHLauncher'
+
+  remoteFS:
+    description:
+      - Path to the directory used for builds
+    required: false
+
+  credentialsId:
+    description:
+      - the ID of the user needed for authentication. Usually found in
+        credentials.xml or via the url
+       {host}/credential-store/domain/_/credential/{id}. By default this is an
+        SSH user account and key (see "launcher" above).
+
+  host:
+    description:
+      - hostname or IP for the host to connect to the slave
+
+requirements: ['python-jenkins']
+author:
+    - "Alfredo Deza"
+
+"""
+
+EXAMPLES = """
+# Create new node
+- name: Create new node
+  jenkins_node: uri={{ jenkins_uri }} username={{ user }} password={{ password }}
+           name={{ node_name }} operation=create
+
+# Delete an existing node
+- name: Delete a node
+  jenkins_node: uri={{ jenkins_uri }} username={{ user }} password={{ password }}
+           name={{ node_name }} operation=delete
+"""
+
+HAS_JENKINS_API = True
+try:
+    import jenkins
+except ImportError:
+    HAS_JENKINS_API = False
+
+
+def _jenkins(uri, username, password):
+    return jenkins.Jenkins(uri, username, password)
+
+
+def translate_params(params):
+    sanitized = {}
+    mapping = {
+        'executors': 'numExecutors',
+        'description': 'nodeDescription',
+    }
+    for k, v in params.items():
+        key = mapping.get(k, k)
+        sanitized[key] = v
+    return sanitized
+
+
+def create(uri, user, password, name, **kw):
+    launcher_params = {}
+    launcher_params['credentialsId'] = kw.pop('credentialsId', None)
+    launcher_params['host'] = kw.pop('host', None)
+    if all(launcher_params.values()) is False:
+        launcher_params = {}
+    params = translate_params(kw)
+    j = _jenkins(uri, user, password)
+    if j.node_exists(name):
+        return False, "Failed to create node '%s' - already exists." % name
+    j.create_node(name, launcher_params=launcher_params, **params)
+    if not j.node_exists(name):
+        return False, "Failed to create node '%s'." % name
+    return True, None
+
+
+def delete(uri, user, password, name, **kw):
+    j = _jenkins(uri, user, password)
+    if not j.node_exists(name):
+        return False, "Could not delete '%s' - unknown node." % name
+    j.delete_node(name)
+    if j.node_exists(name):
+        return False, "Failed to delete node '%s'." % name
+    return True, None
+
+
+def enable(uri, user, password, name, **kw):
+    j = _jenkins(uri, user, password)
+    if not j.node_exists(name):
+        return False, "Could not enable '%s' - unknown node." % name
+    j.enable_node(name)
+    return True, None
+
+
+def disable(uri, user, password, name, **kw):
+    j = _jenkins(uri, user, password)
+    if not j.node_exists(name):
+        return False, "Could not disable '%s' - unknown node." % name
+    j.disable_node(name)
+    return True, None
+
+
+def main():
+    module = AnsibleModule(
+        argument_spec=dict(
+            uri=dict(required=True),
+            username=dict(required=True),
+            password=dict(required=True),
+            operation=dict(default='create', choices=['create', 'delete', 'enable', 'disable']),
+            name=dict(required=True),
+            executors=dict(required=False, default=2),
+            description=dict(required=False, default=None),
+            labels=dict(required=False, default=None),
+            host=dict(required=False, default=None),
+            credentialsId=dict(required=False, default=None),
+            launcher=dict(required=False, default='hudson.plugins.sshslaves.SSHLauncher'),
+            remoteFS=dict(required=False, default=None),
+            exclusive=dict(required=False, default='no', type='bool'),
+        ),
+        supports_check_mode=False
+    )
+
+    if not HAS_JENKINS_API:
+        module.fail_json(msg="Could not import python module: jenkins. Please install the python-jenkins package.")
+
+    uri = module.params['uri']
+    username = module.params['username']
+    password = module.params['password']
+    operation = module.params.get('operation', 'create')
+    name = module.params['name']
+    executors = module.params['executors']
+    description = module.params.get('description')
+    labels = module.params.get('labels')
+    exclusive = module.params.get('exclusive', False)
+    host = module.params.get('host')
+    remoteFS = module.params.get('remoteFS')
+    credentialsId = module.params.get('credentialsId')
+    launcher = module.params.get('launcher', 'hudson.plugins.sshslaves.SSHLauncher')
+
+    api_calls = {
+        'create': create,
+        'delete': delete,
+        'enable': enable,
+        'disable': disable
+    }
+
+    try:
+        func = api_calls[operation]
+    except KeyError:
+        return module.fail_json(
+            msg="operation: %s is not supported. Choose one of: %s'" % (
+                operation, str(api_calls.keys()))
+        )
+
+    try:
+        changed, msg = func(
+            uri,
+            username,
+            password,
+            name,
+            executors=executors,
+            description=description,
+            labels=labels,
+            exclusive=exclusive,
+            host=host,
+            credentialsId=credentialsId,
+            launcher=launcher,
+            remoteFS=remoteFS,
+        )
+    except Exception as ex:
+        # Ensure that errors going out to Jenkins, specifically the network
+        # requests, can be properly translated into meaningful errors so that
+        # Ansible can report those back.
+        if ex.__class__.__name__ == 'HTTPError':
+            msg = "HTTPError %s: %s" % (ex.code, ex.url)
+        else:
+            message = getattr(ex, 'message', None)
+            msg = getattr(ex, 'msg', message)
+            msg = "%s: %s" % (ex.__class__.__name__, msg)
+        return module.fail_json(msg=msg)
+
+    args = {'changed': changed}
+    if msg:
+        args['msg'] = msg
+    module.exit_json(**args)
+
+
+# yep, everything: https://docs.ansible.com/developing_modules.html#common-module-boilerplate
+from ansible.module_utils.basic import *
+if __name__ == '__main__':
+    main()