- Создан исправленный скрипт create_role_fixed.sh
- Исправлены проблемы с переменными в шаблонах ролей
- Убраны пустые переменные типа {{ }}
- Исправлены имена переменных с правильным экранированием
- Создана тестовая роль test-role для проверки
Проблемы в старой команде:
- Неправильное экранирование переменных ROLE_NAME
- Пустые переменные в шаблонах
- Неправильные имена переменных в defaults
- Проблемы с заменой плейсхолдеров
Исправления:
- Правильное экранирование переменных
- Корректные переменные в шаблонах
- Правильные имена переменных
- Рабочая замена плейсхолдеров
Автор: Сергей Антропов
Сайт: https://devops.org.ru
139 lines
4.6 KiB
Bash
Executable File
139 lines
4.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Исправленная команда создания роли
|
|
ROLE_NAME="$1"
|
|
ROLE_DESC="$2"
|
|
ROLE_PACKAGE="$3"
|
|
ROLE_SERVICE="$4"
|
|
ROLE_TAGS="$5"
|
|
|
|
if [ -z "$ROLE_NAME" ]; then
|
|
echo "Использование: $0 ROLE_NAME ROLE_DESC ROLE_PACKAGE ROLE_SERVICE ROLE_TAGS"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Создание роли: $ROLE_NAME"
|
|
mkdir -p ./roles/${ROLE_NAME}/{tasks,handlers,templates,files,vars,defaults,meta,tests,playbooks}
|
|
|
|
# Создаем main.yml
|
|
cat > ./roles/${ROLE_NAME}/tasks/main.yml << 'MAIN_EOF'
|
|
---
|
|
# Основные задачи роли ROLE_NAME_PLACEHOLDER
|
|
# Автор: Сергей Антропов
|
|
# Сайт: https://devops.org.ru
|
|
|
|
- name: Включить задачи для Debian/Ubuntu
|
|
import_tasks: debian.yml
|
|
when: ansible_os_family == 'Debian'
|
|
|
|
- name: Включить задачи для RHEL/CentOS
|
|
import_tasks: redhat.yml
|
|
when: ansible_os_family == 'RedHat'
|
|
MAIN_EOF
|
|
|
|
# Создаем debian.yml
|
|
cat > ./roles/${ROLE_NAME}/tasks/debian.yml << 'DEBIAN_EOF'
|
|
---
|
|
# Задачи для Debian/Ubuntu
|
|
|
|
- name: Обновить кэш пакетов
|
|
apt:
|
|
update_cache: yes
|
|
cache_valid_time: 3600
|
|
|
|
- name: Установить пакет PACKAGE_PLACEHOLDER
|
|
apt:
|
|
name: "{{ ROLE_NAME_PLACEHOLDER_package }}"
|
|
state: present
|
|
|
|
- name: Запустить и включить сервис SERVICE_PLACEHOLDER
|
|
systemd:
|
|
name: "{{ ROLE_NAME_PLACEHOLDER_service }}"
|
|
enabled: "{{ ROLE_NAME_PLACEHOLDER_enabled }}"
|
|
state: "{{ 'started' if ROLE_NAME_PLACEHOLDER_started else 'stopped' }}"
|
|
DEBIAN_EOF
|
|
|
|
# Создаем redhat.yml
|
|
cat > ./roles/${ROLE_NAME}/tasks/redhat.yml << 'REDHAT_EOF'
|
|
---
|
|
# Задачи для RHEL/CentOS
|
|
|
|
- name: Установить пакет PACKAGE_PLACEHOLDER
|
|
yum:
|
|
name: "{{ ROLE_NAME_PLACEHOLDER_package }}"
|
|
state: present
|
|
|
|
- name: Запустить и включить сервис SERVICE_PLACEHOLDER
|
|
systemd:
|
|
name: "{{ ROLE_NAME_PLACEHOLDER_service }}"
|
|
enabled: "{{ ROLE_NAME_PLACEHOLDER_enabled }}"
|
|
state: "{{ 'started' if ROLE_NAME_PLACEHOLDER_started else 'stopped' }}"
|
|
REDHAT_EOF
|
|
|
|
# Создаем defaults/main.yml
|
|
cat > ./roles/${ROLE_NAME}/defaults/main.yml << 'DEFAULTS_EOF'
|
|
---
|
|
# Переменные по умолчанию для роли ROLE_NAME_PLACEHOLDER
|
|
# Автор: Сергей Антропов
|
|
# Сайт: https://devops.org.ru
|
|
|
|
ROLE_NAME_PLACEHOLDER_package: PACKAGE_PLACEHOLDER
|
|
ROLE_NAME_PLACEHOLDER_service: SERVICE_PLACEHOLDER
|
|
ROLE_NAME_PLACEHOLDER_enabled: true
|
|
ROLE_NAME_PLACEHOLDER_started: true
|
|
DEFAULTS_EOF
|
|
|
|
# Создаем meta/main.yml
|
|
cat > ./roles/${ROLE_NAME}/meta/main.yml << 'META_EOF'
|
|
---
|
|
galaxy_info:
|
|
author: Сергей Антропов
|
|
description: ROLE_DESC_PLACEHOLDER
|
|
company: https://devops.org.ru
|
|
license: MIT
|
|
min_ansible_version: 2.9
|
|
platforms:
|
|
- name: Ubuntu
|
|
versions: [18.04, 20.04, 22.04]
|
|
- name: Debian
|
|
versions: [10, 11, 12]
|
|
- name: EL
|
|
versions: [7, 8, 9]
|
|
galaxy_tags: [TAGS_PLACEHOLDER]
|
|
|
|
dependencies: []
|
|
META_EOF
|
|
|
|
# Создаем handlers/main.yml
|
|
cat > ./roles/${ROLE_NAME}/handlers/main.yml << 'HANDLERS_EOF'
|
|
---
|
|
# Обработчики роли ROLE_NAME_PLACEHOLDER
|
|
|
|
- name: Перезапустить SERVICE_PLACEHOLDER
|
|
systemd:
|
|
name: "{{ ROLE_NAME_PLACEHOLDER_service }}"
|
|
state: restarted
|
|
HANDLERS_EOF
|
|
|
|
# Заменяем плейсхолдеры
|
|
sed -i '' "s/ROLE_NAME_PLACEHOLDER/${ROLE_NAME}/g" ./roles/${ROLE_NAME}/tasks/main.yml
|
|
sed -i '' "s/ROLE_NAME_PLACEHOLDER/${ROLE_NAME}/g" ./roles/${ROLE_NAME}/tasks/debian.yml
|
|
sed -i '' "s/ROLE_NAME_PLACEHOLDER/${ROLE_NAME}/g" ./roles/${ROLE_NAME}/tasks/redhat.yml
|
|
sed -i '' "s/ROLE_NAME_PLACEHOLDER/${ROLE_NAME}/g" ./roles/${ROLE_NAME}/defaults/main.yml
|
|
sed -i '' "s/ROLE_NAME_PLACEHOLDER/${ROLE_NAME}/g" ./roles/${ROLE_NAME}/meta/main.yml
|
|
sed -i '' "s/ROLE_NAME_PLACEHOLDER/${ROLE_NAME}/g" ./roles/${ROLE_NAME}/handlers/main.yml
|
|
|
|
sed -i '' "s/PACKAGE_PLACEHOLDER/${ROLE_PACKAGE}/g" ./roles/${ROLE_NAME}/tasks/debian.yml
|
|
sed -i '' "s/PACKAGE_PLACEHOLDER/${ROLE_PACKAGE}/g" ./roles/${ROLE_NAME}/tasks/redhat.yml
|
|
sed -i '' "s/PACKAGE_PLACEHOLDER/${ROLE_PACKAGE}/g" ./roles/${ROLE_NAME}/defaults/main.yml
|
|
|
|
sed -i '' "s/SERVICE_PLACEHOLDER/${ROLE_SERVICE}/g" ./roles/${ROLE_NAME}/tasks/debian.yml
|
|
sed -i '' "s/SERVICE_PLACEHOLDER/${ROLE_SERVICE}/g" ./roles/${ROLE_NAME}/tasks/redhat.yml
|
|
sed -i '' "s/SERVICE_PLACEHOLDER/${ROLE_SERVICE}/g" ./roles/${ROLE_NAME}/handlers/main.yml
|
|
|
|
sed -i '' "s/ROLE_DESC_PLACEHOLDER/${ROLE_DESC}/g" ./roles/${ROLE_NAME}/meta/main.yml
|
|
sed -i '' "s/TAGS_PLACEHOLDER/${ROLE_TAGS}/g" ./roles/${ROLE_NAME}/meta/main.yml
|
|
|
|
echo "Роль ${ROLE_NAME} создана успешно!"
|
|
echo "Структура: ./roles/${ROLE_NAME}/"
|