--- - name: Create hosts: localhost connection: local gather_facts: false no_log: "{{ not (lookup('env', 'MOLECULE_DEBUG') | bool or molecule_yml.provisioner.log|default(false) | bool) }}" tasks: - name: Log into a Docker registry docker_login: username: "{{ item.registry.credentials.username }}" password: "{{ item.registry.credentials.password }}" email: "{{ item.registry.credentials.email | default(omit) }}" registry: "{{ item.registry.url }}" docker_host: "{{ item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}" with_items: "{{ molecule_yml.platforms }}" when: - item.registry is defined - item.registry.credentials is defined - item.registry.credentials.username is defined - name: Create Dockerfiles from image names template: src: "{{ molecule_scenario_directory }}/Dockerfile.j2" dest: "{{ molecule_ephemeral_directory }}/Dockerfile_{{ item.image | regex_replace('[^a-zA-Z0-9_]', '_') }}" with_items: "{{ molecule_yml.platforms }}" when: not item.pre_build_image | default(false) register: platforms - name: Discover local Docker images docker_image_facts: name: "molecule_local/{{ item.item.name }}" docker_host: "{{ item.item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}" with_items: "{{ platforms.results }}" when: not item.pre_build_image | default(false) register: docker_images - name: Build an Ansible compatible image docker_image: path: "{{ molecule_ephemeral_directory }}" name: "molecule_local/{{ item.item.image }}" docker_host: "{{ item.item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}" dockerfile: "{{ item.item.dockerfile | default(item.invocation.module_args.dest) }}" force: "{{ item.item.force | default(true) }}" pull: "{{ item.item.pull | default(omit) }}" with_items: "{{ platforms.results }}" when: - platforms.changed or docker_images.results | map(attribute='images') | select('equalto', []) | list | count >= 0 - not item.item.pre_build_image | default(false) - name: Create docker network(s) docker_network: name: "{{ item }}" docker_host: "{{ item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}" state: present driver: l2bridge driver_options: com.docker.network.windowsshim.interface: Ethernet0 with_items: "{{ molecule_yml.platforms | molecule_get_docker_networks }}" - name: Create molecule instance(s) docker_container: name: "{{ item.name }}" docker_host: "{{ item.docker_host | default(lookup('env', 'DOCKER_HOST') or 'unix://var/run/docker.sock') }}" hostname: "{{ item.hostname | default(item.name) }}" image: "{{ item.pre_build_image | default(false) | ternary('', 'molecule_local/') }}{{ item.image }}" state: started recreate: false log_driver: json-file command: "{{ item.command | default('bash -c \"while true; do sleep 10000; done\"') }}" privileged: "{{ item.privileged | default(omit) }}" security_opts: "{{ item.security_opts | default(omit) }}" volumes: "{{ item.volumes | default(omit) }}" tmpfs: "{{ item.tmpfs | default(omit) }}" capabilities: "{{ item.capabilities | default(omit) }}" exposed_ports: "{{ item.exposed_ports | default(omit) }}" published_ports: "{{ item.published_ports | default(omit) }}" ulimits: "{{ item.ulimits | default(omit) }}" networks: "{{ item.networks | default(omit) }}" network_mode: "{{ item.network_mode | default(omit) }}" dns_servers: "{{ item.dns_servers | default(omit) }}" env: "{{ item.env | default(omit) }}" restart_policy: "{{ item.restart_policy | default(omit) }}" restart_retries: "{{ item.restart_retries | default(omit) }}" register: server with_items: "{{ molecule_yml.platforms }}" async: 7200 poll: 0 - name: Wait for instance(s) creation to complete async_status: jid: "{{ item.ansible_job_id }}" register: docker_jobs until: docker_jobs.finished retries: 300 with_items: "{{ server.results }}"