在执行期间接受用户输入

时间:2020-08-24 17:54:34

标签: ansible

我是Ansible的新手。我搜索并阅读了Ansible的文档。但是我找不到解决问题的方法。

我的问题-

在我的Ansible剧本中,我正在运行一个命令,由于该命令,系统要求我输入密码。我不确定如何在该提示中输入密码。 我可以将密码另存为var,但不确定如何在该promt中输入密码。

任何指向文档的链接将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

您通常可以只将expect自变量用于stdincommand模块,而不用弄乱shell

- name: Do a thing
  command:
    cmd: myapp --flags --and --things
    stdin: "{{ the_password }}"

- name: Do a thing
  shell:
    cmd: myapp --flags --and --things
    stdin: "{{ the_password }}"

这对于许多应用程序都应该有效,但是有些应用程序将从控制tty读取而不是标准输入(如果它们具有tty)。对于这些,您可以在setsid下运行它们,以防止它们拥有控制tty,因此它们从stdin读取:

- name: Do a thing
  command:
    cmd: setsid myapp --flags --and --things
    stdin: "{{ the_password }}"

(这是假设您在Linux下运行,我不知道该如何在Windows / Mac上使用)

答案 1 :(得分:0)

您应该考虑使用期望模数。在这里,我有一个例子

- name: Executing RCU
  expect:
    command: >
      "{{ oracle_common }}/bin/rcu -silent -createRepository -connectString {{ connection_string }} 
       -dbUser {{ db_user  }} -dbRole {{ db_role }} -schemaPrefix {{ schema_prefix }} 
       -useSamePasswordForAllSchemaUsers {{ same_password|lower }} {{ list_components }}"
    responses:
      'Enter the database password': "{{ db_password }}"
      'Enter the schema password': "{{ schema_password }}"
    timeout: 1200 # Expect timeout by default is 30s. Here, I am using 20 minutes as RCU is slow
  no_log: yes
  register: rcu_output
  # RCU-6016 means the schemas with given prefix are in the database
  failed_when: "'ERROR - RCU' in rcu_output.stdout and 'CAUSE - RCU-6016' not in rcu_output.stdout"
  changed_when: false

在前面的示例中,执行的命令要求输入数据库密码,该密码是通过使用Expect传递的。而且,它使用no_log:是,以避免打印密码。

有关Expect模块的文档可用here

我使用的示例可用here

您应该对机器有所期待才能使用期望。