ansible devops codestyle
Ei! Meu nome é Denis Kalyuzhny e trabalho como engenheiro no departamento de automação de processos de desenvolvimento. Todos os dias, novos builds de aplicativos são lançados em centenas de servidores de campanha. E neste artigo compartilho minha experiência de uso do Ansible para esses fins.
Este guia fornece uma maneira de organizar variáveis ​​em uma implantação. Este guia foi desenvolvido para aqueles que já usam funções em seus manuais e leem as Melhores Práticas , mas enfrentam problemas semelhantes:
- Tendo encontrado uma variável no cĂłdigo, Ă© impossĂvel entender imediatamente do que ela Ă© responsável;
- Existem várias funções e as variáveis ​​precisam ser vinculadas ao mesmo valor, mas nada funciona;
- Surgem dificuldades para explicar a outras pessoas como funciona a lógica das variáveis ​​em seus manuais
Encontramos esses problemas em projetos em nossa empresa, como resultado, chegamos às regras para o design de variáveis ​​em nossos manuais, o que em certa medida resolveu esses problemas.
Variáveis ​​em funções
Uma função é um objeto separado do sistema de implantação. Como qualquer objeto do sistema, ele deve ter uma interface para interagir com o resto do sistema. Esta interface é composta por variáveis ​​de função.
, , 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
: . , . , , , .
, , . .
. , .