如何使用 Ansible Expect 模块对同一提示提供多个响应

问题描述 投票:0回答:1

我正在使用 Delinea adedit 命令 (https://docs.delinea.com/online-help/server-suite/dev/adedit/commands.htm)。 在 Linux CLI 中发出 adedit 命令后,会看到 > 提示符,我连续输入以下命令:

>bind acme.com administrator password123
>package require ade_lib
>add_user_to_group ...
>quit

仅供参考,password123 是一个假密码。

我正在尝试使用 Expect 命令在 Ansible 中进行编码,如下所示:

- name: Delinea adedit generic prompt with multiple different responses
  ansible.builtin.expect:
    command: adedit
    responses:
      ">":
        - bind "{{domain_name}} {{ lookup('aws_ssm', '/ansible/windows/username', region='us-east-1') }} {{ lookup('aws_ssm', '/ansible/windows/password', region='us-east-1') }}"
        - package require ade_lib
        - add_user_to_group "{{instance_name}}$@{{domain_name}} \"CN=SG-CFY-Delinea MFA Servers,OU=Computer Roles,OU=Centrify,DC=acme,DC=local\""
        - quit

我在 Ansible 中得到了这样的回复:

changed: [SERVER01] => {"changed": true, "cmd": "adedit", "delta": "0:00:00.193347", "end": "2024-09-11 14:49:15.510734", "rc": 0, "start": "2024-09-11 14:49:15.317387", "stdout": "No entry for terminal type \"unknown\";\r\nusing dumb terminal settings.\r\n>bind \"acme.local administrator password123\"", "stdout_lines": ["No entry for terminal type \"unknown\";", "using dumb terminal settings.", ">bind \"acme.local administrator password123\""]}

看起来这四个命令并不是连续发出的。 我的 Ansible 代码中有什么不正确的地方?

ansible centrify
1个回答
0
投票

看起来你可以做这样的事情,而不是使用类似

expect
的解决方案:

  - name: Delinea adedit generic prompt with multiple different responses
  ansible.builtin.command:
    cmd: adedit
    stdin: |
      bind "{{domain_name}} {{ lookup('aws_ssm', '/ansible/windows/username', region='us-east-1') }} {{ lookup('aws_ssm', '/ansible/windows/password', region='us-east-1') }}"
      package require ade_lib
      add_user_to_group "{{instance_name}}$@{{domain_name}} \"CN=SG-CFY-Delinea MFA Servers,OU=Computer Roles,OU=Centrify,DC=acme,DC=local\""
      quit

我没有任何方法来测试这一点,但通读文档,这看起来是有可能的。

© www.soinside.com 2019 - 2024. All rights reserved.