Skip to content

Commit 75b3a2f

Browse files
committed
Revert use of podman.podman_login for registry login
1 parent b48ead5 commit 75b3a2f

File tree

1 file changed

+69
-59
lines changed

1 file changed

+69
-59
lines changed

src/molecule_plugins/podman/playbooks/create.yml

Lines changed: 69 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,25 @@
88
vars:
99
podman_exec: "{{ lookup('env','MOLECULE_PODMAN_EXECUTABLE')|default('podman',true) }}"
1010
tasks:
11+
- name: Get podman executable path # noqa: command-instead-of-shell
12+
ansible.builtin.shell: "command -v {{ podman_exec }}"
13+
register: _podman_path
14+
changed_when: false
15+
16+
- name: Register podman executable path
17+
ansible.builtin.set_fact:
18+
podman_cmd: "{{ _podman_path.stdout }}"
19+
1120
- name: Log into a container registry
12-
containers.podman.podman_login:
13-
certdir: >-
14-
{% if lookup('env', 'DOCKER_CERT_PATH') %}
15-
{{ item.cert_path | default(lookup('env', 'DOCKER_CERT_PATH') + '/cert.pem') }}
16-
{% endif %}
17-
executable: "{{ podman_exec }}"
18-
username: "{{ item.registry.credentials.username }}"
19-
password: "{{ item.registry.credentials.password }}"
20-
registry: "{{ item.registry.url }}"
21-
tlsverify: "{{ item.registry.tls_verify | default(lookup('env', 'DOCKER_TLS_VERIFY')) or false }}"
22-
loop: "{{ molecule_yml.platforms }}"
21+
ansible.builtin.command: >
22+
{{ podman_cmd }} login
23+
--username {{ item.registry.credentials.username }}
24+
--password {{ item.registry.credentials.password }}
25+
--tls-verify={{ item.tls_verify | default(lookup('env', 'DOCKER_TLS_VERIFY')) or false }}
26+
{% if lookup('env', 'DOCKER_CERT_PATH') %}
27+
--cert-dir {{ item.cert_path | default(lookup('env', 'DOCKER_CERT_PATH') + '/cert.pem') }}{% endif %}
28+
{{ item.registry.url }}
29+
with_items: "{{ molecule_yml.platforms }}"
2330
loop_control:
2431
label: >-
2532
"{{ item.name }} registry username:
@@ -70,16 +77,14 @@
7077
register: podman_images
7178

7279
- name: Build an Ansible compatible image # noqa: no-handler
73-
containers.podman.podman_image:
74-
build:
75-
extra_args: >-
76-
{% if item.item.buildargs is defined %}{% for i, k in item.item.buildargs.items() %}--build-arg={{ i }}={{ k }}{% endfor %}{% endif %}
77-
{% if item.item.pull is defined %}--pull={{ item.item.pull }}{% endif %}
78-
file: "{{ item.dest }}"
79-
name: "molecule_local/{{ item.item.image }}"
80-
path: "{{ molecule_scenario_directory }}"
81-
pull: "{{ item.item.pull | default(omit) }}"
82-
loop: "{{ platforms.results }}"
80+
ansible.builtin.command: >
81+
{{ podman_cmd }} build
82+
-f {{ item.dest }}
83+
-t molecule_local/{{ item.item.image }}
84+
{% if item.item.buildargs is defined %}{% for i, k in item.item.buildargs.items() %}--build-arg={{ i }}={{ k }}{% endfor %}{% endif %}
85+
{% if item.item.pull is defined %}--pull={{ item.item.pull }}{% endif %}
86+
{{ molecule_scenario_directory + '/' + (item.item.dockerfile | default('Dockerfile.j2')) | dirname }}
87+
with_items: "{{ platforms.results }}"
8388
loop_control:
8489
label: "{{ item.item.image | default('None specified') }}"
8590
when:
@@ -96,7 +101,7 @@
96101
ansible.builtin.set_fact:
97102
command_directives_dict: >-
98103
{{ command_directives_dict | default({}) |
99-
combine({item.name: item.command | default(["bash", "-c", "while true; do sleep 10000; done"])})
104+
combine({ item.name: item.command | default('bash -c "while true; do sleep 10000; done"') })
100105
}}
101106
with_items: "{{ molecule_yml.platforms }}"
102107
loop_control:
@@ -105,6 +110,14 @@
105110
{{ item.command | default('None specified') }}"
106111
when: item.override_command | default(true)
107112

113+
# https://github.com/ansible-community/molecule-podman/issues/22
114+
- name: Remove possible pre-existing containers
115+
ansible.builtin.command: >
116+
{{ podman_cmd }} rm -f -i -v {% for key in molecule_yml.platforms %}{{ key.name }} {% endfor %}
117+
register: result
118+
changed_when: true
119+
failed_when: false
120+
108121
- name: Discover local podman networks
109122
containers.podman.podman_network_info:
110123
name: "{{ item.network }}"
@@ -132,49 +145,46 @@
132145
- "podman_network.results[0].ansible_loop.allitems[0].network not in ['bridge', 'none', 'host', 'ns', 'private', 'slirp4netns']"
133146

134147
- name: Create molecule instance(s)
135-
containers.podman.podman_container:
136-
name: "{{ item.name }}"
137-
cap_add: "{{ item.capabilities | default(omit) }}"
138-
# it's necessary to exclude empty args as ansible modules run_command method doesn't handle this well
139-
cmd_args: "{{ molecule_podman_args | reject('equalto', '') | list + item.extra_opts | default([]) }}"
140-
command: "{{ (command_directives_dict | default({}))[item.name] | default('') }}"
141-
detach: "{{ item.detach | default(omit) }}"
142-
device: "{{ item.devices | default(omit) }}"
143-
dns: "{{ item.dns_servers | default(omit) }}"
144-
env: "{{ item.env | default(omit) }}"
145-
etc_hosts: "{{ item.etc_hosts | default(omit) }}"
146-
executable: "{{ podman_exec }}"
147-
expose: "{{ item.exposed_ports | default(omit) }}"
148-
hostname: "{{ item.hostname | default(omit) }}"
149-
image: "{{ item.pre_build_image | default(false) | ternary('', 'molecule_local/') }}{{ item.image }}"
150-
ip: "{{ item.ip | default(omit) }}"
151-
network: "{{ item.network | default(omit) }}"
152-
pid: "{{ item.pid_mode | default(omit) }}"
153-
privileged: "{{ item.privileged | default(omit) }}"
154-
publish: "{{ item.published_ports | default(omit) }}"
155-
security_opt: "{{ item.security_opts | default(omit) }}"
156-
systemd: "{{ item.systemd | default(omit) }}"
157-
tmpfs: "{{ item.tmpfs | default(omit) }}"
158-
tty: "{{ item.tty | default(omit) }}"
159-
ulimits: "{{ item.ulimits | default(omit) }}"
160-
volume: "{{ item.volumes | default(omit) }}"
161-
state: started
148+
ansible.builtin.command: >
149+
{{ podman_cmd }}
150+
{% if item.cgroup_manager is defined %}--cgroup-manager={{ item.cgroup_manager }}{% endif %}
151+
{% if item.storage_opt is defined %}--storage-opt={{ item.storage_opt }}{% endif %}
152+
{% if item.storage_driver is defined %}--storage-driver={{ item.storage_driver }}{% endif %}
153+
run
154+
-d
155+
--name "{{ item.name }}"
156+
{% if item.pid_mode is defined %}--pid={{ item.pid_mode }}{% endif %}
157+
{% if item.privileged is defined %}--privileged={{ item.privileged }}{% endif %}
158+
{% if item.detach is defined %}--detach{% endif %}
159+
{% if item.security_opts is defined %}{% for i in item.security_opts %}--security-opt {{ i }} {% endfor %}{% endif %}
160+
{% if item.devices is defined %}{% for i in item.devices %}--device {{ i }} {% endfor %}{% endif %}
161+
{% if item.volumes is defined %}{% for i in item.volumes %}--volume {{ i }} {% endfor %}{% endif %}
162+
{% if item.tmpfs is defined %}{% for i in item.tmpfs %}--tmpfs={{ i }} {% endfor %}{% endif %}
163+
{% if item.capabilities is defined %}{% for i in item.capabilities %}--cap-add={{ i }} {% endfor %}{% endif %}
164+
{% if item.exposed_ports is defined %}--expose="{{ item.exposed_ports | join(',') }}"{% endif %}
165+
{% if item.published_ports is defined %}{% for i in item.published_ports %}--publish={{ i }} {% endfor %}{% endif %}
166+
{% if item.ulimits is defined %}{% for i in item.ulimits %}--ulimit={{ i }} {% endfor %}{% endif %}
167+
{% if item.dns_servers is defined %}--dns="{{ item.dns_servers | join(',') }}"{% endif %}
168+
{% if item.env is defined %}{% for i, k in item.env.items() %}--env={{ i }}={{ k }} {% endfor %}{% endif %}
169+
{% if item.restart_policy is defined %}
170+
--restart={{ item.restart_policy }}{% if item.restart_retries is defined %}:{{ item.restart_retries }}{% endif %}{% endif %}
171+
{% if item.tty is defined %}--tty={{ item.tty }}{% endif %}
172+
{% if item.network is defined %}--network={{ item.network }}{% endif %}
173+
{% if item.ip is defined %}--ip={{ item.ip }}{% endif %}
174+
{% if item.etc_hosts is defined %}
175+
{% for i, k in item.etc_hosts.items() %}{% if i != item.name %}--add-host {{ i }}:{{ k }} {% endif %}{% endfor %}{% endif %}
176+
{% if item.hostname is defined %}--hostname={{ item.hostname }}{% elif item.name is defined %}--hostname={{ item.name }}{% endif %}
177+
{% if item.systemd is defined %}--systemd={{ item.systemd | string | lower }}{% endif %}
178+
{{ item.extra_opts | default([]) | join(' ') }}
179+
{{ item.pre_build_image | default(false) | ternary('', 'molecule_local/') }}{{ item.image }}
180+
{{ (command_directives_dict | default({}))[item.name] | default('') }}
162181
register: server
163-
changed_when: false
164182
with_items: "{{ molecule_yml.platforms }}"
165183
loop_control:
166184
label: "{{ item.name }}"
167185
async: 7200
168186
poll: 0
169-
vars:
170-
molecule_podman_args:
171-
- "{% if item.cgroup_manager is defined %}--cgroup-manager={{ item.cgroup_manager }}{% endif %}"
172-
- >-
173-
{% if item.restart_policy is defined %}
174-
--restart={{ item.restart_policy }}{% if item.restart_retries is defined %}:{{ item.restart_retries }}{% endif %}
175-
{% endif %}
176-
- "{% if item.storage_opt is defined %}--storage-opt={{ item.storage_opt }}{% endif %}"
177-
- "{% if item.storage_driver is defined %}--storage-driver={{ item.storage_driver }}{% endif %}"
187+
changed_when: true
178188

179189
- name: Wait for instance(s) creation to complete
180190
become: "{{ not item.item.rootless | default(omit) }}"

0 commit comments

Comments
 (0)