2015-09-02 53 views
5

Tôi có thiết lập Vagrant/Ansible trên máy chủ Windows của mình. Ansible được thiết lập để chạy trên máy khách Ubuntu, vì Vagrant up thực hiện một kịch bản lệnh shell sao chép các tệp provisioning yml vào máy khách và cài đặt Ansible cũng trên máy khách.Lỗi tập tin văn bản không thể đọc được

Kịch bản chạy Ansible thiết lập trên vị khách với dòng lệnh sau:

# Ansible installations 
sudo apt-get install -y ansible 

# Copy all Ansible scripts to the ubuntu guest 
sudo cp -rf -v /vagrant/provisioning /home/vagrant/ 

# cp /vagrant/hosts /home/vagrant/ 
sudo chmod 666 /home/vagrant/provisioning/hosts 

# Install roles 
sudo ansible-playbook /home/vagrant/provisioning/local.yml -i /home/vagrant/provisioning/hosts --connection=local 

Một trong những bước trong quá trình cấu hình Ansible đang thiết lập một bản sao mới của Laravel trong thư mục /var/www. Sau khi kéo vào Laravel, kịch bản của tôi sau đó sao chép và sau đó chỉnh sửa tệp .env trong gốc tài liệu (/var/www).

Nhưng trong vấn đề này, nó không thành công với thông báo text file busy. Đây là một bản sao đang xảy ra trên khách với tư cách là nguồn và đích, vì vậy tôi không biết phải làm gì với VBox. Tôi có cảm giác nó phải liên quan đến tên tệp quá bất thường, nhưng tôi không tìm thấy câu trả lời.

task.yml tập tin của tôi cho Laravel là:

--- 
- name: Clone git repository 
    git: > 
     dest=/var/www 
     repo=https://github.com/laravel/laravel.git 
     update=no 
    sudo: yes 
    sudo_user: www-data 
    register: cloned 

- name: copy .env file 
    copy: src=env.j2 dest={{ conf_file }} 

- name: set APP_DOMAIN={{ server_name }} 
    lineinfile: dest=/var/www/.env regexp='^APP_DOMAIN=' line=APP_DOMAIN={{ server_name }} 

Tôi cũng đã cố gắng sử dụng các mẫu phương pháp với các lỗi tương tự:

- name: copy .env file 
    template: src=env.j2 dest={{ conf_file }} 

file conf của tôi chứa:

conf_file: /var/www/.env 

Nó không thành công ở bước sao chép như sau:

==> default: TASK: [laravel | copy .env file] ********************************************** 
==> default: failed: [10.0.1.10] => {"failed": true, "md5sum": "a380715fa81750708f7b9b6fea1a48fe"} 
==> default: msg: Could not replace file: /root/.ansible/tmp/ansible-tmp-1441176559.19-197929606462535/source to /var/www/.env: [Errno 26] Text file busy 
==> default: 
==> default: FATAL: all hosts have already failed -- aborting 
==> default: 
==> default: PLAY RECAP ******************************************************************** 
==> default:   to retry, use: --limit @/root/local.retry 
==> default: 
==> default: 10.0.1.10     : ok=21 changed=18 unreachable=0 failed=1 
The SSH command responded with a non-zero exit status. Vagrant 
assumes that this means the command failed. The output for this command 
should be in the log above. Please read the output to determine what 
went wrong. 

Tệp nguồn .env nằm trong thư mục có tên là files khỏi thư mục tác vụ Laravel, giống như các mục khác mà tôi định cấu hình hoạt động OK. Không tìm thấy tệp .env trong thư mục www sau khi nó không thành công để nó không sao chép.

Trả lời

10

Đã xảy ra một số sự cố khi sử dụng mô-đun "sao chép" Ansible trên các thư mục được chia sẻ của Virtualbox (xem https://github.com/ansible/ansible/issues/9526) - là thư mục được chia sẻ bởi Vagrant?

Có thể thử touch ing tập tin đầu tiên để tạo ra nó, sau đó sao chép nó:

Thay đổi:

- name: copy .env file 
    copy: src=env.j2 dest={{ conf_file }} 

thành:

- name: create .env file 
    shell: touch {{ conf_file }} 
- name: copy .env file 
    copy: src=env.j2 dest={{ conf_file }} 

EDIT: Tập tin này lỗi sao chép là được khắc phục trong bản phát hành Ansible 1.9.3 (ngày 19 tháng 7 năm 2015) cho một số người dùng nhưng vẫn là sự cố đối với mọi người trên Windows máy chủ đang chạy Virtualbox (để thực hiện với tính năng chia sẻ vboxsf) kể từ 2016-06-14. Vấn đề GitHub vẫn đóng, nhưng mọi người vẫn đang bình luận và dường như đang cung cấp các bản sửa lỗi có thể.

Giải pháp được liên kết bên dưới dường như hoạt động với hầu hết mọi người (một số upvotes).Nó đề xuất thêm các thiết lập cấu hình Ansible remote_tmp đến địa phương của bạn ~/.ansible.cfg mà chỉ thị Ansible sử dụng một thư mục tạm thời trên các mục tiêu hệ thống tập tin (chia sẻ):

https://github.com/ansible/ansible/issues/9526#issuecomment-199443969

+0

Xin chào @Ocean, cảm ơn. Có '/ var/www' là thư mục chia sẻ, và tôi đã thấy lỗi mà bạn giới thiệu cho tôi, nhưng đó là từ tháng 11 năm 2014. Nó vẫn chưa được sửa? Nhân tiện, các tệp khác sao chép OK thông qua quá trình này nhưng không sao chép vào thư mục 'www' ... – TheRealPapa

+0

Ngoài ra, phiên bản Ansible nào đang được cài đặt vào hộp Ubuntu? – ocean

+0

Hi @ocean, tất cả các thành phần mới nhất (hiện tại) phiên bản trên Windows 10. Tôi hiện đang thử đề xuất của bạn và sẽ báo cáo lại. Cảm ơn. – TheRealPapa

0

với ansible 2.2 bạn cũng có thể thiết lập unsafe_writes = yes

Các vấn đề liên quan