在庫存 ansible yaml 文件中要提及哪些常見變數?
- 我嘗試建立管道來安裝我的產品。
- 我的產品安裝在至少有 8 台機器的實驗室中(本地實驗室)。
- 我有幾個本地實驗室,幾個雲端實驗室
- 每台機器都有一個角色,例如:Center-DB機器,Center-Queue機器或Center-App機器,Middle機器和Client機器等……所以,一些實驗室是:1 Center - 1 Middle - 1 位客戶。或 3 個中心(應用程序、數據庫、隊列) - 2 個中間件 - 3 個客戶端
- 有些機器有一種服務,如 DB,有些機器有幾種:DB、IIS 和消息代理
- 該實驗室位於一個安全的 VLAN 中,這意味著為了從遠端執行腳本,我需要使用它們的 IP 而不是它們的 FQDN 連接到機器並提供憑據。
- 所有機器的憑據都相同。
- 此外,安裝文件中還有一個選項來安裝受保護(使用證書和埠 443)或不受保護的產品。
- 在安裝過程中,我需要先將其特定的安裝文件複製到每台機器,然後使用特定的參數安裝它們。
除了清單 ansible yaml 文件中的主機和 IP 地址列表之外,是否可以添加變數或鍵,例如:
- “證書”
- “協議”,
- “文件”,
- “機器類型”等……?
或者他們應該放在不同的文件中,比如角色(任務)。請幫我決定哪些資訊去哪裡。我的範例 yaml 文件如下:
--- cred: user: a pass: 1 center: dbs: - db: fqdn: center-db.foo.com cn: center-db files: - C:\folder\Server.msi ip: 1.1.1.1 queues: - queue: fqdn: center-queue.foo.com cn: center-queue files: - C:\folder\Server.msi ip: 2.2.2.2 apps: - app: fqdn: center-app.foo.com cn: center-app files: - C:\folder\Server.msi - C:\folder\Center-Client.msi - C:\folder\files ip: 3.3.3.3 clients: - client: db: cn: Client-DB app: fqdn: Client-APP.foo.com cn: Client-APP files: - C:\folder\Server.msi - C:\folder\Client-Client.msi ip: 4.4.4.4
Ansible 允許以多種方式建構庫存變數和任務。根據各種 Ansible 外掛的期望,以合乎邏輯的方式製定您自己的意見。
該實驗室位於一個安全的 VLAN 中,這意味著為了從遠端執行腳本,我需要使用它們的 IP 而不是它們的 FQDN 連接到機器並提供憑據。
錯誤的。DNS 適用於每個環境。也許將一個區域委派
hiddai.lab.example.net
給一個測試實驗室 DNS 伺服器,並且主機在該區域中使用 FQDN。也就是說,
ansible_host
可以提供變數覆蓋主機名或 IP 地址以供連接外掛使用。不要使用分配給其他使用者的 IP 地址。1.1.1.1 不是你的,它是 Cloudflare DNS。使用您的真實 IP 地址或文件測試網,如 192.0.2.0/24 198.51.100.0/24 203.0.113.0/24。
此外,我需要決定我的產品是否會在我的實驗室中安全安裝(哪種協議 - HTTPS 或 HTTP?)
始終安全,所以 HTTPS。實驗室設置在 PKI、個人簡單 CA、自簽名證書上可以更輕鬆。
除了清單 ansible yaml 文件中的主機和 IP 地址列表之外,是否可以添加變數或鍵,例如:“憑據”、“協議”、“文件”、“機器類型”等…
不,將主機列表與角色級應用程序配置數據分開。這允許多個庫存。多個實驗室、暫存和生產庫存之間的數據重複最少。
將清單限制為連接到主機所需的內容:主機名、使用者、可能是憑據、連接外掛。將應用程序詳細資訊放在其他地方,例如 group_vars。
cred: user: a pass: 1
說到憑據,我認為一個字元的密碼太短了。甚至不要把它作為一個假的例子。理想情況下,將密碼身份驗證替換為更好的東西,例如基於密鑰或證書的身份驗證。或者至少是基於單詞的長密碼,例如
unluckily-pretense-occupy-quartered
.您的文件路徑似乎是 Windows。閱讀Ansible 的 winrm 文件並考慮您的身份驗證選項。
在庫存中儲存憑據意味著擁有庫存文件的任何人都可以執行命令。適當地保護文件。考慮將憑據儲存在單獨的密鑰文件中,或者儲存在您可以通過 Ansible 查找訪問的某個秘密系統中。
您的 vars 文件是 YAML,但不在Ansible 的靜態 YAML 庫存外掛所期望的結構中。也許像這樣,因為
inventory/lab.yml
我已經將一些值更改為每個 Internet RFC 的實際範例。--- all: children: windows: # Group containing only Windows hosts allow for # Windows-specific auth and connection variables vars: ansible_user: a ansible_password: unluckily-pretense-occupy-quartered ansible_connection: winrm ansible_winrm_transport: credssp children: db: # FQDN as inventory_hostname should resolve if in DNS # Ansible pieces out the top label for you as special var inventory_hostname_short hosts: center-db.hiddai.lab.example.net: # ansible_host overrides what to connect to # Such as when there is no DNS ansible_host: 203.0.113.23 children: queue: hosts: center-queue.hiddai.lab.example.net: ansible_host: 203.0.113.83 children: app: hosts: center-app.hiddai.lab.example.net: ansible_host: 203.0.113.62 children: client: hosts: client-app.hiddai.lab.example.net: ansible_host: 203.0.113.28 db: center-db
我不清楚這個例子中的“中心”是什麼,軟體產品、部署名稱、客戶端名稱?由於 Ansible 庫存在內部實際上是持平的,因此我已經將其分解。如果需要,將其作為變數或組添加回來。
關於主機特定的應用程序配置數據,請考慮 group_vars。這些可以與您的庫存文件相關,文件名與組名匹配。
庫存/group_vars/windows.yml
--- base_dir: 'C:\folder\' files_common: - Server.msi
庫存/group_vars/app.yml
--- files_additional: - files - Center-Client.msi
庫存/group_vars/client.yml
--- files_additional: - Client-Client.msi
注意我為文件發明了幾個變數。由於名稱不同,您可以稍後將它們組合成一個列表,所以
{{ files_common + files_additional }}
理想情況下,編寫和使用 Ansible 角色,這些角色有自己的變數和任務。考慮適用於大多數案例的角色預設值。例如,win_package 任務安裝這些 msi 包,並預設從 https 伺服器下載它們。但是讓源封包件成為一個變數,所以它可以被覆蓋。
戲劇是將這些主持人模式映射到角色的原因。我不確定僅給定通用名稱來呼叫您的應用程序,因此我在角色前面加上了“事物”。播放.yml:
--- hosts: db roles: - thingdb hosts: queue roles: - thingqueue hosts: app roles: - thingapp hosts: client roles: - thingclient
執行這樣的劇本
ansible-playbook play.yml -i inventory/lab.yml
不包括:角色。我不知道你想完成什麼,這個答案有點長。