Извлечение значений из YAML в шаблон Jinja для Ansible playbook - PullRequest
1 голос
/ 13 июля 2020

У меня есть файл YAML с содержимым, как показано ниже:

cat ../../ansible/playbooks/vars/patching-config.yml
---
patching_tag_name: "Patching"
my_windows_patching:
  - {
      OS: "WINDOWS",
      tag_value: "myProdA",
      frequency: "Month", #patching frequency. OneTime|Day|Hour|Week|Month|Minute
      interval: 1, #interval of the schedule.
      rebootSetting: "never", #ifRequired|never|always
      PatchGroup: testA,
      startDate: "2020-01-16T23:59:59Z",
      expiryDate: "2020-02-16T23:59:59Z",
      duration: "PT2H0M",
      timeZone: "Australia/Sydney",
      updateClassifications: "Critical,Important,Moderate" 
    }

Я хочу извлечь значения updateClassifications сверху YML файл в шаблоне Jinja file MaintenanceWindow.yml.j2

Resources:
  WindowsNonProdBaseline:
    Type: AWS::SSM::PatchBaseline
    Properties:
      Name: Windows-Non-Prod-Baseline
      Description: Baseline containing all updates approved for Windows instances
      OperatingSystem: {{ item.OS }}
      PatchGroups:
      - {{ item.PatchGroup }}
      ApprovalRules:
        PatchRules:
        - PatchFilterGroup:
            PatchFilters:
            - Values:
              # - Critical
              # - Important
              # - Moderate
              {% for item in item.updateClassifications %}
                - {{ item }}
              {% endfor %}

Я пытаюсь использовать код, описанный выше, еще раз сниппет:

              {% for item in item.updateClassifications %}
                - {{ item }}
              {% endfor %}

Я звоню patching-config.yml в моем tasks / main.yml , как показано ниже

- include_vars: "{{playbook_dir}}/vars/patching-config.yml"
  ignore_errors: yes

- name: create a cloudformation stack
  cloudformation:
    stack_name: "New-Ansible-cloudformation"
    state: "present"
    disable_rollback: true
    template_body: "{{ lookup('template', '../../cloudformation/patching/MaintenanceWindow.yml.j2') }}"
  with_items: "{{ telstra_windows_patching }}"

Наконец, вызов роли, как показано ниже

cat ansible/playbooks/patching.yml
---
- hosts: localhost
  roles:
    - patching-cf-ssm

К сожалению, это не работает.

Мы будем очень признательны за любые выводы.

1 Ответ

0 голосов
/ 15 июля 2020

Пара вещей:

Ваша задача использует telstra_windows_patching в with_items, где ваш файл переменных имеет имя переменной my_windows_patching.

Предполагая, что вы используете то же имя, скажите my_windows_patching в своей задаче и var файл, если вы пытаетесь сохранить объект json в переменной yaml my_windows_patching, которая вам не нужна - перед фигурными скобками. Вы можете определить что-то вроде этого

my_windows_patching:
   {
      OS: "WINDOWS",
      tag_value: "myProdA",
      frequency: "Month", #patching frequency. OneTime|Day|Hour|Week|Month|Minute
      interval: 1, #interval of the schedule.
      rebootSetting: "never", #ifRequired|never|always
      PatchGroup: testA,
      startDate: "2020-01-16T23:59:59Z",
      expiryDate: "2020-02-16T23:59:59Z",
      duration: "PT2H0M",
      timeZone: "Australia/Sydney",
      updateClassifications: "Critical,Important,Moderate" 
    }

Если вы хотите использовать элементы внутри объекта my_windows_patching с точечной нотацией напрямую, вы можете изменить переменную из объекта в список, например,

my_windows_patching:
    -  OS: "WINDOWS"
       tag_value: "myProdA"
...