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. Имкон медиҳад, ки сценарии гуногунро барои санҷиш (linting, идемпотентӣ, санҷиши функсияҳо) иҷро кунад.

    # Инициализатсияи Molecule дар директорияи рол
    molecule init scenario -r default
    
    # Иҷрои санҷишҳои Molecule
    molecule test
    
  • Тестҳои сатҳи система (Functional Testing):
    Санҷиш мекунанд, ки системаи пас аз татбиқи Ansible дар ҳолати интизорӣ қарор дорад. Истифода мешаванд:

    • Testinfra: Санҷиш ҳолати хостҳо ва хизматрасониҳо пас аз татбиқи конфигуратсия.
    • InSpec: Фреймворкии Ruby барои санҷиши ҳолати системавӣ бо истифода аз DSL.

    Дар Molecule метавон Testinfra-ро ҳамгиро кард:

    # бахши platforms дар molecule/default/molecule.yml
    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.

Интихоби усул вобаста ба мураккабии роли/плейбук ва талабот ба сатҳи пӯшиш бо санҷишҳо. Одатан, ман истифодаи ҳамҷояи ин усулҳоро мекунам.