Skip to content

Commit 8c91a4d

Browse files
committedFeb 21, 2025·
Planned update system-prepare role
1 parent 7ba159d commit 8c91a4d

26 files changed

+3335
-15
lines changed
 

‎.github/workflows/molecule-run-tests.yaml

+3-3
Original file line numberDiff line numberDiff line change
@@ -314,11 +314,11 @@ jobs:
314314

315315
- name: Install dependencies
316316
run: |
317-
python -m pip install --no-cache-dir --upgrade pip
318-
pip install -r requirements.txt
317+
pip3 install --no-cache-dir --upgrade pip
318+
pip3 install -r requirements.txt
319319
320320
- name: Run molecule tests when content changes in system-prepare role
321321
run: |
322322
molecule --version
323-
molecule test
323+
molecule test -s docker-all
324324
working-directory: ansible/roles/system-prepare

‎ansible/roles/system-prepare/defaults/main.yaml

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ suse_packages_list:
1111

1212
redhat_packages_list:
1313
- bash-completion
14-
- epel-release
1514
- python3-pip
1615
- yum-utils
1716
- wget
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,106 @@
11
## **Molecule:**
22

3-
Данная секция предназначена для запуска и выполнения тестов с помощью такого инструмента, как molecule. Этот инструмент осуществляет предварительный запуск ролей на указанных платформах (Docker, Vagrant, Cloud и т.д.). Делается это для того, чтобы, когда роль была создана или изменена, не приходилось выполнять её запуск непосредственно на реальных серверах, так это может привести к непредвиденным обстоятельствам.
3+
Данная секция предназначена для запуска и выполнения тестов с помощью такого инструмента, как `Molecule`. Этот инструмент осуществляет предварительный запуск ролей на указанных платформах (Docker, Cloud и т.д.). Делается это для того, чтобы когда роль была написана или изменена, не приходилось выполнять её запуск непосредственно на реальных серверах, так как это может привести к непредвиденным обстоятельствам.
44

55
### **Установка molecule:**
66

7-
Для того чтобы установить `molecule` локально, выполните следующую команду:
7+
Для того чтобы установить `Molecule` локально со всеми зависимостями, выполните следующую команду в корне проекта:
88

99
```
10-
python3 -m pip install molecule molecule-plugins 'molecule-plugins[docker]' ansible-core ansible-lint yamllint
10+
pip3 install -r --user requirements.txt
1111
```
1212

13-
### **Запуск тестов:**
13+
### **Запуск тестов в Docker:**
1414

15-
Тесты по отношению к этой роли выполняются на базе платформы Docker. Чтобы запустить все тесты, необходимо выполнить следующую команду:
15+
Тесты по отношению к данной роли могут быть выполнены на базе таких платформ, как Docker и AWS EC2 (на данном этапе). Чтобы запустить полный прогон, необходимо выполнить команду, указав путь к тому или иному виду теста. Так, например, чтобы запустить тесты в среде Docker, выполните следующую команду:
1616

1717
```
18-
molecule test
18+
molecule test -s docker-all # Запускает роль для всех поддерживаемых дистрибутивов и соответствующих версий;
1919
```
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.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
# Данный файл используется для преобразования состояния экземпляров в реальное состояние, объявленное в реальных тестируемых ролях:
3+
- name: Converge
4+
hosts: all
5+
gather_facts: true
6+
become: true
7+
become_method: sudo
8+
tasks:
9+
# Данный шаг вызывает роль system-prepare для прогона тестов с помощью Molecule:
10+
- name: "Include system-prepare role for testing"
11+
include_role:
12+
name: "system-prepare"

0 commit comments

Comments
 (0)
Please sign in to comment.