一千萬個為什麽

搜索

沒有相對路徑的手冊



我已經有很多劇本,所以我開始在劇本目錄中組織它們。它導致了必須有相對路徑的變量文件。

實際劇本:

---
- hosts:  aws_instance.jenkins-agents
  user:   ec2-user
  vars_files:
    - ../../../vars/main.yaml
    - ../../../vars/vault.yaml
  ...

有沒有辦法保持目錄結構,但避免lochness族( ../../../ )?

I know for roles You can specify path to them, but I did not find anything similar for vars_files

項目條件

  1. 我們需要從項目的根目錄運行手冊
  2. varsplaybooks 目錄位於項目的根目錄
  3. 此項目沒有靜態廣告資源/主機,但是當您運行某個Playbook時,它會即時生成

轉載註明原文: 沒有相對路徑的手冊

一共有 3 個回答:

您會註意到目錄布局的官方建議將所有在根層面的劇本。這是故意的,因為Ansible沒有很好地處理其他計劃。

正如您已經開始做的那樣,您可以將劇本放在子目錄中,但這需要(如您已經發現的)使用劇本中相對路徑到他們使用的任何其他資源; Ansible使用劇本路徑開始搜索,這就是它的寫法。大多數情況下,只有當您選擇移動劇本的位置時,才會處理這些問題。

然而,你似乎有更多的嵌套比你應該:

---
- hosts:  aws_instance.jenkins-agents
  user:   ec2-user
  vars_files:
    - ../../../vars/main.yaml
    - ../../../vars/vault.yaml
  ...

為什麽要瀏覽三個目錄?我期望一個布局,就像官方的布局,但有一個子文件夾的劇本;那麽你最終會只是

---
- hosts:  aws_instance.jenkins-agents
  user:   ec2-user
  vars_files:
    - ../vars/main.yaml
    - ../vars/vault.yaml
  ...

這是一個非常小的變化。


其次,你真的很想使用 vars_files 。 Ansible中使用的大多數變量根據主機而不同(因此應該放在項目根目錄下的 group_vars / host_vars 中),或者是特定於角色的(因此應該進入在角色目錄中的 vars / defaults )。幾個文檔鏈接:

就我個人而言,我認為最好盡可能在你的劇本中盡可能少,但是把所有事情都委托給角色。以下是您的設置中的一個示例整個劇本:

- hosts: aws_instance.jenkins-agents
  roles:
    - ../roles/jenkins_agent

這給你更多的重用靈活性。

如果您發現自己不想為角色使用相對路徑,則可以覆蓋 < code> roles_path 放在您運行Ansible命令的根目錄下的 ansible.cfg 中。

由於我無法評論030的答案(只是開了一個帳戶),我會在這裏回答。

組變量目錄相對於Ansible路徑。

你不必從/ etc/ansible運行Ansible。如果你願意,你可以從〜/ .hidden/directory/stuff運行它。只要確保保持目錄結構。即:

/pipeline/   # ansible playbooks are here
/pipeline/roles
/pipeline/group_vars

然後你可以運行類似的東西

cd /pipeline
ansible-playbook deploy_app.yml

它將從pipeline/group_vars文件夾讀取組變量。最好先cd到你的根文件夾,因為它會查找當前文件夾中的路徑,如果它在默認位置找不到它們(/ etc/ansible),那麽你可以把你的ansible.cfg放入/而不必指定其他命令行參數。您也可以選擇在ansible.cfg中定義特定的路徑。

您可以更進一步,為每個環境/位置/等設置單獨的組變量:

/pipeline/prod/group_vars/all.yml
/pipeline/dev/group_vars/all.yml

並使用include-vars按如下方式運行。

ansible-playbook deploy_app.yml -i prod

希望這可以幫助。

為避免此類問題,這就是為什麽 Ansible中的主機和組

/etc/ansible/group_vars/raleigh#可以選擇以'.yml','.yaml'或'.json'
的/ etc/ansible/group_vars /網絡服務器
的/ etc/ansible/host_vars /桌上足球
</代碼>