Переменная Rundeck от шагов сценария до Inline Ansible Playbook - PullRequest
1 голос
/ 15 января 2020

Мне нужно скачать файл с веб-URL и накачать его на удаленный сервер, который не имеет доступа inte rnet.

  1. Rundeck загружает файл в локальный путь wget, затем pu sh файл на целевой сервер, используя S SH
  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/*.* yurtdxx67a@11.28.293.88:/xmodules/fixes/migreq/

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

Сейчас Шаг второй

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

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

Any Идея будет большой помощью для меня.

Редактировать: 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 имя_пакета = $ {data.packageName} --limit $ {data.nodeIP}

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

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

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

Спасибо. Dwija

1 Ответ

0 голосов
/ 15 января 2020

Вы можете "извлечь" значения из выходных данных скрипта, используя функцию передачи данных , вы сохраните их в переменных данных и затем отправите их в ansible в формате ${data.MYDATA}.

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

<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>
...