ansible devops codestyle
Hallo! Mein Name ist Denis Kalyuzhny und ich arbeite als Ingenieur in der Abteilung fΓΌr Entwicklungsprozessautomatisierung. TΓ€glich werden neue Builds von Apps auf Hunderten von Kampagnenservern eingefΓΌhrt. In diesem Artikel teile ich meine Erfahrungen mit der Verwendung von Ansible fΓΌr diese Zwecke.
Dieses Handbuch bietet eine MΓΆglichkeit, Variablen in einer Bereitstellung zu organisieren. Dieses Handbuch richtet sich an Personen, die bereits Rollen in ihren Playbooks verwenden und BestPractices lesen , jedoch Γ€hnliche Probleme haben:
- Nachdem im Code eine Variable gefunden wurde, ist es unmΓΆglich, sofort zu verstehen, wofΓΌr sie verantwortlich ist.
- Es gibt mehrere Rollen, und Variablen mΓΌssen an denselben Wert gebunden sein, aber nichts funktioniert.
- Es ist schwierig, anderen zu erklΓ€ren, wie die Logik von Variablen in Ihren SpielbΓΌchern funktioniert
Wir sind auf diese Probleme bei Projekten in unserem Unternehmen gestoΓen, wodurch wir zu den Regeln fΓΌr die Gestaltung von Variablen in unseren SpielbΓΌchern gekommen sind, die diese Probleme teilweise gelΓΆst haben.
Variablen in Rollen
Eine Rolle ist ein separates Objekt des Bereitstellungssystems. Wie jedes Systemobjekt muss es eine Schnittstelle fΓΌr die Interaktion mit dem Rest des Systems haben. Die Rollenvariablen sind eine solche Schnittstelle.
, , 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 # ( ) *
* β Variables and Vaults
, , . , , . , , , .
, , .
, .
, , 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
: . , . , , , .
, , . .
. , .