게으름을 위한 부지런한 게으름뱅리' 블로그

[Ansible] Synchronize 모듈을 사용하여 Remote to Remote 파일전송하기 본문

IT/Ansible

[Ansible] Synchronize 모듈을 사용하여 Remote to Remote 파일전송하기

LazismLee 2020. 12. 18. 01:18
반응형

♬ Synchronize 모듈 사용하기

ansible(앤서블)의 Synchronize 모듈은 linux의 rsync 명령어를 사용할 수 있도록 만들어 놓은 모듈입니다.

( rsync명령어를 이해하고 있어야 내용을 이해하는데 쉽습니다.)

자세한 설명은 아래 Ansible 가이드 페이지에서 확인할 수 있습니다. 

docs.ansible.com/ansible/2.3/synchronize_module.html

 

synchronize - A wrapper around rsync to make common tasks in your playbooks quick and easy. — Ansible Documentation

You are reading an unmaintained version of the Ans

docs.ansible.com

♬ Remote to Remote로 데이터 전송하기   

ansible에서 파일을 옮기는 방법은 copy, fetch 등의 방법도 있지만 여기서는 synchronize(rsync)를 사용하여 두 host 간에 데이터를 전송하는 방법에 대해 아래 그림과 소스코드로 설명을 하겠습니다.

(단일 데이터 혹은 2개, 3개의 데이터를 복사할 경우에는 copy와 fetch를  주로 사용하였고 대용량의 파일 or 디렉터리를 복사할 때는 synchronize를  사용하였습니다.)

 

♪ Synchronize default 모드 (push)

synchronize default 동작

Synchronize는 default로 push mode로 동작합니다. SourceServer 파일 or 디렉토리를 DestinationServer로 보내는 동작이 default입니다. 이걸 코드로 나타내면 아래와 같습니다.

 

rsycn.yml 파일

- name: Test rsync
  hosts: {{ DestinationServer }}
  remote_user: {{ remoteUser }}
  tasks:
    - name: 
      synchronize:
        src: "/path/to/SourceServer"
        dest: "/path/to/DestinationServer"
      delegate_to: {{ SourceServer }}
      

여기서 keyword옵션은 delegate_to 옵션입니다. delegate_to 옵션은 "실행하는 localhost의 위치를 위임하겠다"라는 의미인데 delegate_to 옵션을 사용하면 옵션에 설정한 SourceServer가 localhost가 됩니다.

  • src옵션은 source의 줄임말로 옮길 대상이 됩니다.
  • dest옵션은 destination의 줄임말로 옮길 목적지 정도가 됩니다.

push mode는 보내는 LocalServer가 주체가 되므로 "SourceServer의 src를 DestinationServer의 dest로 보내겠다"로 해석할 수 있습니다.

 

-vvv 옵션을 주고 rsync.yml파일을 실행 후 "cmd"부분을 확인해보면 다음과 같이 rsync 명령이 실행되는 걸 볼 수 있습니다.

실행 : ansible-playbook -vvv rsync.yml

/usr/bin/rsync ~~~(여러가지 옵션들)~~~ {{ src }} {{remote_user@hosts}}:{{ dest }}

rsync의 명령이 실행되는 위치가 delegate_to옵션으로 설정한 SourceServer가 되므로 SourceServer(local)의 src 디렉터리의 내용을 Destination의 dest디렉터리로 복사(push)를 하겠다는 의미입니다. delegate_to 옵션이 없으면 ansible-playbook을 실행한 Control Server가 local이 되고 src는 Control Server의 파일 or 디렉터리가 되겠죠? 

♪ Synchronize pull 모드

synchronize pull 동작

SourceServer에서 DestinationServer의 파일 or  디렉터리를 가져오는(당겨오는) 동작이 pull mode입니다.

이걸 코드로 나타내면 아래와 같습니다.

 

rsycn.yml 파일

- name: Test rsync
  hosts: {{ DestinationServer }}
  remote_user: {{ remoteUser }}
  tasks:
    - name: 
      synchronize:
        src: "/path/to/DestinationServer"
        dest: "/path/to/SourceServer"
        mode: pull
      delegate_to: {{ SourceServer }}
      

mode를 pull로 변경하는 "mode: pull" 옵션을 추가하고 위에서 작성한 src 옵션과 dest옵션을 바꿔줘야 합니다. 

pull 모드의 동작방식이 "SourceServer가 Destination서버의 src(옮길 대상)를 dest(목적지)로 가져오겠다" 이기 때문입니다.

 

-vvv 옵션을 주고 rsync.yml파일을 실행 후 "cmd"부분을 확인해보면 다음과 같이 rsync 명령이 실행되는 걸 볼 수 있습니다.

실행 : ansible-playbook -vvv rsync.yml

/usr/bin/rsync ~~~(여러가지 옵션들)~~~ {{ remote_user@hosts }}:{{ src }} {{ dest }}

 


추가로 Synchronize에 여러가지 옵션을 사용할 수 있는데 Ansible 가이드 문서를 참고해서 작업하시면 될 것 같습니다.

이해가 잘 되지 않는다면 여러가지 테스트를 해보시고 궁금한 사항이 있으면 댓글 남겨주세요!

 

 

반응형
Comments