Ansible: copy a directory content to another directory

前端 未结 12 1074
青春惊慌失措
青春惊慌失措 2020-12-24 00:25

I am trying to copy the content of dist directory to nginx directory.

- name: copy html file
  copy: src=/home/vagrant/dist/ dest=/usr/share/nginx/html/


        
相关标签:
12条回答
  • 2020-12-24 01:05

    EDIT: This solution worked when the question was posted. Later Ansible deprecated recursive copying with remote_src

    Ansible Copy module by default copies files/dirs from control machine to remote machine. If you want to copy files/dirs in remote machine and if you have Ansible 2.0, set remote_src to yes

    - name: copy html file
      copy: src=/home/vagrant/dist/ dest=/usr/share/nginx/html/ remote_src=yes directory_mode=yes
    
    0 讨论(0)
  • 2020-12-24 01:08

    I found a workaround for recursive copying from remote to remote :

    - name: List files in /usr/share/easy-rsa
      find:
        path: /usr/share/easy-rsa
        recurse: yes
        file_type: any
      register: find_result
    
    - name: Create the directories
      file:
        path: "{{ item.path | regex_replace('/usr/share/easy-rsa','/etc/easy-rsa') }}"
        state: directory
        mode: "{{ item.mode }}"
      with_items:
        - "{{ find_result.files }}"
      when:
        - item.isdir
    
    - name: Copy the files
      copy:
        src: "{{ item.path }}"
        dest: "{{ item.path | regex_replace('/usr/share/easy-rsa','/etc/easy-rsa') }}"
        remote_src: yes
        mode: "{{ item.mode }}"
      with_items:
        - "{{ find_result.files }}"
      when:
        - item.isdir == False
    
    0 讨论(0)
  • 2020-12-24 01:10

    I got involved whole a day, too! and finally found the solution in shell command instead of copy: or command: as below:

    - hosts: remote-server-name
      gather_facts: no
      vars:
        src_path: "/path/to/source/"
        des_path: "/path/to/dest/"
      tasks:
      - name: Ansible copy files remote to remote
        shell: 'cp -r {{ src_path }}/. {{ des_path }}'
    

    strictly notice to: 1. src_path and des_path end by / symbol 2. in shell command src_path ends by . which shows all content of directory 3. I used my remote-server-name both in hosts: and execute shell section of jenkins, instead of remote_src: specifier in playbook.

    I guess it is a good advice to run below command in Execute Shell section in jenkins:

    ansible-playbook  copy-payment.yml -i remote-server-name
    
    0 讨论(0)
  • 2020-12-24 01:12

    Below worked for me,

    -name: Upload html app directory to Deployment host
     copy: src=/var/lib/jenkins/workspace/Demoapp/html dest=/var/www/ directory_mode=yes
    
    0 讨论(0)
  • 2020-12-24 01:13

    You could use the synchronize module. The example from the documentation:

    # Synchronize two directories on one remote host.
    - synchronize:
        src: /first/absolute/path
        dest: /second/absolute/path
      delegate_to: "{{ inventory_hostname }}"
    

    This has the added benefit that it will be more efficient for large/many files.

    0 讨论(0)
  • 2020-12-24 01:20

    This I found an ideal solution for copying file from Ansible server to remote.

    copying yaml file

    - hosts: localhost
      user: {{ user }}
      connection: ssh
      become: yes
      gather_facts: no
      tasks:
       - name: Creation of directory on remote server
         file:
           path: /var/lib/jenkins/.aws
           state: directory
           mode: 0755
         register: result
       - debug: 
           var: result
    
       - name: get file names to copy
         command: "find conf/.aws -type f"
         register: files_to_copy
    
       - name: copy files
         copy:
          src: "{{ item }}" 
          dest: "/var/lib/jenkins/.aws"
          owner: {{ user }}
          group: {{ group }}
          remote_src: True
          mode: 0644
         with_items:
          - "{{ files_to_copy.stdout_lines }}"
    
    0 讨论(0)
提交回复
热议问题