Files
K3S/playbooks/bootstrap.yml
Sergey Antropoff e99f1d5dfb refactor: bootstrap использует cluster_service_users вместо отдельного ansible-пользователя
Проблема: bootstrap создавал отдельного пользователя ansible (k3s_admin_user),
хотя у нас уже есть cluster_service_users с k8s и devops.

Решение:
- k3s_admin_user: devops (один из cluster_service_users, не отдельный пользователь)
- bootstrap phase 1: создаёт ВСЕХ пользователей из cluster_service_users через k8s-user role
- bootstrap phase 2: деплоит SSH ключ Ansible runner только в authorized_keys k3s_admin_user
- roles/bootstrap/tasks/main.yml: удалено создание пользователя/группы/sudoers (теперь в k8s-user)
- roles/bootstrap/defaults/main.yml: удалены k3s_admin_shell/comment/groups (не нужны)
- добавлена проверка: k3s_admin_user должен быть в cluster_service_users (assert)

group_vars/all/main.yml:
- ansible_user: "{{ k3s_admin_user }}" — все playbooks подключаются как k3s_admin_user
- ansible_ssh_private_key_file: "~/.ssh/id_rsa"
- k3s_admin_ssh_additional_keys: [] — для нескольких инженеров через vault

inventory/hosts.ini:
- убраны ansible_user=ubuntu с каждого хоста (теперь в group_vars)
- убран ansible_ssh_private_key_file из group vars (теперь в group_vars/all/main.yml)
2026-04-24 07:18:57 +03:00

91 lines
4.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
# ─────────────────────────────────────────────────────────────────────────────
# Bootstrap — первичная настройка нод
#
# Запускать ОДИН РАЗ перед make install.
# Подключается с начальными логин/пароль из vault (host_vars/<node>/vault.yml).
#
# Выполняет:
# 1. Создаёт всех пользователей из cluster_service_users (sudo, SSH dir)
# 2. Раскладывает SSH ключ Ansible runner в k3s_admin_user
# После этого все playbook работают по ключу без пароля.
#
# k3s_admin_user — должен быть одним из cluster_service_users (см. group_vars).
# По умолчанию: devops
#
# Требования (host_vars/<node>/vault.yml для каждой ноды):
# bootstrap_user: ubuntu
# bootstrap_password: "пароль"
# ─────────────────────────────────────────────────────────────────────────────
# ── Фаза 1: Создать всех пользователей из cluster_service_users ──────────────
- name: "Bootstrap phase 1: create service users"
hosts: "{{ node_to_bootstrap | default('k3s_cluster') }}"
gather_facts: true
serial: 1
vars:
ansible_user: "{{ bootstrap_user }}"
ansible_password: "{{ bootstrap_password }}"
ansible_become_password: "{{ bootstrap_sudo_password | default(bootstrap_password) }}"
ansible_ssh_common_args: >-
-o StrictHostKeyChecking=no
-o UserKnownHostsFile=/dev/null
-o PasswordAuthentication=yes
-o PubkeyAuthentication=no
pre_tasks:
- name: Validate bootstrap credentials
ansible.builtin.assert:
that:
- bootstrap_user is defined and bootstrap_user | length > 0
- bootstrap_password is defined and bootstrap_password | length > 0
fail_msg: >
Для {{ inventory_hostname }} не заданы bootstrap credentials.
Создай host_vars/{{ inventory_hostname }}/vault.yml:
bootstrap_user: ubuntu
bootstrap_password: "пароль"
Зашифруй: ansible-vault encrypt host_vars/{{ inventory_hostname }}/vault.yml
- name: Validate k3s_admin_user is in cluster_service_users
ansible.builtin.assert:
that:
- cluster_service_users | selectattr('name', 'equalto', k3s_admin_user) | list | length > 0
fail_msg: >
k3s_admin_user="{{ k3s_admin_user }}" не найден в cluster_service_users.
Добавь пользователя в список или измени k3s_admin_user в group_vars.
- name: Test initial SSH connection
ansible.builtin.ping:
tasks:
- name: Create user {{ item.name }}
ansible.builtin.include_role:
name: k8s-user
tasks_from: create_user.yml
vars:
k8s_service_user: "{{ item.name }}"
k8s_service_user_comment: "{{ item.comment | default(item.name) }}"
k8s_service_user_shell: "{{ item.shell | default('/bin/bash') }}"
k8s_service_user_sudo: "{{ item.sudo | default(true) }}"
k8s_service_user_ssh_dir: "{{ item.ssh_dir | default('.ssh') }}"
loop: "{{ cluster_service_users }}"
loop_control:
label: "{{ item.name }}"
# ── Фаза 2: Задеплоить SSH ключ Ansible runner в k3s_admin_user ──────────────
- name: "Bootstrap phase 2: deploy Ansible runner SSH key"
hosts: "{{ node_to_bootstrap | default('k3s_cluster') }}"
gather_facts: false
serial: 1
vars:
ansible_user: "{{ bootstrap_user }}"
ansible_password: "{{ bootstrap_password }}"
ansible_become_password: "{{ bootstrap_sudo_password | default(bootstrap_password) }}"
ansible_ssh_common_args: >-
-o StrictHostKeyChecking=no
-o UserKnownHostsFile=/dev/null
-o PasswordAuthentication=yes
-o PubkeyAuthentication=no
roles:
- role: bootstrap