create.yml 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. ---
  2. - name: Create
  3. hosts: localhost
  4. connection: local
  5. gather_facts: false
  6. no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
  7. tasks:
  8. - name: Log into a Docker registry
  9. docker_login:
  10. username: "{{ item.registry.credentials.username }}"
  11. password: "{{ item.registry.credentials.password }}"
  12. email: "{{ item.registry.credentials.email | default(omit) }}"
  13. registry: "{{ item.registry.url }}"
  14. docker_host: "{{ item.docker_host | default('unix://var/run/docker.sock') }}"
  15. loop: "{{ molecule_yml.platforms }}"
  16. when:
  17. - item.registry is defined
  18. - item.registry.credentials is defined
  19. - item.registry.credentials.username is defined
  20. - name: Create Dockerfiles from image names
  21. template:
  22. src: "{{ molecule_scenario_directory }}/Dockerfile.j2"
  23. dest: "{{ molecule_ephemeral_directory }}/Dockerfile_{{ item.image | regex_replace('[^a-zA-Z0-9_]', '_') }}"
  24. loop: "{{ molecule_yml.platforms }}"
  25. register: platforms
  26. - name: Discover local Docker images
  27. docker_image_facts:
  28. name: "molecule_local/{{ item.item.name }}"
  29. docker_host: "{{ item.item.docker_host | default('unix://var/run/docker.sock') }}"
  30. loop: "{{ platforms.results }}"
  31. register: docker_images
  32. - name: Build an Ansible compatible image
  33. docker_image:
  34. path: "{{ molecule_ephemeral_directory }}"
  35. name: "molecule_local/{{ item.item.image }}"
  36. docker_host: "{{ item.item.docker_host | default('unix://var/run/docker.sock') }}"
  37. dockerfile: "{{ item.item.dockerfile | default(item.invocation.module_args.dest) }}"
  38. force: "{{ item.item.force | default(true) }}"
  39. loop: "{{ platforms.results }}"
  40. when: platforms.changed or docker_images.results | map(attribute='images') | select('equalto', []) | list | count >= 0
  41. - name: Create docker network(s)
  42. docker_network:
  43. name: "{{ item }}"
  44. docker_host: "{{ item.docker_host | default('unix://var/run/docker.sock') }}"
  45. state: present
  46. loop: "{{ molecule_yml.platforms | molecule_get_docker_networks }}"
  47. - name: Create molecule instance(s)
  48. docker_container:
  49. name: "{{ item.name }}"
  50. docker_host: "{{ item.docker_host | default('unix://var/run/docker.sock') }}"
  51. hostname: "{{ item.name }}"
  52. image: "molecule_local/{{ item.image }}"
  53. state: started
  54. recreate: false
  55. log_driver: json-file
  56. command: "{{ item.command | default('bash -c \"while true; do sleep 10000; done\"') }}"
  57. privileged: "{{ item.privileged | default(omit) }}"
  58. volumes: "{{ item.volumes | default(omit) }}"
  59. capabilities: "{{ item.capabilities | default(omit) }}"
  60. exposed_ports: "{{ item.exposed_ports | default(omit) }}"
  61. published_ports: "{{ item.published_ports | default(omit) }}"
  62. ulimits: "{{ item.ulimits | default(omit) }}"
  63. networks: "{{ item.networks | default(omit) }}"
  64. dns_servers: "{{ item.dns_servers | default(omit) }}"
  65. register: server
  66. loop: "{{ molecule_yml.platforms }}"
  67. async: 7200
  68. poll: 0
  69. - name: Wait for instance(s) creation to complete
  70. async_status:
  71. jid: "{{ item.ansible_job_id }}"
  72. register: docker_jobs
  73. until: docker_jobs.finished
  74. retries: 300
  75. loop: "{{ server.results }}"