トレリスのVagrant同期フォルダーのファイル権限を制御するためのAnsibleプレイブックでのVagrantfileの変更


8

私はWordPress開発にTrellisを使用しています。同期したフォルダー内のファイル(またはディレクトリ)のアクセス許可を変更するのが難しいのを除いて、それはうまく機能します。

通常、デフォルトの権限設定で問題ありません。ただし、メイン(NFS)同期ディレクトリのサブディレクトリの一部に書き込み権限を与える必要がある場合があります。

これはVMのメイン構成にAnsibleプレイブックを使用するVagrantfileです(私はVirtualBoxを使用しています)。私はRubyプログラマではありませんし、Ansibleを使用したこともありませんが、その外観からすると、Vagrantfileファイルのアクセス権が設定されている部分は次のようになります。

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

必要なときに特定のファイルやフォルダーへのアクセス許可を制御できるように、このファイルに変更を加える方法を教えてください。ホストマシンのvagrant同期フォルダー内の権限を変更しても仮想マシンには反映されないため、少なくともVagrantfileを変更してから再プロビジョニングすることでそれを実行できる必要があります。

これを簡単に実現するにはどうすればよいですか?


あなたのVagrantfileはかなり大きいです、おそらくそれの関連部分を投稿にコピーするほうがいいでしょう
SztupY

CODEで更新
Scott

回答:


4

このVagrantfileには2つの部分があります。1つはWindowsホストのマウント(前半)、もう1つはUNIXホストのマウント(後半)ですが、基本的には同じです-プラグインが異なるだけです。

config.vm.synced_folderおよびconfig.bindfs.bind_folderコマンドから、適切な権限を持つ適切なディレクトリを設定する場所を確認できます。

異なる権限を持つ新しいディレクトリを追加するには、それらをリストに追加するだけです。File.join('a','b')単純にパスをa/bに変換することに注意してください。ただし、プラットフォームに依存しないため(Windowsでは\スタイルパスも処理できるため)、これはより良い方法です。

したがって、たとえば/tmp/needswriteフォルダにさらに多くのアクセス許可を与えたい場合は、次の2行を適切な場所に追加するだけです。

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']

Unix設定:

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

これにより、たとえば777、デフォルトの代わりに権限が設定されます755

Windowsのあなたからマップする必要がありconfigのことに注意してくださいANSIBLE_PATHANSIBLE_PATH_ON_VMあなたが同じディレクトリ名でそれらを一致させる必要があるので、Unixの設定bindfsに再マウントを行いますが、。

ユーザーやグループと遊ぶこともできます:

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']

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'

ここでは、ユーザーnew-ownerとグループを使用するように設定しますnew-group

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.