ansible 모듈에 신기하게도 network interface addres를 설정하는 모듈이 없다. 물론 mncli라는 모듈은 있지만 이것은 network manager를 사용하는 모듈인데, 서버에서는 network manager를 사용하지 않는 경우가 많아서 쓰기가 그렇다.

그래서 간단하게 ip 명령을 이용한 모듈을 만들어 봤다. 자신의 playbook의 library 디렉토리에 복사해서 사용하면 된다.

사용법은 아주 심플하다...

- ipaddr: name=iface_name addr=10.10.10.10/32

모듈 개발은 http://docs.ansible.com/ansible/developing_modules.html 에 자세히 설명이 되어 있고, 간단하게 요약하자면..

  • 각 모듈은 독립적인 실행 스크립트이고 stdin으로 json parameter가 오고, stdout으로 json response를 보내면 된다.
  • ansible.module_utils.basic.AnsibleModule 인스턴스를 만들어서 ansible과 통신하고, 성공하면 module.exit_jsoin(), 실패하면 module.fail_json(msg='')를 실행한다.
  • check_mode를 지원하면, 변경이 필요한 경우에만 실행한다.
  • 테스트하는 방법이 좀 그렇다. 제가 osx를 사용하는데 리눅스 대상으로 실행해야 해서 docker를 사용해서 했다.

ps. interface에는 address를 복수로 설정할 수 있는데, 현 상황에서는 별로 필요없어서 넣지 않았다.