0

下面是我的 ansible 脚本 -

- name: To delete files
  hosts: current
  gather_facts: true
  tasks:
    - name: Check for the right folder
      win_shell: |
        if (Test-Path -Path 'C:\Program Files (x86)\MF\LGG\bin') {
        Write-Output "LGG"
        setx PATH "$env:path;C:\Program Files (x86)\MF\LGG\bin" -m
        }
        else {
        Write-Output "LRR"
        setx PATH "$env:path;C:\Program Files (x86)\MF\LRR\bin" -m
        }
      register: actualpath
   - name: print output
     debug:
      msg: "output is {{ actualpath.stdout_lines }} "
   - debug: var=actualpath.stdout

我的计划是捕获上面给出的输出并根据输出运行另一组命令,即LRR or LGG

但是当我尝试打印输出时,我看到它有不同的格式,如下所示 -

TASK [print output] ************************************************************
ok: [xxx] => {
    "msg": "output is [u'LGG', u'', u'SUCCESS: Specified value was saved.'] "
}

TASK [debug] *******************************************************************
ok: [xxx] => {
    "actualpath.stdout": "LGG\r\n\r\nSUCCESS: Specified value was saved.\r\n"
}

如何确保我只得到我正在打印的内容或如何修剪值并将其保存在寄存器中?

4

1 回答 1

0

我的计划是捕获上面给出的输出并根据输出运行另一组命令,即 LRR 或 LGG

你几乎就是这么做的。您确实可以尝试:

- name: do something if 'LGG' in previous output
  win_shell: dir
  when: "'LGG' in actualpath.stdout"

但当然, 的值actualpath取决于给定的输出。如果您配置,您可以在控制台上看到命令的结果:

- debug:
    msg: "{{ actualpath }}"

如何确保我只得到我正在打印的东西

请参阅我上面的示例。

如何修剪值并将其保存在寄存器中?

你不需要。这是“系统”语言,而不是“人类”语言。听起来你想让它“漂亮”。

这里有一些你绝对可以使用的例子。

如果您希望 的输出actualpath是一个目录,例如C:\somewhere\something,那么您应该编辑 win_shell 命令以确保 Ansible 的输出实际输出该值。现在它只是一个长字符串。

于 2021-12-27T14:45:18.980 回答