सुनिश्चित करें कि उपयोगकर्ताओं की केवल विशिष्ट सूची ही Ansible के पास मौजूद है


5

हम इस कार्य के साथ उपयोगकर्ता बनाने के लिए Ansible का उपयोग करते हैं:

- name: Create adm users
  user:
    name: "{{ item.name }}"
    group: "{{ common_adm_group }}"
    createhome: yes
    password: "!!"
    update_password: always
    state: present
  with_items: "{{ common_adm_users }}"

और common_adm_users इस तरह है:

  - name: user1
    comment: "First Last"
    ssh_key: "ssh-rsa AAAAB3Nza..."

यह उपयोगकर्ताओं को बनाने के लिए ठीक काम करता है, लेकिन जब कोई टीम को छोड़ता है, तो अपने उपयोगकर्ता को common_adm_users से हटाने से यह सर्वर से हटाए जाने का कारण नहीं बनता है जब हम इस कार्य को फिर से लागू करते हैं।

उपयोगकर्ताओं की सटीक सूची बनाए रखने के लिए सबसे अच्छा अभ्यास क्या है?


आप सही हैं, asible उपयोगकर्ता मॉड्यूल बहुत बुनियादी है। आप जो चाहते हैं, उसके लिए आप या तो अपनी स्वयं की भूमिका निभा रहे होंगे, किसी आकाशीय आकाशगंगा से किसी चीज का उपयोग कर रहे होंगे , या बाहरी वस्तु (LDAP, AD, आदि) का उपयोग कर रहे होंगे।
jscott

आप केवल state: absentबर्खास्त उपयोगकर्ताओं को क्यों नहीं ?
माइकल हैम्पटन

जवाबों:


4

यह @Konstantin Suvorov का एक समान उत्तर है लेकिन थोड़ा अधिक परिष्कृत है, कुछ बारीकियों के साथ स्पष्ट रूप से वर्तनी है, और वास्तव में परीक्षण और उपयोग में है।

निम्नलिखित का उपयोग करते हुए, आपको केवल उन उपयोगकर्ता नामों की एक सूची बनाए रखने की आवश्यकता होती है, जिनकी आप एक्सेस करना चाहते हैं। उस सूची से कोई भी परिवर्धन या निष्कासन मेजबान पहुंच में परिलक्षित होगा।

वैकल्पिक सहायक टिप: हम वास्तव में इस सूची के लिए अपने GitHub उपयोगकर्ता नाम का उपयोग करना चुनते हैं, क्योंकि तब हम आसानी से SSH कुंजी भी जोड़ सकते हैं। एक उदाहरण के लिए अंत देखें।

सबसे पहले, group_varsहम अपने डेवलपर्स की हमारी सूची को परिभाषित करते हैं जिसे हम एक्सेस करना चाहते हैं (ध्यान दें कि इसे कई तरीकों से परिभाषित किया जा सकता है, न कि केवल group_vars)

developers:
  - user1
  - user2
  - etc...

दूसरा, हम एक समूह बनाते हैं जिसके लिए हम अपने डेवलपर्स को निम्न कार्य सौंपेंगे:

- name: Create "developers" group
  group:
    name: developers
    state: present

तीसरा, हम अपने डेवलपर्स को इस समूह में जोड़ते हैं। ध्यान दें कि हम उन्हें संपत्ति के माध्यम से जोड़ते हैं groupsऔर नहीं group। यह इसे एक माध्यमिक समूह के रूप में जोड़ता है और यह सुनिश्चित करता है कि वे इसमें दिखाई दें /etc/group। यह महत्वपूर्ण है क्योंकि यदि आप उन्हें एक प्राथमिक समूह के रूप में जोड़ते हैं, तो वे उस समूह के सदस्य के रूप में प्रकट नहीं होंगे /etc/group:

- name: Add user accounts
  user:
    name: "{{ item }}"
    shell: /bin/bash
    groups: [developers]
    state: present
  with_items: "{{ developers }}"

चौथा, हम तब सभी उपयोगकर्ताओं को प्राप्त करते हैं जो वर्तमान में होस्ट पर डेवलपर्स समूह से संबंधित हैं ( ध्यान दें कि यह प्राथमिक चरण में उल्लिखित प्राथमिक / माध्यमिक धारणा पर निर्भर है ):

- name: Determine existing users
  shell: 'grep developers /etc/group | cut -d: -f4 | tr "," "\n"'
  changed_when: false 
  register: existing_users

पांचवां, यह निर्धारित करें कि उनमें से कौन सा उपयोगकर्ता हटा दिया जाना चाहिए (जैसे जो हमारे developersgroup_vars सूची में परिभाषित नहीं हैं ):

- name: Determine removed users
  set_fact:
    removed_users: "{{ existing_users.stdout_lines | difference(developers) }}"

छठा और अंतिम, उन्हें हटा दें:

- name: Delete removed user accounts
  user:
    name: "{{ item }}"
    state: absent
  with_items: "{{ removed_users }}"

वैकल्पिक सहायक कदम - अगर GitHub उपयोगकर्ता नाम से उपयोगकर्ताओं को जोड़ते हैं, तो आप आसानी से उन्हें GHHub पर उपलब्ध सार्वजनिक कुंजी से SSH एक्सेस प्रदान कर सकते हैं:

- name: Add public ssh keys of users
  authorized_key:
    user: "{{ item }}"
    exclusive: yes
    key: https://github.com/{{ item }}.keys
    state: present
  with_items: "{{ developers }}"

1
बहुत अच्छी तरह से समझाया गया है, यह स्वीकृत उत्तर होना चाहिए।
कार्तिक टी

2

आपको यहां कुछ अतिरिक्त कार्य करने की आवश्यकता है।

सभी आवश्यक उपयोगकर्ताओं को जोड़ने के बाद, मौजूदा उपयोगकर्ताओं को पकड़ो, जैसे:

- shell: 'grep {{ common_adm_group }} /etc/group | cut -d: -f4 | tr "," "\n"'
  changed_when: false # Make task green
  register: existing_users

और बासी को हटा दें:

- user:
    name: "{{ item }}"
    state: absent
  with_items: "{{ existing_users.stdout_lines | difference(common_adm_users | map(attribute='name') | list) }}"

नोट: कोड का परीक्षण नहीं किया गया है, इसमें टाइपोस आदि हो सकते हैं।


0

आप वास्तव में अपने मौजूदा कार्य के लिए एक क्षेत्र जोड़ सकते हैं:

- name: Create adm users
  user:
    name: "{{ item.name }}"
    group: "{{ common_adm_group }}"
    createhome: yes
    password: "!!"
    update_password: always
    state: "{{ item.state | default('present') }}"
  with_items: "{{ common_adm_users }}"

और फिर टीम के सदस्यों को छोड़ने का डेटा बनाएं जैसे कि:

- name: user1
    comment: "First Last"
    ssh_key: "ssh-rsa AAAAB3Nza..."
    state: "absent"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.