앤서블은 수백 개의 노드를 한 번에 관리할 수 있는 널리 사용되는 자동화 도구입니다. 앤서블에는 많은 훌륭한 기능이 있으며, 그 중 하나는 앤서블 lineinfile 모듈을 사용하여 원격 노드의 파일 내에서 단일 라인을 관리할 수 있는 능력입니다.
앤서블 lineinfile 모듈은 라인을 대체하거나 업데이트하거나 특정 라인을 추가하는 등 파일의 단일 라인에 대해 다양한 작업을 수행하는 모듈입니다.
이 튜토리얼에서는 앤서블 lineinfile 모듈이 무엇인지, 동작 방식은 무엇인지, 텍스트 파일을 관리하기 위해 어떻게 사용하는지 배우게 될 것입니다.
전제 조건
이 게시물은 앤서블 lineinfile 모듈에 대한 단계별 튜토리얼입니다. 따라하려면 다음 사항이 준비되어 있어야 합니다:
- 앤서블 컨트롤러 호스트 – 이 튜토리얼에서는 Ubuntu 18.04.5 LTS 머신에서 앤서블 v2.9.24를 사용합니다.
- A remote computer to run commands. You’ll need an inventory file set up and one or more hosts already configured to run Ansible command and playbooks on. The remote Linux computer will be called myserver, and the tutorial will use an inventory group called web.
- 튜토리얼을 정확히 따라하려면 원격 컴퓨터에 이미 Apache가 설치되어 있어야 합니다.
수정한 텍스트 파일을 Ansible lineinfile 모듈로 변경합니다.
이 튜토리얼을 시작하려면 Ansible lineinfile 모듈을 ad hoc 명령을 사용하여 실행합니다. Ad hoc 명령은 원격 호스트에서 단일 명령을 테스트하거나 실행하는 빠른 방법입니다.
Ansible 컨트롤러에 로그인하고 다음 명령을 실행합니다. 이 명령은 lineinfile 모듈 (-m
)을 사용하여 웹 머신에 연결하고 실행할 명령을 전달하는 인수 (-a
)를 사용합니다.
이 경우에는 lineinfile 모듈이 /etc/hosts 파일에서 IP 주소 127.0.0.1
을 myapache
와 매핑하여 localhost 항목을 업데이트합니다. 127.0.0.1
을 myapache
로 매핑하면 로컬로 HTTP://myapache:80에서 아파치 테스트 페이지로 이동할 수 있습니다.
path
는 파일 위치를 나타냅니다.regexp
는 파일에서 정규 표현식을 찾아127.0.0.1 myapache
로 업데이트합니다.- –become 플래그를 사용하면 명령을 특권 사용자로 실행할 수 있습니다.
web
은 모든 서버의 컬렉션인 인벤토리 그룹입니다.ansible.builtin.lineinfile
또는 간단히 lineinfile은 모듈 이름입니다.
명령을 실행한 후 원격 호스트에서 성공적으로 업데이트된 메시지인 CHANGED를 확인해야 합니다.

원격 노드에 SSH 클라이언트를 사용하여 로그인하고 cat
명령을 사용하여 /etc/hosts 파일이 새 값으로 업데이트되었는지 확인하십시오.
아래에서 볼 수 있듯이, 로컬호스트 항목이 원격 머신에서 127.0.0.1 myapache
로 성공적으로 업데이트되었습니다.

플레이북 내에서 여러 텍스트 파일 수정하기
원격 머신에서 한 줄을 관리하기 위해 단일 단기 명령을 사용하는 것은 괜찮을 수 있지만, 여러 파일에 여러 줄 또는 파일 내에 여러 줄이 있는 경우에는 어려울 것입니다. 단기 명령을 사용하는 대신에, ansible-playbook 명령을 사용하여 플레이북 내에서 Ansible lineinfile 모듈을 사용하는 것을 고려하십시오.
이제 플레이북 내에서 Ansible lineinfile 모듈을 사용하고 몇 줄을 수정하는 방법을 배워보겠습니다.
이미 Ansible 컨트롤러 호스트에 로그인한 것으로 가정합니다:
1. 홈 디렉터리에 ansible_lineinfile_module_demo라는 디렉터리를 만듭니다. 이 디렉터리에는 lineinfile 모듈을 호출하는 데 사용할 플레이북이 포함됩니다.
2. my_playbook.yml 파일을 ~/ansible_lineinfile_module_demo 디렉토리에 만들고 다음과 같은 YAML 플레이북 내용을 붙여넣습니다. 이 플레이북에는 원격 머신의 Apache 구성 파일의 다른 라인을 관리하는 Ansible lineinfile
모듈을 사용하는 여러 작업이 포함되어 있습니다.
아래 플레이북에는 다음과 같은 작업이 포함되어 있습니다:
1. ADMIN
이 /etc/sudoers 파일에 있는지 확인하고, 없으면 해당 작업이 추가됩니다.
2. Apache 기본이 /etc/apache2/ports.conf 파일에서 8080 포트를 수신 대기하도록 보장하며, 다른 포트 라인이 있는 경우 lineinfile 모듈을 사용하여 해당 포트를 8080
으로 업데이트합니다. 비슷하게 /etc/apache2/apache2.conf 파일에서 MaxKeepAliveRequests
를 1000으로, KeepAliveTimeout
를 100으로 업데이트합니다.
3. 원격 서버의 index.html
페이지 끝에 “Hello This is my Apache Page”라는 텍스트가 포함된 라인을 추가합니다. 이는 /var/www/html 디렉토리 아래에 있습니다.
Ansible 플레이북은 YAML로 작성됩니다. YAML에 대해 더 알아보려면, 여기를 클릭하세요
3. 이제 플레이북을 호출하고 원격 호스트에서 정의된 모든 라인을 추가 또는 업데이트하기 위해 ansible-playbook
명령을 사용하여 작업을 실행합니다.

아래에서는 TASK가 변경되었다는 상태를 가지고 있으며, 이는 원격 호스트가 올바른 상태에 있지 않았고 명령을 실행할 수 있도록 수정되었다는 것을 의미합니다. OK 상태인 TASK는 변경 사항이 필요하지 않음을 나타냅니다.
4. 그런 다음, 원하는 SSH 클라이언트를 사용하여 원격 호스트에 SSH로 접속합니다.
5. 마지막으로, my_playbook.yml에 정의된 모든 라인이 원격 호스트에서 업데이트되거나 추가되었는지 cat
명령을 사용하여 확인합니다.
아래 스크린샷은 admin
이 이미 sudoers 파일에 추가되었음을 확인합니다.

또한, 아래 스크린샷은 아파치가 기본적으로 포트 8080
에서 수신 대기 중임을 확인합니다.

마지막으로, MaxKeepAliveRequests
와 KeepAliveTimeout
이 각각 1000과 100으로 업데이트되었는지 확인합니다.

MaxKeepAliveRequests
and KeepAliveTimeout
in the config file 결론
Ansible의 lineinfile 모듈은 원격 호스트의 텍스트 파일을 수정하는 훌륭한 방법입니다. 이 모듈은 플레이북 내에서 텍스트 파일에 줄을 추가, 제거 및 수정하는 훌륭한 방법을 제공합니다.
Ansible lineinfile 모듈에서 어떤 다른 사용 사례가 이득을 얻을 수 있다고 보십니까?