--- # ───────────────────────────────────────────────────────────────────────────── # Bootstrap — первоначальная настройка нод # # Запускать ОДИН РАЗ перед make install. # Подключается с начальными логином/паролем из vault (host_vars//vault.yml). # Создаёт пользователя k3s_admin_user, раскладывает SSH ключ. # После этого все playbook работают по ключу без пароля. # # Использование: # make bootstrap # make bootstrap NODE=master01 — только одна нода # # Требования vault (в host_vars//vault.yml для каждой ноды): # bootstrap_user: ubuntu # начальный пользователь # bootstrap_password: "секрет" # пароль SSH # bootstrap_sudo_password: "секрет" # пароль sudo (часто тот же) # ───────────────────────────────────────────────────────────────────────────── - name: Bootstrap cluster nodes hosts: "{{ node_to_bootstrap | default('k3s_cluster') }}" gather_facts: false serial: 1 vars: # Подключаемся с первоначальными credentials из vault каждой ноды 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 are defined ansible.builtin.assert: that: - bootstrap_user is defined - bootstrap_user | length > 0 - bootstrap_password is defined - 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: Test initial SSH connection ansible.builtin.ping: register: ping_result roles: - role: bootstrap