2013-06-19 75 views

回答

0

這不是一個完整的答案,但在this discussion thread中有一些關於此主題的討論。在該線程的第一篇文章的末尾,有人建議爲ansible-playbook創建一個包裝bash腳本,這有點破解但是可行。

我一直在考慮的其他事情是使用'ansible-pull'和創建一個安全庫存插件。我也有興趣找到這個問題的答案,我會繼續更新這個答案,因爲我發現更多的信息。

112

令人驚訝地,關鍵是要追加,前述可以是一個主機名或IPv4/v6的地址的,

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

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

主機參數。

+2

IPv6與Ansible> = 1.3一起使用。 – trkoch

+0

在Ansible 1.9.1中,當您調用ansible-playbook時,從命令行中刪除「all」,但將其保留在playbook.yml中。這是正確的答案「ansible-playbook -i example.com,playbook.yml」 – PinoSan

+0

然後,我應該在劇本中設置爲「主機」,以便它可以與任何服務器一起使用? – azmeuk

6

你可以這樣做:

hosts = ["webserver1","webserver2"] 

webInventory = ansible.inventory.Inventory(hosts) 

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

無論是在主機成爲你的庫存,你可以用模式搜索它(或做「全」)。

+0

你是否知道如何在local_action上下文中運行模塊,例如ec2模塊應該再次調用localhost(127.0.0.1)和local_action。謝謝 – kamiseq

+0

沒關係,我回答我自己的問題:-) runner = ansible。轉輪( MODULE_NAME = 「ec2_group」, complex_args = {}, 叉=相同常, #PRIVATE_KEY_FILE = 「的〜/ .ssh/office.pem」, 庫存=庫存([ 「127.0.0.1」]), 運輸=「本地」 ) 返回runner.run() – kamiseq

1

我還需要驅動Ansible Python API,並且寧可傳遞主機作爲參數,而不要保留庫存。我用一個臨時文件來解決Ansible的要求,這可能是幫助他人:

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

我知道這個問題是真的老了,但是覺得下面這個小技巧誰需要幫助,這個未來的用戶有所幫助:

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

,如果你對本地主機上運行:

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

訣竅是,經過IP地址/ DNS名稱,把逗號引號內,並要求「hosts: all'在你的劇本中。

希望這會有所幫助。

+5

爲了什麼是值得的,報價是一個沒有操作在這裏。如果你使用localhost或localhost,在這兩種情況下'ansible-playbook'都會從shell收到相同的參數。而'localhost','會以同樣的方式評估(這裏的關鍵是在shell將它們傳遞給你的命令之前,由shell解釋引號)。 – larsks

+4

這是可行的,但爲什麼以Merlin的鬍子的名義,這是可接受的行爲?人們究竟如何知道這一點?我把我的頭髮拔出來尋找修復。 – ffledgling

相關問題