如何在Ansible中使用命令stdin?

时间:2018-11-01 20:32:58

标签: ansible

我尝试过this

- name: Log into Docker registry
  command: docker login --username "{{ docker_registry_username }}" --password-stdin
  stdin: "{{ docker_registry_password }}"

这将导致警告和失败的命令:

  

[警告]:忽略无效的属性:stdin

...

  

无法从非TTY设备执行交互式登录

我也尝试过this

- name: Log into Docker registry
  command: docker login --username "{{ docker_registry_username }}" --password-stdin
    stdin: "{{ docker_registry_password }}"

这会导致语法错误:

  

错误!加载YAML时语法错误。

command stdin实际上在Ansible 2.7中工作吗?如果是这样,我应该如何使用它?

3 个答案:

答案 0 :(得分:4)

如果您想对stdin模块使用command参数,请看一下the docs,它显示了使用其他选项的示例,例如creates,它看起来像像这样:

# You can also use the 'args' form to provide the options.
- name: This command will change the working directory to somedir/ and will only run when /path/to/database doesn't exist.
  command: /usr/bin/make_database.sh arg1 arg2
  args:
    chdir: somedir/
    creates: /path/to/database

对于您的用例,您需要:

- name: Log into Docker registry
  command: docker login --username "{{ docker_registry_username }}" --password-stdin
  args:
    stdin: "{{ docker_registry_password }}"

您第一次尝试失败,因为您实际上希望将stdin作为任务级别的参数(例如whenignore_errors等) command模块。

您的第二次尝试失败,因为它不是有效的YAML。

答案 1 :(得分:0)

为什么使用命令/ shell登录Docker注册表? Ansible具有docker_login模块: https://docs.ansible.com/ansible/latest/modules/docker_login_module.html 它处于预览状态,来自社区,但可以。

您可以使用敏感数据创建保管库文件。

答案 2 :(得分:-2)

您想要使用Ansible Expect模块的声音。参见https://docs.ansible.com/ansible/latest/modules/expect_module.html

希望这会有所帮助。