Переменная Rundeck от шагов скрипта до Inline Ansible Playbook

Мне нужно загрузить файл с веб-адреса и загрузить его на удаленный сервер, у которого нет доступа в Интернет.

  1. Rundeck загружает файл по локальному пути wget, а затем отправляет файл на целевой сервер с помощью SSH.
  2. Rundeck для выполнения сценария на удаленном узле, чтобы раздуть файл, скопированный с помощью вышеуказанного шага, и выполнить другие служебные действия (это сценарий оболочки bash)

У меня очень мало знаний об использовании Rundeck.

Шаг первый, я сделал это. Файл загружается в rundeck с URL-адреса и отправляется на целевой сервер.

    [ -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/*.* [email protected]:/xmodules/fixes/migreq/

Это подтолкнуло мой пакет к удаленному серверу /xmodules/fixes/migreq/

Теперь Шаг второй

Я использую встроенный доступный файл в качестве следующего шага для выполнения распаковки на целевом узле. Анзибл переходит на целевой узел и вызывает unpack.sh, Я не могу передать значение packageName с предыдущего шага встроенному анзиблю.

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

Любая идея будет для меня большим подспорьем.

Изменить: 12 февраля 2020 г.

В моем случае заменяемые переменные находятся в пределах "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}

эта переменная имеет значение. когда я показываю echo $ {data.packageName}; эхо $ {data.runUser}; эхо $ {data.nodeIP};

Я не уверен, как использовать эту переменную как часть аргумента ansible-extra-param

Еще раз спасибо

Спасибо. Двиджа


person Dwija    schedule 15.01.2020    source источник


Ответы (1)


Вы можете «извлечь» значения из вывода вашего скрипта с помощью функции передачи данных, вы сохраните их в переменных данных, а затем отправьте его в свой анзибль в формате ${data.MYDATA}.

Я оставляю очень простой пример, который работает:

<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>
person MegaDrive68k    schedule 15.01.2020