Ansible-변수
플레이 북의 변수는 very similar모든 프로그래밍 언어에서 변수를 사용하는 것. 변수에 값을 사용 및 할당하고 플레이 북의 어느 곳에서나 사용하는 데 도움이됩니다. 변수 값 주위에 조건을 배치하고 그에 따라 플레이 북에서 사용할 수 있습니다.
예
- hosts : <your hosts>
vars:
tomcat_port : 8080
위의 예에서는 변수 이름을 정의했습니다. tomcat_port 해당 변수에 값 8080을 할당하고 필요할 때마다 플레이 북에서 사용할 수 있습니다.
이제 공유 된 예제에서 참조를 가져옵니다. 다음 코드는 역할 중 하나 (install-tomcat)에서 가져온 것입니다.
block:
- name: Install Tomcat artifacts
action: >
yum name = "demo-tomcat-1" state = present
register: Output
always:
- debug:
msg:
- "Install Tomcat artifacts task ended with message: {{Output}}"
- "Installed Tomcat artifacts - {{Output.changed}}"
여기서 출력은 사용 된 변수입니다.
위 코드에서 사용 된 모든 키워드를 살펴 보겠습니다.
block − 주어진 블록을 실행하는 Ansible 구문.
name − 블록의 관련 이름-로깅에 사용되며 모든 블록이 성공적으로 실행 된 것을 디버깅하는 데 도움이됩니다.
action− 액션 태그 옆에있는 코드는 실행할 작업입니다. 액션은 yaml에서 사용되는 Ansible 키워드입니다.
register − 동작의 출력은 register 키워드를 사용하여 등록되며 Output은 동작 출력을 보유하는 변수 이름입니다.
always − 다시 Ansible 키워드는 아래에서 항상 실행됨을 나타냅니다.
msg − 메시지를 표시합니다.
변수 사용-{{Output}}
이것은 변수 Output의 값을 읽을 것입니다. 또한 msg 탭에서 사용되므로 출력 변수의 값을 인쇄합니다.
또한 변수의 하위 속성도 사용할 수 있습니다. {{Output.changed}} 출력이 변경되었는지 여부를 확인하고 그에 따라 사용하는 경우와 같습니다.
플레이 북의 예외 처리
Ansible의 예외 처리는 모든 프로그래밍 언어의 예외 처리와 유사합니다. 플레이 북에서 예외 처리의 예는 다음과 같습니다.
tasks:
- name: Name of the task to be executed
block:
- debug: msg = 'Just a debug message , relevant for logging'
- command: <the command to execute>
rescue:
- debug: msg = 'There was an exception.. '
- command: <Rescue mechanism for the above exception occurred)
always:
- debug: msg = "this will execute in all scenarios. Always will get logged"
다음은 예외 처리를위한 구문입니다.
rescue 과 always 예외 처리와 관련된 키워드입니다.
블록은 코드가 작성되는 곳입니다 (유닉스 머신에서 실행되는 모든 것).
블록 기능 내부에 작성된 명령이 실패하면 실행이 복구 블록에 도달하여 실행됩니다. 블록 기능 아래 명령에 오류가없는 경우 구조가 실행되지 않습니다.
Always 모든 경우에 실행됩니다.
따라서 Java와 동일한 것을 비교하면 try, catch 및 finally 블록과 유사합니다.
여기, Block ~와 비슷하다 try block 실행할 코드를 작성하고 rescue ~와 비슷하다 catch block 과 always ~와 비슷하다 finally.
루프
다음은 Ansible에서 루프 사용을 보여주는 예제입니다.
작업은 모든 war 파일 세트를 한 디렉토리에서 tomcat webapps 폴더로 복사하는 것입니다.
아래 예제에서 사용 된 대부분의 명령은 이전에 이미 다루었습니다. 여기에서는 루프 사용에 집중합니다.
처음에는 'shell'명령에서 ls * .war을 수행했습니다. 따라서 디렉토리에있는 모든 war 파일을 나열합니다.
해당 명령의 출력은 output이라는 변수에서 가져옵니다.
반복하려면 'with_items'구문이 사용됩니다.
with_items : "{{output.stdout_lines}}"-> output.stdout_lines는 한 줄씩 출력을 제공 한 다음 Ansible의 with_items 명령을 사용하여 출력을 반복합니다.
with_items 명령에서 stdout_lines를 사용하는 방법을 이해하기 위해 예제 출력을 첨부합니다.
---
#Tsting
- hosts: tomcat-node
tasks:
- name: Install Apache
shell: "ls *.war"
register: output
args:
chdir: /opt/ansible/tomcat/demo/webapps
- file:
src: '/opt/ansible/tomcat/demo/webapps/{{ item }}'
dest: '/users/demo/vivek/{{ item }}'
state: link
with_items: "{{output.stdout_lines}}"
블록
전체 플레이 북은 블록으로 나뉩니다. 실행할 가장 작은 단계는 블록에 기록됩니다. 특정 명령어를 블록에 작성하면 기능을 분리하고 필요한 경우 예외 처리로 처리하는 데 도움이됩니다.
블록의 예는 위의 변수 사용, 예외 처리 및 루프에서 다룹니다.
조건부
조건은 조건에 따라 특정 단계를 실행해야하는 경우에 사용됩니다.
---
#Tsting
- hosts: all
vars:
test1: "Hello Vivek"
tasks:
- name: Testing Ansible variable
debug:
msg: "Equals"
when: test1 == "Hello Vivek"
이 경우 test1 변수가 when 조건에서 언급 한 것과 같으므로 Equals가 인쇄됩니다. when 모든 프로그래밍 언어에서와 같이 논리 OR 및 논리 AND 조건과 함께 사용할 수 있습니다.
Hello Vivek에서 test1 변수의 값을 변경하여 Hello World를 말하고 출력을 확인하십시오.