Ansible

在庫存 ansible yaml 文件中要提及哪些常見變數?

  • June 23, 2021
  • 我嘗試建立管道來安裝我的產品。
  • 我的產品安裝在至少有 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

不包括:角色。我不知道你想完成什麼,這個答案有點長。

引用自:https://serverfault.com/questions/1067425