Änderung der Vagrant-Datei mit Ansible-Playbook, um die Dateiberechtigung für den mit Vagrant synchronisierten Ordner für Trellis zu steuern

8

Ich benutze Trellis für meine WordPress-Entwicklung. Es funktioniert hervorragend, außer dass es mir schwer fällt, die Datei- (oder Verzeichnis-) Berechtigung im synchronisierten Ordner zu ändern.

Im Allgemeinen bin ich mit dem Standard-Berechtigungs-Setup einverstanden. Manchmal muss ich jedoch einigen Unterverzeichnissen des synchronisierten Hauptverzeichnisses (NFS) Schreibberechtigung erteilen.

Dies ist die Vagrant-Datei , die Ansible Playbook für die Hauptkonfiguration der VM verwendet (ich verwende VirtualBox). Ich bin weder ein Ruby-Programmierer noch habe ich mit Ansible gearbeitet. Wie es aussieht, ist der folgende Teil der Bereiche, in Vagrantfiledenen Dateiberechtigungen festgelegt werden:

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

Wie kann ich Änderungen an dieser Datei vornehmen, damit ich die Berechtigung für bestimmte Dateien und Ordner bei Bedarf steuern kann? Da sich das Ändern der Berechtigung im vagrant-synchronisierten Ordner auf dem Host-Computer nicht auf die virtuelle Maschine auswirkt, muss ich dies zumindest durch Ändern der Vagrant-Datei und anschließende erneute Bereitstellung tun können.

Wie kann ich dies leicht erreichen, das bei einer zukünftigen erneuten Bereitstellung bestehen bleibt?

Scott
quelle
Ihre Vagrant-Datei ist ziemlich groß, vielleicht ist es besser, den relevanten Teil davon in die Post zu kopieren
SztupY
Aktualisiert mit CODE
Scott

Antworten:

4

Es gibt zwei Teile dieser Vagrant-Datei: Der eine übernimmt das Mounten für Windows-Hosts (die erste Hälfte), der andere für UNIX-Hosts (die zweite Hälfte), aber im Wesentlichen das Gleiche - nur mit verschiedenen Plugins.

Sie können den Befehlen config.vm.synced_folderund config.bindfs.bind_folderentnehmen, wo sie die entsprechenden Verzeichnisse mit den entsprechenden Berechtigungen einrichten.

Um ein neues Verzeichnis mit unterschiedlichen Berechtigungen hinzuzufügen, fügen Sie diese einfach der Liste hinzu. Beachten Sie, dass File.join('a','b')der Pfad einfach in konvertiert wird a/b, dies jedoch eine bessere Möglichkeit ist, da er plattformunabhängig ist (unter Windows können auch Stilpfade verarbeitet \werden).

Wenn Sie dem /tmp/needswriteOrdner beispielsweise mehr Berechtigungen erteilen möchten, können Sie einfach die folgenden zwei Zeilen an den entsprechenden Stellen hinzufügen:

Windows-Konfiguration:

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-Konfiguration:

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

Dadurch wird beispielsweise die Berechtigung 777anstelle der Standardeinstellung festgelegt755

Beachten Sie, dass Sie in der Windows-Konfiguration von ANSIBLE_PATHbis ANSIBLE_PATH_ON_VMzuordnen müssen, während in der Unix-Konfiguration bindfs eine erneute Bereitstellung durchführt, sodass Sie sie mit demselben Verzeichnisnamen abgleichen müssen.

Sie können auch mit Benutzern und Gruppen spielen:

Windows-Konfiguration:

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-Konfiguration:

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'

Hier setzen wir sie auf Benutzer new-ownerund Gruppenew-group

SztupY
quelle