February 7, 2023

Ansible create topics/ add permission

Чтобы начать использовать Ansible для управления серверной инфраструктурой, необходимо предварительно установить программное обеспечение Ansible на компьютер, который будет выступать в качестве узла управления Ansible. Мы будем использовать репозитории Ubuntu по умолчанию.Сначала обновите индекс пакетов системы с помощью следующей команды:

sudo apt update

После этого обновления вы можете установить программное обеспечение Ansible следующим образом:

sudo apt install ansible

Нажмите Y при запросе для подтверждения установки.

Теперь на узле управления Ansible есть все программное обеспечение, необходимое для администрирования хостов. Теперь мы рассмотрим настройку файла инвентаризации, чтобы Ansible мог взаимодействовать с вашими управляемыми узлами

Файл инвентаризации содержит информацию о хостах, которыми вы будете управлять с помощью Ansible. Вы можете включить в файл инвентаризации от одного до нескольких сотен серверов и распределить хосты по группам и подгруппам. Файл инвентаризации также часто задает переменные, действующие только для определенных хостов или групп, чтобы их можно было использовать с плейбуками и шаблонами. Некоторые переменные также влияют на способ запуска плейбука, и в их число входит переменная ansible_python_interpreter, которую мы сейчас увидим.Чтобы изменить заданное по умолчанию содержание файла инвентаризации Ansible, откройте файл /etc/ansible/hosts в предпочитаемом редакторе на узле управления Ansible

Выберите любой удобный для Вас редактор:

sudo nano /etc/ansible/hosts
sudo vim /etc/ansible/hosts

Измените файл инвентаризации:
[os5331]
os5331 ansible_host=os-5331 ansible_phyton_interpreter=/usr/bin/phyton3 ansible_user=ppetlin ansible_ssh_private_key_file=/home/ppetlin/openssh ansible_become_user=kafka
 
[os5155]
os5155 ansible_host=os-5155 ansible_phyton_interpreter=/usr/bin/phyton3 ansible_user=ppetlin ansible_ssh_private_key_file=/home/ppetlin/openssh ansible_become_user=kafka
 
[os5332]
os5332 ansible_host=os-5332 ansible_phyton_interpreter=/usr/bin/phyton3 ansible_user=ppetlin ansible_ssh_private_key_file=/home/ppetlin/openssh ansible_become_user=kafka
 
[os5333]
os5333 ansible_host=os-5333 ansible_phyton_interpreter=/usr/bin/phyton3 ansible_user=ppetlin ansible_ssh_private_key_file=/home/ppetlin/openssh ansible_become_user=kafka
 
[os5334]
os5334 ansible_host=os-5334 ansible_phyton_interpreter=/usr/bin/phyton3 ansible_user=ppetlin ansible_ssh_private_key_file=/home/ppetlin/openssh ansible_become_user=kafka
 
[os5328]
os5328 ansible_host=os-5328 ansible_phyton_interpreter=/usr/bin/phyton3 ansible_user=ppetlin ansible_ssh_private_key_file=/home/ppetlin/openssh ansible_become_user=kafka
 
[os5329]
os5329 ansible_host=os-5329 ansible_phyton_interpreter=/usr/bin/phyton3 ansible_user=ppetlin ansible_ssh_private_key_file=/home/ppetlin/openssh ansible_become_user=kafka
 
[os5330]
os5330 ansible_host=os-5330 ansible_phyton_interpreter=/usr/bin/phyton3 ansible_user=ppetlin ansible_ssh_private_key_file=/home/ppetlin/openssh ansible_become_user=kafka

os5331 - доменное имя машины по которому мы будем обращаться к ней
ansible_host=os-5331 - коннект по доменному имени, от Вашей машины
ansible_phyton_interpreter=/usr/bin/phyton3 - интерпретатор phyton, который будет включен на всех указанных хостах
ansible_ssh_private_key_file=/home/ppetlin/openssh - путь к open-ssh-key
ansible_become_user=kafka - user под которым будет заходить на хост

Если вы захотите проверить файл инвентаризации, вы можете запустить команду:

ansible-inventory --list -y

Playbook в Ansible определяет серию некоторых действий для выполнения и адресованы определенным наборам серверов. В отличие от некоторых других инструментов для выполнения настроек, Playbook не описывает состояние машины, а Ansible самостоятельно определяет все изменения, которые необходимо внести. Тем не менее, плейбуки должны быть разработаны как идемпотенты, а это значит, что они могут запускаться более одного раза без негативных последствий.Часто плейбуки используют для выполнения начальной настройки серверов - добавления пользователей и каталогов, управлением пакетами программного обеспечения и файлами.Playbook - это YAML-файл.

Для нашего стека хостов, состоящих из тестовой среды и нагрузочной, необходимо два playbook'a.

Чтобы создать playbook, вы должны находится в директории /etc/ansible/. Playbook создается путем выполнения следующей команды:

Можете использовать любой удобный для Вас редактор

vim playbook.yml

nano playbook.yml

Один назовем просто playbook.yml , а второй playbookload.yml

Разница будет в переменных и в хостах ( точках подключения ).Для нашей конкретной работы используются два Playbook'a :

Playbook для тестовой среды
---
- hosts: os5331
  gather_facts: yes
  become: yes
  tasks:
    - name: whoami
      shell: whoami; pwd
 
    - name: create topics
      ignore_errors: yes
      shell: >
        cd /opt/hcfb/kafka/kafka;     
        ./bin/kafka-topics.sh \
        --create  --topic {{ topicname }}-{{ item }} \
        --partitions 3 \
        --replication-factor 3 \
        --config retention.ms={{ retention }} \
        --config min.insync.replicas=2 \
        --bootstrap-server os-5331:9095 \
        --command-config ./config/consumer.properties
      with_items:
        - "{{ postfixtest }}"
      tags:
        - write
        - read
 
    - name: write topics
      shell: >
        cd /opt/hcfb/kafka/kafka;
        bin/kafka-acls.sh \
        --bootstrap-server os-5331:9095 \
        --add \
        --allow-principal 'User:{{ user }}' \
        --producer \
        --topic {{ topicname }}-{{ item }} \
        --command-config config/consumer.properties
      with_items:
        - "{{ postfixtest }}"
      tags:
        - write
        - writeonly       
 
    - name: permission READ
      shell: >
        cd /opt/hcfb/kafka/kafka;
        bin/kafka-acls.sh \
        --bootstrap-server os-5331:9095 \
        --add \
        --allow-principal 'User:{{ user }}' \
        --operation Read \
        --operation Describe \
        --group '{{ item }}' \
        --topic '{{ topicname }}-{{ item }}' \
        --command-config config/consumer.properties
      with_items:
        - "{{ group }}"
        - "{{ postfixtest }}"
      tags:
        - read
        - readonly       
Playbook для нагрузочной среды
---
- hosts: os5155
  gather_facts: yes
  become: yes
  tasks:
    - name: whoami
      shell: whoami; pwd
 
    - name: create topics
      ignore_errors: yes
      shell: >
        cd /opt/hcfb/kafka/kafka;     
        ./bin/kafka-topics.sh \
        --create  --topic {{ topicname }}-{{ item }} \
        --partitions 3 \
        --replication-factor 3 \
        --config retention.ms={{ retention }} \
        --config min.insync.replicas=2 \
        --bootstrap-server os-5155:9095 \
        --command-config ./config/consumer.properties
      with_items:
        - "{{ postfixload }}"
      tags:
        - write
        - read
 
    - name: write topics
      shell: >
        cd /opt/hcfb/kafka/kafka;
        bin/kafka-acls.sh \
        --bootstrap-server os-5155:9095 \
        --add \
        --allow-principal 'User:{{ user }}' \
        --producer \
        --topic {{ topicname }}-{{ item }} \
        --command-config config/consumer.properties
      with_items:
        - "{{ postfixload }}"
      tags:
        - write
        - writeonly       
 
    - name: permission READ
      shell: >
        cd /opt/hcfb/kafka/kafka;
        bin/kafka-acls.sh \
        --bootstrap-server os-5155:9095 \
        --add \
        --allow-principal 'User:{{ user }}' \
        --operation Read \
        --operation Describe \
        --group '{{ item }}' \
        --topic '{{ topicname }}-{{ item }}' \
        --command-config config/consumer.properties
      with_items:
        - "{{ group }}"
        - "{{ postfixload }}"
      tags:
        - read
        - readonly

Находясь в директории /etc/ansible, необходимо создать файл параметров.

Выполните следующую команду, используйте любой удобный для Вас редактор:

vim params
nano params

В этом файле можно описывать любые переменные, и даже делать массив из этих переменных, который указывается с Playbook.

Наш файл с переменными выглядит вот так:

topicname: intellinx-queuing-updateStopList
postfixtest:
  - ft
  - dev
  - rtm
  - ftm
  - fp
  - fsc
  - rt
  - rp
  - fsc
postfixload:
  - load1
  - load2
group:
  - myСredit_consumer1_group
  - myСredit_consumer2_group
  - myСredit_consumer3_group
  - myСredit_consumer4_group
user: my_credit
retention: 172800000
 
 
new_version: 2.13-3.2.1
old_version: 2.13-3.0.0
xmx_old: 1
xms_old: 1
xmx_new: 3
xms_new: 3
path: /opt/hcfb/kafka

topicname - имя топика
postfixtest - массив из постфиксов, которые будут использоваться на test
postfixload - массив из постфиксов, которые будут использоваться на load
group - consumer-group для чтения топика
user - учетная запись системы system-auth
retention - время хранения сообщения

Чтобы запустить плейбук на конкретные задачи описанные в нем, необходимо ввести данную команду:

Плейбук для тестовой среды:

ansible-playbook -i hosts playbook.yml --extra-vars "@./params" --tags "read" -vv

Плейбук для нагрузочной среды:

ansible-playbook -i hosts playbookload.yml --extra-vars "@./params" --tags "read" -vv

-i hosts - указываем на файл инвентаризации
playbook.yml - указываем на сам файл playbook'a
--extra-vars "@./params" - используем команду на использование переменных из файла params

В playbook'е используются теги, они служат для того, чтобы разделять задачи. В данной команде мы используем тег: read, который мы указали в playbook.