ʻO ka hoʻokokoke ʻana o ka ʻōnaehana i nā mea hoʻololi i Ansible

ansible devops codestyle

E! ʻO_____ koʻu inoa. ʻO Denis Kalyuzhny Hana wau ma ke ʻano he ʻenekinia ma ka ʻoihana hoʻomohala kaʻina hana automation. I kēlā me kēia lā, hoʻopuka ʻia nā palapala noi hou ma nā haneli o nā kikowaena hoʻolaha. A ma kēia ʻatikala e haʻi wau i koʻu ʻike i ka hoʻohana ʻana iā Ansible no kēia mau kumu.

Hāʻawi kēia alakaʻi i kahi ala e hoʻonohonoho ai i nā loli i ka hoʻolaha. Kuhi ʻia kēia alakaʻi no ka poʻe i hoʻohana mua i nā kuleana ma kā lākou mau puke pāʻani a heluhelu Nā hana maikaʻi loa, akā ke alo nei i nā pilikia like:

  • I ka loaʻa ʻana o kahi loli i ke code, hiki ʻole ke hoʻomaopopo koke i ke kuleana o ia;
  • Nui nā kuleana, a pono e hoʻopili ʻia nā mea hoʻololi i hoʻokahi waiwai, akā ʻaʻole pono;
  • Paʻakikī i ka wehewehe ʻana i nā poʻe ʻē aʻe i ka hana ʻana o ka loina o nā ʻano like ʻole i kāu puke pāʻani

Ua loaʻa iā mākou kēia mau pilikia ma nā papahana i kā mākou hui, a no laila mākou i hele ai i nā lula no ka hoʻolālā ʻana i nā ʻano like ʻole i kā mākou papa pāʻani, kahi i hoʻoponopono ai i kēia mau pilikia.

ʻO ka hoʻokokoke ʻana o ka ʻōnaehana i nā mea hoʻololi i Ansible

Nā mea hoʻololi i nā kuleana

He kuleana kaawale o ka ʻōnaehana hoʻolaha. E like me nā mea ʻōnaehana, pono e loaʻa kahi interface no ka launa pū ʻana me ke koena o ka ʻōnaehana. ʻO ia ʻano interface he mau ʻano loli.

E lawe kākou i ka hana api, ka mea e hoʻokomo i kahi polokalamu Java ma ke kikowaena. He aha nā mea hoʻololi i loaʻa iā ia?

ʻO ka hoʻokokoke ʻana o ka ʻōnaehana i nā mea hoʻololi i Ansible

Hiki ke hoʻokaʻawale ʻia nā ʻano like ʻole i 2 mau ʻano e like me ke ʻano:

1. Свойства
    a) независимые от среды
    б) зависимые от среды
2. Связи
    a) слушатели 
    б) запросы внутри системы
    в) запросы в среду

Nā waiwai hoʻololi he mau ʻano hoʻololi e hoʻoholo i ke ʻano o kahi kuleana.

Huli Huli - ʻo ia nā mea hoʻololi i hoʻohana ʻia ka waiwai e koho i nā kumuwaiwai ma waho o ka hana.

Nā mea hoʻolohe hoʻololi — ʻo ia nā mea hoʻololi i hoʻohana ʻia ka waiwai e hana i nā mea hoʻololi noi.

Ma ka ʻaoʻao ʻē aʻe, ʻo 1a, 2a, 2b nā ʻano like ʻole i hilinaʻi ʻole i ke kaiapuni (mea paʻa, nā kumuwaiwai o waho, a me nā mea ʻē aʻe) a hiki ke hoʻopiha ʻia me nā waiwai paʻamau i ka hana paʻamau. Eia nō naʻe, ʻaʻole hiki ke hoʻopiha i nā ʻano ʻano 1.b a me 2.c me nā waiwai ʻē aʻe ma mua o ka 'hoʻohālike', no ka mea, e hoʻololi lākou mai kahi kū a kū i ke kaiapuni.

Kāhua code

  • Pono e hoʻomaka ka inoa hoʻololi me ka inoa kuleana. He mea maʻalahi kēia e noʻonoʻo ai i ka wā e hiki mai ana i ke ʻano o ka mea hoʻololi a me ke kuleana o ia.
  • I ka hoʻohana ʻana i nā mea hoʻololi i nā kuleana, pono ʻoe e hahai i ke kumu o ka encapsulation a hoʻohana i nā mea hoʻololi i wehewehe ʻia ma ke kuleana ponoʻī a i ʻole i nā kuleana i hilinaʻi ʻia ai ka mea o kēia manawa.
  • E hōʻalo i ka hoʻohana ʻana i nā puke wehewehe ʻōlelo no nā mea hoʻololi. ʻAʻole ʻae ʻo Ansible iā ʻoe e hoʻopau maʻalahi i nā waiwai pilikino i loko o kahi puke wehewehe.

    Ka laʻana o kahi hoʻololi maikaʻi ʻole:

    myrole_user:
        login: admin
        password: admin

    Eia ka hoʻopaʻa inoa ʻo ia ka hoʻololi kūʻokoʻa, a ʻo ka ʻōlelo huna ka mea hoʻololi hilinaʻi. Akā
    no ka mea, ua hui pū ʻia lākou i loko o ka puke wehewehe ʻōlelo, pono ʻoe e hōʻike piha
    mau. He mea kūpono ʻole. ʻOi aku ka maikaʻi ma kēia ala:

    myrole_user_login: admin
    myrole_user_password: admin

Nā mea hoʻololi i nā puke pāʻani hoʻolaha

Ke hōʻuluʻulu ʻana i kahi puke pāʻani hoʻolaha (i kapa ʻia ma hope aku ʻo ka playbook), mālama mākou i ka lula e waiho ʻia i loko o kahi waihona ʻokoʻa. E like me nā kuleana: kēlā me kēia ma kāna waihona git ponoʻī. ʻAe kēia iā ʻoe e hoʻomaopopo he mau mea kūʻokoʻa kūʻokoʻa nā kuleana a me nā puke pāʻani o ka ʻōnaehana hoʻolaha, a ʻaʻole pono e hoʻololi i ka hana o kekahi. Loaʻa kēia ma ka hoʻololi ʻana i nā waiwai paʻamau o nā mea hoʻololi.

I ka hōʻuluʻulu ʻana i kahi puke pāʻani, i ka hōʻuluʻulu ʻana, hiki ke hoʻopau i nā koina paʻamau o nā mea hoʻololi kuleana ma nā wahi ʻelua: i nā ʻano pāʻani pāʻani a me nā ʻano helu waihona.

mydeploy                        # Каталог деплоя
├── deploy.yml                  # Плейбук деплоя
├── group_vars                  # Каталог переменных плейбука
│   ├── all.yml                 # Файл для переменных связи всей системы
│   └── myapi.yml               # Файл переменных свойств группы myapi
└── inventories                 #
    └── prod                    # Каталог окружения prod
        ├── prod.ini            # Инвентори файл
        └── group_vars          # Каталог для переменных инвентори
            └── myapi           #
                ├── vars.yml    # Средозависимые переменные группы myapi
                └── vault.yml   # Секреты (всегда средозависимы) *

* - Nā hoʻololi a me nā Vaults

ʻO ka ʻokoʻa, hoʻohana mau ʻia nā ʻano pāʻani pāʻani i ke kāhea ʻana i nā puke pāʻani ma ka pae like me ia. ʻO ia ke ʻano he mea maikaʻi kēia mau ʻano no ka hoʻololi ʻana i nā waiwai paʻamau o nā ʻano like ʻole kaiapuni. ʻO ka mea ʻē aʻe, e hoʻohana wale ʻia nā mea hoʻololi waiwai no kahi kaiapuni kikoʻī, kahi kūpono no nā ʻano hoʻololi pili kaiapuni.

He mea nui e hoʻomaopopo ʻaʻole e ʻae ʻia ka mea nui e hoʻololi iā ʻoe i ka hoʻololi mua i nā mea hoʻololi puke pāʻani a laila kaʻawale i hoʻokahi waihona.

'O ia ho'i, i kēia manawa, pono e ho'oholo i ka pili o ke kaiapuni a i 'ole ka ho'ololi a waiho i kahi kūpono.

No ka laʻana, ma hoʻokahi papahana, ʻo ka mea hoʻololi i kuleana no ka hiki ʻana iā SSL ke hilinaʻi i ke kaiapuni no ka manawa lōʻihi, ʻoiai ʻaʻole hiki iā mākou ke hoʻohana iā SSL no nā kumu ma waho o ko mākou mana ma kekahi o nā kū. Ma hope o ko mākou hoʻoponopono ʻana i kēia pilikia, ua lilo ia i kaiapuni kūʻokoʻa a neʻe i nā ʻano pāʻani puke.

Nā Waiwai no nā Pūʻulu

E hoʻonui i kā mākou kumu hoʻohālike ma ke Kiʻi 1 ma ka hoʻohui ʻana i nā pūʻulu 2 o nā kikowaena me kahi palapala Java ʻokoʻa, akā me nā hoʻonohonoho ʻokoʻa.

ʻO ka hoʻokokoke ʻana o ka ʻōnaehana i nā mea hoʻololi i Ansible

E noʻonoʻo kākou i ke ʻano o ka puke pāʻani ma kēia hihia:

- hosts: myapi
  roles:
    - api

- hosts: bbauth
  roles:
    - auth

- hosts: ghauth
  roles:
    - auth

Loaʻa iā mākou ʻekolu mau pūʻulu i loko o ka puke pāʻani, no laila ua ʻōlelo koke ʻia e hana i ka helu like o nā faila hui ma group_vars inventory variables a me playbook variables. Hoʻokahi waihona pūʻulu ma kēia hihia he wehewehe ʻana i hoʻokahi ʻāpana o ka noi ma luna ma ka puke pāʻani. Ke wehe ʻoe i kahi faila hui i nā ʻano like ʻole o ka puke pāʻani, ʻike koke ʻoe i nā ʻokoʻa āpau mai ka hana paʻamau o nā kuleana i kau ʻia ma ka hui. I loko o nā ʻano hoʻololi: ʻokoʻa i ka hana pūʻulu mai kahi kū a kū.

Kāhua Code

  • E ho'āʻo e hoʻohana i ka host_vars variable i nā mea a pau, no ka mea, ʻaʻole lākou e wehewehe i ka ʻōnaehana, akā he hihia kūikawā wale nō, i ka wā e hiki mai ana e alakaʻi i nā nīnau: "No ke aha i ʻokoʻa ai kēia mea hoʻokipa mai nā mea ʻē aʻe?", ʻO ka pane ʻaʻole ia. maʻalahi i nā manawa a pau.

Nā hoʻololi kamaʻilio

Eia nō naʻe, ʻo ia ka mea e pili ana i nā mea hoʻololi waiwai, akā pehea e pili ana i nā mea hoʻololi kamaʻilio?
ʻO kā lākou ʻokoʻa, ʻo ia ka manaʻo like i nā hui like ʻole.

I ka manawa mua manaʻo e hoʻohana i kahi hana ʻino e like me:
hostvars[groups['bbauth'][0]]['auth_bind_port'], ua hoole koke lakou
no ka mea, he mau hemahema kona. ʻO ka mea mua, ka bulkiness. ʻO ka lua, ʻo ka hilinaʻi ʻana i kahi mea hoʻokipa kūikawā i ka hui. ʻO ke kolu, ma mua o ka hoʻomaka ʻana, pono e hōʻiliʻili i nā ʻoiaʻiʻo mai nā pūʻali āpau inā ʻaʻole mākou makemake e loaʻa kahi hewa o kahi ʻano ʻike ʻole.

ʻO ka hopena, ua hoʻoholo ʻia e hoʻohana i nā loli kamaʻilio.

Nā hoʻololi kamaʻilio - he mau mea hoʻololi kēia no ka puke pāʻani a pono e hoʻohui i nā mea ʻōnaehana.

Hoʻopili ʻia nā mea hoʻololi kamaʻilio ma nā ʻōnaehana maʻamau group_vars/all/vars a ua hoʻokumu ʻia ma ka wehe ʻana i nā mea hoʻolohe a pau mai kēlā me kēia pūʻulu, a hoʻohui i ka inoa o ka hui kahi i wehe ʻia ai ka mea hoʻolohe i ka hoʻomaka o ka hoʻololi.

Mālama kēia i ka like ʻole a me ka ʻole o ke kau ʻana o nā inoa.

E ho'āʻo kākou e hoʻopaʻa i nā mea hoʻololi mai ka laʻana ma luna:

ʻO ka hoʻokokoke ʻana o ka ʻōnaehana i nā mea hoʻololi i Ansible

E noʻonoʻo kākou he mau ʻokoʻa kā mākou e pili ana i kekahi i kekahi:

# roles/api/defaults:
# Переменная запроса
api_auth1_address: "http://example.com:80"
api_auth2_address: "http://example2.com:80"

# roles/auth/defaults:
# Переменная слушатель
auth_bind_port: "20000"

E hoʻokomo i loko o nā mea hoʻololi maʻamau group_vars/all/vars nā mea hoʻolohe a pau, a hoʻohui i ka inoa o ka hui i ke poʻo inoa:

# 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 }}"

I kēia manawa, ma ka hoʻololiʻana i ka waiwai o ka mea hoʻohui, e maopopo iā mākou e hele ka noi i kahi hoʻokahi kahi i loaʻa ai ke awa.

Kāhua Code

  • No ka mea he ʻano ʻōnaehana ʻokoʻa nā kuleana a me nā pūʻulu, pono lākou e loaʻa nā inoa ʻokoʻa, a laila e hōʻike pololei nā mea hoʻololi loulou i kahi hui kikoʻī o nā kikowaena, ʻaʻole i kahi kuleana i ka ʻōnaehana.

Nā faila pili kaiapuni

Hiki i nā kuleana ke hoʻohana i nā faila i ʻokoʻa i kēlā me kēia wahi.

ʻO kahi laʻana o ia mau faila he palapala SSL. E mālama iā lākou ma ke ʻano kikokikona
ma kahi hoʻololi ʻaʻole kūpono loa. Akā ʻoi aku ka maʻalahi o ka mālama ʻana i ke ala iā lākou i loko o kahi loli.

No ka laʻana, hoʻohana mākou i ka mea hoʻololi api_ssl_key_file: "/path/to/file".

No ka mea ʻike maopopo ʻia e hoʻololi ʻia ka palapala kī mai ke kaiapuni i ke kaiapuni, he ʻano hoʻololi pili kaiapuni kēia, ʻo ia hoʻi, pono ia e waiho i ka faila.
group_vars/myapi/vars papa helu o nā mea hoʻololi, a loaʻa ka waiwai 'no ka laʻana'.

ʻO ke ala kūpono loa i kēia hihia, ʻo ia ke kau ʻana i ka faila kī i loko o ka waihona puke pāʻani ma ke ala
files/prod/certs/myapi.key, a laila ʻo ka waiwai o ka hoʻololi:
api_ssl_key_file: "prod/certs/myapi.key". Aia ka ʻoluʻolu i ka ʻoiaʻiʻo o ka poʻe kuleana no ka lawe ʻana i ka ʻōnaehana ma kahi kū kikoʻī i loaʻa i kā lākou wahi i hoʻolaʻa ʻia i loko o ka waihona e mālama ai i kā lākou faila. I ka manawa like, hiki nō ke kuhikuhi i ke ala kūpono i ka palapala hōʻoia ma ka kikowaena, inā hāʻawi ʻia nā palapala hōʻoia e kahi ʻōnaehana ʻē aʻe.

Kū nui i loko o hoʻokahi kaiapuni

ʻO ka manawa pinepine he pono e hoʻonoho i kekahi mau kū like i loko o kahi kaiapuni like me nā ʻokoʻa liʻiliʻi. I kēia hihia, hoʻokaʻawale mākou i nā mea hoʻololi pili kaiapuni i loko o nā mea i loli ʻole i loko o kēia kaiapuni a me nā mea e loli. A hoʻoili pololei mākou i ka hope i nā faila waihona iā lākou iho. Ma hope o kēia manipulation, hiki iā ia ke hana i kahi papa inoa ʻē aʻe ma ka papa kuhikuhi kaiapuni.

E hoʻohana hou ia i ka group_vars inventory, a hiki iā ia ke wehewehe hou i kekahi mau ʻokoʻa pono nona iho.

ʻO ka papa kuhikuhi hope loa no ka papahana hoʻolālā:

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

ʻO ka hōʻuluʻulu ʻana

Ma hope o ka hoʻonohonoho ʻana i nā mea hoʻololi e like me ka ʻatikala: ʻo kēlā me kēia faila ke kuleana no kahi hana kikoʻī. A no ka loaʻa ʻana o kekahi mau hana i ka faila, ua hiki ke koho i kekahi kuleana no ka pololei o kēlā me kēia faila. No ka laʻana, lilo ka mea hoʻomohala o ka hoʻonohonoho ʻōnaehana i ke kuleana no ka hoʻopiha pololei ʻana i nā ʻano pāʻani pāʻani, ʻoiai ʻo ka luna hoʻomalu i wehewehe ʻia kona kūlana i loko o ka waihona waiwai ke kuleana kūpono no ka hoʻopiha ʻana i ka waihona o nā mea hoʻololi.

Ua lilo ʻo Roles i kā lākou ʻāpana hoʻomohala ponoʻī me kā lākou iho ponoʻī, e ʻae ana i ka mea hoʻomohala hana e hoʻomohala i nā mana ma mua o ka hoʻohālikelike ʻana i ke kuleana i ka ʻōnaehana. Pili kēia pilikia i nā kuleana maʻamau no nā ʻōnaehana āpau i ka hoʻolaha.

ʻAʻole pono nā luna hoʻoponopono e hoʻomaopopo hou i ka code deployment code. ʻO nā mea a pau e koi ʻia iā lākou no ka hoʻolaha kūleʻa ʻana, ʻo ia ka hoʻopiha ʻana i nā faila o nā mea hoʻololi pili kaiapuni.

Paipalapala

  1. ʻO ka palapala

mea kākau

Kalyuzhny Denis Alexandrovich

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka