ADM-PC:
Все последующие действия выполняются из-под доменного пользователя admin01
Перейдём в директорию ~/infra/ansible:
cd ~/infra/ansible
Активируем виртуальное окружение:
source venv/ansible/bin/activate
Создаём каталог inventories/staging/:
mkdir inventories/staging/
Создадим файл инвенторя по пути: inventories/staging/hosts
и перечислим требуемые хосты в формате YAML
all:
hosts:
k8s-srv1:
k8s-srv2:
k8s-srv3:
k8s-srv4:
k8s-srv5:
Создадим директорию для хранения переменных для группы хостов:
mkdir inventories/staging/group_vars
Создадим файл с переменными необходимыми для подключения ansible по пути: inventories/staging/group_vars/all.yaml
укажем в данном файле какой использовать интерпретатор python для подключения
укажем в данном файле из-под какого пользователя выполнять подключения
укажем в данном файле какой SSH ключ (закрытый) использовать для подключения
---
ansible_python_interpreter: /usr/bin/python3
ansible_ssh_user: altlinux
ansible_ssh_private_key_file: ~/.ssh/id_rsa
Проверить возможность ansible подключиться к описанным в инвентарном файле хостам можно следующим образом:
ansible -i inventories/staging/hosts -m ping all
должен получится следующий результат:
Создаём файл playbook1_base_package.yml и описываем весь требуемый функционал:
cat <<EOF > playbook1_base_package.yml
---
- name: playbook1_base_package - to install the necessary packages
hosts: all
become: true
tasks:
- name: Install packages
community.general.apt_rpm:
name: "{{ item }}"
state: present
update_cache: true
with_items:
- bash-completion
- vim-console
- chrony
- wget
- curl
- tzdata
- apt-repo
EOF
Запускаем playbook1_base_package.yml:
ansible-playbook -i inventories/staging/hosts playbook1_base_package.yml
должно получится следующее:
Создаём файл playbook2_enter_in_domain.yml и описываем весь требуемый функционал:
cat <<EOF > playbook2_enter_in_domain.yml
---
- name: playbook2_enter_in_domain.yml - for automatic domain joining
hosts: all
become: true
tasks:
- name: Setting the Europe/Moscow time zone
community.general.timezone:
name: Europe/Moscow
- name: Setting the host name in the FQDN format
ansible.builtin.hostname:
name: "{{ ansible_facts['fqdn'] }}"
- name: Install packages for FreeIPA
community.general.apt_rpm:
name: "{{ item }}"
state: present
update_cache: true
with_items:
- freeipa-client
- zip
- name: Join domain
ansible.builtin.command:
cmd: "ipa-client-install -U -p admin -w {{ freeipa_admin_password }}"
creates: /etc/ipa/default.conf
register: joindomain
- name: Reeboting VMs
ansible.builtin.reboot:
reboot_timeout: 3600
when:
- joindomain.changed
EOF
Запускаем playbook2_enter_in_domain.yml:
ansible-playbook -i inventories/staging/hosts -e freeipa_admin_password=P@ssw0rd playbook2_enter_in_domain.yml
должно получится следующее:
при падении playbook на 1-й задаче, просто запустить повторно
Проверить успешность ввода серверов в домен можно следующим образом:
При повторном запуске playbook1_base_package.yml:
статус всех задач должен быть OK
При повторном запуске playbook2_enter_in_domain.yml:
статус всех задач должен быть OK