ansible devops codestyle
مهلا! اسمي دينيس كاليوجني وأعمل مهندسًا في قسم أتمتة عمليات التطوير. كل يوم ، يتم طرح إصدارات جديدة من التطبيقات على مئات من خوادم الحملة. وفي هذه المقالة أشارك تجربتي في استخدام Ansible لهذه الأغراض.
يوفر هذا الدليل طريقة لتنظيم المتغيرات في عملية النشر. تم تصميم هذا الدليل لأولئك الذين يستخدمون بالفعل أدوارًا في كتيبات اللعب الخاصة بهم ويقرؤون BestPractices ، لكنهم يواجهون مشكلات مماثلة:
- بعد العثور على متغير في الكود ، من المستحيل أن نفهم على الفور ما هو مسؤول عنه ؛
- هناك عدة أدوار ، ويجب أن تكون المتغيرات مرتبطة بنفس القيمة ، لكن لا شيء يعمل ؛
- هناك صعوبات في شرح كيفية عمل منطق المتغيرات في كتيبات اللعب للآخرين
لقد واجهنا هذه المشاكل في المشاريع في شركتنا ، ونتيجة لذلك توصلنا إلى قواعد تصميم المتغيرات في كتيبات اللعب لدينا ، والتي حلت إلى حد ما هذه المشاكل.
المتغيرات في الأدوار
الدور هو كائن منفصل لنظام النشر. مثل أي كائن نظام ، يجب أن يكون له واجهة للتفاعل مع بقية النظام. هذه الواجهة هي متغيرات الدور.
, , api
, Java . ?
2 :
1.
a)
)
2.
a)
)
)
— , .
— , , , .
— , , .
, 1, 2, 2 — , (, ..) defaults . 1. 2. 'example' , .
Code style
- . , .
- , , .
. Ansible .
:
myrole_user: login: admin password: admin
login — , password — .
,
. . :
myrole_user_login: admin myrole_user_password: admin
( ), , . , : git . , — , . .
, , : .
mydeploy #
├── deploy.yml #
├── group_vars #
│ ├── all.yml #
│ └── myapi.yml # myapi
└── inventories #
└── prod # prod
├── prod.ini #
└── group_vars #
└── myapi #
├── vars.yml # myapi
└── vault.yml # ( ) *
, , . , , . , , , .
, , .
, .
, , SSL , SSL . , , .
1, 2 Java , .
, :
- hosts: myapi
roles:
- api
- hosts: bbauth
roles:
- auth
- hosts: ghauth
roles:
- auth
, group_vars , . , . . : .
Code Style
- host_vars , , , : " ?", .
, , ?
, .
:
hostvars[groups['bbauth'][0]]['auth_bind_port']
,
. -, . -, . -, , .
.
— , , .
group_vars/all/vars
, .
.
:
, , :
# roles/api/defaults:
#
api_auth1_address: "http://example.com:80"
api_auth2_address: "http://example2.com:80"
# roles/auth/defaults:
#
auth_bind_port: "20000"
group_vars/all/vars
, :
# group_vars/all/vars
bbauth_auth_bind_port: "20000"
ghauth_auth_bind_port: "30000"
# group_vars/bbauth/vars
auth_bind_port: "{{ bbauth_auth_bind_port }}"
# group_vars/ghauth/vars
auth_bind_port: "{{ ghauth_auth_bind_port }}"
# group_vars/myapi/vars
api_auth1_address: "http://{{ bbauth_auth_service_name }}:{{ bbauth_auth_bind_port }}"
api_auth2_address: "http://{{ ghauth_auth_service_name }}:{{ ghauth_auth_bind_port }}"
, , , , .
Code Style
- , , , , .
, .
SSL-.
. .
, api_ssl_key_file: "/path/to/file"
.
, , ,
group_vars/myapi/vars
, ' '.
files/prod/certs/myapi.key
, :
api_ssl_key_file: "prod/certs/myapi.key"
. , , . , .
. , , . . .
group_vars, .
:
mydeploy #
├── deploy.yml #
├── files #
│ ├── prod # prod
│ │ └── certs #
│ │ └── myapi.key #
│ └── test1 # test1
├── group_vars #
│ ├── all.yml #
│ ├── myapi.yml # myapi
│ ├── bbauth.yml #
│ └── ghauth.yml #
└── inventories #
├── prod # prod
│ ├── group_vars #
│ │ ├── myapi #
│ │ │ ├── vars.yml # myapi
│ │ │ └── vault.yml # ( )
│ │ ├── bbauth #
│ │ │ ├── vars.yml #
│ │ │ └── vault.yml #
│ │ └── ghauth #
│ │ ├── vars.yml #
│ │ └── vault.yml #
│ └── prod.ini # prod
└── test # test
├── group_vars #
│ ├── myapi #
│ │ ├── vars.yml #
│ │ └── vault.yml #
│ ├── bbauth #
│ │ ├── vars.yml #
│ │ └── vault.yml #
│ └── ghauth #
│ ├── vars.yml #
│ └── vault.yml #
├── test1.ini # test1 test
└── test2.ini # test2 test
: . , . , , , .
, , . .
. , .