--- # ───────────────────────────────────────────────────────────────────────────── # Bootstrap — первичная настройка нод # # Запускать ОДИН РАЗ перед make install. # Подключается с начальными логин/пароль из vault (host_vars//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//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