對不起,如果之前討論過這個問題,或者有關此主題的文檔,但我無法找到方法在任何地方執行此操作。Ansible:對每個任務使用默認變量
我無法找到如何在劇本中爲每個任務使用主機變量,而無需每次指定它們。我正在研究一些模塊,通過API使用本地連接來配置RouterOS設備。每次執行任務時,我都需要提供設備的IP地址,用戶名和密碼。
我的hosts文件看起來是這樣的:
[routers]
mikrotik hostname=192.168.1.100 username=admin password=password123 dns_servers=192.168.1.1,8.8.8.8
[virtual]
virtual1 hostname=192.168.116.100 username=admin password=somepass dns_servers=192.168.116.1 gw_address=192.168.116.100/24
virtual2 hostname=192.168.116.110 username=admin password=somepass2 dns_servers=192.168.116.1 gw_address=192.168.116.110/24
我的劇本則是這樣的:
- name: Mikrotik TEST
hosts: all
connection: local
gather_facts: no
vars:
dhcp_pool: testpool
tasks:
- name: DNS Setup
mt_dns: username={{username}} hostname={{hostname}} password={{password}} servers=192.168.1.1,8.8.8.8 remote_requests="true"
- name: IP address setup
mt_ip: username={{username}} hostname={{hostname}} password={{password}} address={{et2addr}} interface=ether2 disabled="false"
- name: DHCP Pool Setup
mt_ip_pool: username={{username}} hostname={{hostname}} password={{password}} pool_name={{dhcp_pool}} pool_range=192.168.116.10-192.168.116.20
- name: DHCP Server Setup
mt_dhcp_srv: username={{username}} hostname={{hostname}} password={{password}} name=TestServer address_pool={{dhcp_pool}} disabled="true" interface=ether1
- name: DHCP Options Setup
mt_dhcp_net: username={{username}} hostname={{hostname}} password={{password}} network_address=192.168.116.0/24 gateway=192.168.116.1 dns_server=192.168.116.1
- name: Set static route
mt_static_route: username={{username}} hostname={{hostname}} password={{password}} dst_address=192.168.10.0/24 gateway=192.168.10.1
- name: Source NAT
mt_nat: username={{username}} hostname={{hostname}} password={{password}} chain=dstnat action=dst-nat dst_port=8022 to_addresses=192.168.116.20 to_ports=22 protocol=tcp
正如你可以看到,指定主機名,用戶名和密碼,每次都讓劇本看起來過於複雜。有沒有辦法爲每個任務預定義變量?我是新手,我相信有一種方法可以做到這一點,我只是無法找到它。
謝謝你的任何建議。
Ansible怎麼可能知道爲什麼變量與參數一致?如果碰巧有一個變量的名稱與模塊上的某個參數相同,但您完全不打算使用該參數,會發生什麼?因此,您必須始終指定您希望使用的每個參數。 – ydaetskcoR
所以沒有辦法完全實現這一點?我試圖在模塊級別上做一個解決方法,通過創建函數來處理槽主機文件並從那裏使用證書。但是我被卡在事實上,模塊無法分辨它運行的是哪個主機。我想一個解決方案可能是使用主機名作爲參數,使其成爲一個變量而不是三個...或者可能創建連接插件,但是我擔心這遠離我的編程技能。 –
您可以編寫一個角色,使用默認值執行這些配置,然後僅覆蓋要覆蓋的內容 – user2599522