Добавил:
ИВТ (советую зайти в "Несортированное") Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лабы / 5 / 5 лаба алвс

.docx
Скачиваний:
15
Добавлен:
05.11.2024
Размер:
270.13 Кб
Скачать

  1. Настройте ansible на серверной машине. В качестве клиентов выберете обе машины – сервер и клиент.

sudo apt install ansible (серв+ клиент)

Скопируйте ключ на клиентские машины:

ssh-copy-id username@client_ip

sudo nano /etc/ansible/hosts

[local]

192.168.122.4 ansible_ssh_user=astra

[client]

192.168.122.5 ansible_ssh_user=baranovv-client

nano first_playbook.yml (на серваке и клиенте)

---

- hosts: all

become: true # Добавлено для повышения прав

tasks:

- name: Установить пакет curl

apt:

name: curl

sudo nano /etc/ssh/sshd_config

Port 22 AddressFamily any ListenAddress 0.0.0.0 ListenAddress :: PermitRootLogin yes PubkeyAuthentication yes PasswordAuthentication yes

(далее нужно будет поработать с правами доступа) лично у меня.

На клиенте

sudo visudo

baranovv-client ALL=(ALL) NOPASSWD: ALL

На серваке

ssh-copy-id astra@192.168.122.4

(раздал ключи ssh)

ansible-playbook first_playbook.yml --become

Вот такое должно быть

Если нет то сделайте на клиенте (и клиент должен заработать)

sudo rm -f /var/lib/dpkg/lock

sudo rm -f /var/cache/apt/archives/lock

sudo rm -f /var/lib/apt/lists/lock

sudo apt-get clean

sudo apt-get update

sudo apt-get install python-apt -y

ansible all -m ping

Клиент

Sudo nano /etc/ansible/hosts

[all]

192.168.122.4 ansible_user=astra

192.168.122.5 ansible_user=astra

(на сервере)

ssh-keyscan 192.168.122.4 >> ~/.ssh/known_hosts

ssh-keyscan 192.168.122.5 >> ~/.ssh/known_hosts

  1. state: presentПроверьте доступность всех устройств с помощью команды ping используя запуск скрипта ansible

nano inventory.ini

[servers]

192.168.122.4

[clients]

192.168.122.5

192.168.122.6

ansible all -i inventory.ini -m ping

  1. Используя ansible, запустите на машине клиента скрипт, выводящий объем свободной оперативной машины

    1. 1)Создайте playbook, выполняющий следующие задания: Создайте директории ServerВАШИИНИЦИАЛЫ на сервере и ClientВАШИИНИЦИАЛЫ на машине клиента соответственно. Данные директории создаются в домашней директории пользователя.

    2. nano create_directories.yml

---

- name: Create directories on server and client

hosts: all

become: yes # Для выполнения команд с правами суперпользователя (если нужно)

tasks:

- name: Create directory on the server

when: inventory_hostname == "192.168.122.4" # Условие для выполнения на сервере

file:

path: "/home/astra/Serverbaranovv"

state: directory

mode: '0755'

- name: Create directory on the client

when: inventory_hostname in ["192.168.122.5", "192.168.122.6"] # Условие для выполнения на клиентах

file:

path: "/home/astra/Clientbaranovv"

state: directory

mode: '0755'

ansible-playbook -i inventory.ini create_directories.yml

Вайбуем (работает)

    1. 2)Создайте файлы с названием info в домашней директории. Добавьте проверку на существование файла. В случае его наличия файл повторно не создается.

    2. nano create_info_file.yml

    1. ---

    2. - name: Create directories and info file in home directory

    3. hosts: all

    4. become: yes # Для выполнения команд с правами суперпользователя (если необходимо)

    5. tasks:

    6. - name: Create Server baranovv directory on server

    7. file:

    8. path: "/home/astra/Serverbaranovv"

    9. state: directory

    10. mode: '0755'

    11. - name: Create Client baranovv directory on client

    12. file:

    13. path: "/home/astra/Clientbaranovv"

    14. state: directory

    15. mode: '0755'

    16. - name: Check if the info file exists

    17. stat:

    18. path: "/home/astra/info"

    19. register: file_stat

    20. - name: Create the info file if it does not exist

    21. file:

    22. path: "/home/astra/info"

    23. state: touch # Это создаст файл, если его нет

    24. mode: '0644'

    25. when: file_stat.stat.exists == false

    1. ansible-playbook -i inventory.ini create_info_file.yml

    1. 4.

    2. 3)Заполните данные файлы информацией о системе, включающей в себя имя машины, вашу фамилию, ip адрес, объем занятой оперативной памяти (в Mb), среднюю нагрузку на последние 15 минут работы (см. файл /proc/loadavg). Формат записи: astra001 | Ivanov | 192.168.122.1 | 722 | 1.58

Обновил код

    1. nano create_info_file.yml

---

- name: Create and fill info file in home directory

hosts: all

become: yes # Для выполнения команд с правами суперпользователя (если необходимо)

tasks:

- name: Check if the info file exists

stat:

path: "/home/astra/info"

register: file_stat

- name: Create the info file if it does not exist

file:

path: "/home/astra/info"

state: touch # Это создаст файл, если его нет

mode: '0644'

when: file_stat.stat.exists == false

- name: Gather system information

command: hostname

register: hostname_info

- name: Get IP address

command: hostname -I

register: ip_info

- name: Get memory usage

command: free -m | awk 'NR==2{printf "%s", $3}'

register: memory_info

- name: Get load average

command: awk '{print $2}' /proc/loadavg

register: load_info

- name: Write system information to the info file

lineinfile:

path: "/home/astra/info"

line: "{{ hostname_info.stdout }} | Baranovv | {{ ip_info.stdout }} | {{ memory_info.stdout }} | {{ load_info.stdout }}"

state: present

ansible-playbook -i inventory.ini create_info_file.yml

Проверка cat /home/astra/info

    1. 4)Скопируйте данный файл в созданную в п. 1.1 директорию.

    2. изменил код ---

    3. - name: Create and fill info file in home directory

    4. hosts: all

    5. become: yes # Для выполнения команд с правами суперпользователя (если необходимо)

    6. tasks:

    7. - name: Check if the info file exists

    8. stat:

    9. path: "/home/astra/info"

    10. register: file_stat

    11. - name: Create the info file if it does not exist

    12. file:

    13. path: "/home/astra/info"

    14. state: touch # Это создаст файл, если его нет

    15. mode: '0644'

    16. when: file_stat.stat.exists == false

    17. - name: Gather system information

    18. command: hostname

    19. register: hostname_info

    20. - name: Get IP address

    21. command: hostname -I

    22. register: ip_info

    23. - name: Get memory usage

    24. command: free -m | awk 'NR==2{printf "%s", $3}'

    25. register: memory_info

    26. - name: Get load average

    27. command: awk '{print $2}' /proc/loadavg

    28. register: load_info

    29. - name: Write system information to the info file

    30. lineinfile:

    31. path: "/home/astra/info"

    32. line: "{{ hostname_info.stdout }} | Baranovv | {{ ip_info.stdout }} | {{ memory_info.stdout }} | {{ load_info.stdout }}"

    33. state: present

    34. - name: Create Server and Client directories

    35. file:

    36. path: "/home/astra/ServerBaranovv"

    37. state: directory

    38. mode: '0755'

    39. when: inventory_hostname == '192.168.122.4'

    40. - name: Create Client directory

    41. file:

    42. path: "/home/astra/ClientBaranovv"

    43. state: directory

    44. mode: '0755'

    45. when: inventory_hostname in ['192.168.122.5', '192.168.122.6']

    46. - name: Copy info file to Server directory

    47. copy:

    48. src: "/home/astra/info"

    49. dest: "/home/astra/ServerBaranovv/info"

    50. when: inventory_hostname == '192.168.122.4'

    51. - name:

ansible-playbook -i inventory.ini create_info_file.yml

cat /home/astra/ServerBaranovv/info

    1. 5)Измените в перемещенном файле значение вашей фамилии на ваше имя.

    2. В зависимости от значения нагрузки в файле выведите сообщение на экран. Если нагрузка больше 1: state NAME_MACHINE bad. Если меньше 1, то state NAME_MACHINE good.

Изменил код

---

- name: Create and fill info file in home directory

hosts: all

become: yes # Для выполнения команд с правами суперпользователя (если необходимо)

tasks:

- name: Check if the info file exists

stat:

path: "/home/astra/info"

register: file_stat

- name: Create the info file if it does not exist

file:

path: "/home/astra/info"

state: touch # Это создаст файл, если его нет

mode: '0644'

when: file_stat.stat.exists == false

- name: Gather system information

command: hostname

register: hostname_info

- name: Get IP address

command: hostname -I

register: ip_info

- name: Get memory usage

command: free -m | awk 'NR==2{printf "%s", $3}'

register: memory_info

- name: Get load average

command: awk '{print $2}' /proc/loadavg

register: load_info

- name: Write system information to the info file

lineinfile:

path: "/home/astra/info"

line: "{{ hostname_info.stdout }} | Baranovv | {{ ip_info.stdout }} | {{ memory_info.stdout }} | {{ load_info.stdout }}"

state: present

- name: Create Server and Client directories

file:

path: "/home/astra/ServerBaranovv"

state: directory

mode: '0755'

when: inventory_hostname == '192.168.122.4'

- name: Create Client directory

file:

path: "/home/astra/ClientBaranovv"

state: directory

mode: '0755'

when: inventory_hostname in ['192.168.122.5', '192.168.122.6']

- name: Copy info file to Server directory

copy:

src: "/home/astra/info"

dest: "/home/astra/ServerBaranovv/info"

when: inventory_hostname == '192.168.122.4'

- name: Copy info file to Client directory

copy:

src: "/home/astra/info"

dest: "/home/astra/ClientBaranovv/info"

when: inventory_hostname in ['192.168.122.5', '192.168.122.6']

- name: Replace surname with first name in the info file

replace:

path: "/home/astra/ClientBaranovv/info"

regexp: 'Baranovv'

replace: 'Ivan'

when: inventory_hostname in ['192.168.122.5', '192.168.122.6']

- name: Check load average and output state

debug:

msg: "state {{ hostname_info.stdout }} {{ 'bad' if load_info.stdout | float > 1 else 'good' }}"

ansible-playbook -i inventory.ini create_info_file.yml

  1. Команда для проигрывания сценариев: Команда для запуска Playbook в Ansible — это ansible-playbook. Например:

bash

ansible-playbook -i inventory.ini playbook.yml

  1. Ключ в play для указания хостов: Ключ, в котором указываются хосты для выполнения заданий (task) в Playbook, называется hosts. Например:

yaml

- name: My Play

hosts: all

  1. Как выполнять задания с привилегиями администратора: Чтобы задания в сценарии выполнялись с привилегиями администратора, необходимо использовать ключ become: yes в Playbook. Это позволит использовать sudo для выполнения команд с повышенными правами. Например:

yaml

- name: My Play

hosts: all

become: yes # Включение повышения привилегий

Эти пункты являются основами работы с Ansible и позволяют эффективно управлять хостами в вашей инфраструктуре.

Соседние файлы в папке 5