2016-04-12 11 views
1

olduğunu algıla. Tek kullanımlık olması durumunda, bir Ansible oynatma kitabındaki ana bilgisayar adına dayalı farklı bir sunucu atamam gereken bir kullanım durumum var. Örneğin, sunucu tekse:Envanter_hostname öğesinin son üç karakterinin tek mi, yoksa

host: myhost-001.example.com server: myserver-003.example.com 

garip değilse, o zaman bile olmak zorunda, bu yüzden farklı bir sunucu atamak olacaktır:

host: myhost-002.example.com server: myserver-002.example.com 

Herhangi bir fikir?

cevap

2

İlginç bir sorun. Sen jinja filtreleri kullanarak bunu yapabilirsiniz:

{{ 'myhost-002.example.com'|regex_replace('(myhost-)(?P<id>\d\d\d)(\.example\.com)', '\\g<id>')|int is divisibleby 2 }} 

en biraz açıklamak için bu yıkmak edelim:

'myhost-002.example.com' 

Önce bir konak değişken yukarıdaki formda olduğunu varsayalım.

|regex_replace('(myhost-)(?P<id>\d\d\d)(\.example\.com)', '\\g<id>') 

Yukarıdaki örnekte ben üç sayı \d\d\d olmayı kabul yalnızca id parametreyi tutarak regex adlandırılmış parametreleri ile değiştirin yapmak. Bu '002' dönmelidir.

|int is divisibleby 2 

Sonra, tek ve çift olup olmadığını belirlemek için yukarıdaki tamsayı 2'ye bölünebilir olduğunu kontrol ediyorum.

Testi:

ansible localhost -m debug -a "msg={{ 'myhost-002.example.com'|regex_replace('(myhost-)(?P<id>\d\d\d)(\.example\.com)', '\\g<id>')|int is divisibleby 2 }}" 

localhost | SUCCESS => { 
    "msg": true 
} 

Faydalı linkler: Ansible Jinja2 filters

İlgili konular