Sobes.tech
Middle+

Ansible тесттерин кантип каптайсыз?

sobes.tech AI

AIден жооп

Мен негизги бир нече ыкмаларды колдонуп жатам:

  • Синтаксистик текшерүү:
    Плейбук жана ролдордун синтаксиси туура экенин алардын ишке киришине чейин текшерет.

    # Плейбук синтаксиси текшерүү
    ansible-playbook --syntax-check playbook.yml
    
  • Идемпотенттүүлүк:
    Плейбук кайра иштетилгенде системанын абалы биринчи ийгиликтүү аткаргандан кийин өзгөрбөйт экенин текшерет.

    # Плейбук иштетүү
    ansible-playbook playbook.yml
    
    # Өзгөртүүлөрдү текшерүү үчүн --check флагы менен кайра иштетүү
    ansible-playbook playbook.yml --check
    

    Натыйжа changed=0 run=true болушу керек.

  • Molecule:
    Ansible ролдорун жергиликтүү же алыстан тестирлөө үчүн framework. Төрөлүү сценарийлерди (linting, идемпотенттүүлүк, функцияларды тестирлөө) ишке ашыруу мүмкүнчүлүгүн берет.

    # Ролдун директориясында Molecule'ду баштоо
    molecule init scenario -r default
    
    # Molecule тесттерин ишке ашыруу
    molecule test
    
  • Жүйө деңгээлиндеги тесттер (Functional Testing):
    Ansible колдонулгандан кийин системанын күтүлгөн абалда экенин текшерет. Колдонулат:

    • Testinfra: Конфигурация колдонулгандан кийин хосттордун жана кызматтардын абалын текшерет.
    • InSpec: DSL колдонуп системанын абалын тестирлөө үчүн Ruby-фреймворк.

    Molecule ичинде Testinfraны интеграциялоо мүмкүн:

    # molecule/default/molecule.yml файлындагы platforms бөлүмү
    platforms:
      - name: instance
        image: image_name
        # ... башка платформа жөндөөлөрү
    
    # verifier бөлүмү
    verifier:
      name: testinfra
      options:
        v: True
    

    Testinfra тестинин мисалы (tests/test_default.py):

    # testinfra импорттоо
    def test_nginx_is_installed(host):
        # nginx пакети орнотулганын текшерет
        nginx = host.package("nginx")
        assert nginx.is_installed
    
    def test_nginx_is_running(host):
        # nginx кызматын иштеп жатканы текшерилет
        nginx = host.service("nginx")
        assert nginx.is_running
    
    def test_nginx_listens_on_port_80(host):
        # nginx 80-портто иштеп жатканы текшерилет
        assert host.socket("tcp://0.0.0.0:80").is_listening
    
  • CI/CD менен интеграция:
    Тесттерди CI/CD пайплайнда автоматтык түрдө иштетүү, ар бир коммиттен кийин же Pull Requestте. Мисалы, Jenkins, GitLab CI, GitHub Actions аркылуу.

Туура ыкма ролдун/плейбуктун татаалдыгына жана тесттердин камтылышына жараша тандалат. Жалпысынан, бул ыкмалардын айкалышын колдонуп жатам.