OPEN SOURCE/ANSIBLE

[ANSIBLE] with_sequence와 when 사용하기

EARTH_ROOPRETELCHAM 2021. 3. 2. 16:18
728x90
반응형

with_sequence

with_sequence를 이용하면 범위에 맞는 값들을 format 형식으로 넣어줍니다.

- name: with_sequence
  debug: msg="{{ item }}"
  with_sequence: start=1 end=4 format=test%02x
  
# result
test01
test02
test03
test04
  • format을 test{{ 2자리 수로 sequence }}로 두었기 때문에 위와 같은 결과를 보여줍니다.
  • with_sequence에서 루프를 돌 때의 변수는 item입니다.
    • C, C++, JAVA 등에서 for(int i = 0; i < 8; i++)할 때의 i를 item이라는 이름의 변수로 사용한다고 생각하면 됩니다.

만약, with_sequence에 들어가는 start ~ end값이 특정 변수에 의해 작성이 된다면, 아래와 같이 작성하는 것이 좋습니다. 

- name: with_sequence
  debug: msg="{{ item }}"
  with_sequence: start=0 end={{ count.stdout|int - 1 if count.stdout|int >= 1 else 0 }}
  • 만약 count.stdout|int 값이 0보다 작을 경우, end가 start 보다 작아 실행 시 오류를 내뱉습니다.
  • 따라서, 위와 같이 end문에 if ~ else 문을 넣으면 오류를 방지할 수 있습니다.

with_sequence와 when 함께 사용하기

when의 경우, with_sequence와 함께 사용하면 with_sequence의 각 루프마다 확인하는 용도로 사용됩니다.

따라서, 아래의 예시와 같이 루프 중 특정 루프는 건너뛰고자 할 때 사용할 수 있습니다.

- name: with_sequence + when
  debug: msg="{{ item }}"
  with_sequence: start=1 end=4 format=test%02x
  when: {{ item|int }} != 3
  
# result
test01
test02
test04
  • when 조건을 with_sequence의 각 루프마다 체크하여 item값이 3인 경우에 해당 루프를 실행하지 않도록 합니다.
728x90
반응형