मैं बड़ी सफलता के लिए, 3 साल के लिए, अब लिनक्स सिस्टम के बढ़ते झुंड के प्रबंधन के लिए, Ansible का उपयोग कर रहा हूं। अपने प्रश्न में गोता लगाने से पहले, मुझे कुछ संदर्भ निर्धारित करने की आवश्यकता है।
अपने दिन के काम के हिस्से के रूप में, मैं विभिन्न कंपनियों के लिए सिस्टम डिजाइन, तैनाती और रखरखाव करता हूं, जो सभी एक ही उद्यम / इनक्यूबेटर कंपनी की छतरी के नीचे काम करते हैं। हमारी पोर्टफोलियो कंपनियों के बीच बहुत अधिक पार-परागण है, और इस तरह, हम यह नहीं कह सकते हैं कि केवल उपयोगकर्ताओं को ए, बी और सी को कंपनी के एक्स सिस्टम तक पहुंच की आवश्यकता होगी। उन्हें कंपनी Y के सिस्टम तक भी पहुँच की आवश्यकता हो सकती है। यह इस तथ्य से जटिल है कि प्रत्येक कंपनी का पर्यावरणीय वातावरण एक अलग गिट रिपॉजिटरी में रहता है। इसका मतलब है कि विभिन्न कंपनी के सिस्टम में उपयोगकर्ताओं को तैनात करने के लिए बहुत सारे कोड डुप्लिकेट हैं। मैं कुछ खास कंपनी के सिस्टम में उपयोगकर्ताओं को तैनात करने के लिए कोड की कॉपी / पेस्ट को इस तरह से समाप्त करता हूं:
- name: add several users
user: >
name={{ item.name }}
state=present
groups={{ item.groups }}
uid={{ item.uid }}
password={{ item.password }}
shell=/bin/bash
with_items:
- { name: 'user1', groups: 'ssh-access,sudo', uid: '501', password: '<redacted>' }
- { name: 'user2', groups: 'ssh-access,sudo', uid: '502', password: '<redacted>' }
tags: users
- name: authorized_keys - user1
action: authorized_key user=user1 key="{{ lookup('file', 'pubkeys/user1') }}" manage_dir=yes
tags:
- pubkeys
- users
- name: authorized_keys - user2
action: authorized_key user=user2 key="{{ lookup('file', 'pubkeys/user2') }}" manage_dir=yes
tags:
- pubkeys
- users
जब मैंने 5 <उपयोगकर्ताओं को प्रबंधित करने के लिए यह ठीक काम किया था, लेकिन जैसे-जैसे उपयोगकर्ता आधार बढ़ता है, तो यह महत्वपूर्ण हो जाता है कि वे कुंजी रोटेशन, नए पासवर्ड आदि के साथ अद्यतित रहें।
मेरे सवाल के साथ, बैकस्टोरी और संदर्भ सेट के साथ:
यह मानते हुए कि एक केंद्रीकृत प्रमाणीकरण प्रणाली (एलडीएपी, आदि) का उपयोग करना एक विकल्प नहीं है, मैं एक केंद्रीकृत उपयोगकर्ता डेटाबेस बनाने से कैसे निपट सकता हूं जो विभिन्न ansible playbooks उपभोग कर सकते हैं? मैं उपयोगकर्ताओं, यूआईडी, पासवर्ड हैश और सार्वजनिक कुंजी की एक केंद्रीय सूची बनाए रखने में सक्षम होना पसंद करूंगा, और फिर प्रत्येक कंपनी के मेजबानों के लिए उपयोगकर्ताओं (कस्टम प्रति-होस्ट समूह सदस्यता के साथ) को तैनात करने में सक्षम हो सकता हूं।
मैं किसी प्रकार की खेल संरचना की कल्पना कर रहा हूँ जैसे:
- name: Deploy users
user_management:
- { name: "user1", groups: "sudo" }
- { name: "user1", groups: "sudo" }
... जहां प्रत्येक उपयोगकर्ता के यूआईडी, हैश और सार्वजनिक कुंजी को केंद्रीय सूची से खींच लिया जाएगा और हमेशा की तरह तैनात किया जाएगा।
तो, मेरे पास क्या विकल्प हैं? मैं काफी समय से इसे घेर रहा हूं, और जो मैं पहले से कर रहा हूं उससे बेहतर कुछ भी नहीं कर पाया। क्या मैं अपने उपयोगकर्ता डेटाबेस को रखने के लिए कस्टम तथ्यों फ़ाइल के साथ कुछ कर सकता हूं?