초보자 튜토리얼 – Ansible 플레이북, 변수, 인벤토리

Beginner S Tutorial Ansible Playbooks



Ansible 플레이북은 Ansible로 호스트를 구성하기 위해 실행되는 작업이 포함된 파일입니다. Ansible 플레이북은 YAML 형식으로 작성됩니다. YAML은 JSON과 마찬가지로 매우 간단한 파일 형식입니다. 이 기사의 뒷부분에서 Ansible YAML 플레이북이 어떻게 보이는지 보여드리겠습니다.

Ansible 인벤토리 파일은 Ansible로 구성하거나 관리하려는 호스트 목록을 유지 관리합니다. 이러한 호스트를 그룹화하고 그룹별로 관리할 수도 있습니다. 각 호스트 또는 호스트 그룹에 대해 다른 변수를 전달할 수도 있습니다.







이 기사에서는 실제 예제와 함께 Ansible 플레이북, 변수, 인벤토리 파일 및 몇 가지 일반적인 Ansible 모듈로 작업하는 방법을 보여 드리겠습니다. 시작하겠습니다!



전제 조건

이 기사의 예를 시험해보고 싶다면,



1) 컴퓨터에 Ansible이 설치되어 있어야 합니다.
2) Ansible 자동화를 위해 구성된 Ubuntu/Debian 호스트 및 CentOS/RHEL 8 호스트가 최소한 있어야 합니다.





LinuxHint에는 Ansible 설치 및 Ansible 자동화를 위한 호스트 구성에 관한 많은 기사가 있습니다. 추가 정보가 필요한 경우 이 기사를 확인할 수 있습니다.

프로젝트 디렉토리 생성

먼저 프로젝트 디렉토리를 생성합니다. ~/프로젝트/ 다음 명령으로:

$mkdir -pv~/프로젝트/플레이북

다음으로 이동합니다. ~/프로젝트/ 디렉토리는 다음과 같습니다.

$CD~/프로젝트

기본 인벤토리 파일:

Ansible 인벤토리 파일 생성 호스트 다음 명령을 사용하여 프로젝트 디렉토리에서

$나노호스트

Ansible을 사용하여 구성/자동화하려는 호스트의 IP 주소를 입력할 수 있습니다. 호스트 인벤토리 파일.

192.168.20.167
192.168.20.168
192.168.20.169
192.168.20.170

이 단계를 마치면 다음을 눌러 파일을 저장하십시오. + NS 뒤이어 그리고 그리고 .

인벤토리 파일에서 IP 주소 대신 DNS 이름을 사용하려는 경우에도 이 작업을 수행할 수 있습니다.

작동하는 DNS 서버가 없으면 다음을 사용할 수 있습니다. /etc/hosts 로컬 DNS 확인을 위해 컴퓨터에 파일을 저장합니다.

로컬 DNS 확인을 위해 /etc/hosts 텍스트 편집기로 파일( 나노 , 내 경우) 다음과 같습니다.

$수도 나노 //호스트

다음과 같이 IP 주소와 원하는 DNS 이름을 입력합니다.

192.168.20.167 vm1.nodekite.com
192.168.20.168 vm2.nodekite.com
192.168.20.169 vm3.nodekite.com
192.168.20.170 vm4.nodekite.com

이 단계를 마치면 다음을 누릅니다. + NS 뒤이어 그리고 그리고 .

Ansible 인벤토리 파일 열기 호스트 다음과 같이:

$나노호스트

이제 Ansible을 사용하여 구성/자동화하려는 호스트의 DNS 이름을 입력할 수 있습니다. 호스트 인벤토리 파일.

vm1.nodekite.com
vm2.nodekite.com
vm3.nodekite.com
vm4.nodekite.com

완료되면 다음을 눌러 호스트 인벤토리 파일을 저장합니다. + NS 뒤이어 그리고 그리고 .

모든 호스트에 대한 연결 테스트

이제 다음과 같이 인벤토리 파일의 모든 호스트에 대해 ping을 시도할 수 있습니다.

$가능-NS모든 호스트-유가능-미디엄

보시다시피 인벤토리 파일의 모든 호스트에 연결할 수 있습니다. 따라서 이 기사의 다음 섹션으로 넘어갈 준비가 되었습니다.

첫 번째 Ansible 플레이북

간단한 Ansible 플레이북을 만들어 보겠습니다. ping_all_hosts.yaml 에서 플레이북/ 예배 규칙서. 이 작업은 호스트 인벤토리 파일은 이전과 동일합니다.

$나노플레이북/ping_all_hosts.yaml

에 다음 줄을 입력하십시오. ping_all_hosts.yaml 앤서블 플레이북 파일:

- 호스트: 모두
사용자: 가능
작업:
- 이름: 모든 호스트에 대한 Ping
핑:

여기,

호스트: 모두 – 인벤토리 파일에서 모든 호스트를 선택합니다. 호스트 .
사용자: 가능 – Ansible이 인벤토리 파일의 호스트에 SSH로 연결하도록 지시합니다. 가능 사용자.
작업 – Ansible이 호스트에서 실행할 모든 작업이 여기에 나열됩니다. 각 작업에는 일반적으로 이름 및 하나 이상의 모듈 특정 옵션.

플레이북 ping_all_hosts.yaml 인벤토리 파일의 모든 호스트에 대해 ping을 수행하는 하나의 작업만 있습니다. 호스트 . 작업의 이름은 모든 호스트에 핑 그리고 그것은 사용 기준 치수.

NS 모듈에는 다른 옵션이 필요하지 않습니다. 그래서 나는 그것을 비워 두었다(콜론 뒤에는 아무것도 없다. : )

이 단계를 마치면 다음을 눌러 파일을 저장하십시오. + NS 뒤이어 그리고 그리고 .

당신은 실행할 수 있습니다 ping_all_hosts.yaml 다음과 같이 Ansible 플레이북:

$가능한 플레이북-NS호스트 플레이북/ping_all_hosts.yaml

보시다시피 ping 작업은 인벤토리 파일의 모든 호스트에서 성공합니다.

간단한 Ansible 구성 파일

이전 예에서는 다음을 사용해야 했습니다. -NS 사용할 인벤토리 파일을 Ansible에 알려주는 옵션입니다. 제 경우에는 호스트 인벤토리 파일.

$가능한 플레이북-NS호스트 플레이북/ping_all_hosts.yaml

인벤토리 파일을 -NS Ansible 플레이북을 실행할 때마다 옵션을 선택하면 프로젝트에 대한 기본 인벤토리 파일을 설정하기만 하면 됩니다.

그렇게 하려면 새 Ansible 구성 파일을 생성하십시오. ansible.cfg 다음과 같이 프로젝트 루트에서

$나노ansible.cfg

에 다음 줄을 입력하십시오. ansible.cfg 파일:

[기본값]
인벤토리 = ./호스트

완료되면 다음을 눌러 파일을 저장합니다. + NS 뒤이어 그리고 그리고 .

다음과 같이 동일한 Ansible 플레이북을 실행할 수 있습니다.

$가능한 플레이북 플레이북/ping_all_hosts.yaml

보시다시피 플레이북은 호스트 기본적으로 인벤토리 파일입니다. 당신은 여전히 ​​사용할 수 있습니다 -NS 원하는 경우 다른 인벤토리 파일을 지정하는 옵션입니다. Ansible은 매우 유연합니다.

인벤토리 파일에서 호스트 그룹화

지금까지 인벤토리 파일의 모든 호스트에서 일련의 작업(플레이북)을 실행하는 방법을 보여 드렸습니다. 그러나 일부 호스트에서는 작업 집합을 실행하고 다른 호스트에서는 다른 작업 집합을 실행하려면 어떻게 해야 할까요? 인벤토리 파일에서 호스트를 그룹화하고 호스트 그룹에서 다른 작업을 실행할 수 있습니다.

이 섹션에서는 인벤토리 파일에서 호스트를 그룹화하는 방법과 호스트 그룹으로 작업하는 방법을 보여줍니다.

먼저 인벤토리 파일을 엽니다. 호스트 다음과 같이:

$나노호스트

에 다음 줄을 입력하십시오. 호스트 인벤토리 파일:

[데비안10]
vm1.nodekite.com
vm2.nodekite.com
[센토스8]
vm3.nodekite.com
vm4.nodekite.com

여기에서 두 개의 호스트 그룹을 만들었습니다. 데비안10 그리고 센토스8 .

에서 데비안10 그룹에는 두 개의 호스트가 있습니다. vm1.nodekite.com 그리고 vm2.nodekite.com

에서 센토스8 그룹에는 두 개의 호스트가 있습니다. vm3.nodekite.com 그리고 vm4.nodekite.com

완료되면 다음을 눌러 파일을 저장합니다. + NS 뒤이어 그리고 그리고 .

이제 새 플레이북을 만들겠습니다. ping_debian10_hosts.yaml , 이전과 같이 호스트를 ping하지만 데비안10 호스트 그룹.

플레이북 만들기 ping_debian10_hosts.yaml 에서 플레이북/ 디렉토리는 다음과 같습니다.

$나노플레이북/ping_debian10_hosts.yaml

에 다음 줄을 입력하십시오. ping_debian10_hosts.yaml 앤서블 플레이북:

- 호스트: 데비안10
사용자: 가능
작업:
- 이름: 모든 데비안 핑10호스트
핑:

대신에 호스트: 모두 , 내가 추가했다 호스트: 데비안10 여기. 데비안10 호스트 그룹입니다. 이 플레이북은 호스트에서만 실행됩니다. 데비안10 호스트 그룹.

완료되면 다음을 눌러 파일을 저장합니다. + NS 뒤이어 그리고 그리고 .

다음과 같이 플레이북을 실행합니다.

$가능한 플레이북 플레이북/ping_debian10_hosts.yaml

보시다시피 호스트만 데비안10 호스트 그룹이 ping됩니다.

같은 방법으로 다른 플레이북 만들기 ping_centos8_hosts.yaml 다음과 같이:

$나노플레이북/ping_centos8_hosts.yaml

에 다음 줄을 입력하십시오. ping_centos8_hosts.yaml 앤서블 플레이북:

- 호스트: centos8
사용자: 가능
작업:
- 이름: 모든 CentOS 핑8호스트
핑:

같은 방법으로 추가했습니다 호스트: centos8 여기. 센토스8 호스트 그룹입니다. 이 플레이북은 호스트에서만 실행됩니다. 센토스8 호스트 그룹.

완료되면 다음을 눌러 파일을 저장합니다. + NS 뒤이어 그리고 그리고 .

다음과 같이 플레이북을 실행합니다.

$가능한 플레이북 플레이북/ping_centos8_hosts.yaml

보시다시피 호스트만 센토스8 호스트 그룹이 ping됩니다.

Ansible 변수 유형

Ansible에는 다양한 유형의 변수가 있습니다. 주요 변수 유형은 Ansible Facts 변수 그리고 사용자 정의 변수 .

Ansible Facts 변수: Ansible이 작업 중인 호스트에 따라 Ansible은 Ansible 팩트 변수를 생성합니다. Ansible 사실 변수에는 IP 주소, 호스트 이름, 도메인 이름, 날짜, 시간, 쉘 환경 변수 등과 같은 호스트에 대한 정보가 포함됩니다.

사용자 정의 변수: 사용자가 정의한 맞춤 변수입니다. 명령줄에서 또는 인벤토리 파일을 사용하여 사용자 정의 변수를 전달할 수 있습니다.

주로 사용자 정의 변수에는 두 가지 유형이 있습니다. 그룹 변수 그리고 호스트 변수 .

Ansible 변수 우선 순위

Ansible의 변수 우선 순위는 다음과 같습니다. : 명령줄 변수 > 호스트 변수 > 그룹 변수

호스트 변수 및 그룹 변수와 동일한 변수를 설정하면 호스트 변수가 적용됩니다.

마찬가지로 플레이북을 실행하는 동안 명령줄에서 설정한 변수는 호스트 및 그룹 변수를 모두 대체합니다.

Ansible Facts 변수 작업

이 섹션에서는 Ansible 팩트 변수로 작업하는 방법을 보여 드리겠습니다. 시작하겠습니다!

호스트의 모든 Ansible Facts 변수를 호스트 인벤토리 파일은 다음과 같습니다.

$모두 가능-유가능-미디엄설정

보시다시피 모든 Ansible Facts 변수는 JSON 형식으로 나열됩니다. 매우 긴 목록입니다.

목록이 상당히 길기 때문에 다음과 같은 호출기 프로그램으로 열 수 있습니다. 더 적은 다음과 같이:

$모두 가능-유가능-미디엄설정| 더 적은

이제 필요에 따라 출력을 위, 아래, 왼쪽, 오른쪽으로 스크롤할 수 있습니다.

호출기에서 변수 이름을 검색할 수도 있습니다. 그렇게 하려면 / 키를 누릅니다. 그런 다음 검색 문자열( 호스트 이름 내 경우)를 누르고 .

보시다시피 검색 문자열과 일치하는 Ansible 사실 변수는 ansible_hostname . 당신은 N 다음 경기로 이동하기 위해 NS 호출기에서 이전 경기로 이동합니다. 이것이 Ansible 프로젝트에 필요한 Ansible 사실 변수를 찾는 방법입니다.

이제 Ansible 사실 변수에 액세스하는 방법을 살펴보겠습니다.

새 플레이북 만들기 print_variable1.yaml 다음과 같이:

$나노플레이북/print_variable1.yaml

에 다음 줄을 입력하십시오. print_variable1.yaml 파일:

- 호스트: 모두
사용자: 가능
작업:
- 이름: 인쇄호스트 이름모든 호스트의
디버그:
메시지:'{{ ansible_hostname }}'

여기에 하나의 작업을 추가했습니다. 모든 호스트의 호스트 이름 인쇄 . 이 작업은 Ansible을 사용합니다. 디버그 플레이북이 실행될 때 메시지를 출력하는 모듈.

메시지 의 유일한 필수 매개변수입니다. 디버그 기준 치수. NS 메시지 매개변수는 따옴표로 묶인 문자열을 허용하며 이는 콘솔에 인쇄될 메시지입니다.

여기, {{ 변수 이름 }} 형식은 변수에 액세스하는 데 사용됩니다. 이 경우, {{ ansible_hostname }} 인쇄하는 데 사용됩니다 ansible_hostname 인벤토리 파일에 있는 각 호스트의 변수입니다.

완료되면 다음을 눌러 파일을 저장합니다. + NS 뒤이어 그리고 그리고 .

다음과 같이 Ansible 사실 변수에 액세스할 수도 있습니다. 가능한 사실[변수 이름] . 그래서 ansible_hostname 변수가 될 것입니다 sible_facts[호스트 이름] .

우리는 다시 쓸 수 있습니다 print_variable1.yaml 이런 플레이북도. 우리는 동일한 출력을 얻을 것입니다.

- 호스트: 모두
사용자: 가능
작업:
- 이름: 인쇄호스트 이름모든 호스트의
디버그:
메시지:'{{ ansible_facts['변수 이름'] }}'

플레이북 실행 print_variable1.yaml 다음과 같이:

$가능한 플레이북 플레이북/print_variable1.yaml

보시다시피 인벤토리 파일에 있는 각 호스트의 호스트 이름은 콘솔에 인쇄됩니다.

이제 호스트 이름과 함께 각 호스트의 기본 IPv4 주소를 인쇄해 보겠습니다. 보시다시피 호스트의 기본 IPv4 주소는 다음을 사용하여 액세스할 수 있습니다. 주소 재산 ansible_default_ipv4 물체.

새 플레이북 만들기 print_variable2.yaml 다음과 같이:

$나노플레이북/print_variable2.yaml

에 다음 줄을 입력하십시오. print_variable2.yaml 파일:

- 호스트: 모두
사용자: 가능
작업:
- 이름: 인쇄호스트 이름모든 호스트의
디버그:
메시지:'{{ ansible_hostname }} - {{ ansible_default_ipv4.address }}'

이 플레이북은 이전과 동일합니다. 유일한 차이점은 새로운 변수입니다. {{ ansible_default_ipv4.address }} 에서 메시지 의 옵션 디버그 기준 치수.

완료되면 다음을 눌러 파일을 저장합니다. + NS 뒤이어 그리고 그리고 .

실행 print_variable2.yaml 다음과 같이 플레이북:

$가능한 플레이북 플레이북/print_variable2.yaml

보시다시피 기본 IPv4 주소와 호스트의 호스트 이름이 콘솔에 인쇄됩니다.

이것이 Ansible Facts 변수로 작업하는 방법입니다.

명령줄에서 사용자 정의 변수 설정:

이 섹션에서는 Ansible 플레이북을 실행하는 동안 명령줄에서 사용자 정의 변수를 설정하는 방법을 보여 드리겠습니다.

먼저 새 플레이북을 만듭니다. print_variable3.yaml 다음과 같이:

$나노플레이북/print_variable3.yaml

에 다음 줄을 입력하십시오. print_variable3.yaml 파일:

- 호스트: 모두
사용자: 가능
작업:
- 이름: 인쇄명령라인 변수
디버그:
메시지:' 환영합니다 {{ 사용자 이름 }}'

여기에서 내가 사용한 디버그 메시지를 출력하는 모듈 환영합니다 {{ 사용자 이름 }} . 사용자 이름 플레이북을 실행할 때 대체될 변수입니다.

완료되면 다음을 눌러 파일을 저장합니다. + NS 뒤이어 그리고 그리고 .

플레이북 실행 print_variable3.yaml 다음과 같이:

$가능한 플레이북-그리고 '사용자 이름=밥'플레이북/print_variable3.yaml

노트: 여기, -그리고 옵션은 전달하는 데 사용됩니다. 사용자 이름 값이 있는 변수 단발 플레이북으로 print_variable3.yaml 명령줄에서.

보시다시피 메시지는 웰컴 밥 콘솔에 인쇄됩니다.

이제 명령줄에서 여러 변수를 전달하는 방법을 알아보겠습니다.

새 플레이북 만들기 print_variable4.yaml 다음과 같이:

$나노플레이북/print_variable4.yaml

에 다음 줄을 입력하십시오. print_variable4.yaml 파일:

- 호스트: 모두
사용자: 가능
작업:
- 이름: 사용자 정의 변수 인쇄
디버그:
메시지:'사용자 이름={{ 사용자 이름 }} http_port={{ http_port }}'

플레이북은 지금 당신에게 매우 친숙할 것입니다. 하는 일은 2개의 변수를 인쇄하는 것뿐입니다. 사용자 이름 그리고 http_port 콘솔에.

완료되면 다음을 눌러 파일을 저장합니다. + NS 뒤이어 그리고 그리고 .

이제 통과할 수 있습니다. 사용자 이름 그리고 http_port 두 개의 서로 다른 -그리고 다음과 같은 옵션:

$ 가능한 플레이북-그리고 '사용자 이름=밥' -그리고 'http_port=8080'
플레이북/print_variable4.yaml

또는 다음과 같이 변수를 공백으로 간단히 구분할 수 있습니다.

$ 가능한 플레이북-그리고 '사용자 이름=밥 http_port=8080'
플레이북/print_variable4.yaml

보시다시피, 사용자 이름 그리고 http_port 변수는 콘솔에 인쇄됩니다.

사용자 정의 그룹 변수 작업

예를 들어 호스트 그룹에 일부 변수를 추가하려고 합니다. 이 작업은 Ansible에서 수행하기가 매우 쉽습니다.

먼저, 귀하의 호스트 인벤토리 파일은 다음과 같습니다.

$나노호스트

다음 줄을 입력하십시오. 호스트 인벤토리 파일:

[데비안10]
vm1.nodekite.com
vm2.nodekite.com
[debian10:변수]
사용자 이름 = 릴리
http_port =4343
[센토스8]
vm3.nodekite.com
vm4.nodekite.com
[centos8: 변수]
사용자 이름 = 밥
http_port =7878

보시다시피 새 섹션을 만들었습니다. [debian10:vars] ~을위한 데비안10 호스트 그룹 및 변수 추가( 사용자 이름 그리고 http_port ) 을위한 데비안10 거기에 호스트 그룹.

같은 방법으로 새 ​​섹션을 만들었습니다. [centos8: vars] ~을위한 센토스8 호스트 그룹 및 변수 추가( 사용자 이름 그리고 http_port ) 을위한 센토스8 거기에 호스트 그룹.

완료되면 저장 호스트 눌러 인벤토리 파일 + NS 뒤이어 그리고 그리고 .

실행 print_variable4.yaml 다음과 같이 플레이북:

$가능한 플레이북 플레이북/print_variable4.yaml

보시다시피 호스트 그룹에 따라 올바른 변수가 각 호스트에 전달됩니다.

사용자 정의 호스트 변수 작업

이 섹션에서는 인벤토리 파일에서 특정 호스트에 대한 변수를 설정하는 방법을 보여줍니다.

먼저, 호스트 인벤토리 파일은 다음과 같습니다.

$나노호스트

특정 호스트에 변수를 추가하려면(예: vm1.nodekite.com ) 아래 스크린샷과 같이 호스트 IP/DNS 이름 뒤에 공백/탭을 추가하고 변수를 입력합니다.

여러 변수를 추가할 수도 있습니다. 각 변수를 공백으로 구분하기만 하면 됩니다.

완료되면 를 눌러 인벤토리 파일을 저장합니다. + NS 뒤이어 그리고 그리고 .

실행 print_variable4.yaml 다음과 같이 플레이북:

$가능한 플레이북 플레이북/print_variable4.yaml

보시다시피 변수는 vm1.nodekite.com 주인. 다른 호스트에는 그룹 변수가 적용되어 있습니다.

범위를 사용하여 신속하게 인벤토리 파일 생성

호스트 IP 주소 또는 DNS 이름이 일치하는 경우(즉, 특정 형식이 있는 경우) 범위를 사용하여 Ansible 인벤토리 파일을 빠르게 생성할 수 있습니다.

이전 예에서는 호스트를 사용했습니다. vm1.nodekite.com , vm2.nodekite.com , vm3.nodekite.com 그리고 vm4.nodekite.com . 4줄을 입력하는 대신 VM[1:4].nodekite.com 인벤토리 파일에서

범위를 실험하려면 호스트 인벤토리 파일은 다음과 같습니다.

$나노호스트

인벤토리 파일에서 모든 호스트와 변수를 제거합니다.

이제 교체할 수 있습니다. vm1.nodekite.com 그리고 vm2.nodekite.com ~와 함께 VM[1:2].nodekite.com ~을위한 데비안10 호스트 그룹은 다음과 같습니다.

같은 방법으로 교체할 수 있습니다. vm3.nodekite.com 그리고 vm4.nodekite.com ~와 함께 VM[3:4].nodekite.com ~을위한 센토스8 호스트 그룹.

완료되면 다음을 눌러 파일을 저장합니다. + NS 뒤이어 그리고 그리고 .

실행 ping_all_hosts.yaml 다음과 같이:

$가능한 플레이북 플레이북/ping_all_hosts.yaml

보시다시피 플레이북을 실행했을 때 호스트 범위가 확장되었습니다.

다른 파일에 변수 저장하기

그룹 변수와 호스트 변수를 동일한 인벤토리 파일에 저장하는 것은 매우 쉽습니다. 그러나 더 많은 유연성을 원할 수 있습니다. 특히 범위를 사용하면 더 이상 호스트 변수를 설정할 수 없으므로 인벤토리 파일에서 범위를 사용하려는 경우. 그룹 변수와 호스트 변수를 다른 파일에 저장할 수 있습니다. 이 섹션에서는 수행 방법을 보여 드리겠습니다.

기본적으로 Ansible은 그룹 변수를 찾습니다. group_vars / 디렉토리 및 호스트 변수 host_vars / 예배 규칙서.

그래서, 생성 group_vars / 그리고 host_vars / 디렉토리는 다음과 같습니다.

$mkdir -pv {호스트, 그룹}_누구의

그룹 변수를 설정하려면 데비안10 호스트 그룹, 파일 생성 데비안10 (그룹 이름과 동일) group_vars / 디렉토리는 다음과 같습니다.

$나노group_vars/데비안10

다음과 같이 변수를 입력합니다.

사용자 이름: 릴리
http_port: 4343

완료되면 다음을 눌러 파일을 저장합니다. + NS Y 다음에 .

같은 방법으로 그룹 변수를 설정하려면 센토스8 호스트 그룹, 파일 생성 센토스8 (그룹 이름과 동일) group_vars / 디렉토리는 다음과 같습니다.

$나노group_vars/센토스8

다음과 같이 변수를 입력합니다.

사용자 이름: 밥
http_port: 7878

완료되면 다음을 눌러 파일을 저장합니다. + NS Y 다음에 .

실행 print_variable4.yaml 다음과 같이 플레이북:

$가능한 플레이북 플레이북/print_variable4.yaml

보시다시피 그룹 변수는 각 호스트 그룹에 대해 올바르게 설정되어 있습니다.

호스트에 대한 호스트 변수를 설정하려면 vm1.nodekite.com , 파일을 생성 vm1.nodekite.com (호스트 이름 또는 IP 주소와 동일) host_vars / 디렉토리는 다음과 같습니다.

$나노vm1.nodekite.com

다음과 같이 호스트 변수를 입력합니다.

사용자 이름: 알렉스
http_port: 7788

완료되면 다음을 눌러 파일을 저장합니다. + NS Y 다음에 .

실행 print_variable4.yaml 다음과 같이 플레이북:

$ 가능한 플레이북 플레이북/print_variable4.yaml
[

보시다시피 호스트 변수는 호스트에 대해 올바르게 설정되어 있습니다. vm1.nodekite.com .

Ansible에서 루프 작업

이 섹션에서는 Ansible에서 루프를 사용하는 방법을 보여줍니다.

먼저 새 플레이북을 만듭니다. 루프1.yaml 에서 플레이북/ 디렉토리는 다음과 같습니다.

$나노플레이북/루프1.yaml

에 다음 줄을 입력하십시오. 루프1.yaml 플레이북:

- 호스트: 모두
사용자: 가능
작업:
- 이름: 사용자 목록 인쇄
디버그:
메시지:'사용자: {{ 항목 }}'
with_items:
- 알렉스
- 밥
- 릴리

여기에 루프를 사용하여 사용자 목록을 인쇄하는 1개의 작업이 있습니다.

작업에 대한 반복 값을 설정하려면 다음을 사용합니다. with_items 기준 치수. 그런 다음 값을 하나씩 추가합니다.

with_items:
- 알렉스
- 밥
- 릴리

다음을 사용하여 현재 반복의 값에 액세스합니다. 안건 변하기 쉬운.

디버그:
메시지:'사용자: {{ 항목 }}'

완료되면 다음을 눌러 파일을 저장합니다. + NS 뒤이어 그리고 그리고 .

실행 루프1.yaml 다음과 같이 플레이북:

$가능한 플레이북 플레이북/루프1.yaml

보시다시피 각 호스트의 각 항목에 대해 동일한 작업이 실행되었습니다. 따라서 루프가 작동합니다.

Ansible에서 조건 작업하기

특정 조건에 따라 작업을 실행하려면 이 섹션이 적합합니다.

조건에 따라 작업을 실행하려면 다음을 사용할 수 있습니다. 언제 앤서블의 모듈. 이 모듈의 예를 살펴보겠습니다. 먼저 새 플레이북을 만듭니다. condition1.yaml 다음과 같이:

$나노플레이북/condition1.yaml

에 다음 줄을 입력하십시오. condition1.yaml 플레이북:

- 호스트: 모두
사용자: 가능
작업:
- 이름: 이 작업을 데비안에서만 실행
디버그:
메시지:'이 작업은 데비안에서 실행 중입니다'
언제: ansible_facts['분포']=='데비안'

여기,

sible_facts['배포'] == '데비안' 여부를 확인하는 데 사용됩니다. 분포 ~이다 데비안 . 이 작업은 배포가 Debian인 경우에만 실행됩니다.

NS sible_facts['배포'] Ansible Facts 변수에 액세스하는 데 사용됩니다. 가능_배포 . 다음을 사용하여 배포 버전을 확인할 수도 있습니다. 가능_배포_주요_버전 변하기 쉬운.

완료되면 다음을 눌러 파일을 저장합니다. + NS 뒤이어 그리고 그리고 .

실행 condition1.yaml 다음과 같이 플레이북:

$가능한 플레이북 플레이북/condition1.yaml

보시다시피 작업은 Debian 호스트에서만 실행되었습니다. 작업이 CentOS 호스트에서 실행되지 않았습니다.

동시에 여러 조건을 확인하고 모든 조건이 참인 경우에만 작업을 실행할 수도 있습니다. 예를 들어 보겠습니다.

새 플레이북 만들기 condition2.yaml 다음과 같이:

$나노플레이북/condition2.yaml

에 다음 줄을 입력하십시오. condition2.yaml 파일:

- 호스트: 모두
사용자: 가능
작업:
- 이름: 이 작업을 데비안에서만 실행10
디버그:
메시지:'이 작업은 데비안 10에서 실행 중입니다'
언제: ansible_facts['분포']=='데비안'
및 가능_사실['distribution_major_version']=='10'

여기에서 작업은 배포가 Debian( sible_facts['배포'] == '데비안' ) 버전은 10( 가능한_사실['distribution_major_version'] == '10' ). 두 조건이 모두 참이면 작업이 실행됩니다. 그렇지 않으면 작업이 실행되지 않습니다.

나는 사용했다 그리고 여기에서 두 조건이 모두 참인지 확인하는 키워드입니다. 조건 중 하나라도 참인지 확인하려면 다음을 사용할 수 있습니다. 또는 대신 키워드.

완료되면 다음을 눌러 파일을 저장합니다. + NS 뒤이어 그리고 그리고 .

플레이북 실행 condition2.yaml 다음과 같이:

$가능한 플레이북 플레이북/condition2.yaml

보시다시피 작업은 Debian 10 호스트에서만 실행되었습니다.

플레이북을 바꾸자 condition2.yaml 다음과 같이 Debian 8 호스트에서만 작업을 실행합니다.

보시다시피 인벤토리 파일에 Debian 8 호스트가 없기 때문에 모든 호스트를 건너뛰었습니다.

Ansible apt 모듈로 작업하기

NS 적절한 Ansible의 모듈은 Ubuntu/Debian 호스트에 특정 소프트웨어 패키지를 설치하는 데 사용됩니다. 이 모듈을 사용하는 방법을 살펴보겠습니다.

먼저 새 플레이북을 만듭니다. apt1.yaml 에서 플레이북/ 디렉토리는 다음과 같습니다.

$나노플레이북/apt1.yaml

에 다음 줄을 입력하십시오. apt1.yaml 플레이북:

- 호스트: 데비안10
사용자: 가능
되다: 사실
작업:
- 이름: apache2 설치
적절한:
이름: apache2
상태: 최신

NS 적절한 모듈은 이름 설치/업그레이드/제거하려는 패키지 및 상태 패키지의.

여기에서 설치하려고합니다. 아파치2 패키지 ( 이름: apache2 ) 내 Debian 10 호스트에서. 패키지를 설치하고 새 버전을 사용할 수 있으면 업그레이드하려고 하므로 상태 해야한다 최신 .

상태 다음 옵션도 허용합니다.

- 결석 한 – 패키지가 이미 설치된 경우 제거됩니다.
- 최신 – 업데이트가 있는 경우 패키지가 업그레이드됩니다. 패키지가 아직 설치되지 않은 경우 설치됩니다.
- 선물 – 패키지가 아직 설치되지 않은 경우 설치됩니다. 그러나 업데이트가 있는 경우 패키지가 업그레이드되지 않습니다.

내가 추가했음을 주목하라 되다: 사실 플레이북에서. 이것은 줄 것이다 가능 파일 시스템 구조를 수정하기 위한 사용자 sudo 권한(예: 패키지 설치/업그레이드/제거). 없이 되다: 사실 , NS 적절한 모듈을 설치할 수 없습니다 아파치2 패키지.

완료되면 다음을 눌러 플레이북을 저장합니다. + NS 뒤이어 그리고 그리고 .

실행 apt1.yaml 다음과 같이 플레이북:

$가능한 플레이북 플레이북/apt1.yaml

보시다시피 플레이북은 Debian 10 호스트에서 성공적으로 실행되었습니다.

보시다시피, 아파치2 내 Debian 10 호스트에 패키지가 설치되어 있습니다.

Ansible dnf/yum 모듈 작업

NS dnf 그리고 Ansible의 모듈은 CentOS/RHEL 호스트에 특정 소프트웨어 패키지를 설치하는 데 사용됩니다. 이 모듈을 사용한 것과 같은 방식으로 사용할 수 있습니다. 적절한 이 문서의 이전 섹션에 있는 모듈.

둘 다 dnf 그리고 모듈은 동일한 매개변수를 허용합니다. 당신은 사용할 수 있습니다 dnf CentOS/RHEL 8 호스트의 모듈 및 CentOS/RHEL 7 이상에서.

이제 이 모듈의 예를 살펴보겠습니다.

먼저 새 플레이북을 만듭니다. dnf1.yaml 에서 플레이북/ 디렉토리는 다음과 같습니다.

$나노플레이북/dnf1.yaml

에 다음 줄을 입력하십시오. dnf1.yaml 플레이북:

- 호스트: centos8
사용자: 가능
되다: 사실
작업:
- 이름: httpd 패키지 설치
dnf:
이름: httpd
상태: 최신

NS dnf 그리고 모듈은 이름 설치/업그레이드/제거하려는 패키지 및 상태 패키지의.

여기에서 설치하려고합니다. httpd 패키지 ( 이름: httpd ) 내 CentOS 8 호스트에서. 패키지를 설치하려고 하고 새 버전을 사용할 수 있는 경우 패키지를 업그레이드하고 싶습니다. 상태 해야한다 최신 .

상태 다음 옵션을 허용합니다.

- 결석 한 – 패키지가 이미 설치된 경우 제거됩니다.
- 최신 – 업데이트가 있는 경우 패키지가 업그레이드됩니다. 패키지가 아직 설치되지 않은 경우 설치됩니다.
- 선물 – 패키지가 아직 설치되지 않은 경우 설치됩니다. 그러나 업데이트가 있는 경우 패키지가 업그레이드되지 않습니다.

내가 추가했음을 주목하라 되다: 사실 플레이북에서. 이것은 준다 가능 파일 시스템 구조를 수정하기 위한 사용자 sudo 권한(예: 패키지 설치/업그레이드/제거). 없이 되다: 사실 , NS 적절한 모듈을 설치할 수 없습니다 httpd 패키지.

완료되면 다음을 눌러 플레이북을 저장합니다. + NS 뒤이어 그리고 그리고 .

실행 dnf1.yaml 다음과 같이 플레이북:

$가능한 플레이북 플레이북/dnf1.yaml

보시다시피 플레이북은 CentOS 8 호스트에서 성공적으로 실행되었습니다.

Ansible 서비스 모듈 작업

NS 서비스 Ansible의 모듈은 호스트에서 서비스를 시작, 중지, 다시 시작, 활성화(시작에 서비스 추가) 및 비활성화(시작에서 서비스 제거)하는 데 사용됩니다.

이전 섹션에서 Ansible을 사용하여 Apache HTTP 서버 패키지를 설치하는 방법을 보여주었습니다. 적절한 , dnf 그리고 모듈. 이제 Apache HTTP 서버 서비스가 실행 중이고 시스템 시작에 추가되었는지 확인하겠습니다.

나는 Debian 10 호스트와 함께 일할 것입니다. 그러나 원하는 경우 CentOS 8 호스트로 작업할 수 있습니다. 그에 따라 플레이북을 조정하기만 하면 됩니다.

먼저 새 Ansible 플레이북을 만듭니다. apt2.yaml 다음과 같이:

$나노플레이북/apt2.yaml

에 다음 줄을 입력하십시오. apt2.yaml 플레이북:

- 호스트: 데비안10
사용자: 가능
되다: 사실
작업:
- 이름: apache2 설치
적절한:
이름: apache2
상태: 최신
- 이름: apache2 서비스 시작
서비스:
이름: apache2
상태: 시작됨
활성화됨: 참

여기에 새 작업을 추가했습니다. apache2 서비스 시작 .

이름: apache2 – 내가 하고 있는 서비스는 아파치2 .

상태: 시작됨 – 서비스가 실행 중이어야 합니다.

활성화됨: 참 – 시스템 시작에 서비스를 추가해야 합니다.

NS 상태 매개변수는 다른 값을 허용합니다.

- 재장전 – 서비스는 구성 파일을 다시 로드해야 합니다.
- 다시 시작 – 서비스를 다시 시작해야 합니다.
- 시작했다 – 서비스가 실행 중이어야 합니다. 서비스가 실행되고 있지 않으면 서비스를 시작하십시오.
- 멈췄다 – 서비스를 중지해야 합니다. 서비스가 실행 중이면 서비스를 중지합니다.

플레이북 실행 apt2.yaml 다음과 같이:

$가능한 플레이북 플레이북/apt2.yaml

보시다시피 플레이북이 성공적으로 실행되었습니다.

보시다시피, 아파치2 서비스가 내 Debian 10 호스트에서 실행 중입니다.

Ansible 복사 모듈 작업

앤서블 복사 모듈은 주로 컴퓨터에서 원격 호스트로 파일을 복사하는 데 사용됩니다.

이전 섹션에서는 Debian 10 호스트에 Apache 2 웹 서버를 설치했습니다. 이제 복사를 해보자 index.html 파일을 Debian 10 호스트의 웹 루트에 저장합니다.

먼저 새 디렉토리를 만듭니다. 파일/ 다음과 같이:

$mkdir -V파일

새 파일 만들기 index.html 에서 파일/ 디렉토리는 다음과 같습니다.

$나노파일/index.html

에 다음 줄을 입력하십시오. index.html 파일:


< HTML >
< 머리 >
< 제목 >Ansible의 웹서버</ 제목 >
</ 머리 >
< 신체 >
< h1 >LinuxHint에 오신 것을 환영합니다.</ h1 >
< NS >이 웹 서버는 Ansible과 함께 배포되었습니다.</ NS >
</ 신체 >
</ HTML >

완료되면 다음을 눌러 파일을 저장합니다. + NS 뒤이어 그리고 그리고 .

새 Ansible 플레이북 생성 apt3.yaml 다음과 같이:

$나노플레이북/apt3.yaml

에 다음 줄을 입력하십시오. apt3.yaml 파일:

- 호스트: 데비안10
사용자: 가능
되다: 사실
작업:
- 이름: apache2 설치
적절한:
이름: apache2
상태: 최신
- 이름: index.html을 서버에 복사
복사:
src: ../파일/index.html
목적지:/어디/www/HTML/index.html
모드: 0644
소유자: www-data
그룹: www-data
- 이름: apache2 서비스 시작
서비스:
이름: apache2
상태: 시작됨
활성화됨: 참

여기서 과제 index.html을 서버에 복사 복사 index.html ~로부터 파일/ 디렉토리 / var / www / html / Debian 10 호스트의 디렉토리.

src: ../files/index.html – 소스 파일 경로.
대상: /var/www/html/index.html – 대상 파일 경로.
모드: 0644 – 파일 사용자(6 – 읽기 및 쓰기), 그룹(4 – 읽기) 및 기타(4 – 읽기)에 대한 권한.
소유자: www-data – 파일의 소유자를 다음으로 설정 www-데이터 .
그룹: www-data – 파일 그룹을 다음으로 설정 www-데이터 .

완료되면 다음을 눌러 파일을 저장합니다. + NS 뒤이어 그리고 그리고 .

실행 apt3.yaml 다음과 같이 플레이북:

$가능한 플레이북 플레이북/apt3.yaml

보시다시피 작업은 index.html을 서버에 복사 성공적입니다.

보시다시피, index.html 파일이 Debian 10 호스트에 복사되었습니다.

보시다시피 Debian 10 웹서버는 index.html 방금 Debian 10 호스트에 복사한 페이지입니다.

이것이 Ansible의 기본입니다. Ansible의 공식 문서를 읽으면 Ansible에 대해 자세히 알아볼 수 있습니다. 이 기사를 읽어 주셔서 감사합니다.