ansible 글 내용을 작성하면서 멱등성(idempotent)이란 용어를 쉽게 표현한 곳이 없어서 서술해보았다.



* 멱등성(idempotence) 이란?


연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 멱등성(idempotence) 이라 한다. puppet, chef, ansible 등은 모두 이런 특성을 가지고 있다. 

쉽게 말하면, rest api의 경우 get, head,put, delete 메소드는 멱등성을 가지고 있다. 그러나 post는 상태를 변화시키기 때문에 멱등성이 없다. (status 변화를 준다.)




* ansible 툴에서의 멱등성이란?


여러번 ansible 툴을 사용하더라도 동일한 결과값을 나올 수 있도록 제공되는 형태여야 한다. 즉 매번 다른 결과가 나오거나 에러가 나온다면 비멱등성(non-idempotent) 하다고 할 수 있다. ansible 툴의 거의 대부분의 모듈은 멱등성을 제공한다. 또한 멱등성을 제공하기 위해서는 조건절을 제공하고 있다. 


예를 들자면, 더 깊이 들어가면, 파일/디렉토리를 생성또는 삭제하는 ‘create:’, ‘remove:’ 같은 ansible 모듈을 실행할 때 ‘when:’ 조건절을 이용할 수 있다. 상태가 변경되면 ‘changed_when:’ 또는 ‘failed_when:’을 사용할 수 있다. 대부분의 ansible 모듈이 멱등성(idempotence)를 보장한다라는 의미는 상태(status)를 파악할 수 있다는 의미를 가진다. 


원래 제공한 ansible 모듈은 대부분 멱등성를 제공하나 개발자/시스템 운영자가 만든 ansible 스크립트는 멱등성를 제공하지 못할 수 있다. 따라서 멱등성이 깨지지 않도록 주의해야 한다. 


  


Posted by '김용환'
,