Reputation: 58908
I've tried this:
- name: Log into Docker registry
command: docker login --username "{{ docker_registry_username }}" --password-stdin
stdin: "{{ docker_registry_password }}"
This results in a warning and a failing command:
[WARNING]: Ignoring invalid attribute: stdin
…
Cannot perform an interactive login from a non TTY device
I've also tried this:
- name: Log into Docker registry
command: docker login --username "{{ docker_registry_username }}" --password-stdin
stdin: "{{ docker_registry_password }}"
This results in a syntax error:
ERROR! Syntax Error while loading YAML.
Does command
stdin
actually work in Ansible 2.7? If so, how am I supposed to use it?
Upvotes: 12
Views: 20295
Reputation: 1
Why do you use command/shell to log into Docker registry? Ansible has docker_login module for that: https://docs.ansible.com/ansible/latest/modules/docker_login_module.html it's in preview, from community, but it works.
You can create vault file with sensitive data.
Upvotes: -2
Reputation: 312058
If you want to use the stdin
argument to the command
module, take a look at the docs, which show examples using other options such as creates
, which looks like this:
# 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
For your use case, you would want:
- name: Log into Docker registry
command: docker login --username "{{ docker_registry_username }}" --password-stdin
args:
stdin: "{{ docker_registry_password }}"
Your first attempt failed because you were setting stdin
as a key at the task level (like when
or ignore_errors
, etc), when you actually want it to be an argument to the command
module.
Your second attempt failed because it wasn't valid YAML.
Upvotes: 25
Reputation: 548
Sounds like you want to use the Ansible expect module. See https://docs.ansible.com/ansible/latest/modules/expect_module.html.
Hope this helps.
Upvotes: -6