diff --git a/roles/container/defaults/main.yaml b/roles/container/defaults/main.yaml index 348da04..eb333ff 100644 --- a/roles/container/defaults/main.yaml +++ b/roles/container/defaults/main.yaml @@ -3,6 +3,7 @@ container_command: [] container_entrypoint: "" container_user: "" container_mounts: [] +container_devices: [] container_publish_ports: [] container_networks: [] container_ip: "" diff --git a/roles/container/meta/argument_specs.yaml b/roles/container/meta/argument_specs.yaml index 768cfe7..c322cc4 100644 --- a/roles/container/meta/argument_specs.yaml +++ b/roles/container/meta/argument_specs.yaml @@ -92,6 +92,21 @@ argument_specs: required: false default: [] + container_devices: + description: List of devices to be added inside the container. + type: list + required: false + default: [] + elements: dict + options: + source: + description: Device path on host + type: str + required: true + destination: + description: Device path inside the container. Defaults to same as host. + type: str + required: false container_publish_ports: description: "A list of published ports in docker format (::)" type: list diff --git a/roles/container/tasks/main.yaml b/roles/container/tasks/main.yaml index c4a02ce..d882308 100644 --- a/roles/container/tasks/main.yaml +++ b/roles/container/tasks/main.yaml @@ -48,6 +48,7 @@ entrypoint: "{{ container_entrypoint or omit }}" user: "{{ container_user or omit }}" mount: "{{ _container_mounts | map('items') | map('map', 'join', '=') | map('join', ',') }}" + device: "{{ _container_devices }}" network: "{{ _container_networks_with_ip }}" publish: "{{ container_publish_ports }}" secrets: "{{ _container_secrets }}" diff --git a/roles/container/vars/main.yaml b/roles/container/vars/main.yaml index f6e496a..28fc896 100644 --- a/roles/container/vars/main.yaml +++ b/roles/container/vars/main.yaml @@ -49,6 +49,25 @@ _container_mounts: >- | zip(_container_volume_mount_sources) | map('combine') }} +_container_devices_withdefaults: >- + {{ + container_devices + | map(attribute='source') + | map('community.general.dict_kv', 'destination') + | zip(container_devices) + | map('combine') + }} +_container_devices: >- + {{ + _container_devices_withdefaults + | map(attribute='source') + | zip( + _container_devices_withdefaults + | map(attribute='destination') + ) + | map('join', ':') + }} + _container_secrets: >- {{ container_secrets diff --git a/roles/service/defaults/main.yaml b/roles/service/defaults/main.yaml index c361fb7..99c18fc 100644 --- a/roles/service/defaults/main.yaml +++ b/roles/service/defaults/main.yaml @@ -13,6 +13,7 @@ service_container_additional_networks: [] service_container_user: "" service_container_publish_ports: [] service_container_mounts: [] +service_container_devices: [] service_container_secrets: [] service_container_env: {} diff --git a/roles/service/meta/argument_specs.yaml b/roles/service/meta/argument_specs.yaml index da2f16f..74fbe56 100644 --- a/roles/service/meta/argument_specs.yaml +++ b/roles/service/meta/argument_specs.yaml @@ -169,6 +169,21 @@ argument_specs: elements: str required: false default: [] + service_container_devices: + description: List of devices to be added inside the service main container. + type: list + required: false + default: [] + elements: dict + options: + source: + description: Device path on host + type: str + required: true + destination: + description: Device path inside the container. Defaults to same as host. + type: str + required: false service_container_secrets: description: - > diff --git a/roles/service/tasks/main.yaml b/roles/service/tasks/main.yaml index 77b1b38..3556bd1 100644 --- a/roles/service/tasks/main.yaml +++ b/roles/service/tasks/main.yaml @@ -32,6 +32,7 @@ container_entrypoint: "{{ service_container_entrypoint }}" container_user: "{{ service_container_user }}" container_mounts: "{{ _service_container_mounts }}" + container_devices: "{{ service_container_devices }}" container_publish_ports: "{{ service_container_publish_ports }}" container_networks: "{{ _service_container_networks }}" container_ip: "{{ service_container_ip }}"