--- - name: generate config-hash when: "'config_hash_items' in kubernetes_standalone_pod" block: - name: create directory for config-hash files file: path: /etc/kubernetes/config-hashes state: directory - name: gather stats for config-hash items loop: "{{ kubernetes_standalone_pod.config_hash_items }}" loop_control: loop_var: config_hash_item label: "{{ config_hash_item.path }} ({{ config_hash_item.properties | default(kubernetes_standalone_pod_default_config_hash_item_properties) | sort | join(', ') }})" stat: path: "{{ config_hash_item.path }}" get_checksum: yes checksum_algorithm: sha256 register: config_hash_items_stat - assert: msg: "at least one config-hash item does not exist" that: false not in (config_hash_items_stat.results | map(attribute='stat.exists')) - name: generate config-hash file copy: content: | {% for result in config_hash_items_stat.results %} {{ result.config_hash_item.path }}: {% for property in (result.config_hash_item.properties | default(kubernetes_standalone_pod_default_config_hash_item_properties) | sort) %} {{ property }}: {{ result.stat[property] }} {% endfor %} {% endfor %} dest: "/etc/kubernetes/config-hashes/{{ kubernetes_standalone_pod.name }}.yml" - name: compute config-hash value from file stat: path: "/etc/kubernetes/config-hashes/{{ kubernetes_standalone_pod.name }}.yml" get_checksum: yes checksum_algorithm: sha256 register: config_hash_file_stat - name: set config-hash value set_fact: config_hash_value: "{{ config_hash_file_stat.stat.checksum }}" - name: make sure to unset config-hash value when: "'config_hash_items' not in kubernetes_standalone_pod" block: - name: remove config-hash file file: path: "/etc/kubernetes/config-hashes/{{ kubernetes_standalone_pod.name }}.yml" state: absent ## this is needed in case the role gets included multiple times within the same playbook - name: set config-hash value set_fact: config_hash_value: - name: generate pod manifest copy: content: | apiVersion: v1 kind: Pod metadata: name: "{{ kubernetes_standalone_pod.name }}" {% if 'labels' in kubernetes_standalone_pod %} labels: {{ kubernetes_standalone_pod.labels | to_nice_yaml(indent=2) | indent(4) }}{% endif %} {% if config_hash_value or 'annotations' in kubernetes_standalone_pod %} annotations: {% if config_hash_value %} config-hash: "{{ config_hash_value }}" {% endif %} {% if 'annotations' in kubernetes_standalone_pod %} {{ kubernetes_standalone_pod.annotations | default({}) | to_nice_yaml(indent=2) | indent(4) }}{% endif %} {% endif %} spec: {{ kubernetes_standalone_pod.spec | indent(2) }} dest: "/etc/kubernetes/manifests/{{ kubernetes_standalone_pod.name }}.yml" mode: "{{ kubernetes_standalone_pod.mode | default(omit) }}"