From b6286aa9b73aa9ce59db641ccf5c8c37d7ec4e23 Mon Sep 17 00:00:00 2001 From: Sergey Antropoff Date: Thu, 13 Mar 2025 17:38:44 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D1=84=D0=B8=D0=BA=D1=81=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=83=D0=BD=D0=B8=D0=B5=D1=80=D1=81=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=B8=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D0=BB=20centos=20=D0=B8=20ubuntu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .ansible-lint | 5 ++ .ansible/.lock | 0 .idea/AnsibleTemplate.iml | 15 ++++ .idea/inspectionProfiles/Project_Default.xml | 47 ++++++++++ .../inspectionProfiles/profiles_settings.xml | 6 ++ .idea/misc.xml | 5 +- .idea/modules.xml | 8 ++ .idea/vcs.xml | 6 ++ Dockerfile | 5 ++ Makefile | 85 ++++++------------- ansible.cfg | 7 +- docker-compose.yaml | 5 +- inventory/hosts | 2 + molecule/default/converge.yml | 4 +- molecule/default/molecule.yml | 13 ++- molecule/default/no-prepare.yml | 43 ++++++++++ molecule/default/no-verify.yml | 7 ++ molecule/default/prepare.yml | 11 --- molecule/default/verify.yml | 7 -- requirements.yml | 5 -- roles/deploy.yaml | 3 + roles/role/deploy.yaml | 7 +- roles/role/tasks/debian/main.yaml | 4 + roles/role/tasks/main.yaml | 14 ++- roles/role/tasks/redhat/main.yaml | 4 + roles/role/vars/secrets.yml | 6 -- roles/{role => }/vars/.gitkeep | 0 roles/vars/secrets.yml | 6 ++ 28 files changed, 229 insertions(+), 101 deletions(-) create mode 100644 .ansible-lint delete mode 100644 .ansible/.lock create mode 100644 .idea/AnsibleTemplate.iml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 inventory/hosts create mode 100644 molecule/default/no-prepare.yml create mode 100644 molecule/default/no-verify.yml delete mode 100644 molecule/default/prepare.yml delete mode 100644 molecule/default/verify.yml create mode 100644 roles/deploy.yaml create mode 100644 roles/role/tasks/debian/main.yaml create mode 100644 roles/role/tasks/redhat/main.yaml delete mode 100644 roles/role/vars/secrets.yml rename roles/{role => }/vars/.gitkeep (100%) create mode 100644 roles/vars/secrets.yml diff --git a/.ansible-lint b/.ansible-lint new file mode 100644 index 0000000..fbe20f8 --- /dev/null +++ b/.ansible-lint @@ -0,0 +1,5 @@ +skip_list: + - fqcn + - yaml[new-line-at-end-of-file] + - yaml[truthy] + - var-naming[no-role-prefix] \ No newline at end of file diff --git a/.ansible/.lock b/.ansible/.lock deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/AnsibleTemplate.iml b/.idea/AnsibleTemplate.iml new file mode 100644 index 0000000..db32fb1 --- /dev/null +++ b/.idea/AnsibleTemplate.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..95a0fdb --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,47 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 8df3993..a6dd401 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,7 @@ - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..febcd53 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 9ddc0ef..a9a7409 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,6 +16,7 @@ RUN apt-get update && \ make \ sudo \ sshpass \ + openssh-client \ nano \ less \ && rm -rf /var/lib/apt/lists/* @@ -48,6 +49,10 @@ RUN pip install --upgrade pip && \ docker +# Копируем ssh ключ +COPY id_rsa /root/.ssh/id_rsa +RUN chmod 600 /root/.ssh/id_rsa + # Set the working directory WORKDIR /ansible diff --git a/Makefile b/Makefile index 2b1a6c5..9112990 100644 --- a/Makefile +++ b/Makefile @@ -1,86 +1,59 @@ -# Переменные -ROLE_NAME ?= my_new_role -VAULT_PASSWORD_FILE ?= vault_password_file -INVENTORY ?= /workspace/inventory/hosts # Путь к инвентори внутри контейнера -PLAYBOOK ?= /workspace/role/playbook.yml # Путь к playbook внутри контейнера + +view create edit show delete test lint deploy: + @true #################################################################################################### # Управление контейнерами с помощью docker compose #################################################################################################### # Сборка docker-образов build: + cp ~/.ssh/id_rsa . docker compose build $(c) + rm id_rsa # Пересборка docker-образов rebuild: + cp ~/.ssh/id_rsa . docker compose build --no-cache $(c) - docker compose down -# docker compose up -d - -# Создание и запуск docker-контейнеров -up: - docker compose up -d - -# Остановка и УДАЛЕНИЕ docker-контейнеров -down: - docker compose down - -# Остановка docker-контейнеров -stop: - docker compose stop $(c) - -# Запуск docker-контейнеров -start: - docker compose start $(c) - -# Перезапуск docker-контейнеров -restart: down up - -# Удаление docker-контейнеров с вольюмами -destroy: - docker compose down --volumes --remove-orphans && rm -rf data/*/ + rm id_rsa # Удаление docker-контейнеров с полной очисткой неактивных контейнеров prune: docker system prune -af -# Показать список контейнеров -ps: - docker compose ps - -# Все логи конейнеров -logs: - docker compose logs --tail=100 -f $(c) - -shell: - docker compose exec ansible bash #################################################################################################### # Работа с ролью #################################################################################################### -view create edit view delete test lint deploy: - @true - vault: @case "$(word 2, $(MAKECMDGOALS))" in \ - view) docker compose run --rm ansible bash -c "ansible-vault view --vault-password-file vault-password.txt roles/role/vars/secrets.yml";; \ - create) docker compose run --rm ansible bash -c "ansible-vault create --encrypt-vault-id default --vault-password-file vault-password.txt roles/role/vars/secrets.yml";; \ - edit) docker compose run --rm ansible bash -c "ansible-vault edit --vault-password-file vault-password.txt roles/role/vars/secrets.yml";; \ - delete) docker compose run --rm ansible bash -c "rm roles/role/vars/secrets.yml";; \ + show) docker compose run --rm ansible bash -c "ansible-vault view --vault-password-file vault-password.txt roles/vars/secrets.yml";; \ + create) docker compose run --rm ansible bash -c "ansible-vault create --encrypt-vault-id default --vault-password-file vault-password.txt roles/vars/secrets.yml";; \ + edit) docker compose run --rm ansible bash -c "ansible-vault edit --vault-password-file vault-password.txt roles/vars/secrets.yml";; \ + delete) docker compose run --rm ansible bash -c "rm roles/vars/secrets.yml";; \ *) echo "Unknown action";; \ esac role: @case "$(word 2, $(MAKECMDGOALS))" in \ - test) \ - echo "Running test roles..."; \ - docker compose run --rm ansible bash -c "molecule test";; \ lint) \ + clear; \ echo "Check your role..."; \ - docker compose run --rm ansible bash -c "ansible-lint roles/role";; \ + docker compose run --rm ansible bash -c "ansible-vault decrypt --vault-password-file vault-password.txt roles/vars/secrets.yml"; \ + docker compose run --rm ansible bash -c "ansible-lint roles/*"; \ + echo " "; \ + docker compose run --rm ansible bash -c "ansible-vault encrypt roles/vars/secrets.yml --encrypt-vault-id default --vault-password-file vault-password.txt";; \ + test) \ + clear; \ + echo "Running test roles..."; \ + docker compose run --rm ansible bash -c "ansible-vault decrypt --vault-password-file vault-password.txt roles/vars/secrets.yml"; \ + docker compose run --rm ansible bash -c "molecule test --parallel"; \ + echo " "; \ + docker compose run --rm ansible bash -c "ansible-vault encrypt roles/vars/secrets.yml --encrypt-vault-id default --vault-password-file vault-password.txt";; \ deploy) \ + clear; \ echo "Deploying roles to production..."; \ - docker compose run --rm ansible /usr/bin/sh -c "ansible-playbook -i inventory/production deploy.yml --vault-password-file vault-password.txt";; \ + docker compose run --rm ansible bash -c "ansible-playbook /ansible/roles/deploy.yaml";; \ *) echo "Unknown action";; \ esac @@ -88,8 +61,6 @@ role: # Работа с Git #################################################################################################### push: -# git config --global user.email "sergey@antropoff.ru" -# git config --global user.name "Sergey Antropoff" git branch @read -p "Выберите ветку для пуша: " BRANCH; \ read -p "Введите описание коммита: " COMMIT; \ @@ -101,9 +72,3 @@ push: pull: git pull - -new-branch: - git checkout branch $(name) - -branch: - git checkout $(name) diff --git a/ansible.cfg b/ansible.cfg index 33d3bd5..1e23d45 100644 --- a/ansible.cfg +++ b/ansible.cfg @@ -1,7 +1,8 @@ [defaults] -inventory = /ansible/inventory +inventory = /ansible/inventory/hosts vault_password_file = /ansible/vault_password.txt -remote_user = ansible +remote_user = devops host_key_checking = False enable_plugins = yaml, ini -roles_path = /ansible/roles \ No newline at end of file +roles_path = /ansible/roles +interpreter_python = auto \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index fde264c..9b924a3 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,6 +1,9 @@ services: ansible: - build: . + build: + context: . + ssh: + - default container_name: ansible volumes: - .:/ansible diff --git a/inventory/hosts b/inventory/hosts new file mode 100644 index 0000000..6e8b241 --- /dev/null +++ b/inventory/hosts @@ -0,0 +1,2 @@ +[all] +10.14.246.9 \ No newline at end of file diff --git a/molecule/default/converge.yml b/molecule/default/converge.yml index b84d23e..88c42cd 100644 --- a/molecule/default/converge.yml +++ b/molecule/default/converge.yml @@ -2,4 +2,6 @@ - name: Converge hosts: all roles: - - role: /ansible/roles/role + - /ansible/roles/role + vars_files: + - ../../roles/vars/secrets.yml \ No newline at end of file diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml index d26a736..d384fff 100644 --- a/molecule/default/molecule.yml +++ b/molecule/default/molecule.yml @@ -4,16 +4,27 @@ dependency: enabled: true options: requirements-file: /ansible/requirements.yml + driver: name: docker + platforms: - - name: instance + - name: centos-instance + image: "quay.io/fedora/python-312" + privileged: true + pre_build_image: true + + - name: ubuntu-instance image: "geerlingguy/docker-ubuntu2004-ansible:latest" privileged: true pre_build_image: true + provisioner: name: ansible + env: + ANSIBLE_PYTHON_INTERPRETER: /usr/bin/python3 lint: name: ansible-lint + verifier: name: ansible diff --git a/molecule/default/no-prepare.yml b/molecule/default/no-prepare.yml new file mode 100644 index 0000000..57b792f --- /dev/null +++ b/molecule/default/no-prepare.yml @@ -0,0 +1,43 @@ +- name: Prepare + hosts: all + tasks: + - name: Detect OS family + ansible.builtin.setup: + gather_subset: + - "min" + + - name: Обновляем пакеты для работы с Ansible в RockyLinux (Centos/RedHat) + when: ansible_facts['os_family'] == "RedHat" + block: + - name: Устанавливаем репозиторий AppStream (если его нет) + ansible.builtin.raw: dnf config-manager --set-enabled appstream + changed_when: false + + - name: Установить rsync + ansible.builtin.raw: dnf install -y rsync + changed_when: false + + - name: Устанавливаем Python 3.8 + ansible.builtin.raw: dnf install -y python38 python38-pip + changed_when: false + + - name: Обновляем символическую ссылку python3 + ansible.builtin.raw: alternatives --set python /usr/bin/python3.8 + changed_when: false +# - name: Fix repository URLs +# ansible.builtin.command: +# cmd: sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* +# changed_when: false + +# - name: Update baseurl +# ansible.builtin.command: +# cmd: sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* +# changed_when: false + +# - name: Install required packages +# ansible.builtin.yum: +# name: +# - epel-release +# - python3 +# - python3-pip +# state: present diff --git a/molecule/default/no-verify.yml b/molecule/default/no-verify.yml new file mode 100644 index 0000000..5e80115 --- /dev/null +++ b/molecule/default/no-verify.yml @@ -0,0 +1,7 @@ +--- +- name: Prepare + hosts: all + tasks: + - name: Reun verify + debug: + msg: "Hello, Verify!" diff --git a/molecule/default/prepare.yml b/molecule/default/prepare.yml deleted file mode 100644 index 0470683..0000000 --- a/molecule/default/prepare.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -- name: Prepare - hosts: all - tasks: - - name: Install required packages - debug: - msg: "Hello, Prepare!" -# apt: -# name: -# - git -# state: present \ No newline at end of file diff --git a/molecule/default/verify.yml b/molecule/default/verify.yml deleted file mode 100644 index d7adc4f..0000000 --- a/molecule/default/verify.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -- name: Prepare - hosts: all - tasks: - - name: Install required packages - debug: - msg: "Hello, Verify!" \ No newline at end of file diff --git a/requirements.yml b/requirements.yml index d33abdd..cf12a33 100644 --- a/requirements.yml +++ b/requirements.yml @@ -2,8 +2,3 @@ collections: - name: maxhoesel.proxmox version: 5.0.1 - - name: community.general - version: 6.0.0 - - name: ansible.posix - version: 1.4.0 - diff --git a/roles/deploy.yaml b/roles/deploy.yaml new file mode 100644 index 0000000..4acdabc --- /dev/null +++ b/roles/deploy.yaml @@ -0,0 +1,3 @@ +--- +- name: Import role + import_playbook: role/deploy.yaml \ No newline at end of file diff --git a/roles/role/deploy.yaml b/roles/role/deploy.yaml index 3c9cf2e..9119955 100644 --- a/roles/role/deploy.yaml +++ b/roles/role/deploy.yaml @@ -1,6 +1,11 @@ --- - name: Deploy roles - hosts: production + hosts: all become: true + become_user: root + become_method: ansible.builtin.sudo + gather_facts: true roles: - role + vars_files: + - ../vars/secrets.yml \ No newline at end of file diff --git a/roles/role/tasks/debian/main.yaml b/roles/role/tasks/debian/main.yaml new file mode 100644 index 0000000..2b67c3c --- /dev/null +++ b/roles/role/tasks/debian/main.yaml @@ -0,0 +1,4 @@ +--- +- name: Пример таски + debug: + msg: "Привет! Я запустился на Debian/Ubuntu! Переменная role_test равна {{ role_test }}" diff --git a/roles/role/tasks/main.yaml b/roles/role/tasks/main.yaml index f6da4a6..2b9ddee 100644 --- a/roles/role/tasks/main.yaml +++ b/roles/role/tasks/main.yaml @@ -1,4 +1,12 @@ --- -- name: Example task - debug: - msg: "Hello, Ansible!" \ No newline at end of file +- name: "Определяем ОС" + set_fact: + os_family: "{{ ansible_facts['os_family'] }}" + +- name: "Подключаем таски для RedHat совместимых" + include_tasks: "redhat/main.yaml" + when: os_family == "RedHat" + +- name: "Подключаем таски для Debian/Ubuntu совместимых" + include_tasks: "debian/main.yaml" + when: os_family == "Debian" diff --git a/roles/role/tasks/redhat/main.yaml b/roles/role/tasks/redhat/main.yaml new file mode 100644 index 0000000..64e5c36 --- /dev/null +++ b/roles/role/tasks/redhat/main.yaml @@ -0,0 +1,4 @@ +--- +- name: Пример таски + debug: + msg: "Привет! Я запустился на RedHat/CentOS/Fedora!" diff --git a/roles/role/vars/secrets.yml b/roles/role/vars/secrets.yml deleted file mode 100644 index 046de5c..0000000 --- a/roles/role/vars/secrets.yml +++ /dev/null @@ -1,6 +0,0 @@ -$ANSIBLE_VAULT;1.1;AES256 -30363439326335316131303133653930363431336539356134363933656566663330366165616366 -6639353565306634613164636161353362643237353933610a323838666436363835303765323930 -62333364613535656138623233666635303934376234633937666131366239323436333334646666 -6364303839396532310a633636333665346538313931366666333665363163623966666236346666 -6464 diff --git a/roles/role/vars/.gitkeep b/roles/vars/.gitkeep similarity index 100% rename from roles/role/vars/.gitkeep rename to roles/vars/.gitkeep diff --git a/roles/vars/secrets.yml b/roles/vars/secrets.yml new file mode 100644 index 0000000..b2f57d5 --- /dev/null +++ b/roles/vars/secrets.yml @@ -0,0 +1,6 @@ +$ANSIBLE_VAULT;1.1;AES256 +33333461346434666539316330333661306537303234306132383733633635656139623330346339 +3735343834396131623436333737363436346137613337340a393633636663346131353135313332 +35656537663832366464316538346565313236306538343537343032373161653366353665366565 +3461316135353337640a613137383034663265306666353338326135613961646364373966353863 +37313731623164303566383431613131353331363035653630313630353130623066