아니오. 3 Ansible (2 부) (1/1)을 슬롯 빌드하자

기술 스페셜

3 부 : Ansible (2 부)를 슬롯 빌드하자

슬롯

소개

두 번째 에피소드의 첫 번째 부분에서, 우리는 플레이 북을 작성하는 기본 방법을 소개했습니다. 두 번째 부분에서는 재사용과 같은 적용 가능한 사용을 계속 소개합니다.

나는 지난번에 "재사용"이 가능하다고 언급했지만 소개 된 샘플과 단계는 명확한 플레이 북 만 만들었습니다. 어떤 사람들은 자신이 구축하는 각 환경에 대해 준비해야한다고 생각했을 수도 있습니다.

Ansible을 사용하면 변수를 슬롯 나중에 값을 정의 할 수있을뿐만 아니라 분기 및 반복을 허용하여 다양한 경우를 수용 할 수있는 매우 다양한 플레이 북을 만들 수 있습니다.

이번에는 플레이 북의 다양성을 증가시키는 변수를 사용하는 방법을 소개합니다.

변수 사용 방법

지난번에 언급 한 플레이 북을 언급 한 방식으로, 여러 서버에서 고정 된 소프트웨어 버전 및 설정으로 일련의 프로세스를 자동으로 수행 할 수있었습니다. 다른 소프트웨어 버전이나 설정과 함께 슬롯려는 경우 사용할 수 없습니다.
변수를 슬롯십시오.

변수를 슬롯려는 플레이 북에 "variable name

슬롯

2353_2464

슬롯

예를 들어, httpd.conf와 같은 구성 파일에서 사용할 변수를 편집하고 실행할 때 업로드하고 환경에 맞는 "값"을 할당 할 수 있습니다.

Conf.Modules.d/*. conf

변수 값을 정의하는 방법

2018 년 12 월 현재 VARS 디렉토리 및 인벤토리 파일에 지정하는 것을 포함하여 Ansible에서 변수 값을 설정하는 22 가지 방법이 있습니다. 어떤 사람들은 사용 방법에 대한 선호도를 가지고 있으므로 사용하기 쉬운 설정 방법을 찾는 것이 좋습니다. 이 기사에서는 자주 사용하는 이러한 변수 중 일부를 소개합니다.

기본 디렉토리에서 설정하는 방법, 최상위 플레이 북에서 설정하는 방법 및 재고 파일에서 설정하는 방법을 소개합니다.

① 기본값 디렉토리에서 설정하는 방법

기본 디렉토리에 설정된 변수는 플레이 북 변수의 기본값으로 취급됩니다. 여기에 설정된 변수의 값은 다른 곳에서 설정된 값으로 덮어 씁니다. 변수 정의와 함께 만들고 별도의 설정 위치에서 변경이 필요한 위치 만 정의하십시오. 이것은 매번 모든 변수를 정의하는 번거 로움을 줄이고 누락 된 설정을 방지합니다.

이것을 사용할 때, 지난 시간에 소개 된 모범 사례 구성을 사용하여 각 역할에 대한 디렉토리에서 기본값이라는 디렉토리를 작성하고 main.yml이라는 파일을 생성하십시오.

슬롯

아래 그림과 같이 "변수 이름 : value"의 조합을 제시하십시오.

슬롯

② 최상위 플레이 북에서 설정하는 방법

변수 값은 최상위 플레이 북 내에서 정의 할 수 있습니다. 최상위 플레이 북은 각 고객과 설정 한 각 환경마다 만들어 지므로이 섹션의 가변 값의 정의를 요약하면 관리하기가 더 쉽습니다. 또한 재사용 할 때 다른 환경에 값을 슬롯 잘못 사용하는 위험을 줄입니다.
사용시 VARS 항목이 최상위 플레이 북에 설정되며 "변수 이름 : value"의 조합은 아래 다이어그램에 표시된대로 작성됩니다.

---

③ 인벤토리 파일에서 설정하는 방법

변수 값은 인벤토리 파일에 설정할 수도 있습니다. 재고 파일에는 각 환경에 연결하는 데 필요한 정보가 포함되어 있습니다. 각 호스트마다 클라우드 또는 컨테이너와 같이 다른 연결 방법이있을 수 있습니다. 또한 연결에 사용 된 사용자는 다를 수 있습니다. 호스트 정보 근처에서 이러한 호스트 별 정보를 통합 된 방식으로 수집하여 이러한 호스트 별 정보를 관리하는 것이 더 쉽습니다.
사용시 인벤토리 파일의 호스트 이름 (또는 IP 주소) 뒤에 "variable name = value"를 입력하십시오. 여러 항목을 나열 할 때는 공백으로 분리하십시오.

[Honban]

그룹의 모든 호스트가 동일한 변수를 슬롯는 경우 [그룹 이름 : vars]라는 그룹을 만들어 해당 그룹 내에서 정의 할 수 있습니다. 모든 호스트를 타겟팅하려면 [All : Vars]라는 그룹을 만들어 해당 그룹 내에서 정의 할 수 있습니다.

슬롯

특별 변수

Ansible은 루프 처리, 반환 값 및 환경 정보를 처리 할 때 위 변수와 다른 방식으로 사용되는 변수를 사용합니다. 위의 변수는 이전에 정의되었지만 차이는 프로세스 결과에서 자동으로 수집되거나 정의된다는 것입니다.
지금부터 이러한 변수를 소개합니다.

① 루프 처리에 사용할 변수

Ansible의 여러 루프 처리 기술 중 하나는 with_items 모듈을 슬롯는 것입니다. "item
yum 또는 apt를 슬롯 여러 패키지를 설치할 때 종종 사용되는 것 같습니다.
아래 표시된 예에서는 mariadb 관련 패키지가 YUM 모듈을 슬롯 설치됩니다. with_items를 사용하지 않으면 Yum은 여러 번 쓰여집니다. 그러한 경우, 코드는 중복 될뿐만 아니라 가독성을 줄일 수있을뿐만 아니라 수정시 누출 위험이있을 위험이 있습니다.
with_items를 슬롯는 경우 한 장소 만 지정할 수 있습니다. 더 많은 패키지가 설치되면 패키지를 목록에 추가하면 관리하기 쉽고 누출 가능성이 떨어집니다. 이 목록은 변수로 변환 될 수도 있으므로 플레이 북을 변경하지 않고 설치할 항목 수를 늘릴 수도 있습니다.

슬롯

단일 루프에서 여러 변수에 값을 할당 할 수도 있습니다. 이 경우 모듈의 매개 변수에 쓸 변수 이름은
5944_6070
이 기술은 파일을 편집 할 때 종종 사용된다고 생각합니다.
아래 표시된 예에서 /etc /hosts의 IPv6 관련 설정이 다시 작성됩니다. 내가 슬롯는 lineInfile 모듈은 파일을 조작하는 모듈입니다. with_items는 regexp에서 정규 표현식을 정의하고 줄을 다시 작성 해야하는 내용을 정의합니다.
이들은 각각 변수에 할당됩니다.

② 조건부 처리 분기에 슬롯기위한 변수

건설 작업을 수행하는 동안 "파일이 존재하는 경우", "화면에 나타나면"또는 "처리 결과가 성공한 경우"와 같은 처리 결과를 기반으로 다음 단계를 수행할지 여부를 결정하는 경우가 있습니다. 이 경우 Ansible은 Register라는 모듈을 사용하여 결과를 일시적으로 변수에 저장합니다.

예를 들어, get_url 및 Unarchive와 같은 다운로드 관련 모듈 또는 쉘, 명령 등과 같은 스크립트 또는 명령을 직접 실행하는 모듈을 슬롯는 경우 Ansible은 두 번째로도 프로세스를 실행합니다. 불필요한 시간이 걸릴뿐만 아니라 실행 컨텐츠에 따라 두 번째 실행 후에 제대로 작동하지 않을 수 있으므로 회피를 고려해야합니다.
이 경우 레지스터 모듈을 슬롯 변수에 특정 파일이 있는지 여부를 확인하고 프로세스를 분기하는 데 사용할 수있는 결과를 저장할 수 있습니다.

아래 표시된 예는 Kubernetes 클러스터에 참여하지 않으면 가입하라는 명령을 실행하는 플레이 북입니다. 우리는 스탯 모듈을 사용하여 파일 및 디렉토리 정보를 수집하고 JSON 형식의 결과를 반환하여 특정 파일이 존재하는지 확인했습니다 (※). 레지스터 모듈을 사용하여 _joined라는 변수 이름을 작성하여 체크 결과를 생성하고 저장합니다.
다음 작업에서 모듈이 사용되는 시점 및 _joined에 저장된 결과 스탯 항목이 존재하지 않으며 쉘 모듈이 Join 명령을 실행하는 데 사용됩니다.

*예제로 언급 된 Stat 모듈은 존재하는지 여부와 함께 얻을 수 있습니다. 얻을 수있는 반품 값에 대한 자세한 내용은 여기를 참조하십시오 (https : //docs.ansible.com/ansible/2.5/modules/stat_module.html).

파일의 존재 유무 외에도 사람들이 마지막 처리의 성공 또는 실패, 쉘 명령 실행 결과 및 표준 출력의 내용에 따라 분기를 원하는 경우가있을 수 있습니다. 이 경우 RC (리턴 코드) 및 STDOUT (표준 출력) 항목의 리턴 값이 레지스터를 슬롯 사용됩니다.

반환 값이 올바르게 얻어지고 예상 값에 도달 할 때 디버그라는 모듈을 사용할 수 있습니다.
아래 다이어그램에 표시된대로 매개 변수 var = 변수 이름을 제공하여 변수 내부를 참조 할 수 있습니다. 플레이 북 개발 및 테스트 중에 슬롯는 것이 좋습니다.

---

디버그 모듈을 사용할 때는 아래와 같이 결과 화면에 나타납니다. 쉘 모듈을 슬롯 Whoami 명령을 실행 한 결과는 _result라는 변수에 저장됩니다.
rc에는 0이 포함되어 있으므로 프로세스가 정상적으로 수행되었음을 알 수 있습니다. 이 프로세스가 정상 인 경우 후속 작업을 수행하려면 _result.rc == 0과 같은 분기 조건을 만들 수 있습니다.
또한 "루트"가 stdout에 저장되므로 Whoami 명령을 실행할 때 "루트"가 화면에 표시되는 것을 볼 수 있습니다.

③ 환경 정보를 저장하는 변수

Ansible에 특수 사양이 지정되지 않으면 프로세스 시작시 환경 정보가 검색되어 변수에 저장됩니다. 이 변수를 사실 변수라고합니다. 우리는 IP 주소, CPU 정보 및 OS 정보를 포함한 광범위한 정보를 수집합니다.
많은 양이되므로 표시하지 않지만 디버그 모듈을 슬롯 "ansible_facts
예를 들어, 아래 다이어그램에 표시된대로 APACHE를 설치할 때 OS가 redhat 유형 인 경우 YUM 모듈을 사용할 수 있으며 데비안 유형을 슬롯는 경우 APT 모듈을 사용할 수 있습니다.

---

결론

이번에는 변수, 분기 및 반복과 같은 방법을 사용하여 PlayBook을 재사용 할 수 있도록하는 방법을 소개했습니다. 먼저 사용할 변수를 만들면 플레이 북 자체를 수정하지 않고도 값을 별도로 정의하여 다른 환경에서 재사용 할 수 있다는 것을 이해 했습니까?
변수를 잘 활용함으로써 동일한 플레이 북을 재현하는 번거 로움을 줄일뿐만 아니라 다른 프로젝트에서 잘 작동하는 것과 동일한 것을 사용할 수 있으므로 품질면에서 안전하다고 느낄 수 있습니다.

다음에, 우리는 ansible 함수가 확장되는 GUI 버전을 소개합니다.
CUI 버전을 슬롯기를 꺼려하는 사람들이 이용할 수있을뿐만 아니라 다양한 유용한 기능을 사용할 수 있으므로이를 고려해 주시기 바랍니다.