Ansible Playbook - If

If

만약 운영체제가 계속 추가된다면?

tasks:
  - name: nginx for Ubuntu
    include_tasks: Ubuntu.yml
    when: ansible_distribution == 'Ubuntu'

  - name: nginx for CentOS
    include_tasks: CentOS.yml
    when: ansible_distribution == 'CentOS'

  - name: nginx for FreeBSD
    include_tasks: FreeBSD.yml
    when: ansible_distribution == 'FreeBSD'

  - name: nginx for Debian
    include_tasks: Debian.yml
    when: ansible_distribution == 'Debian'

생각보다 꽤 귀찮은 일이 될 것!

하지만 이는 조건절 if를 사용하면 깔끔하게 처리가 가능하다.

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"

vars는 변수를 정의하는 곳에 lnx_name 변수에 저장한다.

when을 사용할 때는 TaskNode의 수 X 2 만큼 수행해어야하나, 현재는 Task가 한개이기 때문에 Node의 수 X 1 만큼의 Task만 수행해야하기 때문에 훨씬 더 적은 Task로 작업을 수행할 수 있다는 장점이 있다.

Reference

인프런 조훈님 강의 - 앤서블을 깊이있게 활용하기



© 2022. by minkuk

Powered by minkuk