Загрузка данных


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