본문 바로가기

DevOps/Ansible

[Ansible] 7. ansible Module (텍스트 수정)

 

 

오늘 포스팅 할 내용은 ansible에서 text파일을 어떻게 관리하면 좋을까? 입니다.

기본적으로 linux OS에서는 echo 명령어와 sed 명령어 등을 이용해서 text 파일을 수정하고 관리하였는데,

앤서블에서는 이러한 기능들을 모듈로 제공하고 있습니다.

 

  • blockinfile – Insert/update/remove a text block surrounded by marker lines
  • lineinfile – Manage lines in text files
  • replace – Replace all instances of a particular string in a file using a back-referenced regular expression

간단히 설명하자면, 

  • blockinfile은 echo랑 비슷하지만 text 내용을 추가하는것입니다. 
    • "## {mark} ANSIBLE MANAGED BLOCK ##"
    • 이와 같은 marker의 형태로 추가될 내용을 surrounded 해줄 marker가 같이 입력됩니다.
  • lineinfile은 한줄의 텍스트를 고치고 싶을때 사용하면 됩니다.
  • replace는 여러줄의 텍스트를 고치고 싶을때 사용 합니다.. 이때 위 (lineinfile) 모듈과 같은 방식으로 using a back-referenced 정규식을 사용해서 text를 분별합니다.

 

각각의 예제를 하나씩 사용해보겠습니다.


1.  blockinfile

- name: What is blockinfile
  blockinfile:
    path: /etc/hosts
    block: |
      172.10.0.115 kpkim.local
      172.10.0.166 hspark.local
    marker: "## {mark} ANSIBLE MANAGED BLOCK ##"
  • path: 수정할 파일의 경로
  • block:  
    • |   아래에 입력하는 내용을 block text를 insert하게 됩니다
  • marker: Default로 입력되는 마커를 수정할수 있습니다.
  • backup: yes 로 설정하게 되면 수정할 파일의 백업본을 만들어놓고 작업 합니다.
  • insertafter: 특정 위치 아래 input을 하고 싶을때 사용합니다.

 


2. lineinfile

- name: Insert configuration block
  lineinfile:
    path: "{{ item.path }}"
    backup: yes
    line: "{{ item.value }}"
  loop:
    - { path: /etc/hosts,  value: "{{ backup__hosts_file }}" }
    - { path: /etc/hosts,  value: "{{ backup__hosts_file }}" }

 

loop를 돌려서 여러줄을 추가할수도 있습니다.

  • path는 수정하고 싶은 파일의 경로를 적습니다.
  • backup: 백업을 합니다.(시간이 뒤에 입력되서 /etc/hosts.12356:17:16 이런식으로 백업을 해놉니다.)
  • value : 해당 내용을 입력합니다.

3. Replace

우선 기본적으로 정규식을 이용하여 구분하기 때문에 사용하기 쉽지 않습니다.

한가지만 예제를 통해서 알아보도록 하겠습니다.

 

- name: Replace between the expressions (requires Ansible >= 2.4)
  ansible.builtin.replace:
    path: /etc/hosts
    regexp: '(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}'
    replace: '172.10.10.10'

 

  • path: 당연히,,
  • regexp: 이건 대체하고 싶은 text들을 특정할때 사용하는 정규표현식인데, 위 예제는 제가 ipv4 어드레스에 대한 정규표현식을 찾아논것이고, 모든 ipv4형태의 text들을 
  • replace: 172.10.0.10 으로 대체 하겠다는 내용입니다.