웹사이트 검색

Ansible 가이드: Ansible을 사용하여 파일 관리


이 페이지에서

  1. 무엇을 할 것인가?\n
  2. Ansible에서 복사 및 템플릿 모듈을 사용하여 파일 복사\n
    1. 1. 로컬에서 원격 대상 시스템으로 파일 복사
    2. 2. 원격 시스템의 파일을 다른 디렉토리로 복사
    3. 3. 파일 복사 및 파일 권한 및 소유자 변경\n
    4. 4. 템플릿 모듈로 파일 복사\n

    1. 1. 원격 시스템에서 로컬로 다운로드
    2. 2. 디렉토리 구조 없이 원격에서 로컬로 다운로드

    1. 1. blockinfile을 사용하여 파일에 여러 줄 삽입\n
    2. 2. 마커 옵션을 사용하여 여러 줄 삽입\n
    3. 3. 마커 내부의 여러 줄 블록 주변 삭제/제거
    4. 4. 파일에 새 줄 삽입
    5. 5. lineinfile 모듈을 사용하여 파일에서 라인을 제거하십시오.\n
    6. 6. 패턴 문자열을 정규식으로 교체하고 모듈 교체\n
    7. 7. 주석 해제 구성\n
    8. 8. 구성 라인에 대한 설명\n

    1. 1. 파일의 심볼릭 링크 생성
    2. 2. 파일 모듈을 사용하여 새 디렉터리 만들기\n

    이 가이드에서는 Ansible 모듈을 사용하여 파일을 관리하는 방법을 보여드리겠습니다. Ansible을 사용하여 파일을 복사, 편집, 삽입, 다운로드 및 교체하는 방법을 배우게 됩니다.

    우리는 무엇을 할 것입니까?

    • 복사 및 템플릿 모듈을 사용하여 파일 복사\n
    • 가져오기 모듈을 사용하여 파일 다운로드\n
    • blockinfile, lineinfile을 사용하여 파일 편집 및 모듈 교체\n
    • 파일 속성 관리

    Ansible에서 복사 및 템플릿 모듈을 사용하여 파일 복사

    Ansible은 로컬 디렉토리에서 원격 대상 시스템으로 파일을 복사하기 위한 일부 모듈(복사 및 템플릿 모듈)을 제공합니다.

    복사와 템플릿 모듈의 차이점은 복사 모듈은 파일 디렉터리에서 파일을 복사하고 템플릿은 Ansible 플레이북의 템플릿 디렉터리에서 Jinja2 템플릿을 복사한다는 것입니다.

    복사 모듈은 인증서와 같은 영구 파일을 복사하는 데 적합하고 템플릿은 가상 호스트 구성 등과 같은 재사용 가능한 구성에 더 유용합니다.

    1. 로컬에서 원격 대상 시스템으로 파일 복사

    로컬 파일 디렉토리의 sources.list 구성을 원격 시스템 /etc/apt/sources.list에 복사합니다. 구성이 있는 경우 타임스탬프를 기반으로 교체 및 백업됩니다.

    - name: Copy from Local to Remote Target Machine with 'copy'
      copy:
        src: sources.list
        dest: /etc/apt/sources.list
        backup: yes

    2. 원격 시스템의 파일을 다른 디렉토리로 복사

    원격 시스템의 sudoers 구성 /etc/sudoers.d/hakase를 다른 디렉터리 /home/hakase/hakase-suoers.txt에 복사합니다. remote_src 옵션으로 수행할 수 있습니다.

    - name: Copy file from one directory to other on the Remote Machine
      copy:
        src: /etc/sudoers.d/hakase
        dest: /home/hakase/hakase-sudoers.txt
        remote_src: yes

    3. 파일 복사 및 파일 권한 및 소유자 변경

    파일 디렉토리의 bash 파일을 원격 서버 시스템에 복사하고 기본 파일 권한을 0755로 설정하고 파일 소유자를 hakase로 설정합니다.

    - name: Copy file and set up the permission and owner of the file
      copy:
        src: simple.sh
        dest: /home/hakase/simple.sh
        owner: hakase
        group: hakase
        mode: 0755

    4. 템플릿 모듈로 파일 복사

    템플릿 디렉터리에서 nginx 가상 호스트에 대한 Jinja2 템플릿 구성을 원격 시스템의 /etc/sites-enabled/ 디렉터리로 복사합니다. Jinja2 템플릿을 사용하여 구성에 대한 변수를 생성하고 재사용 가능성을 높일 수 있습니다.

    - name: Copy file using 'template' module
      template:
        src: default.j2
        dest: /etc/nginx/sites-enabled/
        backup: yes
        owner: root
        group: root
        mode: 0644

    Ansible에서 Fetch Module을 사용하여 파일 다운로드

    원격 시스템에서 로컬 ansible 노드로 파일을 다운로드하기 위해 fetch라는 ansible 모듈을 사용할 수 있습니다.

    1. 원격 컴퓨터에서 로컬로 다운로드

    백업을 생성하기 위해 nginx 구성 파일 nginx.conf를 원격 서버에서 로컬 ansible-node 디렉토리 /home/hakase/backup으로 다운로드합니다. 그리고 기본 가져오기 모듈에는 디렉토리 구조가 포함됩니다.

    - name: Download file from Remote Machine to Local ansible-node directory
      become: yes
      fetch:
        src: /etc/nginx/nginx.conf
        dest: /home/hakase/backup/

    2. 디렉토리 구조 없이 원격에서 로컬로 다운로드

    flat 옵션을 추가하여 원격 머신에서 디렉토리 구조 없이 로컬 ansible-node로 다운로드합니다.

    - name: Download file from Remote Machine to Local ansible node without directory structures
      become: yes
      fetch:
        src: /etc/nginx/nginx.conf
        dest: /home/hakase/backup/
        flat: yes

    Ansible로 파일 편집

    이제 Ansible 모듈을 사용하여 파일을 편집하려고 했습니다. blockinfile, lineinfile 및 replace와 같은 Ansible을 사용하여 파일을 편집하기 위해 알아야 할 몇 가지 모듈이 있습니다.

    blockinfile은 파일에 여러 줄을 삽입/제거합니다. lineinfile은 한 줄을 위한 파일이며 문자열을 바꾸기 위해 replace 모듈을 사용할 수 있습니다.

    1. blockinfile을 사용하여 파일에 여러 줄 삽입

    blockinfile 모듈을 사용하여 ssh 구성 sshd_config에 여러 줄 구성을 추가합니다. 그리고 기본 설정은 새 구성을 맨 아래에 삽입합니다.

    - name: Insert multiple lines and Backup
      blockinfile:
        path: /etc/ssh/sshd_config
        backup: yes
        block: |
          ClientAliveInterval 360
          ClientAliveCountMax 0

    2. 마커 옵션을 사용하여 여러 줄 삽입

    또는 특정 줄에 삽입하려는 경우 마커 옵션을 사용하고 뒤에 insertafter 또는 insertbefore 및 Regex를 사용하거나 둘 다 사용할 수 있습니다.

    아래 플레이북은 sshd_config 파일에 새로운 추가 구성을 삽입합니다. 기본 마커 # BEGIN ANSIBLE MANAGED BLOCK으로 둘러싸인 UserPAM 줄 앞에 추가 구성이 추가됩니다.

    - name: Insert after regex, backup, and validate
      blockinfile:
        path: /etc/ssh/sshd_config
        backup: yes
        marker: "# {mark} ANSIBLE MANAGED BLOCK "
        insertbefore: '^UsePAM '
        block: |
          AllowUsers hakase vagrant
          PermitEmptyPasswords no
          PermitRootLogin no
        validate: '/usr/sbin/sshd -T -f %s'

    3. 마커 내부의 여러 줄 블록 주변 삭제/제거

    ansible 마커 # BEGIN ANSIBLE MANAGED BLOCK으로 둘러싸인 줄 블록을 제거합니다.

    - name: Remote text block surrounding by markers
      blockinfile:
        path: /etc/ssh/sshd_config
        marker: "# {mark} ANSIBLE MANAGED BLOCK"
        content: ""
        backup: yes

    4. 파일에 새 줄 삽입

    새 라인 구성 PasswordAuthentication no를 regex #PermitEmptyPasswords 라인 아래에 ssh 구성 /etc/ssh/sshd_config에 삽입합니다.

    - name: Insert New Line under the Regex configuration
      lineinfile:
        path: /etc/ssh/sshd_config
        backup: yes
        regexp: '^PasswordAuthentication '
        insertafter: '^#PermitEmptyPasswords '
        line: 'PasswordAuthentication no'
        validate: '/usr/sbin/sshd -T -f %s'

    5. lineinfile 모듈을 사용하여 파일에서 라인을 제거합니다.

    파일에서 줄을 제거/삭제하려면 state:absent 옵션을 사용하고 다음과 같은 줄의 정규식을 사용할 수 있습니다.

    - name: Remove a line from the file
      lineinfile:
        path: /etc/ssh/sshd_config
        state: absent
        regexp: '^PasswordAuthentication'

    6. 패턴 문자열을 정규 표현식으로 교체하고 모듈 교체

    이제 replace 모듈을 사용하여 문자열을 교체하려고 합니다. 교체 모듈은 일종의 문자열을 교체하기 위해 백엔드 참조로 정규식이 필요했습니다.

    모듈 교체를 사용하여 /etc/hosts 파일에서 호스트 이름을 변경합니다.

    - name: Replace the default
      replace:
        path: /etc/hosts
        regexp: '(\s+)node\.provision\.labs(\s+.*)?$'
        replace: '\1box.hakase.labs\2'
        backup: yes

    7. 구성 주석 해제

    replace 모듈을 사용하여 Linux 시스템에서 구성의 주석을 제거할 수 있습니다. 간단합니다. replace 모듈을 사용하여 줄 시작 부분에서 주석 문자열 #을 제거할 수 있습니다.

    /etc/nginx/nginx.conf 파일에서 server_tokens 행 구성의 주석을 제거하십시오.

    - name: Uncomment configuration
      replace:
        path: /etc/nginx/nginx.conf
        regexp: '#(\s+)server_tokens'
        replace: 'server_tokens'
        backup: yes

    8. 구성 라인에 대한 설명

    다음은 줄 시작 부분에 #을 추가하여 줄 구성에 주석을 다는 것입니다.

    - name: Comment Line configuration
      replace:
        path: /etc/nginx/nginx.conf
        regexp: '(\s+)gzip on'
        replace: '\n\t#gzip on'
        backup: yes

    Ansible에서 파일 모듈을 사용하여 파일 속성 설정

    파일 모듈은 소유자, 그룹 및 권한 변경, 심볼릭 링크 생성, 새 디렉토리 생성 및 심볼릭 링크, 파일 또는 디렉토리 삭제와 같은 파일 자체의 속성을 설정하는 데 사용할 수 있습니다.

    1. 파일의 심볼릭 링크 생성

    원격 호스트에서 /etc/nginx/sites-enabled/ 디렉토리에 대한 vhost라는 nginx 가상 호스트 구성을 위한 symlink 파일을 만듭니다.

    - name: Create Symlink of file
      file:
        src: /etc/nginx/sites-available/vhost
        dest: /etc/nginx/sites-enabled/vhost
        owner: root
        group: root
        state: link

    2. 파일 모듈을 사용하여 새 디렉토리 생성

    file 모듈을 사용하여 새로운 디렉토리를 생성하기 위해서는 아래와 같이 value 디렉토리와 함께 state 옵션을 사용해야 합니다.

    - name: Create a New Directory using file
      file:
        path: /etc/nginx/ssl
        state: directory
        owner: root
        group: root
        mode: 0755

    참조