| def __virtual__(): |
| ''' |
| Only load if jenkins_common module exist. |
| ''' |
| if 'jenkins_common.call_groovy_script' not in __salt__: |
| return ( |
| False, |
| 'The jenkins_node state module cannot be loaded: ' |
| 'jenkins_common not found') |
| return True |
| |
| |
| def label(name, lbl_text, append=False): |
| """ |
| Jenkins node label state method |
| |
| :param name: node name |
| :param lbl_text: label text |
| :returns: salt-specified state dict |
| """ |
| template = __salt__['jenkins_common.load_template']( |
| 'salt://jenkins/files/groovy/node_label.template', |
| __env__) |
| return __salt__['jenkins_common.api_call'](name, template, |
| ["CREATED", lbl_text], |
| { |
| 'name': name, |
| 'lbl_text': lbl_text, |
| 'append': "true" if append else "false" |
| }, |
| 'Node Label') |
| |
| |
| def present(name, remote_home, launcher, num_executors="1", |
| node_mode="Normal", desc="", labels=[], ret_strategy="Always"): |
| """ |
| Jenkins node state method |
| |
| :param name: node name |
| :param remote_home: node remote home path |
| :param launcher: launcher dict with type, name, port, username, password |
| :param num_executors: number of node executurs (optional, default 1) |
| :param node_mode: node mode (optional, default Normal) |
| :param desc: node description (optional) |
| :param labels: node labels list (optional) |
| :param ret_strategy: node retention strategy from RetentionStrategy class |
| :returns: salt-specified state dict |
| """ |
| template = __salt__['jenkins_common.load_template']( |
| 'salt://jenkins/files/groovy/node.template', |
| __env__) |
| |
| label_string = " ".join(labels) |
| launcher_string = "new hudson.slaves.JNLPLauncher()" |
| tunnel_string = "" |
| jvmopts_string = "" |
| if launcher: |
| if "jvmopts" in launcher: |
| jvmopts_string = launcher["jvmopts"] |
| if launcher["type"] == "ssh": |
| if "credentials" in launcher: |
| # Constructor based on ssh-slaves plugin of 1.29+ versions |
| launcher_string = 'new hudson.plugins.sshslaves.SSHLauncher("{}",{},"{}","{}","","","",null,null,null,null)'.format( |
| launcher["host"], launcher["port"], launcher["credentials"], jvmopts_string) |
| else: |
| # Deprecated: Constructor based on old ssh-slaves plugin versions (~1.17) |
| launcher_string = 'new hudson.plugins.sshslaves.SSHLauncher("{}",{},"{}","{}","","{}","","","")'.format( |
| launcher["host"], launcher["port"], launcher["username"], |
| launcher["password"], jvmopts_string) |
| elif launcher["type"] == "jnlp": |
| if "tunnel" in launcher: |
| tunnel_string = launcher["tunnel"] |
| launcher_string = 'new hudson.slaves.JNLPLauncher("{}","{}")'.format( |
| tunnel_string, jvmopts_string) |
| |
| return __salt__['jenkins_common.api_call'](name, template, |
| ["CREATED", "EXISTS"], |
| { |
| "name": name, |
| "desc": desc if desc else "", |
| "label": label_string if label_string else "", |
| "remote_home": remote_home if remote_home else "", |
| "num_executors": num_executors if num_executors else "1", |
| "launcher": launcher_string, |
| "tunnel": tunnel_string, |
| "jvmopts": jvmopts_string, |
| "node_mode": node_mode.upper(), |
| "ret_strategy": ret_strategy if ret_strategy else "Always" |
| }, |
| 'Node') |
| |
| def setup_master(name, num_executors="1", node_mode="Normal", labels=[]): |
| """ |
| Jenkins setup master state method |
| |
| :param name: node name (master) |
| :param num_executors: number of executors (optional, default 1) |
| :param node_mode: Node mode (Normal or Exclusive) |
| :param labels: array of labels |
| :returns: salt-specified state dict |
| """ |
| template = __salt__['jenkins_common.load_template']( |
| 'salt://jenkins/files/groovy/master_node.template', |
| __env__) |
| return __salt__['jenkins_common.api_call'](name, template, |
| ["CREATED", "EXISTS"], |
| { |
| 'num_executors': num_executors, |
| 'labels': " ".join(labels), |
| 'node_mode': node_mode.upper() |
| }, |
| 'Master node configuration') |
| |