Treoracha: conas róil inmhíne a thástáil agus eolas a fháil ar fhadhbanna roimh tháirgeadh

Dia duit gach duine!

Oibrím mar innealtóir DevOps i seirbhís áirithinte óstán. Ostrovok.ru. San Airteagal seo, ba mhaith liom labhairt faoinár dtaithí maidir le róil inmhillte a thástáil.

Ag Ostrovok.ru, úsáidimid ansible mar bhainisteoir cumraíochta. Le déanaí, tháinig muid ar an ngá atá le róil a thástáil, ach mar a d'éirigh sé amach, níl an oiread sin uirlisí ann le haghaidh seo - is é an ceann is mó tóir, b'fhéidir, an creat Móilín, agus mar sin shocraigh muid é a úsáid. Ach d'éirigh sé amach go bhfuil a chuid doiciméadú ciúin faoi go leor gaistí. Níorbh fhéidir linn lámhleabhar sách mionsonraithe a aimsiú i Rúisis, mar sin shocraigh muid an t-alt seo a scríobh.

Treoracha: conas róil inmhíne a thástáil agus eolas a fháil ar fhadhbanna roimh tháirgeadh

móilín

Móilín - creat chun cabhrú le tástáil a dhéanamh ar róil inmhaíte.

Cur síos simplithe: Cruthaíonn an móilín sampla ar an ardán a shonraíonn tú (scamall, meaisín fíorúil, coimeádán; le haghaidh tuilleadh sonraí, féach an rannán Tiománaí), ritheann sé do ról air, ansin ritheann sé tástálacha agus scriosann sé an t-ásc. I gcás teipe ar cheann de na céimeanna, cuirfidh an Móilín in iúl duit faoi.

Anois níos mó.

Beagán teoiric

Smaoinigh ar dhá phríomhaonán den Mhóilín: Cás agus Tiománaí.

Cás

Tá cur síos sa script ar cad, cén áit, conas agus cén seicheamh a dhéanfar. Is féidir go mbeadh roinnt scripteanna ag ról amháin, agus is eolaire é gach ceann díobh ar an gcosán <role>/molecule/<scenario>, ina bhfuil cur síos ar na gníomhaíochtaí a theastaíonn don tástáil. Ní mór script a chur san áireamh default, a chruthófar go huathoibríoch má chuireann tú tús leis an ról le Móilín. Is fút féin atá ainmneacha na scripteanna seo a leanas.

Tugtar seicheamh na ngníomhartha tástála i script maitrís, agus de réir réamhshocraithe is é:

(Céimeanna lipéadaithe ?, scipeáil de réir réamhshocraithe mura bhfuil sé sonraithe ag an úsáideoir)

  • lint - linters reatha. De réir réamhshocraithe a úsáidtear yamllint и flake8,
  • destroy - cásanna a scriosadh ón seoladh deireanach den Mhóilín (más ann dó),
  • dependency? — spleáchas inbhraite an róil tástálaithe a shuiteáil,
  • syntax - comhréir an róil a sheiceáil ag baint úsáide as ansible-playbook --syntax-check,
  • create - sampla a chruthú,
  • prepare? — an cás a ullmhú; m.sh. seiceáil/suiteáil python2
  • converge — seoladh an leabhair súgartha atá á thástáil,
  • idempotence - an leabhar súgartha a atosú don tástáil neamhchumhachtach,
  • side_effect? - gníomhaíochtaí nach mbaineann go díreach leis an ról, ach atá riachtanach le haghaidh tástálacha,
  • verify - tástálacha a rith ar an gcumraíocht mar thoradh air ag baint úsáide as testinfra(réamhshocraithe) /goss/inspec,
  • cleanup? - (i leaganacha nua) - go garbh, "glanadh" an bonneagar seachtrach a bhfuil tionchar ag an Móilín,
  • destroy - Sampla a scriosadh.

Clúdaíonn an seicheamh seo formhór na gcásanna, ach is féidir é a athrú más gá.

Is féidir gach ceann de na céimeanna thuas a reáchtáil ar leithligh le molecule <command>. Ach ba cheart duit a thuiscint go bhféadfadh a sheicheamh gníomhartha féin a bheith ann do gach cli-ordú, ar féidir leat a fháil amach trí fhorghníomhú molecule matrix <command>. Mar shampla, nuair a bhíonn an t-ordú á rith converge (agus an leabhar súgartha á rith faoi thástáil), déanfar na gníomhartha seo a leanas:

$ molecule matrix converge
...
└── default         # название сценария
    ├── dependency  # установка зависимостей
    ├── create      # создание инстанса
    ├── prepare     # преднастройка инстанса
    └── converge    # прогон плейбука

Is féidir seicheamh na ngníomhartha seo a chur in eagar. Má tá rud éigin ón liosta déanta cheana féin, ní dhéanfar é. An staid reatha, chomh maith le cumraíocht na gcásanna, na siopaí Móilín san eolaire $TMPDIR/molecule/<role>/<scenario>.

Cuir céimeanna le ? is féidir leat cur síos a dhéanamh ar na gníomhartha atá ag teastáil san fhormáid ansible-playbook, agus ainm an chomhaid a dhéanamh de réir na céime: prepare.yml/side_effect.yml. Bí ag súil leis na comhaid seo Beidh an móilín san fhillteán scripte.

Tiománaí

Is eintiteas é tiománaí ina gcruthaítear cásanna tástála.
Seo a leanas liosta na dtiománaithe caighdeánacha a bhfuil teimpléid réidh ag Molecule dóibh: Azure, Docker, EC2, GCE, LXC, LXD, OpenStack, Vagrant, Tarmligthe.

I bhformhór na gcásanna, is comhaid iad teimpléid create.yml и destroy.yml san fhillteán scripte a chuireann síos ar chruthú agus ar scriosadh sampla, faoi seach.
Is iad na heisceachtaí ná Docker and Vagrant, mar is féidir idirghníomhaíochtaí lena modúil tarlú gan na comhaid thuasluaite.

Is fiú aird a tharraingt ar an tiománaí Tarmligthe, ós rud é má úsáidtear é sna comhaid chun cás a chruthú agus a scriosadh, ní dhéantar cur síos ar obair ach amháin le cumraíocht na gcásanna, ba cheart don innealtóir cur síos a dhéanamh ar an gcuid eile.

Is é an tiománaí réamhshocraithe Docker.

Anois, a ligean ar bogadh ar aghaidh go dtí an cleachtas agus gnéithe breise a mheas ansin.

Ag Tosú

Mar "hello world", déanaimis tástáil ar ról suiteála nginx simplí. Roghnóimid docker mar an tiománaí - is dóigh liom go bhfuil an chuid is mó agaibh suiteáilte (agus cuimhnigh gurb é an docker an tiománaí réamhshocraithe).

Ullmhaigh virtualenv agus a shuiteáil ann molecule:

> pip install virtualenv
> virtualenv -p `which python2` venv
> source venv/bin/activate
> pip install molecule docker  # molecule установит ansible как зависимость; docker для драйвера

Is é an chéad chéim eile ná an ról nua a thosú.
Cuirtear tús le ról nua, chomh maith le script nua, leis an ordú molecule init <params>:

> molecule init role -r nginx
--> Initializing new role nginx...
Initialized role in <path>/nginx successfully.
> cd nginx
> tree -L 1
.
├── README.md
├── defaults
├── handlers
├── meta
├── molecule
├── tasks
└── vars

6 directories, 1 file

Tharla sé gur gnáthról ansmachta é. Ina theannta sin, déantar gach idirghníomhú le Móilíní CLI ó fhréamh an róil.

Feicfimid cad atá san eolaire ról:

> tree molecule/default/
molecule/default/
├── Dockerfile.j2  # Jinja-шаблон для Dockerfile
├── INSTALL.rst.   # Немного информации об установке зависимостей сценария
├── molecule.yml   # Файл конфигурации
├── playbook.yml   # Плейбук запуска роли
└── tests          # Директория с тестами стадии verify
    └── test_default.py

1 directory, 6 files

Déanaimis anailís ar an config molecule/default/molecule.yml (cuir in ionad íomhá docker amháin):

---
dependency:
  name: galaxy
driver:
  name: docker
lint:
  name: yamllint
platforms:
  - name: instance
    image: centos:7
provisioner:
  name: ansible
  lint:
    name: ansible-lint
scenario:
  name: default
verifier:
  name: testinfra
  lint:
    name: flake8

spleáchas

Déanann an chuid seo cur síos ar fhoinse na spleáchais.

Roghanna féideartha: réaltra, óraithe, sliogán.

Is blaosc ordaithe é Shell a úsáidtear ar eagla nach gclúdaíonn réaltra agus óraithe do chuid riachtanas.

Ní bheidh mé dwell anseo ar feadh i bhfad, tá sé cur síos go leor i doiciméadú.

tiománaí

Ainm an tiománaí. Is linne docker.

línéadach

Tá an lintéar yamllint.

Is iad na roghanna úsáideacha sa chuid seo den chumraíocht ná an cumas comhad cumraíochta a shonrú le haghaidh yamllint, athróga timpeallachta ar aghaidh, nó an línéar a dhíchumasú:

lint:
  name: yamllint
  options:
    config-file: foo/bar
  env:
    FOO: bar
  enabled: False

ardáin

Cur síos ar chumraíocht na gcásanna.
I gcás docker mar thiománaí, atartar an Móilín thar an gcuid seo, agus tá gach eilimint den liosta ar fáil i Dockerfile.j2 mar athróg item.

I gcás tiománaí a éilíonn create.yml и destroy.yml, tá an rannóg ar fáil iontu mar molecule_yml.platforms, agus déantar cur síos ar atriallta níos mó sna comhaid seo cheana féin.

Ós rud é go dtugann an Móilín rialú ar chásanna do mhodúil insible, ba cheart liosta de na socruithe féideartha a lorg ansin freisin. Maidir le docker, mar shampla, úsáidtear an modúl docker_container_modúl. Is féidir na modúil a úsáidtear i dtiománaithe eile a fháil i doiciméadú.

Chomh maith le samplaí d'úsáid tiománaithe éagsúla is féidir a fháil i dtrialacha an Mhóilín féin.

Ionadaigh anseo centos:7 ar ubuntu.

soláthróir

"Soláthraí" - eintiteas a bhainistíonn cásanna. I gcás Móilín, tá sé seo ansible, níl tacaíocht do dhaoine eile pleanáilte, mar sin is féidir an chuid seo a dtugtar cumraíocht leathnaithe insible le caveat.
Anseo is féidir leat a lán rudaí a shonrú, leagfaidh mé béim ar na príomhphointí, i mo thuairim:

  • leabhair súgartha: is féidir leat a shonrú cé na leabhair súgartha ba cheart a úsáid ag céimeanna áirithe.

provisioner:
  name: ansible
  playbooks:
    create: create.yml
    destroy: ../default/destroy.yml
    converge: playbook.yml
    side_effect: side_effect.yml
    cleanup: cleanup.yml

provisioner:
  name: ansible
  config_options:
    defaults:
      fact_caching: jsonfile
    ssh_connection:
      scp_if_ssh: True

provisioner:
  name: ansible  
  connection_options:
    ansible_ssh_common_args: "-o 'UserKnownHostsFile=/dev/null' -o 'ForwardAgent=yes'"

  • roghanna: Roghanna inchurtha agus athróga timpeallachta

provisioner:
  name: ansible  
  options:
    vvv: true
    diff: true
  env:
    FOO: BAR

scéal

Ainm agus cur síos ar sheichimh scripte.
Is féidir leat maitrís gníomhaíochta réamhshocraithe aon ordaithe a athrú tríd an eochair a chur leis <command>_sequence agus mar luach dó tríd an liosta céimeanna a theastaíonn uainn a shainiú.
Ligean le rá gur mhaith linn seicheamh na ngníomhartha a athrú agus an t-ordú rith leabhar súgartha á rith: molecule converge

# изначально:
# - dependency
# - create
# - prepare
# - converge
scenario:
  name: default
  converge_sequence:
    - create
    - converge

fhíoraitheora

Creat a bhunú le haghaidh tástálacha agus línéar chuige. Is é an línéar réamhshocraithe testinfra и flake8. Tá na roghanna féideartha mar a chéile thuas:

verifier:
  name: testinfra
  additional_files_or_dirs:
    - ../path/to/test_1.py
    - ../path/to/test_2.py
    - ../path/to/directory/*
  options:
    n: 1
  enabled: False
  env:
    FOO: bar
  lint:
    name: flake8
    options:
      benchmark: True
    enabled: False
    env:
      FOO: bar

Fillfimid ar ár ról. Déanaimis an comhad a chur in eagar tasks/main.yml don chineál seo:

---
- name: Install nginx
  apt:
    name: nginx
    state: present

- name: Start nginx
  service:
    name: nginx
    state: started

Agus tástálacha a chur leis molecule/default/tests/test_default.py

def test_nginx_is_installed(host):
    nginx = host.package("nginx")
    assert nginx.is_installed

def test_nginx_running_and_enabled(host):
    nginx = host.service("nginx")
    assert nginx.is_running
    assert nginx.is_enabled

def test_nginx_config(host):
    host.run("nginx -t")

Arna dhéanamh, níl le déanamh ach rith (ó fhréamh an róil, lig dom i gcuimhne duit):

> molecule test

Sceite fada faoin spoiler:

--> Validating schema <path>/nginx/molecule/default/molecule.yml.
Validation completed successfully.
--> Test matrix

└── default
    ├── lint
    ├── destroy
    ├── dependency
    ├── syntax
    ├── create
    ├── prepare
    ├── converge
    ├── idempotence
    ├── side_effect
    ├── verify
    └── destroy

--> Scenario: 'default'
--> Action: 'lint'
--> Executing Yamllint on files found in <path>/nginx/...
Lint completed successfully.
--> Executing Flake8 on files found in <path>/nginx/molecule/default/tests/...
Lint completed successfully.
--> Executing Ansible Lint on <path>/nginx/molecule/default/playbook.yml...
Lint completed successfully.
--> Scenario: 'default'
--> Action: 'destroy'

    PLAY [Destroy] *****************************************************************

    TASK [Destroy molecule instance(s)] ********************************************
    changed: [localhost] => (item=None)
    changed: [localhost]

    TASK [Wait for instance(s) deletion to complete] *******************************
    ok: [localhost] => (item=None)
    ok: [localhost]

    TASK [Delete docker network(s)] ************************************************

    PLAY RECAP *********************************************************************
    localhost                  : ok=2    changed=1    unreachable=0    failed=0

--> Scenario: 'default'
--> Action: 'dependency'
Skipping, missing the requirements file.
--> Scenario: 'default'
--> Action: 'syntax'

    playbook: <path>/nginx/molecule/default/playbook.yml

--> Scenario: 'default'
--> Action: 'create'

    PLAY [Create] ******************************************************************

    TASK [Log into a Docker registry] **********************************************
    skipping: [localhost] => (item=None)

    TASK [Create Dockerfiles from image names] *************************************
    changed: [localhost] => (item=None)
    changed: [localhost]

    TASK [Discover local Docker images] ********************************************
    ok: [localhost] => (item=None)
    ok: [localhost]

    TASK [Build an Ansible compatible image] ***************************************
    changed: [localhost] => (item=None)
    changed: [localhost]

    TASK [Create docker network(s)] ************************************************

    TASK [Create molecule instance(s)] *********************************************
    changed: [localhost] => (item=None)
    changed: [localhost]

    TASK [Wait for instance(s) creation to complete] *******************************
    changed: [localhost] => (item=None)
    changed: [localhost]

    PLAY RECAP *********************************************************************
    localhost                  : ok=5    changed=4    unreachable=0    failed=0

--> Scenario: 'default'
--> Action: 'prepare'
Skipping, prepare playbook not configured.
--> Scenario: 'default'
--> Action: 'converge'

    PLAY [Converge] ****************************************************************

    TASK [Gathering Facts] *********************************************************
    ok: [instance]

    TASK [nginx : Install nginx] ***************************************************
    changed: [instance]

    TASK [nginx : Start nginx] *****************************************************
    changed: [instance]

    PLAY RECAP *********************************************************************
    instance                   : ok=3    changed=2    unreachable=0    failed=0

--> Scenario: 'default'
--> Action: 'idempotence'
Idempotence completed successfully.
--> Scenario: 'default'
--> Action: 'side_effect'
Skipping, side effect playbook not configured.
--> Scenario: 'default'
--> Action: 'verify'
--> Executing Testinfra tests found in <path>/nginx/molecule/default/tests/...
    ============================= test session starts ==============================
    platform darwin -- Python 2.7.15, pytest-4.3.0, py-1.8.0, pluggy-0.9.0
    rootdir: <path>/nginx/molecule/default, inifile:
    plugins: testinfra-1.16.0
collected 4 items

    tests/test_default.py ....                                               [100%]

    ========================== 4 passed in 27.23 seconds ===========================
Verifier completed successfully.
--> Scenario: 'default'
--> Action: 'destroy'

    PLAY [Destroy] *****************************************************************

    TASK [Destroy molecule instance(s)] ********************************************
    changed: [localhost] => (item=None)
    changed: [localhost]

    TASK [Wait for instance(s) deletion to complete] *******************************
    changed: [localhost] => (item=None)
    changed: [localhost]

    TASK [Delete docker network(s)] ************************************************

    PLAY RECAP *********************************************************************
    localhost                  : ok=2    changed=2    unreachable=0    failed=0

Rinneadh tástáil ar ár ról simplí gan fadhbanna.
Is fiú cuimhneamh má tá fadhbanna le linn na hoibre molecule test, ansin murar athraigh tú an t-ord réamhshocraithe, scriosfaidh an Móilín an ásc.

Tá na horduithe seo a leanas úsáideach le haghaidh dífhabhtaithe:

> molecule --debug <command> # debug info. При обычном запуске Молекула скрывает логи.
> molecule converge          # Оставляет инстанс после прогона тестируемой роли.
> molecule login             # Зайти в созданный инстанс.
> molecule --help            # Полный список команд.

Ról Reatha

Tá sé riachtanach script nua a chur le ról atá ann cheana féin ón eolaire ról leis na horduithe seo a leanas:

# полный список доступных параметров
> molecule init scenarion --help
# создание нового сценария
> molecule init scenario -r <role_name> -s <scenario_name>

Sa chás gurb é seo an chéad chás sa ról, ansin an paraiméadar -s Is féidir é a fhágáil ar lár mar go gcruthóidh sé script default.

Conclúid

Mar a fheiceann tú, níl an Móilín an-chasta, agus trí úsáid a bhaint as do theimpléid féin, is féidir úsáid a bhaint as script nua a laghdú go dtí athróga eagarthóireachta nuair a bhíonn leabhair súgartha á gcruthú agus á scriosadh. Comhtháthaíonn an móilín gan uaim le córais CI, rud a ligeann duit luas na forbartha a mhéadú trí laghdú a dhéanamh ar an am le haghaidh tástála láimhe ar leabhair súgartha.

Go raibh maith agat as do aird. Má tá taithí agat ar róil insible a thástáil, agus nach bhfuil baint aige leis an Móilín, inis dúinn faoi sna tuairimí!

Foinse: will.com

Add a comment