반응형
  1. Indent
    • 들여쓰기 줄을 항상 맞춰야 한다
  2. : 이후 띄어쓰기
    • 콜론 이후 띄어쓰지 않으면 문법 오류
  3. : 이후 즉시 variable을 사용할 경우 ''로 래핑
    • 콜론 직후의 {}는 yaml에서 dictionary로 인식된다.
  4. AWX에서의 localhost ~와 ansible에서의 경로는 다르다.
    • ansible에서의 ~는 /home/username 혹은 /root가 되지만, AWX에서는 /var/lib/awx/ (awx가 설치된 장소)이다.
    • ~나 /를 사용한 절대 경로는 AWX에서 인식되지 않을 가능성 높음.
    • AWX에서의 현재 디렉토리 . 는 yml 파일이 존재하는 곳.


반응형
  1. AWX를 이용하여 NODE에 사용자 생성
  2. 사용자 생성을 위하여 다음과 같은 Yaml파일을 생성
    • #vi /var/lib/awx/projects/awxtest/adduser.yml

    • 들여쓰기 및 공백은 위 이미지처럼 맞추어야 함

      ---
      - name: add user to node
      hosts: all 
      vars:
      - new_userid: atest
      tasks:
      - name: check exist users
      shell: cat /etc/passwd | grep {{ new_userid }} || echo "NULL" 
      register: rval

      - name: add user
      shell: /usr/sbin/useradd {{ new_userid }}
      when: rval.stdout =='NULL'

    • 생성할 아이디 : atest

    • 총 Task는 2개로 
      • 첫번째는 해당 User가 존재하는지 여부를 체크
      • 두번째는 결과값이 NULL일 경우 생성 
  3. Ansible-playbook을 이용한 사전 테스트
    • AWX에 적용하기 전에 ansible-playbook으로 사전 테스트 진행
    • 각 노드들의 /etc/passwd 파일 확인 (atest가 없음을 확인)

    • 테스트를 위하여 인벤토리 파일 생성 (hosts.inv)
    • #vi /var/lib/awx/projects/awxtest/hosts.inv
    • [all] 192.168.85.4 192.168.85.5
    • 내용 확인
    • #cat /var/lib/awx/projects/awxtest/hosts.inv


    • 수행
    • #ansible-playbook -i hosts.inv adduser.yml
    • OK=3, Changed=2가 나오면 성공
    • 실패한 경우 들여쓰기 및 공백 확인
    • Node1, Node2에서 결과 확인

    • AWX에서 테스트를 위하여 생성된 atest 유저 삭제
    • #userdel -r atest    ; -r은 홈디렉토리 등 모두 삭제하는 옵션

    • Node1, Node2에서 모두 삭제 확인
    • -
  4. AWX에 적용
    • AWX에서 신규 Template 생성

    • NAME : Adding User to Nodes
    • INVENTORY : AWX_TEST
    • PROJECTS : awx_test
    • PLAYBOOK : adduser.yml
    • CREDENTIAL : AWX_CRED
    • 를 눌러 저장
    • 생성된 Template 확인

    • 를 눌러 실행
    • 실행 결과 확인

    • 저장된 내용 확인
    • #cat /etc/passwd

    • -
  5. 목표
    • Yaml을 이용하여 Node에 사용자 생성
    • yml 기본 문법 확인
      • 변수 선언 후 사용은 {{ 변수명 }} 를 이용
      • Register를 이용 후 When 조건 사용 이해
    • 추가 목표 
      • yml을 이용하여 사용자 삭제
      • yml을 이용하여 사용자 패스워드 부여 (ssl 등을 이용해야 하며, Yaml외 언어 코딩이 필요할 수 있음)


반응형
  1. Yaml파일 내에서 실행 결과를 저장하여 사용하는 방법
  2. 예약어는 register: 를 사용
    • 위 소스는 doc.tar파일을 각 Node에 doc2.tar로 전송 후 tar를 이용하여 압축을 풀어내는 소스
    • 선행 조건 : 각 Node에 /testdir/doc2 폴더가 생성되어 있어야 함
    • .
    • 위 소스의 12라인 
    •  register: result 문장은 tasks의 copy에 대한 결과를 result에 저장함
    • 14~15라인 : result step 1로 실행 블록 설정
    •  debug: var=result 문장은 result를 var변수에 넣고 debug로 화면에 출력 함
    • 각 결과에 대한 자세한 설명 내용은 
    • Ansible 문서인 https://docs.ansible.com/ansible/latest/modules/copy_module.html#copy-module 을 참조
    • 위 결과를 확인 하면 각 노드별로 실행에 대한 결과 값이 저장되어 있음
    • 다시 한번 실행 해 보면
    • 처음 실행과 틀린 점은 재 실행시 changed가 false로 변경되며, extract tar의 task가 실행되지 않음
    • .
  3. 핵심 사항
    • 본 문서의 목적은 register:를 활용하는 것
    • ①의 실행 결과를 result에 저장하고
    • ②에서 result.changed로 전달된 값을 비교하여 변경되었다는 리턴값이 들어오면 
    • ③의 task를 실행하게 됨
    • 각 항목을 접근하기 위해서는
    • result.changed, result.checksum... 등으로 c/c++의 구조체나 객체를 접근하는 방식으로 사용하면 됨
    • 위에 제공된 소스는 result.changed == true를 비교하였으나, 좀 더 정확한 내용은 result.failed == false로 사용하는 것을 권장 함
    • .
  4. AWX에 적용 및 실행
    • [WARNING]에 대해서는 추가 분석 필요
    • .
  5. 추가 실습
    • 디렉토리를 생성하는 task의 추가
    • 디렉토리 및 파일 전송이 모두 완료된 경우 tar 압축 해제