Ansible - 滿足伺服器類別標準時建立用戶

Ansible - 滿足伺服器類別標準時建立用戶

我是一個新的 ansible 用戶,從 shell 腳本集合切換到 ansible playbook。我目前的使用者管理系統僅當使用者已被授予對該伺服器類別、位置和環境的存取權限(或其中任何一個設定為通配符/任意)時才允許將使用者新增至系統。

伺服器類別、位置和環境以(僅根可讀/可寫入)檔案的形式本機儲存在客戶端伺服器本身上,如下所示:

LD_CLASS="app"
LD_LOC="dfw"
LD_ENV="prod"

我發現了一些我認為與我想要的類似的範例,我仍然不確定如何從 ansible 用戶端獲取變量,以及如何確保在添加之前滿足所有 3 個類別、位置和環境要求用戶。我設想一個像這樣的變數文件:

users:
 -name: user1
  uid: 60001
  gid: 60001
  class: app
  location: any
  env: dev
 -name: user2
  uid: 60002
  gid: 60002
  class: app
  location: dfw
  env: prod 

根據從我正在配置的 ansible 用戶端收集的變量,用戶模組條目看起來像這樣(請注意偽代碼,因為我不確定如何實際完成此操作):

- user:
    name: '{{ item.name }}'
    state: '{ (If $LD_LOC matches location variable, or is set to any) & ($LD_ENV matches env variable, or is set to any) & ($LD_CLASS matches class variable, or is set to any) } present{% else %}absent{% endif %}'
    uid: '{{ item.uid }}'
   with_items: users

我不想依賴 ansible 角色,而是從 ansible 用戶端本身獲取類別、位置和環境數據,至少部分是因為這是我們目前擁有的系統,它可以幫助我們輕鬆過渡到 ansible,同時保留一些資訊現有且熟悉的工具。我正在尋找的可能嗎?

答案1

有一個功能叫當地事實在安西布爾:

  • 修改您的「屬性」文件,如下所示,將其儲存在 中/etc/ansible/facts.d/server_meta.fact,並根據需要套用權限:

    [settings]
    ld_class=app
    ld_loc=dfw
    ld_env=prod
    
  • 然後運行您的劇本並參考state參數中的這些事實:

    state: "{{ (ansible_local.server_meta.settings.ld_loc == 'dfw' and ansible_local.server_meta.settings.ld_class == 'app' and ansible_local.server_meta.settings.ld_env == 'prod' ) | ternary('present', 'absent') }}"
    

相關內容