Thay đổi Vagrantfile với Playbook Ansible để kiểm soát quyền truy cập tệp trên thư mục được đồng bộ hóa Vagrant cho Trellis


8

Tôi sử dụng Trellis cho sự phát triển WordPress của tôi. Nó hoạt động rất tốt, ngoại trừ tôi thấy khó thay đổi quyền (hoặc thư mục) trong thư mục được đồng bộ hóa.

Nói chung tôi ổn với thiết lập quyền mặc định. Tuy nhiên, đôi khi tôi cần cấp quyền ghi cho một số thư mục con của thư mục được đồng bộ hóa chính (NFS).

Đây là Vagrantfile sử dụng Playbook Ansible cho cấu hình chính của VM (Tôi sử dụng VirtualBox). Tôi không phải là lập trình viên Ruby và tôi cũng chưa từng làm việc với Ansible, tuy nhiên, bởi vẻ bề ngoài của nó, sau đây là một phần của Vagrantfilequyền truy cập tệp đang được đặt:

if Vagrant::Util::Platform.windows? and !Vagrant.has_plugin? 'vagrant-winnfsd'
    wordpress_sites.each_pair do |name, site|
        config.vm.synced_folder local_site_path(site), remote_site_path(name, site), owner: 'vagrant', group: 'www-data', mount_options: ['dmode=776', 'fmode=775']
    end
    config.vm.synced_folder ANSIBLE_PATH, ANSIBLE_PATH_ON_VM, mount_options: ['dmode=755', 'fmode=644']
    config.vm.synced_folder File.join(ANSIBLE_PATH, 'bin'), bin_path, mount_options: ['dmode=755', 'fmode=755']
else
    if !Vagrant.has_plugin? 'vagrant-bindfs'
        fail_with_message "vagrant-bindfs missing, please install the plugin with this command:\nvagrant plugin install vagrant-bindfs"
    else
        wordpress_sites.each_pair do |name, site|
            config.vm.synced_folder local_site_path(site), nfs_path(name), type: 'nfs'
            config.bindfs.bind_folder nfs_path(name), remote_site_path(name, site), u: 'vagrant', g: 'www-data', o: 'nonempty'
        end
        config.vm.synced_folder ANSIBLE_PATH, '/ansible-nfs', type: 'nfs'
        config.bindfs.bind_folder '/ansible-nfs', ANSIBLE_PATH_ON_VM, o: 'nonempty', p: '0644,a+D'
        config.bindfs.bind_folder bin_path, bin_path, perms: '0755'
    end
end

Làm cách nào tôi có thể thay đổi tệp này theo cách để tôi có thể kiểm soát quyền đối với các tệp và thư mục cụ thể khi tôi cần. Do việc thay đổi quyền trong thư mục được đồng bộ hóa vagrant trên máy chủ không phản ánh trên Máy ảo, nên ít nhất tôi phải có thể làm điều đó bằng cách thay đổi Vagrantfile và sau đó cung cấp lại.

Làm thế nào tôi có thể đạt được điều này một cách dễ dàng mà sẽ tiếp tục cung cấp lại trong tương lai?


Vagrantfile của bạn khá lớn, có lẽ sẽ tốt hơn nếu sao chép phần có liên quan của nó vào bài đăng
SztupY

Cập nhật với CODE
Scott

Câu trả lời:


4

Có hai phần của Vagrantfile này, một phần gắn cho máy chủ Windows (nửa đầu), phần còn lại dành cho máy chủ UNIX (nửa sau), nhưng về cơ bản là tương tự - chỉ với các plugin khác nhau.

Bạn có thể thấy từ config.vm.synced_folderconfig.bindfs.bind_foldercác lệnh nơi chúng thiết lập các thư mục phù hợp với các quyền thích hợp.

Để thêm một thư mục mới với các quyền khác nhau, chỉ cần thêm chúng vào danh sách. Lưu ý rằng File.join('a','b')chỉ cần chuyển đổi đường dẫn thành a/b, nhưng đó là cách tốt hơn để làm điều đó, vì nó độc lập với nền tảng (trên Windows, nó cũng có thể xử lý \các đường dẫn kiểu).

Vì vậy, ví dụ nếu bạn muốn cấp cho /tmp/needswritethư mục nhiều quyền hơn, bạn chỉ cần thêm hai dòng sau vào vị trí thích hợp của chúng:

Cấu hình Windows:

config.vm.synced_folder File.join(ANSIBLE_PATH, 'tmp', 'needswrite'), File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), mount_options: ['dmode=777', 'fmode=777']

Cấu hình Unix:

config.bindfs.bind_folder File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), perms: '0777'

Ví dụ, điều này sẽ đặt quyền của họ thành 777thay vì mặc định755

Lưu ý rằng trong cấu hình Windows, bạn phải ánh xạ từ ANSIBLE_PATHsang ANSIBLE_PATH_ON_VM, trong khi trên các cấu hình liên kết cấu hình Unix sẽ thực hiện lại, vì vậy bạn cần khớp chúng với cùng tên thư mục.

Bạn cũng có thể chơi với người dùng và nhóm:

Cấu hình Windows:

config.vm.synced_folder File.join(ANSIBLE_PATH, 'tmp', 'needswrite'), File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), owner: 'new-owner', group: 'new-group', mount_options: ['dmode=755', 'fmode=755']

Cấu hình Unix:

config.bindfs.bind_folder File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), File.join(ANSIBLE_PATH_ON_VM, 'tmp', 'needswrite'), u: 'new-owner', g: 'new-group', perms: '0777'

Ở đây chúng tôi đặt chúng để sử dụng người dùng new-ownervà nhómnew-group

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.