|
1 | 1 | ## **Molecule:**
|
2 | 2 |
|
3 |
| -Данная секция предназначена для запуска и выполнения тестов с помощью такого инструмента, как molecule. Этот инструмент осуществляет предварительный запуск ролей на указанных платформах (Docker, Vagrant, Cloud и т.д.). Делается это для того, чтобы, когда роль была создана или изменена, не приходилось выполнять её запуск непосредственно на реальных серверах, так это может привести к непредвиденным обстоятельствам. |
| 3 | +Данная секция предназначена для запуска и выполнения тестов с помощью такого инструмента, как `Molecule`. Этот инструмент осуществляет предварительный запуск ролей на указанных платформах (Docker, Cloud и т.д.). Делается это для того, чтобы когда роль была написана или изменена, не приходилось выполнять её запуск непосредственно на реальных серверах, так как это может привести к непредвиденным обстоятельствам. |
4 | 4 |
|
5 | 5 | ### **Установка molecule:**
|
6 | 6 |
|
7 |
| -Для того чтобы установить `molecule` локально, выполните следующую команду: |
| 7 | +Для того чтобы установить `Molecule` локально со всеми зависимостями, выполните следующую команду в корне проекта: |
8 | 8 |
|
9 | 9 | ```
|
10 |
| -python3 -m pip install molecule molecule-plugins 'molecule-plugins[docker]' ansible-core ansible-lint yamllint |
| 10 | +pip3 install -r --user requirements.txt |
11 | 11 | ```
|
12 | 12 |
|
13 |
| -### **Запуск тестов:** |
| 13 | +### **Запуск тестов в Docker:** |
14 | 14 |
|
15 |
| -Тесты по отношению к этой роли выполняются на базе платформы Docker. Чтобы запустить все тесты, необходимо выполнить следующую команду: |
| 15 | +Тесты по отношению к данной роли могут быть выполнены на базе таких платформ, как Docker и AWS EC2 (на данном этапе). Чтобы запустить полный прогон, необходимо выполнить команду, указав путь к тому или иному виду теста. Так, например, чтобы запустить тесты в среде Docker, выполните следующую команду: |
16 | 16 |
|
17 | 17 | ```
|
18 |
| -molecule test |
| 18 | +molecule test -s docker-all # Запускает роль для всех поддерживаемых дистрибутивов и соответствующих версий; |
19 | 19 | ```
|
| 20 | + |
| 21 | +В данном случае имя `docker-all` подразумевает наличие всех поддерживаемых дистрибутивов в одном файле molecule.yml, поскольку роль очень проста в исполнении и не требует какого-либо количества ресурсов. |
| 22 | + |
| 23 | +### **Запуск тестов в AWS:** |
| 24 | + |
| 25 | +Принцип запуска тестов в AWS абсолютно идентичен примеру с Docker, за тем исключением, что контекстный путь отличается, однако в случае с AWS разделение по семействам присутствует. Вот пример запуска тестов для AWS: |
| 26 | + |
| 27 | +``` |
| 28 | +molecule test -s [aws-debian, aws-ubuntu, aws-suse, aws-redhat] # Укажите на выбор одно из семейств дистрибутивов Linux; |
| 29 | +``` |
| 30 | + |
| 31 | +Однако перед запуском рекомендуется заполнить ряд переменных значениями, выраженных в `group_vars` в корне директории `ansible` в проекте, которые актуальны для вас: имя профиля, регион, тип инстанса и т.д. Там же указано описание для каждой переменной. Вот полный список переменных на данный момент: |
| 32 | + |
| 33 | +``` |
| 34 | +aws_profile: "" |
| 35 | +aws_region: "" |
| 36 | +aws_instance_type: "" |
| 37 | +aws_vpc_subnet_id: "" |
| 38 | +aws_vpc_id: "" |
| 39 | +aws_key_method: "" |
| 40 | +aws_default_ssh_user: "" |
| 41 | +aws_local_private_key: "" |
| 42 | +aws_local_public_key: "" |
| 43 | +aws_custom_key_name: "" |
| 44 | +aws_security_group_name: "" |
| 45 | +``` |
| 46 | + |
| 47 | +И ещё один аспект. Для каждого семейства дистрибутивов в AWS есть свои версии и реализации. Если по каким-то причинам вас не устраивают предоставленные мною версии дистрибутивов в файле molecule.yml для каждого из семейств или вы просто хотите протестировать те же роли на более старых или новых версиях, то в таком случае вы можете воспользоваться списком команд ниже для каждого из семейств. Эти команды выведут информацию в виде таблице, в которой будет представлен OwnerID семейства для AWS, а также полное имя самого образа, которое одинаково вне зависимости от используемого региона, в сравнении с AMI ID. |
| 48 | + |
| 49 | +* Для **Ubuntu** это: |
| 50 | +``` |
| 51 | +# Для Ubuntu 20.04 |
| 52 | +aws ec2 describe-images --owners 099720109477 --filters "Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server*" --query "Images[*].[OwnerId,CreationDate,Name,ImageId]" --output table |
| 53 | +# Для Ubuntu 22.04 |
| 54 | +aws ec2 describe-images --owners 099720109477 --filters "Name=name,Values=ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server*" --query "Images[*].[OwnerId,CreationDate,Name,ImageId]" --output table |
| 55 | +# Для Ubuntu 24.04 |
| 56 | +aws ec2 describe-images --owners 099720109477 --filters "Name=name,Values=ubuntu/images/hvm-ssd-gp3/ubuntu-*-24.04-amd64-server*" --query "Images[*].[OwnerId,CreationDate,Name,ImageId]" --output table |
| 57 | +``` |
| 58 | + |
| 59 | +* Для **Debian** это: |
| 60 | +``` |
| 61 | +# Для Debian 10 |
| 62 | +aws ec2 describe-images --owners 136693071363 --filters "Name=name,Values=debian-10-amd64-*" --query "Images[*].[OwnerId,CreationDate,Name,ImageId]" --output table |
| 63 | +# Для Debian 11 |
| 64 | +aws ec2 describe-images --owners 136693071363 --filters "Name=name,Values=debian-11-amd64-*" --query "Images[*].[OwnerId,CreationDate,Name,ImageId]" --output table |
| 65 | +# Для Debian 12 |
| 66 | +aws ec2 describe-images --owners 136693071363 --filters "Name=name,Values=debian-12-amd64-*" --query "Images[*].[OwnerId,CreationDate,Name,ImageId]" --output table |
| 67 | +``` |
| 68 | + |
| 69 | +* Для **SUSE** это: |
| 70 | +``` |
| 71 | +# Для SLEL 15 (можно менять версии сервис) |
| 72 | +aws ec2 describe-images --owners 013907871322 --filters "Name=name,Values=suse-sles-15-sp5-*-x86_64" --query "Images[*].[OwnerId,CreationDate,Name,ImageId]" --output table |
| 73 | +``` |
| 74 | + |
| 75 | +* Для **Red Hat** это: |
| 76 | +``` |
| 77 | +# Для RHEL 8 |
| 78 | +aws ec2 describe-images --owners 309956199498 --filters "Name=name,Values=*RHEL-8.10*" --query "Images[*].[OwnerId,CreationDate,Name,ImageId]" --output table |
| 79 | +# Для RHEL 9 |
| 80 | +aws ec2 describe-images --owners 309956199498 --filters "Name=name,Values=*RHEL-9.5*" --query "Images[*].[OwnerId,CreationDate,Name,ImageId]" --output table |
| 81 | +``` |
| 82 | + |
| 83 | +### **Прочие команды в Molecule:** |
| 84 | + |
| 85 | +Если вы хотите только подготовить ресурсную базу, без прогона самих ролей, то для этого выполните следующую команду на выбор в зависимости от вашей платформы (в первую очередь актуально для облаков, где мы подготавливаем инфраструктуру): |
| 86 | + |
| 87 | +``` |
| 88 | +molecule create -s [docker-debian, docker-ubuntu, docker-suse, docker-redhat] # Укажите на выбор одно из семейств дистрибутивов Linux; |
| 89 | +molecule create -s [aws-debian, aws-ubuntu, aws-suse, aws-redhat] # Укажите на выбор одно из семейств дистрибутивов Linux; |
| 90 | +``` |
| 91 | + |
| 92 | +Если вы хотите запустить прогон тестов для роли без проверки идемпотентности, то для этого выполните следующую команду на выбор в зависимости от вашей платформы: |
| 93 | + |
| 94 | +``` |
| 95 | +molecule converge -s [docker-debian, docker-ubuntu, docker-suse, docker-redhat] # Укажите на выбор одно из семейств дистрибутивов Linux; |
| 96 | +molecule converge -s [aws-debian, aws-ubuntu, aws-suse, aws-redhat] # Укажите на выбор одно из семейств дистрибутивов Linux; |
| 97 | +``` |
| 98 | + |
| 99 | +Чтобы явно уничтожить следы деятельности прогона тестов используйте следующую команду: |
| 100 | + |
| 101 | +``` |
| 102 | +molecule destroy -s [docker-debian, docker-ubuntu, docker-suse, docker-redhat] # Укажите на выбор одно из семейств дистрибутивов Linux; |
| 103 | +molecule destroy -s [aws-debian, aws-ubuntu, aws-suse, aws-redhat] # Укажите на выбор одно из семейств дистрибутивов Linux; |
| 104 | +``` |
| 105 | + |
| 106 | +Это может быть полезно в некоторых случаях, так как не всегда прогон тестов завершается успешно и иногда кэш или какие-либо другие следы предыдущего запуска могут помешать следующему. Особенно такое поведение можно наблюдать при работе с Docker. |
0 commit comments