
Практические работы / Практическая работа 3
.pdfЗадание на практическое занятие №3.
1. На основе понимания состава и содержания ранее прочитанной лекции по основным положениям автоматизации тестирования, осуществить разработку и проверку выполнения сценариев автоматизированного тестирования с использованием системы управления конфигурациями Ansible, написанной на алгоритмическом языке программирования высокого уровня Python и использующей декларативный язык YAML, реализующий разметку данных для описания действий по тестированию, автоматизации настройки и развертывания программного обеспечения для ОС Linux и Windows. Ansible поддерживает работу с сетевыми устройствами, на которых установлен Python версии 2.4 и выше по SSH или по WinRM соединению без установки агента/клиента на целевые системы. Администратор Ansible создаёт определённые "плейбуки" (англ. playbook, play — игра, пьеса, book — книга) в формате YAML с описанием требуемых состояний управляемой системы, в котором она должна находиться в конкретный момент времени, включая установленные пакеты, запущенные службы, созданные файлы и многое другое. Ansible проверяет, что каждый из ресурсов системы находится в ожидаемом состоянии и, при необходимости, пытается исправить состояние ресурса, если оно не соответствует ожидаемому. Для выполнения задач используется система модулей. Каждая задача представляет собой имя задачи, используемый модуль и список параметров, характеризующих задачу. Ansible поддерживает переменные, фильтры обработки переменных, условное выполнение задач, параллелизацию, шаблоны файлов, адреса и настройки целевых систем содержатся в файлах «инвентаря» (inventory), поддерживается группирование, а для реализации набора сходных задач существует система ролей.
Использование Ansible заключается в его непосредственной установке и настройке соответствующих конфигурационных файлов.
2. Подготовительные действия:
В виртуальной машине Debian 10 от пользователя root привести файл /etc/apt/sources.list к виду
# deb cdrom:[Debian GNU/Linux 10.2.0 _Buster_ - Official amd64 DVD Binary-1 20191116-09:57]/ buster contrib main
#deb cdrom:[Debian GNU/Linux 10.2.0 _Buster_ - Official amd64 DVD Binary-1 20191116-09:57]/ buster contrib main
deb http://security.debian.org/debian-security buster/updates main contrib non-free deb-src http://security.debian.org/debian-security buster/updates main contrib non-free
#buster-updates, previously known as 'volatile'
#A network mirror was not selected during install. The following entries
#are provided as examples, but you should amend them as appropriate
#for your mirror of choice.
#
deb http://deb.debian.org/debian/ buster-updates main contrib non-free deb-src http://deb.debian.org/debian/ buster-updates main contrib non-free
deb http://deb.debian.org/debian/ buster main contrib non-free
deb-src http://deb.debian.org/debian/ buster main contrib non-free
#deb http://deb.debian.org/debian/ unstable main contrib non-free
т. е. в нем, скорее всего, отсутствуют две строки
deb http://deb.debian.org/debian/ buster main contrib non-free deb-src http://deb.debian.org/debian/ buster main contrib non-free
и их нужно в файл /etc/apt/sources.list добавить.
Далее следует файл /etc/apt/apt.conf.d/02proxy привести к виду
Acquire::http::Proxy "http://apt.dcti.sut.ru:3142/";
т. е. взять в кавычки подстоку "http://apt.dcti.sut.ru:3142/"
Далее следует выполнить
apt clean cache
apt update
после чего в список репозиториев будут добавлены необходимые репозитории.
В случае, если при выполнении apt update возникает ошибка, нужно выполнить подключение к Интернет в "родительской" ОС Debian.
3. Установка Ansible
apt install ansible
4. Настройка Ansible
Для примеров, рассматриваемых в настоящем практическом занятии, настройка Ansible не требуется. Возможные минимальные настройки Ansible приведены в приложении.
5. Создание сценария playbook
Следует создать сценарий тестирования наличия файла services в заданном расположении — в каталоге /etc/
- создать файл ./1.yml touch ./1.yml
- выполнить ввод содержимого файла ./1.yml
---
- name: test1
hosts: localhost |
|
tasks: |
|
- stat: |
|
path: /etc/services |
|
register: p |
|
- fail: |
|
msg: "file /etc/services not exist" |
|
when: "not(p.stat.exists) or not(p.stat.isreg)" |
|
где |
|
--- |
признак формата файла YAML |
- name: test1 |
наименование "плейбук"-файла |
hosts: localhost |
к каким хостам из файла /etc/ansible/hosts следует применить |
tasks: |
перечень задач "плейбук"-файла |
- stat: |
очередная задача "плейбук"-файла - получение статистики по файлу |
path: /etc/services |
путь к файлу /etc/services |
register: p |
сохранение результата обращения к файлу в переменной p |
- fail: |
действие при ошибке |
msg: "file /etc/services not exist" |
|
when: "not(p.stat.exists) or not(p.stat.isreg)" |
если файл не существует или по указанному пути находится не файл, то |
|
вывести сообщение file /etc/services not exist |
Важно! Очень важно в "плейбук"-файле соблюдать отступы "два пробела", т. к. в случае не соблюдения соответствующих отступов выполнен он не будет.
5. Запуск и выполнение сценария
Выполнить запуск сценария
ansible-playbook ./1.yml
6. Анализ результатов В случае успешного выполнения будет выведено
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
PLAY [test1]*********************************************************************************************** TASK [Gathering Facts]************************************************************************************* ok: [localhost]
TASK [stat] ***********************************************************************************************
ok: [localhost]
TASK [fail] ***********************************************************************************************
skipping: [localhost]
PLAY RECAP ************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0
В случае ошибки будет выведено, например
PLAY [test1] ********************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************
ok: [localhost]
TASK [stat] *********************************************************************************************************
ok: [localhost]
TASK [fail] *********************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "file /etc/services not exist"} to retry, use: --limit @/tmp/1.retry
PLAY RECAP **********************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=1
7. Отладка сценария
Выполнить запуск сценария с выводом информации о выполнении
ansible-playbook ./1.yml -vvv
Проанализировать информацию об ошибке в ходе выполнения сценария, выполнить ее поиск, нахождение и исправление. Повторно выполнить запуск сценария и убедиться, что он выполняется без ошибок.
8. Самостоятельное создание и выполнение сценария playbook
Создать сценарий тестирования наличия контента "body" на web-странице сайта ya.ru
- создать файл 2.yml
touch ./2.yml
- выполнить ввод содержимого файла 2.yml
---
-name: test2 hosts: localhost
tasks:
- uri:
url: https://ya.ru/ return_content: yes register: p
- fail:
msg: "content 'body' not exist in ya.ru" when: "'body' not in p.content"
-выполнить сценарий 2.yml
-проанализировать результат, если необходимо, проверить подключение к Интернет и повторить выполнение сценария 2.yml
-в сценарии 2.yml выполнить изменение подстроки контента "body" на подстроку контента "bo1dy"
-выполнить сценарий 2.yml
-проанализировать результат
Сообщить о выполнении практического задания преподавателю. Подготовиться и быть в готовности ответить на вопросы преподавателя.
Приложение. Минимальное конфигурирование Ansible
Минимальное конфигурирование Ansible выполняется следующим образом:
-в файле /etc/ansible/ansible.cfg, при необходимости, следует указать соответствующие значения для соответствующих атрибутов (оставим без изменений).
-в файле /etc/ansible/hosts следует указать
или поименный перечень ip-адресов и/или серверов, например
192.168.1.101
ya.ru
или группы и составляющие их экземпляры телекоммуникационного оборудования с соответствующими им значениями атрибутов доступа, например
[win_workstations]
win10-1 ansible_ssh_host=192.168.40.23 ansible_user=admin ansible_password=password ansible_connection=winrm ansible_winrm_server_cert_validation=ignore
[linux_servers]
deb10-1 ansible_ssh_host=192.168.50.111 ansible_ssh_user=root ansible_ssh_pass=netlab123
- следует создать "плейбук"-файл с расширением yml, содержащий соответствующие проверяемые значения и команды. Пример файла
/var/scripts/ansible/run_command_win.yml
---
-name: Run command on win_workstations hosts: win_workstations
gather_facts: false
tasks:
-name: run command ver
command: $PSVersionTable.PSVersion
Важно! Очень важно в "плейбук"-файле соблюдать отступы "два пробела", т. к. в случае не соблюдения соответствующих отступов выполнен он не будет.
- для запуска "плейбук"-файла следует выполнить
ansible-playbook /var/scripts/ansible/run_command_win.yml
Важно! В процессе выполнения команд "плейбук"-файла они выполняются последовательно одна за другой в порядке их размещения в "плейбук"-файле. В случае возникновения ошибки при выполнении очередной команды выполнение "плейбук"-файла будет остановлено на данной команде с выводом соответствующего сообщения об ошибке.
На deb10-2 в каталоге /var/scripts/ansible/ выполните создание "плейбук"-файла run_command_lin.yml содержащий, с учетом отступов, следующее
---
-name: Run command on linux-servers hosts: linux_servers
gather_facts: false tasks:
-name: get date
shell: date "+%Y-%m-%d" register: tmp_date
-для запуска Ansible по ssh следует установить
apt install sshpass
- если необходимо, запуск "плейбук"-файла можно выполнить с флагом отладки
ansible-playbook /var/scripts/ansible/run_command_lin.yml -vvv