Ansible / Jinja2의 객체 목록에 문자열 목록을 어떻게 매핑합니까?

leedm777

CIDR 목록에서 보안 그룹 규칙 및 경로를 작성하려고하는데 매핑 구문을 올바르게 가져올 수 없습니다.

cidr 목록이 있습니다.

cidrs:
  - 10.12.0.0/16
  - 10.99.0.0/16
  - 192.168.128.0/24

다음과 같은 보안 그룹의 규칙 목록으로 변환하고 싶습니다.

rules:
  - proto: all
    cidr_ip: 10.12.0.0/16
  - proto: all
    cidr_ip: 10.99.0.0/16
  - proto: all
    cidr_ip: 192.168.128.0/24

Jinja2 / Ansible 필터를 사용하여 이러한 종류의 변환을 수행하는 구문은 무엇입니까?

블라디미르 보카

1. 필터 결합루프

예를 들어, 플레이 북


shell> cat playbook.yml
- hosts: localhost
  vars:
    cidrs:
      - 10.12.0.0/16
      - 10.99.0.0/16
      - 192.168.128.0/24
    protos:
      proto: all
  tasks:
    - set_fact:
        rules: "{{ rules|default([]) +
                   [{'cidr_ip': item}|combine(protos)] }}"
      loop: "{{ cidrs }}"
    - debug:
        var: rules

제공 (요약)

shell> ansible-playbook playbook.yml

  rules:
  - cidr_ip: 10.12.0.0/16
    proto: all
  - cidr_ip: 10.99.0.0/16
    proto: all
  - cidr_ip: 192.168.128.0/24
    proto: all

2. 에서 수정 된 목록과 필터 결합

입력이 사전 목록 (해시라고도 함)이면 간단한 이 작업을 수행합니다. 예를 들어 아래 플레이 북은 동일한 결과를 제공합니다.

shell> cat playbook.yml
- hosts: localhost
  gather_facts: false
  vars:
    cidrs:
      - cidr_ip: 10.12.0.0/16
      - cidr_ip: 10.99.0.0/16
      - cidr_ip: 192.168.128.0/24
    protos:
      proto: all
  tasks:
    - set_fact:
        rules: "{{ cidrs|map('combine', protos)|list }}"
    - debug:
        var: rules

3. 지도 에서 사용자 정의 플러그인 및 필터 결합

필터 제품 은 간단한 목록을 해시 목록으로 변환하는 것으로 시작하기에 좋은 후보로 보입니다. 그러나 Ansible에는 두 항목 목록을 AFAIK 사전으로 변환하는 필터가 없습니다. 그런 필터를 작성해 봅시다. 예를 들면

shell> cat filter_plugins/dict.py
def item2dict(t):
    h = {t[0]:t[1]}
    return h

class FilterModule(object):
    ''' Ansible dict filters '''

    def filters(self):
        return {
            'item2dict': item2dict
        }

그러면 아래 플레이 북이 동일한 결과를 제공합니다.

shell> cat playbook.yml
- hosts: localhost
  vars:
    cidrs:
      - 10.12.0.0/16
      - 10.99.0.0/16
      - 192.168.128.0/24
    protos:
      proto: all
  tasks:
    - set_fact:
        rules: "{{ ['cidr_ip']|product(cidrs)|map('item2dict')|
                   map('combine', protos)|list }}"
    - debug:
        var: rules

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Ansible의 문자열 목록에서 객체 목록을 어떻게 변환합니까?

분류에서Dev

어떻게 문자열을 문자열로 매핑하는 것이 Groovy의 문자열 목록에 대한 문자열 매핑으로 가능합니까?

분류에서Dev

목록의 모든 문자열을 목록에 어떻게 추가합니까?

분류에서Dev

중첩 배열을 React의 목록에 어떻게 매핑합니까?

분류에서Dev

Terraform에서 객체 배열에서 목록을 어떻게 출력합니까?

분류에서Dev

dxl의 문자열 목록을 어떻게 반복합니까?

분류에서Dev

dxl의 문자열 목록을 어떻게 반복합니까?

분류에서Dev

Mapstruct : 객체 목록을 두 개의 문자열 / UUID 목록으로 매핑

분류에서Dev

이 연결 목록을 객체 배열에 어떻게 저장합니까?

분류에서Dev

Ansible Jinja2에서 JSON 목록을 구문 분석 할 수 없습니다.

분류에서Dev

객체 목록의 자바 스크립트 배열을 어떻게 생성합니까?

분류에서Dev

PHP에서 문자열 객체의 배열을 어떻게 생성합니까?

분류에서Dev

JSON 객체에서 목록을 어떻게 반환합니까?

분류에서Dev

어떻게 자바 객체 목록에 JSON 문자열을 변환하는?

분류에서Dev

이기종 JSON 배열을 Java 객체에 어떻게 매핑합니까?

분류에서Dev

벡터 목록의 각 문자열 벡터에서 가장 긴 문자열을 어떻게 선택합니까?

분류에서Dev

문자열 목록의 모든 값을 단일 문자열에 어떻게 추가합니까?

분류에서Dev

Java 8 스트림의 객체 목록을 어떻게 합산합니까?

분류에서Dev

어떻게 내가 그 객체의 자바 8 옵션 목록에 객체의 JSON 배열 개체를 변환합니까

분류에서Dev

숫자 목록을 k의 문자열로 어떻게 변환합니까?

분류에서Dev

여러 목록을 텍스트 파일의 자체 열에 어떻게 작성합니까?

분류에서Dev

Ansible-목록에 매핑 된 사전에서 조회를 수행하지만 목록의 값을 문자열로 취급합니다.

분류에서Dev

JSON 데이터를 자바 스크립트로 객체의 csharp 목록에 어떻게 푸시합니까?

분류에서Dev

지도 목록을 내 사용자 지정 클래스 목록에 매핑하려면 어떻게합니까?

분류에서Dev

사용자 정의 유형 목록을 문자열 목록으로 변환하려면 어떻게합니까

분류에서Dev

가변 길이 목록의 문자열을 어떻게 인쇄합니까?

분류에서Dev

내 목록의 각 문자열을 어떻게 반복합니까?

분류에서Dev

csv 문자열을 Pandas의 목록으로 어떻게 변환합니까?

분류에서Dev

RealmDB 결과 객체를 SwiftUI 목록에 올바르게 매핑하려면 어떻게해야합니까?

Related 관련 기사

  1. 1

    Ansible의 문자열 목록에서 객체 목록을 어떻게 변환합니까?

  2. 2

    어떻게 문자열을 문자열로 매핑하는 것이 Groovy의 문자열 목록에 대한 문자열 매핑으로 가능합니까?

  3. 3

    목록의 모든 문자열을 목록에 어떻게 추가합니까?

  4. 4

    중첩 배열을 React의 목록에 어떻게 매핑합니까?

  5. 5

    Terraform에서 객체 배열에서 목록을 어떻게 출력합니까?

  6. 6

    dxl의 문자열 목록을 어떻게 반복합니까?

  7. 7

    dxl의 문자열 목록을 어떻게 반복합니까?

  8. 8

    Mapstruct : 객체 목록을 두 개의 문자열 / UUID 목록으로 매핑

  9. 9

    이 연결 목록을 객체 배열에 어떻게 저장합니까?

  10. 10

    Ansible Jinja2에서 JSON 목록을 구문 분석 할 수 없습니다.

  11. 11

    객체 목록의 자바 스크립트 배열을 어떻게 생성합니까?

  12. 12

    PHP에서 문자열 객체의 배열을 어떻게 생성합니까?

  13. 13

    JSON 객체에서 목록을 어떻게 반환합니까?

  14. 14

    어떻게 자바 객체 목록에 JSON 문자열을 변환하는?

  15. 15

    이기종 JSON 배열을 Java 객체에 어떻게 매핑합니까?

  16. 16

    벡터 목록의 각 문자열 벡터에서 가장 긴 문자열을 어떻게 선택합니까?

  17. 17

    문자열 목록의 모든 값을 단일 문자열에 어떻게 추가합니까?

  18. 18

    Java 8 스트림의 객체 목록을 어떻게 합산합니까?

  19. 19

    어떻게 내가 그 객체의 자바 8 옵션 목록에 객체의 JSON 배열 개체를 변환합니까

  20. 20

    숫자 목록을 k의 문자열로 어떻게 변환합니까?

  21. 21

    여러 목록을 텍스트 파일의 자체 열에 어떻게 작성합니까?

  22. 22

    Ansible-목록에 매핑 된 사전에서 조회를 수행하지만 목록의 값을 문자열로 취급합니다.

  23. 23

    JSON 데이터를 자바 스크립트로 객체의 csharp 목록에 어떻게 푸시합니까?

  24. 24

    지도 목록을 내 사용자 지정 클래스 목록에 매핑하려면 어떻게합니까?

  25. 25

    사용자 정의 유형 목록을 문자열 목록으로 변환하려면 어떻게합니까

  26. 26

    가변 길이 목록의 문자열을 어떻게 인쇄합니까?

  27. 27

    내 목록의 각 문자열을 어떻게 반복합니까?

  28. 28

    csv 문자열을 Pandas의 목록으로 어떻게 변환합니까?

  29. 29

    RealmDB 결과 객체를 SwiftUI 목록에 올바르게 매핑하려면 어떻게해야합니까?

뜨겁다태그

보관