我尝试过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中工作吗?如果是这样,我应该如何使用它?
答案 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
作为任务级别的参数(例如when
或ignore_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。
希望这会有所帮助。