2016-04-13 30 views
0

Şu anda Ansible'ı öğreniyorum ve öğrendiklerimi uygulamak için, eski bir Bash kurulum komut dosyalarını bir web sunucusu oluşturmak üzere dönüştürüyorum. Kullanım durumlarımdan biri, bir web sitesini yüklemek veya yükseltmektir. süreç genellikle:Ansible ile bir web sitesi dağıtımı nasıl düzenlenir, böylece vhost değişikliği yoksa Apache yeniden başlatılmaz?

  • Kopya Apache sankonun tanımı /etc/apache2/available-sites içine
  • /var/www/sitename yılında /etc/apache2/enabled-sites
  • Ödeme dalında
  • Symlink sankonun tanım veya kaynak klasörden kopyalamak içerde
  • Run özel kurulum veya göç komut proje örneği Phing
  • Apache
  • Zarif yeniden başlatma ile

Ben sankonun gerekiyorsa sadece benim SSL sertifikasına bir parola var başlıca nedeni, web sunucusu yeniden yapmak isteyen olurdu ve bu olması gerekir Bu olursa tekrar girilir. Bu oyun kitabının çoğu çalışması yükseltmeler olacak ve yüklemeler olmayacağından, yeniden başlatmanın gerekmediği baskıyı bastırması mantıklıdır.

Bu kullanım vakasının çevresinde arama yaptım, ancak çevrimiçi olarak çok fazla ilgili malzeme bulamıyorum. Bu nedenle, değişiklikleri algılamak için bir dosya hash kullanarak aşağıdakileri yaratıyorum ve bunu yapmanın daha iyi bir yolu olup olmadığını merak ediyorum. İşte burada:

--- 

# Copy site contents unconditionally 
- file: path=/var/www/html state=directory 
- copy: src=../../build-files/default/index.html dest=/var/www/html/index.html 

# Copy vhost to a temporary file so we can checksum it remotely 
- copy: src=../../build-files/apache/000-default.conf dest=/tmp/000-default.conf 

# Get the checksum of the existing vhost 
- shell: md5sum /etc/apache2/sites-available/000-default.conf | cut -f 1 -d ' ' 
    register: old_checksum_default_site 

# Get the checksum of the new vhost 
- shell: md5sum /tmp/000-default.conf | cut -f 1 -d ' ' 
    register: new_checksum_default_site 

- debug: msg="Old checksum is {{ old_checksum_default_site.stdout }}, new checksum is {{ new_checksum_default_site.stdout }}" 

# Copy our default vhost into place if necessary 
- copy: src=../../build-files/apache/000-default.conf dest=/etc/apache2/sites-available/000-default.conf 
    notify: restart apache 
    when: old_checksum_default_site.stdout != new_checksum_default_site.stdout 

Demirbaş yeraldığını tüm siteler için yapmak, ve henüz bile sembolik link bulunmaz - Daha kısa bir yol var? Ben bir Python programcısı değilim, ama eğer özel bir modül yazıyorsam en iyi çözüm olabilir. bunu çalıştırdığınızda sonra yanıtlayıcı 'adım yeşil olarak raporlanır 000-default.conf ait yerel kopyasına hiçbir değişiklik varsa apache/sankon şeyler iç elemanların bilmeden

cevap

2

, bu

# Copy site contents unconditionally 
- file: path=/var/www/html state=directory 
- copy: src=../../build-files/default/index.html dest=/var/www/html/index.html 

# Copy vhost to a temporary file so we can checksum it remotely 
- copy: src=../../build-files/apache/000-default.conf dest=/etc/apache2/sites-available/000-default.conf 
    notify: 
    - restart apache 

yeterli olmalı.

Bir şey değiştiyse, renk sarı olur ve işleyicinin sonunda çalıştığını görürsünüz.

+0

Doğru, Ansible bir kopya, yalnızca bir değişiklik üretecekse çalışıyor mu? – halfer

+0

doğrudur. Tüm md5sum öğelerini dahili olarak yapar (veya başka bir şekilde kullanır - bunun nasıl yapıldığından emin değilim). Düzenleme: Sunucunuzu istediğiniz bir duruma getiren bir şey olarak düşünebilirsiniz. Durumda bir değişiklik belirtmezseniz (yapılandırmanızı güncelleyerek), o zaman ansible hiçbir şey yapmaz – user2599522

+0

Ooh harika, bu _will_ işleri kolaylaştırır - teşekkürler! – halfer