2013-06-19 14 views
51

I (ANSIBLE_HOST) üzerinden envanter dosyasını belirterek ama sadece tarafından olmaksızın Python yanıtlayıcı 'çalıştırmak istiyorum. Öte yandan, python için Ansible API'sinin dokümantasyonu gerçekten tamamlanmamıştır.Envanteri ancak ana bilgisayarı belirtmeden doğrudan Ansible nasıl çalıştırılır? Aslında kolayca kumaş yapabilirsiniz</p> <pre><code>ansible.run.Runner( module_name='ping', host='www.google.com' ) </code></pre> <p>ama sadece Python bunun nasıl yapılacağı merak:

cevap

0

Bu tam bir yanıt değil, ancak bu konu hakkında this discussion thread numaralı telefondan tartışma var. Bu ileti dizisindeki ilk gönderinin sonunda, ansible-playbook'la ilgili bir sarıcı bash betiği oluşturmak için bir öneri yapılır;

Gözönünde bulundurduğum diğer şeyler 'ansible-pull' kullanımı ve mümkün olan envanter eklentisinin oluşturulmasıdır. Ben de bu sorunun cevabını bulmakla ilgileniyorum ve daha fazla bilgi bulabildiğim için bu cevabı güncelleyeceğim.

112

Şaşırtıcı bir şekilde, hile, bir ana bilgisayar adını veya IPv4/v6 adresini olabilir , önceki bir ,

# Host and IP address 
ansible all -i example.com, 
ansible all -i 93.184.216.119, 

veya

# Requires 'hosts: all' in your playbook 
ansible-playbook -i example.com, playbook.yml 

ana parametre eklemektir. ("Bütün" veya yapmak) konaklarda ne olursa olsun

hosts = ["webserver1","webserver2"] 

webInventory = ansible.inventory.Inventory(hosts) 

webPing = ansible.runner.Runner(
    pattern='webserver*', 
    module_name='ping', 
    inventory = webInventory 
).run() 

envanter haline gelir ve desenle onu arayabilir:

+2

IPv6, Ansible> = 1.3 ile çalışır. – trkoch

+0

Ansible 1.9.1'de ansible-playbook'u çağırdığınızda, komut satırından "all" i kaldır, ancak playbook.yml içinde bırakın. Bu doğru cevap "ansible-playbook -i example.com, playbook.yml" – PinoSan

+0

Sonra, herhangi bir sunucu ile çalışabilmesi için oyun defterinde ne "host" olarak ayarlamalıyım? Oyun kitabında – azmeuk

6

Sen ile yapabilirsiniz.

+0

modülü, local_action bağlamında nasıl çalıştırılacağını biliyorsunuz, örneğin ec2 modülleri localhost (agains localhost (127.0.0.1) ve local_action olarak çağrılmalıdır. teşekkürler – kamiseq

+0

nevermind, kendi soruma cevap :-) runner = ansible.Runner ( modül_ismi = "ec2_group", complex_args = {} çatal = Paralel, # private_key_file = "~/.ssh/office.pem", stok = Ölçeği ([ "127.0.0.1"]), transport = "yerel" ) return runner.run() – kamiseq

1

Ayrıca, Ansible Python API'u sürmeye ihtiyacım vardı ve konakları bir envanteri tutmak yerine argüman olarak geçirmeyi tercih ediyorum. Başkalarına yararlı olabilen yanıtlayıcı 'ihtiyacına etrafında almak için geçici dosya kullandı:

from tempfile import NamedTemporaryFile 

from ansible.inventory import Inventory 
from ansible.runner import Runner 

def load_temporary_inventory(content): 
    tmpfile = NamedTemporaryFile() 
    try: 
     tmpfile.write(content) 
     tmpfile.seek(0) 
     inventory = Inventory(tmpfile.name) 
    finally: 
     tmpfile.close() 
    return inventory 

def ping(hostname): 
    inventory = load_temporary_inventory(hostname) 
    runner = Runner(
     module_name='ping', 
     inventory=inventory, 
    ) 
    return runner.run() 
25

Bu soru gerçekten eski olduğunu biliyorum ama düşünüyorum bunun için ihtiyaç eklenecek kullanıcılar için bu küçük bir hile kudreti:

ansible-playbook -i '10.254.3.133,' site.yml 

yerel ana bilgisayar için çalıştırırsanız:

ansible-playbook -i 'localhost,' --connection=local site.yml 

hüner ip adresi/dns adından sonra, tırnak içinde virgül koymak ve 'gerektirir Kitabınızda'.

Bu yardımcı olacaktır umarım.

+5

Değeri için, teklifler burada no-op vardır. Eğer '' localhost '' veya 'localhost '' kullanırsanız, her iki durumda da 'ansible-playbook' kabuktan aynı argümanı alır. Ve '' localhost '', aynı şekilde değerlendirir (burada anahtar, argümanlar komutunuza geçmeden önce kabuk tarafından yorumlanır). – larsks

+4

Bu çalışır, ancak Merlin'in sakalı isminde neden issanın parçası üzerinde bu kabul edilebilir davranış ?! İnsanların bunu tam olarak nasıl bilmesi bekleniyor? Saçımı söndürerek düzeltmeyi aradım. – ffledgling

İlgili konular