Ansible-동적 변수에서 사실 설정

Nov 19 2020

사실에서 특정 변수 파일을 호출합니다.

- name: Load vars - {{ ansible_distribution }} {{ ansible_distribution_major_version }} package list
  include_vars:
    file: "{{ ansible_distribution | lower }}-pkglist.yml"
  # if vars file is not found we continue
  ignore_errors: yes

해당 파일의 변수는 분포에 따라 다른 이름을 가질 수 있습니다.

#package for all debians server
prefix_debian:  
- pkgname
- pkgname
...

#package for all debian 10 server
prefix_10 :
- specific major version pkgname
- specific major version pkgname
- specific major version pkgname
...

또한 모든 Linux 배포판에 사용되는 '공통'패키지 목록이 있습니다.

이 세 가지 목록을 호스트에 설치해야하는 패키지 목록과 연결해야합니다.

common_pkg_list + {{ansible_ distribution}}-pkglist + {{ansible_distribution_major_version}}-pkglist

이를 달성하기 위해 역학 변수 이름에서 각 목록에 대해 setfact를 시도했습니다.

-name:
  set_fact:
    common_pkg: "{{ prefix_commonpkglist }}"
    ditro_pkg: "prefix_{{ ansible_distribution | lower }}"
    version_pkg: "prefix_{{ ansible_distribution_major_version }}"

그러나 sefact 후에 목록이 손실됩니다 ...

내 동적 (변수) 목록 이름을 사실로 설정하려면 어떻게해야합니까?

답변

LeXaNZ Nov 24 2020 at 22:31

내가 사용한 마지막 set_fact는 다음과 같습니다.

- name: Building package list for {{ ansible_distribution }} {{ ansible_distribution_major_version }}
  set_fact:
    common_pkg: "{{ prefix_commonpkglist }}"
    ditro_pkg: "{{ lookup('vars', 'prefix_' + ansible_distribution | lower) }}"
    version_pkg: "{{ lookup('vars','prefix_' + ansible_distribution_major_version) }}"

- name: Installing packages
  package:
    name: "{{ common_pkg + ditro_pkg + version_pkg }}"
    state: present