2017-07-26 55 views
-1

連接我有一個ansible host文件(稱爲my_host_file)目前的公共IP /主機與此類似:習慣,同時通過SSH與ansible

[my_group_name] 
MY_PUBLIC_IP_FOR_VM_XYZ 

然後我試圖在YAML劇本的幾個不同的方法(所謂my_playbook.yml)與此類似:

--- 
- hosts: my_group_name 
    sudo: yes 
    tasks: 
    - debug: var=hostvars 
    - setup: 
    register: allfacts 
    - debug: var=allfacts 
    - debug: var=ansible_default_ipv4.address 
    - debug: var=ansible_hostname 
    - command: bash -c "dig +short myip.opendns.com @resolver1.opendns.com" 
    register: my_public_ip_as_ansible_var 

我運行的一切是這樣的:ansible-playbook -v -i my_host_file my_playbook.yml

我禾喜歡在my_host_file文件(MY_PUBLIC_IP_FOR_VM_XYZ在運行時以不同於使用命令與opendns結合的方式獲取公共IP地址,然後將其存儲到變量my_public_ip_as_ansible_var中。

畢竟,這已被用於ansible本身建立SSH會話,因此它可能保存在某個地方。

我無法找到此信息之一:在hostvars

  • (其實在這裏我可以在這裏找到,但我也可以看到所有的其他主機,所以我沒有辦法識別當前的SSH從主機組)會議
  • allfacts(使用setup: [...])變量(只在私網IP地址,其中有關VM很多有用的信息,如磁盤大小,網絡,操作系統內核版本等)
  • ansible_default_ipv4.address(這是私網IP)
  • ansible_hostname(這是主機名,而不是公網IP我在my_host_file使用)

有沒有獲得SSH會話過程中使用的主機的清潔方式/更ansible十歲上下的方式,來自my_host_file

+0

這是基礎設施作爲代碼,當前在git存儲庫中版本化,就像任何其他源代碼一樣。同樣在這個特定的問題中,我定義了變量併爲它們賦值。如果這個問題不在話下,那麼我被允許使用的標籤的組合需要由誰來管理這個電路板以更有效的方式進行管理。 – TPPZ

回答

2

從清單文件中獲取主機別名,你會用​​變量。

還有ansible_host變量,因爲庫存別名和實際的主機可能會有所不同。

+0

好吧,把所有這些作品放在一起對初次使用的用戶來說並不是微不足道的。我還發現在我的'my_host_file'中我可以有'MY_HOST_AS_LABEL my_public_ip = MY_PUBLIC_IP_FOR_VM_XYZ some_variable = xyz'這樣的一行,然後我可以用' - debug:var = my_public_ip'和' - debug: var = some_variable',而'MY_HOST_AS_LABEL'(不是IP地址)可以通過' - debug:var = inventory_hostname'來檢索,如下所示: – TPPZ

1
  • ​​:在您的庫存(可以是IP,域名或邏輯名)
  • inventory_hostname_short聲明主機名:相同,但與第一點
  • ansible_nodename後,除去一切:的主機名主機(COMMANDE hostname的結果)
  • ansible_hostname:主機的主機名短
  • ansible_fqdn(命令hostname --short的結果):主機的全名(與DOMA在)(命令hostname --fqdn的結果)
  • ansible_default_ipv4.address:IPv4地址從主機訪問8.8.8.8
  • ansible_ethX.ipv4.address:主機的的ethX接口的IPv4地址
  • ansible_ssh_host:主機名或IP用來與SSH 訪問主機如果在清單中所定義

實施例:

  • ​​:myremote.foo.bar
  • inventory_hostname_short:myremote
  • ansible_nodename:我的主機
  • ansible_hostname:我的主機
  • ansible_fqdn:我-host.domain.local
  • ansible_default_ipv4.address: 1.2.3.4
  • ansible_eth1.ipv4.address:5.6.7.8
  • ansible_ssh_host:my-machine.mydomain.com
+0

是的,但是如果我的虛擬機在公網IP上,但是我沒有將它映射到一些可以通過DNS解決的問題,例如'myremote.foo.bar'(或者我現在還沒有意識到這個映射),那麼我需要找到一種方法來使用這個公共IP來識別這個虛擬機。因此,可能在'host'文件中使用一個條目,例如'MY_PUBLIC_IP_FOR_VM_XYZ some_variable = MY_LOGICAL_NAME',使我能夠通過'inventory_hostname'檢索IP,並通過'some_variable'檢索邏輯名稱(因此我可以使用這些別名來化妝'/ etc/hosts') – TPPZ

+0

'ansible_ssh_host'可以是IP地址,所以你可以在你的庫存中設置'MY_HOST_AS_LABEL ansible_ssh_host = MY_HOST_PUBLIC_IP',然後訪問'ansible_ssh_host'作爲你的虛擬機的公共IP地址。但請確保在這種情況下始終使用IP地址作爲'ansible_ssh_host'(如果您使用DNS條目,然後將其用作IP,則將失敗) – zigarn