【问题标题】:Rundeck variable from script steps to Inline Ansible Playbook从脚本步骤到内联 Ansible Playbook 的 Rundeck 变量
【发布时间】:2020-05-02 03:49:36
【问题描述】:

我需要从 Web URL 下载一个文件并膨胀到无法访问 Internet 的远程服务器。

  1. Rundeck 将文件下载到本地路径 wget,然后推送文件 使用 SSH 到目标服务器
  2. Rundeck 在远程节点上执行脚本以膨胀使用上述步骤复制的文件,并 执行其他家务活动,(它是一个 bash shell 脚本)

我对使用 Rundeck 知之甚少。

第一步,我搞定了。文件从 URL 下载到 rundeck 并推送到目标服务器。

    [ -d "/apps/support/dump/CNRLS2" ]  && rm -r "/apps/support/dump/CNRLS2"
    echo "Creating workspace folder"
    mkdir -p /apps/support/dump/CNRLS2
    cd /apps/support/dump/CNRLS2

   export ArtifactURL="https://artifact.dummy.dummyurl.com/artifactory/generic-release/XRSL/CNRLS/develop/113/RLAWESOME-1379.tar.gz"
    echo "Downloading Artifact at $ArtifactURL from Artifactory"
    wget -q $ArtifactURL --no-check-certificate 
    export packageName=$(echo "${ArtifactURL##*/}")
    echo $packageName
    scp -r /apps/support/dump/CNRLS2/*.* yurtdxx67a@11.28.293.88:/xmodules/fixes/migreq/

这将我的包推送到远程服务器路径/xmodules/fixes/migreq/

现在第二步

我正在运行一个内联 ansible 作为在目标节点上执行解包的下一步。 ansible 转到目标节点并调用 unpack.sh ,我无法将上一步中的 packageName 值传递给内联 ansible。

---
  - hosts: "{{host_name}}"
    remote_user: "{{run_user}}"
    tasks:
      - name: Unpack the package
        shell: sh /home/yurtdxx67a/mig/unpack.sh "{{$packageName}}"  

任何想法都会对我有很大帮助。

编辑:2020 年 2 月 12 日

在我的情况下,要替换的变量在“ansible-extra-param”内

  <command>
    <step-plugin type='com.batix.rundeck.plugins.AnsiblePlaybookInlineWorkflowStep'>
      <configuration>
        <entry key='ansible-become' value='false' />
        <entry key='ansible-disable-limit' value='false' />
        <entry key='ansible-extra-param' value='-i /tmp/workspace/CNRLS/hosts -e host_name=myhost -e run_user=${data.runUser} -e package_name=${data.packageName} --limit ${data.nodeIP} --ssh-extra-args=&apos;-o StrictHostKeyChecking=no&apos; ' />
        <entry key='ansible-playbook-inline' value='---&#10;  - hosts: "{{host_name}}"&#10;    remote_user: "{{run_user}}"&#10;    tasks:&#10;      - name: Check for connectivity&#10;        shell: sh /home/yurtdxx67a/mig/unpack.sh "{{package_name}}"  ' />
      </configuration>
    </step-plugin>
  </command>

我想使用这些变量。

run_user=${data.runUser} -e package_name=${data.packageName} --limit ${data.nodeIP}

这些变量是有价值的。当我显示 回声 ${data.packageName} ;回声 ${data.runUser} ;回声 ${data.nodeIP} ;

我不确定如何将这些变量用作“ansible-extra-param”参数的一部分

再次感谢您

谢谢。 德维加

【问题讨论】:

    标签: ansible rundeck


    【解决方案1】:

    您可以使用data passing 功能从脚本输出中“提取”值,将其存储在数据变量中,然后使用${data.MYDATA} 格式将其发送到您的ansible。

    我留下一个非常基本的例子:

    <joblist>
      <job>
        <defaultTab>nodes</defaultTab>
        <description></description>
        <dispatch>
          <excludePrecedence>true</excludePrecedence>
          <keepgoing>false</keepgoing>
          <rankOrder>ascending</rankOrder>
          <successOnEmptyNodeFilter>false</successOnEmptyNodeFilter>
          <threadcount>1</threadcount>
        </dispatch>
        <executionEnabled>true</executionEnabled>
        <id>c858b2a9-8328-4bdb-8955-0394b238cfbc</id>
        <loglevel>INFO</loglevel>
        <name>ExampleAnsible</name>
        <nodeFilterEditable>false</nodeFilterEditable>
        <nodefilters>
          <filter>192.168.33.2.*</filter>
        </nodefilters>
        <nodesSelectedByDefault>true</nodesSelectedByDefault>
        <scheduleEnabled>true</scheduleEnabled>
        <sequence keepgoing='false' strategy='node-first'>
          <command>
            <plugins>
              <LogFilter type='key-value-data'>
                <config>
                  <logData>true</logData>
                  <regex>^(MYSTRING)\s*=\s*(.+)$</regex>
                </config>
              </LogFilter>
            </plugins>
            <script><![CDATA[# your script
    echo "MYSTRING=World"]]></script>
            <scriptargs />
          </command>
          <command>
            <node-step-plugin type='com.batix.rundeck.plugins.AnsiblePlaybookInlineWorkflowNodeStep'>
              <configuration>
                <entry key='ansible-become' value='false' />
                <entry key='ansible-playbook-inline' value='---&#10;- name: hello-world&#10;  hosts: all&#10;  tasks:&#10;    - name: hello-world&#10;      copy:&#10;        content: hello ${data.MYSTRING}&#10;        dest: /home/vagrant/testfile.txt' />
                <entry key='ansible-ssh-passphrase-option' value='option.password' />
                <entry key='ansible-ssh-use-agent' value='false' />
              </configuration>
            </node-step-plugin>
          </command>
        </sequence>
        <uuid>c858b2a9-8328-4bdb-8955-0394b238cfbc</uuid>
      </job>
    </joblist>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 2017-07-05
      相关资源
      最近更新 更多