0

当我|在远程节点上执行带有一些特殊字符的命令时遇到问题。例如,如果我在ls /var/log/ | grep rundeck本地运行,结果是正确的,如command_locally所示,而在节点中出现command_remotely中的错误(该节点还安装了 Rundeck 并且存在文件夹“rundeck”,因此该命令应该可以工作)。

当我创建全局日志过滤器(例如Key Value Data )时,我遇到了同样的问题。我想获取正在使用的 shell,所以我创建了一个带有Key Value Data的作业,然后我添加了包含运行命令的第一步env,以及第二个步骤echo 'SHELL is "${data.SHELL}"',以显示我从日志(从此处提取的示例)。它在 localhost 中完美运行,但在选择远程节点时不会捕获任何数据。这可以分别在Key_Value_Data_locallyKey_Value_Data_remotely中看到。

我想知道这是一个错误还是我在远程执行某些事情时做错了什么。我使用 Rundeck 的 Ansible 插件,可能与此有关吗?

编辑 1 与工作定义:

有命令的工作。本地工作,远程失败。

- defaultTab: output
  description: ''
  executionEnabled: true
  id: 4e10310c-b5e2-419e-a828-1ed7df4840e9
  loglevel: INFO
  name: Command_problem
  nodeFilterEditable: false
  scheduleEnabled: true
  sequence:
    commands:
    - exec: ls /etc | grep yum
    keepgoing: false
    strategy: node-first
  uuid: 4e10310c-b5e2-419e-a828-1ed7df4840e9

具有键值数据的工作。本地工作,远程不捕获任何数据。

- defaultTab: output
  description: ''
  executionEnabled: true
  id: 1da43d9b-691d-437b-882e-8fbee2790c73
  loglevel: INFO
  name: Key_Value_Data_problem
  nodeFilterEditable: false
  scheduleEnabled: true
  sequence:
    commands:
    - exec: env
    - exec: ' echo ''SHELL is "${data.SHELL}"'''
    keepgoing: false
    pluginConfig:
      LogFilter:
      - config:
          logData: 'false'
          regex: ^(SHELL|USER|PWD)\s*=\s*(.+)$
        type: key-value-data
    strategy: node-first
  uuid: 1da43d9b-691d-437b-882e-8fbee2790c73

在调试模式下使用作业输出编辑 2:

我已分别更改了 Rundeck 机器的 ip 和“localhost”和“node ip”的节点,以及“用户名”的真实用户名。

命令问题:调试模式下的输出

键值数据问题:调试模式下的输出

编辑 3:

我已经弄清楚问题所在了。这是force_color = 1我添加到 ansible.cfg 文件中以在 Rundeck 中获得彩色输出的行。如果我删除该部分,键值数据功能也可以在远程节点上完美运行。我想这是一个错误。

4

1 回答 1

0

关于第一个问题似乎是 Ansible 插件错误,我在这里打开了一个问题进行跟进:

https://github.com/Batix/rundeck-ansible-plugin/issues/255

关于第二个问题,我做了一个有效的示例,看一下,只需将“调度到节点”更改为您的节点:

    <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>29c0cb64-681c-4888-b2a8-f9eb02322155</id>
        <loglevel>INFO</loglevel>
        <name>HelloWorld</name>
        <nodeFilterEditable>false</nodeFilterEditable>
        <nodefilters>
          <filter>name: 192.168.33.2.*</filter>
        </nodefilters>
        <nodesSelectedByDefault>true</nodesSelectedByDefault>
        <scheduleEnabled>true</scheduleEnabled>
        <sequence keepgoing='false' strategy='node-first'>
          <command>
            <description>Second Issue.</description>
            <exec>env</exec>
            <plugins>
              <LogFilter type='key-value-data'>
                <config>
                  <logData>true</logData>
                  <regex>^(SHELL)\s*=\s*(.+)$</regex>
                </config>
              </LogFilter>
            </plugins>
          </command>
          <command>
            <node-step-plugin type='com.batix.rundeck.plugins.AnsiblePlaybookInlineWorkflowNodeStep'>
              <configuration>
                <entry key='ansible-base-dir-path' value='/playbooks' />
                <entry key='ansible-become' value='false' />
                <entry key='ansible-playbook-inline' value='# This playbook prints a simple debug message&#10;- name: Echo &#10;  hosts: farm&#10;&#10;  tasks:&#10;  - name: Print debug message &#10;    debug:&#10;      msg: Hello ${data.SHELL}!&#10;' />
              </configuration>
            </node-step-plugin>
          </command>
        </sequence>
        <uuid>29c0cb64-681c-4888-b2a8-f9eb02322155</uuid>
      </job>
    </joblist>

1)它需要数据值。

2)传递给ansible。

于 2019-10-31T16:07:05.367 回答