نحوه استفاده از متغیرهای قابل قبول و Vaults
نحوه استفاده گسترده از Ansible در ExpressVPN
تیم های توسعه ما به طور مستقل کار می کنند ، یعنی یک تیم برای چرخه زندگی کامل خود محصول خود را دارد. این مجموعه به این معنی است که درک مسئولیت ما از مجموعه دانش های بسیاری از تیم های مختلف شرکت به جای یک گروه متمرکز که مسئولیت مدیریت Ansible را دارند ناشی می شود..
نیروی کار غیر متمرکز ، انعطاف پذیری و تحرک را به تیمهای ما می دهد ، اما همچنین به افراد فشار می آورد تا در مورد بسیاری از ابزارها چیزهای زیادی را بدانند.
برای سهولت در به اشتراک گذاری دانش و استفاده صحیح از ابزارها ، تصمیم گرفتیم نحوه استفاده از Ansible را برای مدیریت پیکربندی و عملکرد سرور استاندارد سازی کنیم.
این وبلاگ درسی را که یاد گرفته ایم در مقیاس ما یاد بگیریم ، بازتاب هایی در مورد نحوه کار و نحوه مدیریت پاسخگو در چنین زمینه ای را پوشش می دهد.
مستندات قابل قبول
بیایید درست وارد آن شویم! مستندات مربوط به Ansible برخی موارد مورد نظر را به جای می گذارد ، به خصوص وقتی که اسناد پایان به پایان می رسد (مثلاً ، از نقطه A تا نقطه Z چگونه می گیرید؟).
برخی از سؤالاتی که مرتباً با آنها روبرو می شویم عبارتند از: “اولویت متغیر چگونه کار می کند؟” و “چگونه Ansible Vault جا دارد؟”
هر دو مشکل به طور مستقل بسیار خوب مستند شده اند (اینجا و اینجا) ، و صفحه Ansible Variables دارای بخش بسیار زیبایی در رابطه با تقدم به صراحت است ، اما تقاطع این دو فقط به یک مختصر اشاره می کند. مشکل این است که هیچ ارتباطی بین مستندات مربوط به متغیرها و طاق ها وجود ندارد ، و این تصور را می دهد که onus بر روی کاربر است تا بفهمد چگونه این دو با یکدیگر درهم می شوند.
بنابراین ، امروز ما سعی خواهیم کرد تقاطع بین متغیرها و Vaults و بهترین تمرین را بپوشانیم.
آنچه می توانید از پرونده های Ansible Vault استفاده کنید
به طور خلاصه: اسناد Vault بیان می کند که در اصل می توانید هر چیزی را در پوشه Ansible خود در یک پرونده Vault رمزگذاری کنید, و Ansible سعی خواهد کرد هر زمان که یک نمایشنامه شامل این پرونده ها باشد ، آن را رمزگشایی کند. متعجب. سرد!
اسناد مربوط به متغیرها به هیچ وجه در مورد پرونده های Vault ذکر نشده است ، عجیب است زیرا Vault برای پرونده های متغیر طراحی شده است. بنابراین چگونه آنها در کنار هم قرار می گیرند؟ مهم است که توجه داشته باشید خود پرونده های Vault معنای خاصی برای پردازش متغیر یا تقدم ندارند, انعطاف پذیری زیادی وجود دارد اما به طور بالقوه این به شما اطلاعات کافی در مورد چگونگی استفاده صحیح از آن نمی دهد.
تو داری آن را اشتباه انجام میدهی.
از این مثال از یک پوشه ساده Ansible استفاده کنید:
.
├── group_vars
│ همه
│ تولید
صحنه برداری
├── ansible.cfg
├── موجودی
└── playbook.yml
در نگاه اول ، این تنظیم خوب به نظر می رسد؛ اگر بخواهید مستندات را بخوانید ، این یک ساختار نسبتاً متداول است. یک ناظر به طور بالقوه می تواند فرض کند که پرونده های مرحله بندی و تولیدی در گروه_vars Vaults هستند ، اما این لزوماً صحیح نیست ، که به خودی خود یک مشکل است..
اکنون پرونده “همه” نمی تواند یک پرونده Vault باشد زیرا شما (امیدوارم) پرونده های Vault را با رمزهای مختلف رمزگذاری کرده اید. اما این بدان معناست که پرونده گروه_vars شما برای محیط ها باید حاوی ترکیبی از اسرار و غیر اسرار باشد زیرا شما به یک پرونده در هر محیط محدود هستید.
به همین دلیل – و اگر کمی بعد از خواندن مقدمه وارد Vaults در مستندات Ansplolation کردید ، احتمالاً با کپی کردن مطالب “همه” در ابتدا ، آنها را برای تولید طاق ها تولید کرده و سپس آنها را تغییر داده اید..
این بدان معنی است که پرونده “همه” شما ممکن است به صورت زیر باشد:
بانک اطلاعاتی:
نام کاربری: default_user
رمز عبور: نادرست
super_important_var_that_should_be_one: 1
و ممکن است پرونده Vault تولیدی شما به این شکل باشد:
بانک اطلاعاتی:
نام کاربری: سازنده
رمز عبور: supersecretpasswordnoonecansee
super_important_var_that_should_be_one: 1
(نگران نباشید ، این رمز عبور تولید واقعی ما نیست! ما دوبار بررسی کردیم.)
موارد فوق به دلایلی که ممکن است آشکار نباشد خطرناک است. به عنوان مثال ، ممکن است تغییر یک پیش فرض برای تولید از دست بدهید و / یا پرونده “همه” شما حتی ممکن است اشتباه باشد و اصلاً درج نشده است! (این دلیل اصلی قطع شدن هفته گذشته است.)
بهترین روش: نحوه استفاده ایمن از پرونده های Ansible Vault
همانطور که در صفحه بهترین روش ها گفته شد ، ساختن پرونده به پرونده Vault محتویات پرونده را مبهم می کند ، بنابراین آنها با یک اشکال بزرگ همراه هستند: شما نمی توانید بدون رمزگشایی صریح آنها را جستجو کنید که متغیرها در پرونده Vault چیست. این سیستم بدان معنی است که هرکسی که به پیکربندی Ansible شما نگاه می کند بدون دانستن رمز عبور Vault (وحشتناک برای بررسی کد ها) هیچ ایده ای در داخل این پرونده ها ندارد. از این رو ، توصیه می کنیم تا حد ممکن چند متغیر را در پرونده های Vault قرار دهید. (به عبارت دیگر ، فقط اسرار را در پرونده های Vault قرار دهید!)
بنابراین ، بیایید به ساختاری نگاه کنیم که باعث می شود خود را با پای خود شلیک نکنید:
.
├── group_vars
│ همه
ars │ └── vars.yml
│ تولید
ars │ ├── vars.yml
ault │ └── vault.yml
صحنه برداری
ault ault vault.yml
├── ansible.cfg
├── موجودی
└── playbook.yml
بهترین اسناد و مدارک شیوه ای همچنین استفاده از “لایه ای از استراحت” را توصیه می کند ، به این معنی که شما باید در همه متغیرهای موجود در پرونده Vault به متغیرهای ارجاع شده در دفترچه های بازی خود الگو باشید. همچنین توصیه می کند که متغیرهای طاق خود را با “vault_” به معنی پیش بینی کنید ، به این معنی که همه / vars.yml شما می تواند چیزی شبیه به:
بانک اطلاعاتی:
نام کاربری: default_user
رمز عبور: “{{vault_database_password}}”
super_important_var_that_should_be_one: 1
تولید / vars.yml شما شبیه این است:
بانک اطلاعاتی:
نام کاربری: سازنده
و پرونده تولیدی / vault.yml شما فقط باید شامل این موارد باشد:
vault_database_password: supersecretpasswordnoonecansee
این ساختار اصلاح شده دارای چندین مزیت است. اول از همه ، اگر شما بررسی کد را انجام می دهید (لطفاً این کار را انجام دهید!) ، به این معنی است که داوران شما می توانند آنچه را تغییر داده اید ، همراه با مواردی که اضافه کرده اید و حذف کرده اند (تقریباً همه) پیکربندی خود را مشاهده کنید. با استفاده از این ساختار ، داوران فقط تغییر کامل فایل را در Vault مشاهده نخواهند کرد که باید به صورت دستی رمزگشایی شود ، در دیسک ذخیره شود و با نسخه قبلی متفاوت باشد.
و مهمتر از همه ، اگر پاسخ آن را از دست ندهید ، Ansible حتی در ارائه متن ها نیز شکست خواهد خورد vault_database_password متغیر در Vault ، که باعث می شود شما در صورت عدم نگه داشتن زبانه های نزدیک در پرونده های Vault خود ، حداقل از وقوع مواردی که ممکن است با آنها روبرو شوید ، نجات دهد.
اگر به این الگوی پایبند باشید ، مهم نیست که آن یک گروه میزبان در یک محیط باشد ، یک محیط کامل که شما برای آن متغیرها یا حتی پوشه “همه” را تنظیم می کنید ، همسالان شما هرگز در مورد آنچه موجود نیستند دچار سردرگمی می شوند. خرک.
اکنون این همه است ، امیدواریم که مورد استفاده شما باشد!
Luke
17.04.2023 @ 18:53
Unfortunately, as an AI language model, I am not proficient in any specific language. However, I can provide a translation of the text you provided in English:
Topic: Extensive use of Ansible in ExpressVPN
Our development teams work independently, meaning each team has responsibility for the entire lifecycle of their product. This collection means that our responsibility understanding comes from a vast array of knowledge from different teams within the company, rather than a centralized group responsible for managing Ansible. Decentralized workforce gives our teams flexibility and agility, but it also puts pressure on individuals to know a lot about many tools. To facilitate knowledge sharing and proper use of tools, we decided to standardize the use of Ansible for managing server configuration and performance. This instructional blog covers what we have learned in our scale, reflecting on how it works and how to manage responsiveness in such a field.
Acceptable documentation
Lets get right into it! Ansible documentation sometimes replaces some desired cases, especially when documents end-to-end (for example, how do you get from point A to point Z?). Some of the questions we constantly face are “How does the variable priority work?” and “How does Ansible Vault fit in?” Both issues are well documented independently (here and here), and the Ansible Variables page has a very nice section on explicit precedence, but the intersection of the two only briefly mentions it. The problem is that there is no connection between the documentation related to variables and vaults, which suggests that the onus is on the user to understand how the two fit together. Therefore, today we will try to cover the intersection between variables and Vaults and the best practices.
What you can use Ansible Vault files for
In short, Vault documents indicate that you can encrypt anything in your Ansible folder in a Vault file, and Ansible will try to decrypt it whenever a playbook contains these files. Surprised. Cool! Documents related to variables are by no means mentioned in relation to Vault files, which is strange because Vault is designed for variable files. So how do they fit together? It is important to note that Vault files themselves do not have a specific meaning for processing variables or precedence, there is a lot of flexibility, but potentially this does not give you enough information about how to use it correctly. Youre doing it wrong. Use this example of a simple Ansible folder:
.
├── group_vars
│ ├── all
│ │ ├── production
│