2017년 11월 18일 토요일

[Ansible] 동적으로 변수를 넣어 보아요~!



저번 글([Ansible] 조건별로 nginx를 "한방에" 설치하기)에서는

fact에서 생성한 인자를 받아서, 그걸 다시 when이라는 조건을 걸어서 우분투나 센트OS를 설치했었죠~!!!

음...근데 솔직히 아름답지 않죠 무슨 뜻이냐면...세상에는 많은 종류의 OS가 있는데 이때 마다 3줄씩 추가해서 (아래처럼) 작성해야 한다는거거든요..
  - name: nginx for CentOS
    include_tasks: CentOS.yml
    when: ansible_distribution == 'CentOS'

모름지기 좋은 코드 혹은 좋은 내용이란 짧은 줄에 많은 내용을 담아야 하고, 그게 보기 좋아야 한다고...배웠거든요! 제가 하는 말이 아닙니다 그러니까 신뢰하셔도 되요



그래서 저쪽에서 중복되는 부분을 제거할꺼에요.
즉 CentOS? Ubuntu이렇게 생긴 부분인거죠.

이 부분을 변수 처리해서 현재의 ansible_distribution을 바로 인자로 쓸껀데, 이걸 하기 위해서는 조건문이라는 것을 써야 합니당.

개발자 분들이야 조건문이라는 말이 나오기 전부터 분기 해야 겠네 라고 생각하시겠지만요
(이 붕가는 아닙니다아 -_-;)


참 그리고 CentOS와 Ubuntu 같은 것을 변수 처리 하기 위해서 vars쪽에 선언해 주어야 합니다.

그러면 이번엔 특별히 바뀐 코드 부터 볼까요?
코드가 기존에 비하면 한결 간결....해져 보이겠죠...? 저만의 착각은 아니겠죠오~!

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
---
- name: Install nginx on the nodes
  hosts: nodes
  become: yes
  vars:
    lnx_name: "{{ 'Ubuntu' if ansible_distribution == 'Ubuntu' else 'CentOS' if ansible_distribution == 'CentOS' else 'Just Linux' }}"

  tasks:
  - name: nginx for Any Linux
    include_tasks: "{{ lnx_name }}.yml"


이걸 돌리면 이렇게 돌아간답니다.






0 개의 댓글:

댓글 쓰기

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