PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

Ansible PostgreSQL को प्यार करता है

Ansible बस बढ़िया है और PostgreSQL निश्चित रूप से कमाल है, आइए देखें कि वे एक साथ आश्चर्यजनक रूप से कैसे काम करते हैं!

==================प्राइम टाइम घोषणा! ===================

PGConf यूरोप 2015 इस साल 27-30 अक्टूबर को वियना में होगा।

मुझे लगता है कि आप संभवतः कॉन्फ़िगरेशन प्रबंधन, सर्वर ऑर्केस्ट्रेशन, स्वचालित परिनियोजन में रुचि रखते हैं (इसीलिए आप इस ब्लॉग पोस्ट को पढ़ रहे हैं, है ना?) और आपको काम करना पसंद है AWS (वैकल्पिक रूप से) पर PostgreSQL (निश्चित रूप से) के साथ, तो आप 28 अक्टूबर, 15-15:50 को मेरी बात "मैनेजिंग पोस्टग्रेएसक्यूएल विद अन्सिबल" में शामिल होना चाह सकते हैं।

कृपया अद्भुत शेड्यूल देखें और यूरोप के सबसे बड़े PostgreSQL इवेंट में भाग लेने का मौका न चूकें!

उम्मीद है कि आप वहां मिलेंगे, हां मुझे बातचीत के बाद कॉफी पीना पसंद है

=================प्राइम टाइम घोषणा! ====================

Ansible क्या है और यह कैसे काम करता है?

Ansible का आदर्श वाक्य है "sआसान, एजेंट रहित और शक्तिशाली ओपन सोर्स आईटी ऑटोमेशन ” Ansible डॉक्स से उद्धृत करके।

जैसा कि नीचे दिए गए आंकड़े से देखा जा सकता है, Ansible का होमपेज बताता है कि Ansible के मुख्य उपयोग क्षेत्र हैं:प्रावधान, कॉन्फ़िगरेशन प्रबंधन, ऐप परिनियोजन, निरंतर वितरण, सुरक्षा और अनुपालन, ऑर्केस्ट्रेशन। ओवरव्यू मेनू यह भी दिखाता है कि हम किन प्लेटफॉर्म पर Ansible यानी AWS, Docker, OpenStack, Red Hat, Windows को एकीकृत कर सकते हैं।

आइए यह समझने के लिए कि यह कैसे काम करता है और आईटी वातावरण के लिए कितना मददगार है, Ansible के मुख्य उपयोग-मामलों की जाँच करें।

प्रावधान करना

जब आप अपने सिस्टम में सब कुछ स्वचालित करना चाहते हैं तो Ansible आपका वफादार दोस्त है। यह एजेंट रहित है और आप एसएसएच के माध्यम से अपनी चीजों (यानी सर्वर, लोड बैलेंसर, स्विच, फायरवॉल) को आसानी से प्रबंधित कर सकते हैं। चाहे आपका सिस्टम नंगे-धातु या क्लाउड सर्वर पर चल रहा हो, Ansible वहाँ होगा और आपको अपने उदाहरणों को व्यवस्थित करने में मदद करेगा। इसकी निष्क्रिय विशेषताएं यह सुनिश्चित करती हैं कि आप हमेशा उस स्थिति में रहेंगे जहां आप चाहते थे (और अपेक्षित)।

कॉन्फ़िगरेशन प्रबंधन

सबसे कठिन चीजों में से एक है अपने आप को दोहराए जाने वाले परिचालन कार्यों में दोहराना नहीं है और यहाँ एक उद्धारकर्ता के रूप में Ansible फिर से दिमाग में आता है। अच्छे पुराने दिनों में जब समय खराब था, sysadmins कई स्क्रिप्ट लिख रहे थे और उन्हें लागू करने के लिए कई सर्वरों से जुड़ रहे थे और यह स्पष्ट रूप से उनके जीवन में सबसे अच्छी बात नहीं थी। जैसा कि हम सभी जानते हैं कि मैन्युअल कार्य त्रुटि प्रवण होते हैं और वे एक समरूप और अधिक प्रबंधनीय के बजाय विषम वातावरण की ओर ले जाते हैं और निश्चित रूप से हमारे जीवन को अधिक तनावपूर्ण बनाते हैं।

Ansible के साथ आप सरल प्लेबुक लिख सकते हैं (बहुत जानकारीपूर्ण दस्तावेज़ीकरण और इसके विशाल समुदाय के समर्थन से) और एक बार जब आप अपने कार्यों को लिख लेते हैं तो आप मॉड्यूल की एक विस्तृत श्रृंखला (यानी AWS, Nagios, PostgreSQL, SSH, APT, File) को कॉल कर सकते हैं। मॉड्यूल)। परिणामस्वरूप, आप कॉन्फ़िगरेशन को मैन्युअल रूप से प्रबंधित करने की तुलना में अधिक रचनात्मक गतिविधियों पर ध्यान केंद्रित कर सकते हैं।

ऐप परिनियोजन

कलाकृतियों के तैयार होने के कारण, उन्हें कई सर्वरों पर तैनात करना बहुत आसान है। चूंकि Ansible SSH पर संचार कर रहा है, इसलिए प्रत्येक सर्वर पर एक रिपॉजिटरी से खींचने या FTP पर फ़ाइलों की प्रतिलिपि बनाने जैसे प्राचीन तरीकों से परेशानी की कोई आवश्यकता नहीं है। Ansible कलाकृतियों को सिंक्रनाइज़ कर सकता है और यह सुनिश्चित कर सकता है कि केवल नई या अपडेट की गई फ़ाइलें स्थानांतरित की जाती हैं और अप्रचलित फ़ाइलें हटा दी जाती हैं। यह फ़ाइल स्थानांतरण को भी गति देता है और बहुत अधिक बैंडविड्थ बचाता है।

फ़ाइलों को स्थानांतरित करने के अलावा, Ansible सर्वरों को उत्पादन उपयोग के लिए तैयार करने में भी मदद करता है। स्थानांतरण से पहले, यह निगरानी को रोक सकता है, सर्वर को लोड बैलेंसर्स से हटा सकता है और सेवाओं को रोक सकता है। परिनियोजन के बाद, यह सेवाएं शुरू कर सकता है, बैलेंसरों को लोड करने के लिए सर्वर जोड़ सकता है, और निगरानी फिर से शुरू कर सकता है।

यह सब सभी सर्वरों के लिए एक साथ होने की आवश्यकता नहीं है। जीरो-डाउनटाइम परिनियोजन प्रदान करने के लिए Ansible एक समय में सर्वर के सबसेट पर काम कर सकता है। उदाहरण के लिए एक बार में यह 5 सर्वरों को एक साथ परिनियोजित कर सकता है, और फिर समाप्त होने पर यह अगले 5 सर्वरों पर परिनियोजित कर सकता है।

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

निरंतर वितरण

निरंतर वितरण का अर्थ है रिलीज़ के लिए तेज़ और आसान तरीका अपनाना। उस लक्ष्य को प्राप्त करने के लिए, सर्वोत्तम उपकरणों का उपयोग करना महत्वपूर्ण है जो बिना डाउनटाइम के लगातार रिलीज को सक्षम करते हैं और जितना संभव हो उतना कम मानवीय हस्तक्षेप की आवश्यकता होती है। चूंकि हमने ऊपर Ansible की एप्लिकेशन परिनियोजन क्षमताओं के बारे में सीखा है, इसलिए शून्य-डाउनटाइम के साथ परिनियोजन करना काफी आसान है। निरंतर वितरण के लिए अन्य आवश्यकता कम मैनुअल प्रक्रियाएं हैं और इसका मतलब है कि स्वचालन। उत्पादन के लिए तैयार होने के लिए सर्वरों को कॉन्फ़िगर करने से लेकर सेवाओं को कॉन्फ़िगर करने तक किसी भी कार्य को Ansible स्वचालित कर सकता है। Ansible में परिदृश्य बनाने और परीक्षण करने के बाद, उन्हें एक सतत एकीकरण प्रणाली के सामने रखना और Ansible को अपना काम करने देना तुच्छ हो जाता है।

सुरक्षा और अनुपालन

सुरक्षा को हमेशा सबसे महत्वपूर्ण चीज माना जाता है लेकिन सिस्टम को सुरक्षित रखना सबसे कठिन चीजों में से एक है। आपको अपने डेटा की सुरक्षा के साथ-साथ अपने ग्राहक के डेटा की सुरक्षा के बारे में भी सुनिश्चित होना चाहिए। अपने सिस्टम की सुरक्षा सुनिश्चित करने के लिए, सुरक्षा को परिभाषित करना पर्याप्त नहीं है, आपको उस सुरक्षा को लागू करने में सक्षम होना चाहिए और यह सुनिश्चित करने के लिए अपने सिस्टम की लगातार निगरानी करनी चाहिए कि वे उस सुरक्षा के अनुरूप बने रहें।

Ansible उपयोग में आसान है चाहे वह फ़ायरवॉल नियम स्थापित करने, उपयोगकर्ताओं और समूहों को लॉक करने, या कस्टम सुरक्षा नीतियों को लागू करने के बारे में हो। यह अपने स्वभाव से सुरक्षित है क्योंकि आप एक ही कॉन्फ़िगरेशन को बार-बार लागू कर सकते हैं, और यह सिस्टम को वापस अनुपालन में लाने के लिए केवल आवश्यक परिवर्तन करेगा।

आर्केस्ट्रेशन

Ansible सुनिश्चित करता है कि सभी दिए गए कार्य उचित क्रम में हैं और इसके द्वारा प्रबंधित सभी संसाधनों के बीच एक सामंजस्य स्थापित करता है। Ansible के कॉन्फ़िगरेशन प्रबंधन और परिनियोजन क्षमताओं के साथ जटिल बहु-स्तरीय परिनियोजन को व्यवस्थित करना आसान है। उदाहरण के लिए, सॉफ़्टवेयर स्टैक के परिनियोजन पर विचार करते हुए, यह सुनिश्चित करने जैसी चिंताएँ कि सभी डेटाबेस सर्वर एप्लिकेशन सर्वर को सक्रिय करने से पहले तैयार हैं या लोड बैलेंसर में सर्वर जोड़ने से पहले नेटवर्क को कॉन्फ़िगर किया जाना अब जटिल समस्या नहीं है।

Ansible अन्य ऑर्केस्ट्रेशन टूल जैसे कि Amazon's CloudFormation, OpenStack's Heat, Docker's Swarm, आदि के ऑर्केस्ट्रेशन में भी मदद करता है। इस तरह, विभिन्न प्लेटफार्मों, भाषाओं और नियमों को सीखने के बजाय; उपयोगकर्ता केवल Ansible के YAML सिंटैक्स और शक्तिशाली मॉड्यूल पर ध्यान केंद्रित कर सकते हैं।

उत्तरदायी मॉड्यूल क्या है?

मॉड्यूल या मॉड्यूल पुस्तकालय स्थानीय या दूरस्थ सर्वर पर संसाधनों को नियंत्रित या प्रबंधित करने के लिए उत्तरदायी साधन प्रदान करते हैं। वे विभिन्न प्रकार के कार्य करते हैं। उदाहरण के लिए एक मॉड्यूल मशीन को रिबूट करने के लिए जिम्मेदार हो सकता है या यह केवल स्क्रीन पर एक संदेश प्रदर्शित कर सकता है।

Ansible उपयोगकर्ताओं को अपने स्वयं के मॉड्यूल लिखने की अनुमति देता है और आउट-ऑफ-द-बॉक्स कोर या अतिरिक्त मॉड्यूल भी प्रदान करता है।

Ansible playbooks के बारे में क्या?

Ansible हमें अपने काम को विभिन्न तरीकों से व्यवस्थित करने देता है। इसके सबसे प्रत्यक्ष रूप में, हम "ansible . का उपयोग करके Ansible मॉड्यूल के साथ काम कर सकते हैं "कमांड लाइन टूल और इन्वेंट्री फ़ाइल।

इन्वेंट्री

सबसे महत्वपूर्ण अवधारणाओं में से एक है इन्वेंट्री . हमें Ansible को यह जानने के लिए एक इन्वेंट्री फ़ाइल की आवश्यकता है कि SSH का उपयोग करके इसे किन सर्वरों से कनेक्ट करने की आवश्यकता है, इसके लिए कौन सी कनेक्शन जानकारी की आवश्यकता है, और वैकल्पिक रूप से कौन से वेरिएबल उन सर्वरों से जुड़े हैं।

इन्वेंट्री फ़ाइल INI जैसे प्रारूप में है। इन्वेंट्री फ़ाइल में, हम एक से अधिक होस्ट निर्दिष्ट कर सकते हैं और उन्हें एक से अधिक होस्ट समूहों के अंतर्गत समूहित कर सकते हैं।

हमारी उदाहरण सूची फ़ाइल host.ini निम्न की तरह है:

[dbservers]
db.example.com

यहां हमारे पास "dbservers" नामक एक होस्ट समूह में "db.example.com" नामक एक एकल होस्ट है। इन्वेंट्री फ़ाइल में, हम कस्टम SSH पोर्ट, SSH उपयोगकर्ता नाम, SSH कुंजियाँ, प्रॉक्सी जानकारी, चर, आदि भी शामिल कर सकते हैं।

चूंकि हमारे पास एक इन्वेंट्री फ़ाइल तैयार है, हमारे डेटाबेस सर्वर के अपटाइम्स को देखने के लिए, हम Ansible के "कमांड को लागू कर सकते हैं। ” मॉड्यूल और “अपटाइम . निष्पादित करें उन सर्वरों पर कमांड:

ansible dbservers -i hosts.ini -m command -a "uptime"

यहां हमने Ansible को host.ini फ़ाइल से होस्ट पढ़ने, उन्हें SSH का उपयोग करके कनेक्ट करने, "अपटाइम निष्पादित करने का निर्देश दिया। उनमें से प्रत्येक पर कमांड करें, और फिर उनके आउटपुट को स्क्रीन पर प्रिंट करें। इस प्रकार के मॉड्यूल निष्पादन को तदर्थ आदेश . कहा जाता है ।

कमांड का आउटपुट इस प्रकार होगा:

[email protected] ~/blog/ansible-loves-postgresql # ansible dbservers -i hosts.ini -m command -a "uptime"
db.example.com | success | rc=0 >>
21:16:24 up 93 days,  9:17,  4 users,  load average: 0.08, 0.03, 0.05

हालांकि, अगर हमारे समाधान में एक से अधिक चरण शामिल हैं, तो केवल तदर्थ आदेशों का उपयोग करके उन्हें प्रबंधित करना मुश्किल हो जाता है।

यहाँ Ansible playbooks आता है। यह हमें कार्यों, चर, भूमिकाओं, टेम्प्लेट, हैंडलर और एक इन्वेंट्री के माध्यम से सभी चरणों को एकीकृत करके हमारे समाधान को एक प्लेबुक फ़ाइल में व्यवस्थित करने की अनुमति देता है।

आइए इनमें से कुछ शर्तों को समझने के लिए एक संक्षिप्त नज़र डालें कि वे हमारी मदद कैसे कर सकते हैं।

कार्य

एक और महत्वपूर्ण अवधारणा कार्य है। प्रत्येक उत्तरदायी कार्य में एक नाम, एक मॉड्यूल जिसे बुलाया जाना है, मॉड्यूल पैरामीटर, और वैकल्पिक रूप से पूर्व / बाद की शर्तें शामिल हैं। वे हमें Ansible मॉड्यूल को कॉल करने और लगातार कार्यों के बारे में जानकारी देने की अनुमति देते हैं।

चर

चर भी हैं। वे हमारे द्वारा प्रदान की गई या एकत्रित की गई जानकारी का पुन:उपयोग करने के लिए बहुत उपयोगी हैं। हम उन्हें या तो इन्वेंट्री में, बाहरी YAML फाइलों में या प्लेबुक में परिभाषित कर सकते हैं।

प्लेबुक

उत्तरदायी प्लेबुक YAML सिंटैक्स का उपयोग करके लिखी जाती हैं। इसमें एक से अधिक नाटक हो सकते हैं। प्रत्येक नाटक में मेजबान समूहों के नाम शामिल होते हैं जिनसे जुड़ने के लिए और कार्यों को करने के लिए इसे करने की आवश्यकता होती है। परिभाषित होने पर इसमें चर/भूमिकाएं/हैंडलर भी शामिल हो सकते हैं।

अब हम यह देखने के लिए एक बहुत ही सरल प्लेबुक देख सकते हैं कि इसे कैसे संरचित किया जा सकता है:

---

- hosts: dbservers
  gather_facts: no

  vars:
    who: World

  tasks:
  - name: say hello
    debug: msg="Hello {{ who }}"

  - name: retrieve the uptime
    command: uptime

इस बहुत ही सरल प्लेबुक में, हमने Ansible को बताया कि इसे "dbservers" होस्ट समूह में परिभाषित सर्वर पर काम करना चाहिए। हमने "कौन" नामक एक चर बनाया और फिर हमने अपने कार्यों को परिभाषित किया। ध्यान दें कि पहले कार्य में जहां हम एक डिबग संदेश का प्रिंट आउट लेते हैं, हमने "कौन" चर का उपयोग किया और स्क्रीन पर "हैलो वर्ल्ड" प्रिंट करने के लिए Ansible का कारण बना। दूसरे कार्य में, हमने Ansible को प्रत्येक होस्ट से कनेक्ट करने और फिर वहां "अपटाइम" कमांड निष्पादित करने के लिए कहा।

उत्तरदायी PostgreSQL मॉड्यूल

Ansible PostgreSQL के लिए कई मॉड्यूल प्रदान करता है। उनमें से कुछ कोर मॉड्यूल के अंतर्गत स्थित हैं जबकि अन्य अतिरिक्त मॉड्यूल के अंतर्गत पाए जा सकते हैं।

सभी PostgreSQL मॉड्यूल को PostgreSQL सर्वर के साथ एक ही मशीन पर Python psycopg2 पैकेज को स्थापित करने की आवश्यकता होती है। Psycopg2 Python प्रोग्रामिंग भाषा में एक PostgreSQL डेटाबेस एडेप्टर है।

डेबियन/उबंटू सिस्टम पर, psycopg2 पैकेज को निम्न कमांड का उपयोग करके स्थापित किया जा सकता है:

apt-get install python-psycopg2

अब हम इन मॉड्यूल्स की विस्तार से जांच करेंगे। उदाहरण के लिए, हम होस्ट db.example.com . पर PostgreSQL सर्वर पर काम करेंगे पोर्ट पर 5432 पोस्टग्रेज . के साथ उपयोगकर्ता और एक खाली पासवर्ड।

postgresql_db

यह कोर मॉड्यूल किसी दिए गए PostgreSQL डेटाबेस को बनाता या हटाता है। Ansible शब्दावली में, यह सुनिश्चित करता है कि दिया गया PostgreSQL डेटाबेस मौजूद या अनुपस्थित है।

सबसे महत्वपूर्ण विकल्प आवश्यक पैरामीटर है “नाम " यह PostgreSQL सर्वर में डेटाबेस के नाम का प्रतिनिधित्व करता है। एक और महत्वपूर्ण पैरामीटर है “राज्य " इसके लिए दो में से एक मान की आवश्यकता होती है:वर्तमान या अनुपस्थित . यह हमें एक डेटाबेस बनाने या हटाने की अनुमति देता है जिसे नाम . में दिए गए मान से पहचाना जाता है पैरामीटर।

कुछ कार्यप्रवाहों को कनेक्शन मापदंडों के विनिर्देशन की भी आवश्यकता हो सकती है जैसे कि login_host , पोर्ट , login_user , और लॉगिन_पासवर्ड

आइए "module_test . नाम का एक डेटाबेस बनाएं हमारी प्लेबुक फ़ाइल में नीचे की पंक्तियों को जोड़कर हमारे PostgreSQL सर्वर पर:

- postgresql_db: name=module_test
                 state=present
                 login_host=db.example.com
                 port=5432
                 login_user=postgres

यहां, हम db.example.com . पर अपने परीक्षण डेटाबेस सर्वर से जुड़े हैं उपयोगकर्ता के साथ; पोस्टग्रेज . हालांकि, यह पोस्टग्रेज . होना जरूरी नहीं है उपयोगकर्ता नाम के रूप में उपयोगकर्ता कुछ भी हो सकता है।

डेटाबेस को हटाना उतना ही आसान है जितना इसे बनाना:

- postgresql_db: name=module_test
                 state=absent
                 login_host=db.example.com
                 port=5432
                 login_user=postgres

"राज्य" पैरामीटर में "अनुपस्थित" मान पर ध्यान दें।

postgresql_ext

PostgreSQL को बहुत उपयोगी और शक्तिशाली एक्सटेंशन के लिए जाना जाता है। उदाहरण के लिए, एक हालिया एक्सटेंशन tsm_system_rows . है जो टेबल सैंपलिंग में पंक्तियों की सटीक संख्या लाने में मदद करता है। (अधिक जानकारी के लिए आप टेबल सैंपलिंग विधियों के बारे में मेरी पिछली पोस्ट देख सकते हैं।)

यह अतिरिक्त मॉड्यूल डेटाबेस से PostgreSQL एक्सटेंशन जोड़ता या हटाता है। इसके लिए दो अनिवार्य मापदंडों की आवश्यकता है:db और नाम . डीबी पैरामीटर डेटाबेस नाम और नाम . को संदर्भित करता है पैरामीटर एक्सटेंशन नाम को संदर्भित करता है। हमारे पास राज्य . भी है पैरामीटर जिसे वर्तमान की आवश्यकता है या अनुपस्थित मान, और वही कनेक्शन पैरामीटर जो postgresql_db मॉड्यूल में हैं।

आइए जिस एक्सटेंशन के बारे में बात की है उसे बनाकर शुरू करें:

- postgresql_ext: db=module_test
                  name=tsm_system_rows
                  state=present
                  login_host=db.example.com
                  port=5432
                  login_user=postgres

postgresql_user

यह कोर मॉड्यूल एक PostgreSQL डेटाबेस से उपयोगकर्ताओं और भूमिकाओं को जोड़ने या हटाने की अनुमति देता है।

यह एक बहुत शक्तिशाली मॉड्यूल है क्योंकि यह सुनिश्चित करते हुए कि उपयोगकर्ता डेटाबेस पर मौजूद है, यह एक ही समय में विशेषाधिकारों या भूमिकाओं के संशोधन की भी अनुमति देता है।

आइए मापदंडों को देखकर शुरू करें। यहां एक अनिवार्य पैरामीटर “नाम . है ”, जो किसी उपयोगकर्ता या भूमिका नाम को संदर्भित करता है। साथ ही, अधिकांश उत्तरदायी मॉड्यूल की तरह, “राज्य "पैरामीटर महत्वपूर्ण है। इसमें वर्तमान . में से कोई एक हो सकता है या अनुपस्थित मान और इसका डिफ़ॉल्ट मान वर्तमान है ।

पिछले मॉड्यूल की तरह कनेक्शन पैरामीटर के अलावा, कुछ अन्य महत्वपूर्ण वैकल्पिक पैरामीटर हैं:

  • डीबी :डेटाबेस का नाम जहां अनुमति दी जाएगी
  • पासवर्ड :उपयोगकर्ता का पासवर्ड
  • निजी :“priv1/priv2” में विशेषाधिकार या “तालिका:priv1,priv2,…” प्रारूप में तालिका विशेषाधिकार
  • role_attr_flags :भूमिका विशेषताएँ। संभावित मान हैं:
    • [NO]SUPERUSER
    • [NO]CREATEROLE
    • [NO]CREATEUSER
    • [NO]CREATEDB
    • [NO]इनहेरिट
    • [NO]लॉगिन
    • [NO]प्रतिकृति

ada . नामक एक नया उपयोगकर्ता बनाने के लिए पासवर्ड के साथ लवलेस और डेटाबेस के लिए एक कनेक्शन विशेषाधिकार module_test , हम अपनी प्लेबुक में निम्नलिखित जोड़ सकते हैं:

- postgresql_user: db=module_test
                   name=ada
                   password=lovelace
                   state=present
                   priv=CONNECT
                   login_host=db.example.com
                   port=5432
                   login_user=postgres

अब जब हमारे पास उपयोगकर्ता तैयार है, तो हम उसे कुछ भूमिकाएँ सौंप सकते हैं। “ada” को लॉग इन करने और डेटाबेस बनाने की अनुमति देने के लिए:

- postgresql_user: name=ada
                   role_attr_flags=LOGIN,CREATEDB
                   login_host=db.example.com
                   port=5432
                   login_user=postgres

हम "INSERT . जैसे वैश्विक या तालिका आधारित विशेषाधिकार भी प्रदान कर सकते हैं ”, “अपडेट करें ”, “चुनें ”, और “हटाएंनिजी . का उपयोग करके पैरामीटर। विचार करने के लिए एक महत्वपूर्ण बिंदु यह है कि किसी उपयोगकर्ता को तब तक नहीं हटाया जा सकता जब तक कि सभी दिए गए विशेषाधिकार पहले रद्द नहीं कर दिए जाते।

postgresql_privs

यह कोर मॉड्यूल PostgreSQL डेटाबेस ऑब्जेक्ट्स पर विशेषाधिकार देता है या निरस्त करता है। समर्थित वस्तुएं हैं:तालिका , अनुक्रम , फ़ंक्शन , डेटाबेस , स्कीमा , भाषा , टेबलस्पेस , और समूह

आवश्यक पैरामीटर “डेटाबेस” . हैं; डेटाबेस का नाम जिसे विशेषाधिकार देना/निरस्त करना है, और "भूमिकाएं"; भूमिका नामों की अल्पविराम से अलग की गई सूची।

सबसे महत्वपूर्ण वैकल्पिक पैरामीटर हैं:

  • टाइप करें :विशेषाधिकारों को सेट करने के लिए ऑब्जेक्ट का प्रकार। इनमें से एक हो सकता है:टेबल, अनुक्रम, फ़ंक्शन, डेटाबेस, स्कीमा, भाषा, टेबलस्पेस, समूह . डिफ़ॉल्ट मान तालिका है ।
  • objs :डेटाबेस ऑब्जेक्ट पर विशेषाधिकार सेट करने के लिए। कई मान हो सकते हैं। उस स्थिति में, वस्तुओं को अल्पविराम का उपयोग करके अलग किया जाता है।
  • निजी :अल्पविराम द्वारा अलग किए गए विशेषाधिकारों की सूची प्रदान करने या रद्द करने के लिए। संभावित मानों में शामिल हैं:सभी , चुनें , अपडेट करें , सम्मिलित करें

आइए देखें कि "सार्वजनिक . पर सभी विशेषाधिकार प्रदान करके यह कैसे काम करता है "ada . के लिए स्कीमा ":

- postgresql_privs: db=module_test
                    privs=ALL
                    type=schema
                    objs=public
                    role=ada
                    login_host=db.example.com
                    port=5432
                    login_user=postgres

postgresql_lang

PostgreSQL की बहुत शक्तिशाली विशेषताओं में से एक प्रक्रियात्मक भाषा के रूप में उपयोग की जाने वाली लगभग किसी भी भाषा के लिए इसका समर्थन है। यह अतिरिक्त मॉड्यूल एक PostgreSQL डेटाबेस के साथ प्रक्रियात्मक भाषाओं को जोड़ता है, हटाता है या बदलता है।

एकल अनिवार्य पैरामीटर “lang . है "; जोड़ने या हटाने के लिए प्रक्रियात्मक भाषा का नाम। अन्य महत्वपूर्ण विकल्प हैं “db "; डेटाबेस का नाम जहां भाषा को जोड़ा या हटाया गया है, और "विश्वास "; चयनित डेटाबेस के लिए भाषा को विश्वसनीय या अविश्वसनीय बनाने का विकल्प।

आइए हमारे डेटाबेस के लिए PL/Python भाषा को सक्षम करें:

- postgresql_lang: db=module_test
                   lang=plpython2u
                   state=present
                   login_host=db.example.com
                   port=5432
                   login_user=postgres

सब कुछ एक साथ रखना

अब जब हम जानते हैं कि एक Ansible playbook कैसे संरचित है और हमारे उपयोग के लिए कौन से PostgreSQL मॉड्यूल उपलब्ध हैं, तो अब हम अपने ज्ञान को एक Ansible playbook में जोड़ सकते हैं।

हमारी प्लेबुक main.yml का अंतिम रूप निम्न जैसा है:

---

- hosts: dbservers
  sudo: yes
  sudo_user: postgres
  gather_facts: yes

  vars:
    dbname: module_test
    dbuser: postgres

  tasks:
  - name: ensure the database is present
    postgresql_db: >
      state=present
      db={{ dbname }}
      login_user={{ dbuser }}

  - name: ensure the tsm_system_rows extension is present
    postgresql_ext: >
      name=tsm_system_rows
      state=present
      db={{ dbname }}
      login_user={{ dbuser }}

  - name: ensure the user has access to database
    postgresql_user: >
      name=ada
      password=lovelace
      state=present
      priv=CONNECT
      db={{ dbname }}
      login_user={{ dbuser }}

  - name: ensure the user has necessary privileges
    postgresql_user: >
      name=ada
      role_attr_flags=LOGIN,CREATEDB
      login_user={{ dbuser }}

  - name: ensure the user has schema privileges
    postgresql_privs: >
      privs=ALL
      type=schema
      objs=public
      role=ada
      db={{ dbname }}
      login_user={{ dbuser }}

  - name: ensure the postgresql-plpython-9.4 package is installed
    apt: name=postgresql-plpython-9.4 state=latest
    sudo_user: root

  - name: ensure the PL/Python language is available
    postgresql_lang: >
      lang=plpython2u
      state=present
      db={{ dbname }}
      login_user={{ dbuser }}

अब हम "ansible-playbook" कमांड का उपयोग करके अपनी प्लेबुक चला सकते हैं:

[email protected] ~/blog/ansible-loves-postgresql # ansible-playbook -i hosts.ini main.yml

PLAY [dbservers] **************************************************************

GATHERING FACTS ***************************************************************
ok: [db.example.com]

TASK: [ensure the database is present] ****************************************
changed: [db.example.com]

TASK: [ensure the tsm_system_rows extension is present] ***********************
changed: [db.example.com]

TASK: [ensure the user has access to database] ********************************
changed: [db.example.com]

TASK: [ensure the user has necessary privileges] ******************************
changed: [db.example.com]

TASK: [ensure the user has schema privileges] *********************************
changed: [db.example.com]

TASK: [ensure the postgresql-plpython-9.4 package is installed] ***************
changed: [db.example.com]

TASK: [ensure the PL/Python language is available] ****************************
changed: [db.example.com]

PLAY RECAP ********************************************************************
db.example.com             : ok=8    changed=7    unreachable=0    failed=0

आप इस ब्लॉग पोस्ट के लिए बनाए गए मेरे GitHub रिपॉजिटरी में इन्वेंट्री और प्लेबुक फ़ाइल पा सकते हैं। "remove.yml" नामक एक अन्य प्लेबुक भी है जो मुख्य प्लेबुक में हमारे द्वारा किए गए सभी कार्यों को पूर्ववत करती है।

Ansible के बारे में अधिक जानकारी के लिए:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres विफल हो रहा है 'संबंध मैपिंग फ़ाइल वैश्विक/pg_filenode.map नहीं खोल सका'

  2. Psycopg2 स्थापित करने में त्रुटि ==2.6.2

  3. आधिकारिक PostgreSQL Docker छवि की कॉन्फ़िगरेशन फ़ाइल को कैसे अनुकूलित करें?

  4. पायथन में प्रक्रियाओं में डीबी पोस्टग्रेज करने के लिए कनेक्शन साझा करें

  5. मैं जावा का उपयोग करके PostgreSQL डेटाबेस में मौजूदा डेटाबेस से नई XML फ़ाइल कैसे बना सकता हूं?