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"

다음은 예외 처리를위한 구문입니다.

  • rescuealways 예외 처리와 관련된 키워드입니다.

  • 블록은 코드가 작성되는 곳입니다 (유닉스 머신에서 실행되는 모든 것).

  • 블록 기능 내부에 작성된 명령이 실패하면 실행이 복구 블록에 도달하여 실행됩니다. 블록 기능 아래 명령에 오류가없는 경우 구조가 실행되지 않습니다.

  • Always 모든 경우에 실행됩니다.

  • 따라서 Java와 동일한 것을 비교하면 try, catch 및 finally 블록과 유사합니다.

  • 여기, Block ~와 비슷하다 try block 실행할 코드를 작성하고 rescue ~와 비슷하다 catch blockalways ~와 비슷하다 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를 말하고 출력을 확인하십시오.