Ansible: Tekrarlı olarak dizin ve dosya izinlerini ayarlama


52

Ansible'da bunu yapabilirim:

file: dest=/foo/bar/somedir owner=root group=apache mode=0775 recurse=yes

Ayrıca, sahibi, grubu ve izinleri o yoldaki tüm dizinler ve dosyalar üzerinde art arda 0775 olarak ayarlar. Ancak, dizinleri 0775'e ve dosyaları 0664'e ayarlamak istiyorum. Bunu yapmak için bir yol var mı?


Yanıtlar:


33
file: dest=/foo/bar/somedir owner=root group=apache mode=u=rwX,g=rX,o=rX recurse=yes

dizinleri 755’e, dosyaları ise 644’e


bu dosyalar için çalışmıyor.
mirza

1
@Adam Şans Sihirli nerede? U, g, o belirtilmesi, sayıdan (ve
644'ün

4
Kaynak kod, sembolik ugo işlemenin "man chmod" un işleyişi ile aynı olduğunu söyler - büyük harf X, dizin / dosya durumuna ve mevcut yürütme bitlerine göre özel işlemlere sahiptir. github.com/ansible/ansible/blob/…
Marc Tamsky

2
Başka bir deyişle, Xbir xdizinler için ve dosyalar için hiçbir şey. Ve nasıl olduğunu chmoddeğil, ansiblekip dize davranır. Keşke Saynı şekilde davranılsaydı.
x-yuri

1
Ancak, dosyaları sahibinin herkes tarafından yürütülebilir dosya tarafından çalıştırılabilir kıldığını unutmayın .
x-yuri

25

Ansible dosya / kopyalama modülleri, dosya türüne bağlı olarak size izin verme yetkisi vermez, bu nedenle bu satırlar boyunca bir şeyler yaparak el ile yapmanız gerekebilir:

- name: Ensure directories are 0755
  command: find {{ path }} -type d -exec chmod 0755 {} \;

- name: Ensure files are 0644
  command: find {{ path }} -type f -exec chmod 0644 {} \;

Bunlar {{ path }}, her dosya veya dizinin izinlerini belirtilen izinlere geçirerek yinelemeyi ve bunları değiştirmeyi etkiler .

Kaynak: https://stackoverflow.com/a/28782805/1306186


@luckytaxi, gmangin tarafından verilen cevap, alt dizinlerin izinlerini tekrar tekrar belirlemez.
Dejay Clayton,

ahhhh haklısın! bir recurseseçeneği gördüm, diğerini değil.
luckytaxi

9

Modül dosyasını uyumlu bir şekilde kullanmak istiyorsanız, şunları yapabilirsiniz:

file: dest = / foo / bar / somedir sahibi = kök grubu = apache modu = 0644 recurse = evet

file: dest = / foo / bar / somedir sahibi = kök grubu = apache modu = 0775

Bu yöntemle ilk önce tüm dosyayı (recurse = yes) '644' olarak ve sonra / foo / bar / somedir '775' olarak ayarlayın.

Bu mükemmel değildir, çünkü kitabınızı her çaldığınızda dizin izninizi değiştirir. Ama en azından, modül komutunda olduğu gibi, önemsizdir.

Eğer 'değişti' durumunu istemiyorsanız, modül statünü kullanabilirsiniz. Tüm dosyaları ve dizini / foo / bar / somedir dizininde listeleyecektir, böylece cevabı kaydedersiniz ve daha sonra sadece bu dosyalar üzerinde bir döngü yaratırsınız.


7
Cevabınız tüm alt klasörleri ve alt dizinleri 644 olarak ayarlayacak ve sadece üst seviye dizini 775 olarak ayarlayacaktır. İhtiyaç, tüm dizinlerin alt dizinleri de dahil olmak üzere 775 olması.
Edward Ned Harvey,

Bu öneri kesin değildir. İzinleri önce bir değere, sonra diğerine ayarlama, izinlerin her çalıştırmada değiştirileceği anlamına gelir.
Kevin Keane

5

Dizinleri 0775 ( rwxrwxr-x) 'e ve dosyaları 0644 ( )' e ayarlamanın ne kadar anlamlı olacağından emin değilim rw-r--r--: grup yazılabilir dizinler ancak dosyalar değil mi?

rw-rw-r--Dizinler geçilebilirken dosyaların çalıştırılabilir olmadığından emin olmak için dosyaları 0664 ( ) olarak ayarlamayı düşünüyorsanız , yalnızca bir chmodkomut içeren zarif bir çözüm vardır :

chmod -c -R ug=rw,o=r,a-x+X "{{top_dir}}"

Ansible'da nasıl kullanılabileceği :

- name: recursive chmod example
  command: |
    chmod -c -R ug=rw,o=r,a-x+X "{{item}}"
  register: chmod_status
  changed_when: chmod_status.stdout != ""
  with_items:
    - "/home/user/sample/dir"

chmod -cAnsible'da "değiştirildi" durumunu doldurmak için rahatlıkla kullanabileceğimiz tüm değişiklikleri yazdırır . Umarım anlamlı olur.


3

Gerektiğinde sadece modları değiştirmek için:

- name: make dirs 0755   
  command: find {{ your_path }} -type d ! -perm 0755 -exec chmod 0755 {} \;

- name: make files 0644   
  command: find {{ your_path }} -type f ! -perm 0644 -exec chmod 0644 {} \;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.