2017년 6월 25일 일요일

[Ansible] '타워'로 NXOS에 vlan 만들기 (8)



원래는 7번째 글에서 Ansible 시리즈를 완료하려고 하였으나~
생각해 보면 타워에서도 NXOS에 vlan 정도는 만들어줘야 궁금증이 해소 될 것 같아서..

타워가 약간 코어랑 다른 부분들이 있기도 하고...

그런 의미에서 준비했습니다 :)



결과부터 얘기하자면, (항상 테스트 다 하고 글을 씀) 당황스럽네요 ㅎㅎㅎㅎ
왜 다르지 -_-; 라는 생각이....


자 '앤서블 타워에서 NXOS에 vlan을 만들기'라는 주제로 순서대로 진행해 볼까요?

1. Credentials 만들기 
이전 글을 보셨다면, 다 아시겠지만~ 인증 절차를 통과하도록 만들어 줘야합니다.
근데 의문인게..네트워크 장비니까 (가상이지만) 나는 Machine 타입이 아니라 Network로 해야지 라고 하면..나중에 ssh 로긴이 안됩니다.

어디다가 쓰는 type일까요?
연구가 필요합니다...일단 Type을 Machine으로 해주어야 합니다.








네트워크로 지정하고 하면 모듈을 shell이나, command를 선택하면, 저쪽에서 진행이 안됩니다. 혹여나 나중에 모듈에 nxos가 추가되면 가능할수도 있을꺼 같긴 한데...일단은 안됩니다. 그러니 우리는 Machine을 타입으로 지정합니다.


2. 애드혹(Run command) 해보기
그러면 우리는 여기서 AD-Hoc(Run command로 한번만 처리하는 방식)을 하게 되면 에러를 계속 만나게 됩니다.




왜냐면...모듈이 NXOS가 아니니까요 제대로 로그인 이후에 환경을 못 불러옵니다.
왠지 예전에 NX-OS 테스트 환경 구축 실패 사례 가 떠오르지 않나요?

네 그거랑 같은 상황 입니다.

따라서...결국 NXOS를 핸들링 하려면 플레이북을 써야 합니다.
거기서는 모듈을 메뉴얼하게 입력해서 쓸수 있으니까요.

3. 프로젝트 만들기
타워에서 플레이북을 쓰려면 프로젝트라는 것을 만들어야 합니다.
왠지 쉽게 하려다가 일이 커지는 느낌이죠?



근데 원래 자주 사용하는 것은 이렇게 만들어 두고 쓴답니다.
매번 사용할 것들을 UI에서 하나하나 클릭 한다면 효율적이지 않으니까요.

졸지에 '타워에서 프로젝트랑 플레이북 만들기' 라는 글이 되어 버렸네요. 하하하;;;





처음에 프로젝트를 만들면 알수 없는 말들이 많지만, 그 중에서 가장 이상하게 보이는 것은 SCM Type이 인데요.


어떤 소스를 쓸꺼냐는 건데, 저희는 직접 작성한 소소를 쓸꺼라 Manual을 선택하면, 이런 에러가 나옵니다.
대략 보면, 나는 /var/lib/awx/projects에 위치한 것만 읽을 꺼고 또한, 유저 그룹이 모두 awx어야만 그걸 봐줄꺼라는 의미입니다.

따라서 yml 플래이북 파일을 여기에 옮기고, 오너십을 변경해 주어야합니다.
이렇게요.



그러고 나면 플래이북 yml파일을 프로젝트에서 읽어들일 수 있습니다.


4. 템플릿 만들기 

프로젝트를 실행하기 위해서는 해당 프로젝트가 실행되는데, 필요한 요소들이 입력되는 템플릿을 만들어줘야 하는데요(왠지 하다보니 꼭 네트워크에 클래스 맵 짜는거 같은 느낌이..)


여기서 재미있게 황당한 일을 겪습니다.
위에 보면 노란색 부분을 일부로 구분되게 한 인벤토리라는 부분이 있는데요.


즉 인벤토리란 제가 사용하고 싶은 호스트를 등록하고 그냥 쓰는 거였죠.
하지만 여기에는 왜 그룹이라는게 추가 되었을까요?

시연을 위해서? 기능 설명하려고?
아닙니다..저는 최소한의 노력으로...최대의 효과를....쿨럭....




네 이게 없으면, 호스트를 'extra-vars'로 받지 못합니다.
다른 방법은 아직 못 찾았는데요...

무슨 말인고 하면, 앤서블 타워가 아니라 앤서블 셸에서 아래와 같이 실행을 하면 잘 돌아갑니다.


[ vlan_ex.yml ]
---
- name: vlan management
  hosts: '{{ dest }}'
  connection: local
  gather_facts: no


  tasks:
    - name: vlan create
      nxos_vlan: 
        vlan_id: 10
        username: admin
        state: present 
        name: by_ansible 
        transport: nxapi



저 extra-vars를 호스트에 넣으면 인식하지 못합니다.


이 에러는 보통 hosts라는 건 입력 값이 아니라서 못 쓰는 경우인데요
yml 파일 안에서 hosts를 또 쓰면 발생합니다.

---
- name: vlan management
  hosts: '{{ hosts }}'
.....

근데 ...계속 저런 에러가 나더라고요...
그래서 방법을 찾고 찾고 찾아보니..두가지가 가능한데요.

1) yml파일에서 hosts파일을 fixed로 입력
예시 > hosts: 172.30.1.201

2) 그룹을 만들고 그룹 이름을 yml에 입력
예시 > hosts: switches

2)번 내용을 볼때는 /etc/ansible/hosts파일 대신에 앤서블 타워는 그룹 이름이 이걸 대체하는 것 같습니다.

같으면 좋긴 할텐데...다르네요...다르네요...


그래서 결론을 얘기하자면, 이런 그룹내용을 앤서블 타워가 읽어서 실행한다~!
입니다. 여기까지 오는데다가 쉽지가 않네요...두개가 동작하는게 약간 차이가 있어서...

[ vlan_ex.yml ]
---
- name: vlan management
  hosts: switches
  connection: local
  gather_facts: no


  tasks:
    - name: vlan create
      nxos_vlan: 
        vlan_id: 10
        username: admin
        state: present 
        name: by_ansible 
        transport: nxapi




실행 결과~


예전에 한 것처럼 쓸모 있게 하는건 나중에 아이디어가 떠오르면 포스팅 하겠습니다~



참고자료 : 
https://linuxsimba.com/ansible-tower-network-automation-example

0 개의 댓글:

댓글 쓰기

 
Copyright © . 엔지니어를 위한 파이썬 및 기술 블로그 - Posts · Comments
Theme Template by BTDesigner · Powered by Blogger