2016-12-08 1 views
0

Ansible을 사용하여 제어 호스트에서 원격 서버로 파일 tar.gz을 복사하려고합니다. 이러한 모든 사이에서한 서버에서 다른 서버로 타르 볼을 복사하는 중

# 0. Copy tar ball into directory. 
    - name: copy java tar ball 
     tags: copyJavaTarBall 
     register: copyJavaTarBallOut 
     copy: src={{ javaSrcLocation }} dest={{ javaDestLocation }} 
     #shell: /bin/rsync -v -e "ssh -p {{ ansible_port }} -i {{ ansible_ssh_private_key_file }}" {{ javaSrcLocation }} [email protected]{{ ansible_host }}:/home/sriram 
     #synchronize: 
     # src: {{ javaSrcLocation }} 
     # dest: {{ javaDestLocation }} 
     # rsync_opts: 
      #- "-e \" ssh -p {{ ansible_port }} -i {{ ansible_ssh_private_key_file }} \"" 
     #delegate_to: localhost 
    - debug: var=copyJavaTarBallOut.stdout_lines 

copy 지시어는 단순한 파일 (텍스트 파일 등) 작동 : 여기에 플레이 모습입니다. 다음과 같은 오류에 tar.gz 아카이브 결과를 사용 :

task path: /root/ansible/playbooks/javaSetup.yml:22 
An exception occurred during task execution. The full traceback is: 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/site-packages/ansible/executor/task_executor.py", line 119, in run 
    res = self._execute() 
    File "/usr/lib/python2.7/site-packages/ansible/executor/task_executor.py", line 490, in _execute 
    result = self._handler.run(task_vars=variables) 
    File "/usr/lib/python2.7/site-packages/ansible/plugins/action/copy.py", line 153, in run 
    source_full = self._loader.get_real_file(source_full) 
    File "/usr/lib/python2.7/site-packages/ansible/parsing/dataloader.py", line 402, in get_real_file 
    if is_encrypted_file(f): 
    File "/usr/lib/python2.7/site-packages/ansible/parsing/vault/__init__.py", line 152, in is_encrypted_file 
    b_vaulttext = to_bytes(to_text(vaulttext, encoding='ascii', errors='strict'), encoding='ascii', errors='strict') 
    File "/usr/lib/python2.7/site-packages/ansible/module_utils/_text.py", line 177, in to_text 
    return obj.decode(encoding, errors) 
MemoryError 

fatal: [xx.yy.zz.aa]: FAILED! => { 
    "failed": true, 
    "msg": "Unexpected failure during module execution.", 
    "stdout": "" 
} 

중 하나 synchronize 또는 정지 된 실행에 shell 지시문 결과 rsync 사용.

내 질문 :
1. 신뢰할 수있는 기능을 사용하여 제어 호스트의 타볼을 대상 서버로 복사하는 방법은 무엇입니까?

** 업데이트 :
- Ansible은과 같이 호출되고 : ANSIBLE_KEEP_REMOTE_FILES=1 ansible-playbook -vvvv -s javaSetup.yml --key-file=sshPvtKeys/pvtKeyFile.pem -c ssh --ask-sudo-pass -l appservers --tags copyJavaTarBall

- 파일 크기가 147M입니다. RAM 크기는 대략 1GB입니다.

+0

"*'copy' 지시어는 단순한 파일에서만 작동합니다."- ** 간단한 파일 **이란 무엇입니까? – techraf

+0

'copy' 모듈은 tgz 파일에서도 작동합니다. 'javaSrcLocation'과'javaDestLocation' 변수의 값은 무엇입니까? 당신은 또한 당신이 작업을 실행하는 데 사용했던'ansible' 또는'ansible-playbook' 명령을 보여줄 수 있습니까? –

+0

파일의 크기는 얼마입니까? 복사 모듈은 RAM에 맞지 않는 파일에 문제가 있습니다. –

답변

0

큰 파일을 복사하는 데 Ansible을 사용하면 메모리 문제가있는 것 같습니다. relevant discussion here이 있습니다. 과 같이 여러 부분으로 아카이브를 분할 split을 사용
1 : 그것은 일단

# 0. Copy tar ball into directory. 
    - name: copy java tar ball 
     tags: copyJavaTarBall 
     register: copyJavaTarBallOut 
     copy: src={{ item }} dest={{ javaDestLocation }} 
     with_fileglob: 
     - "{{ javaSrcLocation }}/*" 
    - debug: var=copyJavaTarBallOut.stdout_lines 

:
split -b 10m jdk-7u79-linux-x64.tar.gz jdk-7u79-linux-x64.tar.gz.part-
2 플레이 그렇게 보이는

단계는 내가이 문제를 해결하는 데 걸린 원격 서버로 옮겨 졌으므로 결합하여 (cat) 결합 해제해야합니다. 번거 롭긴하지만 일을 끝내야한다.

관련 문제