По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Ansible один из двух (наряду с SaltStack) наиболее популярных программных комплексов третьей волны, которые позволяют удалённо управлять конфигурациями. Тем не менее, в сегменте сетевого оборудования лидирует наш сегодняшний герой (если о ПО можно так сказать). В первую очередь это вызвано тем, что Ansible не поставит перед пользователем задачи устанавливать агент на хостинги, требующие от него управления. Тем паче ежели Ваш аппарат взаимодействует с ними через CLI, то Ansible это то, что доктор прописал.
Одним выстрелом три "электронных зайца"
Вообще, прежде чем знакомить уважаемых читателей со сценарием работы в данном программном комплексе, позвольте перечислить несколько его достоинств:
Ansible позволяет параллельно подключать по SSH к устройствам (пользователь может сам определить их число).
Ansible может передавать задачи на подключённые машины.
Ansible способен разбивать машины, входящих в систему, на подгруппы и передавать специальных задачи для каждой подгруппы.
Конечно, указаны не все достоинства Ansible. Просто в данных 3 пунктах, как мне кажется, отражена основная суть работы в данной среде. Выполняя эти три задачи, система автоматически освобождает Вас от головной боли по делегированию задач и функций в компании. Время деньги, как говорится.
Сценарии
Ну и переходим к основному блюду нашего материала - сценариям (playbook). Они состоят из двух частей набора команд для выполнения (play) и конкретных команд (task). Они выполняются друг за другом.
Все записи данных осуществляются с помощью YAMLа. К несомненным плюсам его использования следует отнести то, что он гораздо лучше воспринимается людьми, нежели тот же самый JSON. Ежели Вы больше привыкли Вы к Python, то тут у Вас не возникнет проблем с адаптацией, так как синтаксис у них схожий.
А вот так происходит процесс написания сценария (комментарии даны построчно к выводу):
Имя сценария обязательный элемент для любого сценария;
Сценарий применяется к машинам в подгруппе cisco-routers;
Выключение режима сбора событий в конкретной машине (если не выключить данный режим, то система потратит много времени на решение ненужных задач);
В разделе task указывается список команд для каждого конкретного случая;
После чего происходит выполнение команды:
PLAY [Run show commands on routers] ***************************************************
TASK [run sh ip int br] ***************************************************************
changed: [192.168.100.1]
changed: [192.168.100.3]
changed: [192.168.100.2]
TASK [run sh ip route] ****************************************************************
changed: [192.168.100.1]
changed: [192.168.100.3]
changed: [192.168.100.2]
PLAY [Run show commands on switches] **************************************************
TASK [run sh int status] **************************************************************
changed: [192.168.100.100]
TASK [run sh vlans] *******************************************************************
changed: [192.168.100.100]
PLAY RECAP ****************************************************************************
192.168.100.1 : ok=2 changed=2 unreachable=0 failed=0
192.168.100.100 : ok=2 changed=2 unreachable=0 failed=0
192.168.100.2 : ok=2 changed=2 unreachable=0 failed=0
192.168.100.3 : ok=2 changed=2 unreachable=0 failed=0
И запускаем проверку выполнения команд:
SSH password:
PLAY [Run show commands on routers] ***************************************************
TASK [run s hip int br] ***************************************************************
Changed: [192.168.100.1] => {“changed”: true, “rc”: 0, “stderr”: “Shared connection
To 192.168.100.1 closed.
”, “stdout”: “
Interface IP-Address
OK? Method Status Protocol
Ethernet0/0 192.
168.100.1 YES NVRAM up up
Ethernet0/1
192.168.200.1 YES NVRAM up up
Loopback0
10.1.1.1 YES manual up up
”, “stdout_lines
“: [“”, “Interface IP-Address OK? Method Status
Protocol”, “Ethernet0/0 192.168.100.1 YES NVRAM up
up “, “Ethernet0/1 192.168.200.1 YES NVRAM up
up “, “Loopaback0 10.1.1.1 YES manual up
up “]}
А что внутри?
А теперь поговорим о начинке сценария. Основу составляют переменные. Это могут быть данные о машине, выводы команд, а также их можно вводить вручную.
Главное не забывать правила написания имён. Их всего два:
имена всегда должны состоять из букв, цифр и нижнего подчёркивания;
имена всегда должны начинаться с буквы.
Переменные могут быть определены разными способами:
Инвентарным файлом
[cisco-routers]
192.168.100.1
192.168.100.2
192.168.100.3
[cisco-switches]
192.168.100.100
[cisco-routers:vars]
ntp_server=192.168.255.100
log_server=10.255.100.1
PLAYBOOKом
-name: Run show commands on router:
hosts: cisco-routers
gather_facts: false
vars:
ntp_server: 192.168.255.100
log_server: 10.255.100.1
tasks:
-name: run sh ip int br
raw: s hip int br | ex unass
-name: run s hip route
raw: sh ip route
Специальными файлами, созданными для групп:
[cisco-routers]
192.168.100.1
192.168.100.2
192.168.100.3
[cisco-switches]
192.168.100.100
Или группами каталогов
|– group_vars _
| |– all.yml |
| |–cisco-routers.yml | Каталог с переменными для групп устройств
| |–cisco-switches.yml _|
|
|–host vars _
| |–192.168.100.1 |
| |–192.168.100.2 |
| |–192.168.100.3 | Каталог с переменными для устройств
| |–192.168.100.100 _|
|
|–myhosts | Инвертарный файл
Команда register позволяет сохранять результаты выполнений модулей в переменные. После чего переменная может быть использована в шаблонах, принятиях решений о выполнении заданного сценария.
---
- name: Run show commands on routers
hosts: cisco-routers
gather_facts: false
tasks:
-name: run s hip int br
raw: s hip int br | ex unass
register: sh_ip_int_br_result
---
debug отображает информацию в стандартном потоке вывода в виде произвольной строки, переменной или фактах о машине.
---
- name: Run show commands on routers
hosts: cisco-routers
gather_facts: false
tasks:
-name: run s hip int br
raw: sh ip int br | ex unass
register: sh_ip_int_br_result
-name: Debug registered var
debug: var=sh_ip_int_br_result.stdout_lines
После чего результатом работы станет следующее:
SSH password:
PLAY [Run show commands on routers] ***************************************************
TASK [run sh ip int br] ***************************************************************
changed: [192.168.100.1]
changed: [192.168.100.2]
changed: [192.168.100.3]
TASK [Debug registered var] ***********************************************************
ok: [192.168.100.1] => {
“sh_ip_int_br_result.stdout_lines”: [
“”,
“Interface IP-Address OK? Method Status Protocol”,
“Ethernet0/0 192.168.100.1 YES NVRAM up up “,
“Ethernet0/1 192.168.200.1 YES NVRAM up up “,
“Loopback0 10.1.1.1 YES manual up up “
]
}
ok: [192.168.100.2] => {
“sh_ip_int_br_result.stdout_lines”: [
“”,
“Interface IP-Address OK? Method Status Protocol”,
“Ethernet0/0 192.168.100.1 YES NVRAM up up “,
“Ethernet0/2 192.168.200.1 YES NVRAM administratively down down “,
“Loopback0 10.1.1.1 YES manual up up “
]
}
ok: [192.168.100.3] => {
“sh_ip_int_br_result.stdout_lines”: [
“”,
“Interface IP-Address OK? Method Status Protocol”,
“Ethernet0/0 192.168.100.3 YES NVRAM up up “,
“Ethernet0/2 192.168.200.1 YES NVRAM administratively down down “,
“Loopback0 10.1.1.1 YES manual up up “,
“Loopback10 10.255.3.3 YES manual up up “
]
}
PLAY RECAP ****************************************************************************
192.168.100.1 : ok=2 changed=1 unreachable=0 failed=0
192.168.100.2 : ok=2 changed=1 unreachable=0 failed=0
192.168.100.3 : ok=2 changed=1 unreachable=0 failed=0
Вместо заключения
Можно ещё долго приводить примеры работы в системе, но ещё один факт так сказать "вишенка на торте". К плюсам Ansible следует отнести и то, что заданную команду система может выполнять практически до бесконечности. Пока не наступит требуемый результат трансформации не прекратятся. Пользователю можно не беспокоиться - программа сама всё сделает за Вас, а Вы можете заниматься другими делами.
Дистрибутив FreePBX Distro имеет встроенный скрипт, который позволяет изменить текущую (используемую) версию Asterisk. Важно, что сделать это можно буквально за минуту, и без проблем вернуться на ранее используемую версию.
При смене версии используется только одна команда, после ввода которой, мы остается следовать подсказкам меню. Команда следующая:
[root@localhost ~]# asterisk-version-switch
На следующем этапе, скрипт спросит на какую версию вы хотите переключиться:
Pick the Asterisk Version you would like to change to.
Press 1 and the Enter key for Asterisk 11
Press 2 and the Enter key for Asterisk 13
Press 3 and the Enter key for Asterisk 14 (Currently in beta)
Press 9 and the Enter key to exit and not change your Asterisk Version
Нажимаем 1 для переключения на 11 версию Asterisk
Нажимаем 2 для переключения на 13 версию Asterisk
Нажимаем 3 для переключения на 14 версию Asterisk (сейчас в Beta состоянии)
Нажимаем 9 выхода из скрипта без изменений версии
Далее начнется изменение конфигурации в соответствие с выбранной версией. По окончанию работы вы можете проверить текущую версию с помощью команды:
[root@localhost ~]# asterisk -x "core show version"
Asterisk 13.10.0 built by mockbuild @ jenkins2.schmoozecom.net on a i686 running Linux on 2016-07-27 01:24:12 UTC
Если версия осталась прежней, дайте в консоль команду:
[root@localhost ~]# fwconsole restart
По окончанию перезагружаем конфигурацию и Asterisk:
[root@localhost ~]# fwconsole reload
На самом деле поиск DNS это не то, что требует частого внимания. Но иногда приходится заботиться об этом. Например, если у вашего провайдера слабые сервера или же в вашей сети часто происходят DNS обращения, то нужно настроить локальный кэширующий DNS сервер.
Как кэширующий DNS-сервер может пригодиться?
Кэширующий DNS-сервер занимается обработкой DNS запросов, которые выполняет ваша система, затем сохраняет результаты в памяти или кэширует их. В следующий раз, когда система посылает DNS запрос для того же адреса, то локальный сервер почти мгновенно выдает результат.
Эта идея может показаться бесполезной. Подумаешь, какие-то там секунды. Но если DNS сервера провайдера тратят много времени на разрешение имени, то в результате падает скорость Интернет серфинга. Например, домашняя страница новостного канала MSNBC для корректной работы обращается более чем к 100 уникальным доменам. Даже если на запрос тратится одна десятая секунды, в итоге получается 10 секунд ожидания, что по нынешним меркам слишком много.
Локальный кэширующий DNS увеличивает скорость не только дома или в офисе, он также помогает работе серверов. Например, у вас есть почтовый сервер с анти-спам фильтром, который выполняет очень много DNS запросов. Локальный кэш намного увеличить скорость его работы.
И наконец, system-resolved поддерживает новейшие стандарты вроде DNSSEC и DNSoverTLS или DoT. Эти технологии увеличивают безопасность при работе в Интренет.
Какой локальный кэширующий сервер выбрать?
В этом руководстве будет использован сервер systemd-resolved. Эта утилита является частью набора управления системой systemd. Если в вашей системе используется systemd, а большинство дистрибутивов Linux используют это, то в системе уже установлен systemd-resolved, но не запущен. Большинство систем не используют эту утилиту.
systemd-resolved запускает небольшой локальный кэширующий DNS-сервер, который мы настроим на запуск при загрузке системы. Затем мы изменим конфигурацию всей системы так, чтобы DNS запросы шли на локальный сервер.
Как проверить используется ли systemd-resolved?
В некоторых дистрибутивах, например Ubuntu 19.04, по умолчанию используется systemd-resolved.
Если у вас уже запущен systemd-resolved, тогда не нужно что-то настраивать в системе. Но нужно проверить на корректность утилит управления сетевыми настройками, такие как NetworkManager, так как они могут игнорировать системные настройки сети.
Перед тем как перейти к следующему разделу проверьте запущен ли в вашей системе systemd-resolved:
$ resolvectl status
Если в ответ получите сообщение ниже, значит в системе не настроен systemd-resolved:
$ resolvectl status
Failed to get global data: Unit dbus-org.freedesktop.resolve1.service not found.
И наоборот, если на выходе видите что-то подобное, то systemd-resolved уже работает:
Global
LLMNR setting: yes
MulticastDNS setting: yes
DNSOverTLS setting: opportunistic
DNSSEC setting: allow-downgrade
DNSSEC supported: no
Current DNS Server: 1.1.1.1
DNS Servers: 1.1.1.1
1.0.0.1
Включение и настройка systemd-resolved
Отдельно устанавливать systemd-resolved не нужно, так как этот сервис является частью systemd. Всё что нужно сделать это запустить его и добавить в автозагрузку. Для включения данной службы введите команду ниже:
$ sudo systemctl start systemd-resolved.service
Далее нужно ввести следующую команду, чтобы добавить службу в автозапуск.
$ sudo systemctl enable systemd-resolved.service
И наконец нужно прописать DNS сервера, куда будет обращаться локальный сервер для разрешения имен. Есть много разных сервисов, но приведённые ниже самые быстрые, бесплатные и оба поддерживают DNSSEC и DoT:
Google Public DNS
8.8.8.8
8.8.4.4
Cloudflare Public DNS
1.1.1.1
1.0.0.1
Для этого откройте конфигурационный файл systemd-resolved любым текстовым редактором:
$ sudo nano /etc/systemd/resolved.conf
Отредактируйте строку, которая начинается на:
#DNS=
И пропишите одну из вышеуказанных пар. Мы используем Cloudflare Public DNS:
DNS=1.1.1.1 1.0.0.1
Сохраните изменения и перезапустите службу systemd-resolved:
$ sudo systemctl restart systemd-resolved.service
Итак, systemd-resolved уже запущен и готов для выполнения быстрых и безопасных DNS запросов, как только мы настроим систему соответствующим образом.
Настройка системы для использования systemd-resolved
Есть несколько путей настройки системы на использование локального DNS сервера. Мы рассмотрим два наиболее используемых метода. Первый – рекомендуемый метод, второй конфигурация в режиме совместимости. Разница в том, как будет обрабатываться файл /etc/resolv.conf.
В файле /etc/resolv.conf содержатся IP адреса серверов разрешения имен, которые используются программами. Программы при необходимости разрешения доменного имени обращаются к этому файлу в поисках адресов серверов разрешения имен.
Итак, первый метод конфигурации заключается в создании символьной ссылки на /run/systemd/resolve/stub-resolv.conf. В этом случае файл /etc/resolv.conf управляется службой systemd-resolved.
Это может вызвать проблемы в том случае, если другие программы пытаются управлять файлом /etc/resolv.conf. Режим совместимости оставляет /etc/resolv.conf не тронутым, позволяя программам управлять им. В этом режиме, в настройках программ, управляющих файлом /etc/resolv.conf в качестве системного сервера разрешения имен должен быть указан IP 127.0.0.53.
Конфигурация в рекомендуемом режиме
При этом режиме конфигурация проводится вручную. Сначала нужно удалить или переименоваться оригинальный файл /etc/resolv.conf. Лучше переименовать, чтобы при необходимости можно было использовать информацию в нем.
$ sudo mv /etc/resolv.conf /etc/resolv.conf.original
Затем создаем символьную ссылку:
$ sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
И наконец перезапускаем службу systemd-resolved:
$ sudo systemctl restart systemd-resolved.service
Настройка в режиме совместимости
В режиме совместимости, нужно убедиться, что локальный сервер разрешения имен system-resolved запущен и используется системными службами. Откройте файл /etc/resolv.conf любым редактором:
$ sudo nano /etc/resolv.conf
Удалите все строки, которые содержать ключевое слово nameserver и добавьте одну единственную строку:
nameserver 127.0.0.53
Этот файл мажет быть изменён любой программой. Чтобы предотвратить это нужно настроить программы так, чтобы в качестве DNS они использовали адрес 127.0.0.53.
Отладка systemd-resolved
Посмотреть, как система выполняет DNS запросы после внесённых изменений сложно. Самый эффективный метод – это включить режим отладки для службы systemd-resolved, а затем просмотреть файл логов.
systemd-resolved можно перевести в режим отладки созданием специального служебного файла, в котором содержатся настройки отладки. Делается это следующей командой:
$ sudo systemctl edit systemd-resolved.service
Вставьте в файл следующие строки:
[Service]
Environment=SYSTEMD_LOG_LEVEL=debug
После этого служба systemd-resolved автоматический перезапуститься. Откройте второй терминал и просмотрите логи в journald:
$ sudo journalctl -f -u systemd-resolved
Строка, которая содержит слова “Using DNS server” показывает, какой DNS сервер используется для разрешения имён. В нашем случае это DNS сервера Cloudflare
Using DNS server 1.1.1.1 for transaction 19995.
Слова “Cache miss” в начале строки означает, что для данного домена нет закэшированной информации:
Cache miss for example.com IN SOA
И наконец слова “Positive cache” в начале строки означает, что systemd-resolved уже запрашивал информацию об этом домене и теперь ответы возвращает из кэша:
Positive cache hit for example.com IN A
Не забудьте отключить режим отладки, так как в это время создается большой файл логов. Сделать это можно командой:
$ sudo systemctl edit systemd-resolved.service
а затем удалить добавленные выше две строки.
Использование защищенных DNS запросов
systemd-resolved один из немногих DNS серверов, которые поддерживает DNSSEC и DNSoverTLS. Эта два механизма позволяют убедиться, что полученная DNS информация подлинная (DNSSEC) и он не был изменён по пути (DoT).
Эти функции легко включаются редактированием основного конфигурационного файла system-resolved:
$ sudo nano /etc/systemd/resolved.conf
Измените файл следующим образом:
DNSSEC=allow-downgrade
DNSOverTLS=opportunistic
Сохраните изменения и перезапустите службу systemd-resolved.
$ sudo systemctl restart systemd-resolved.service
Пока прописанные DNS сервера поддерживают эти две функции все DNS запросы будут защищены. DNS сервера Google и CloudFlare поддерживают эти механизмы защиты.
Заключение
Теперь ваша система будет выполнять DNS запросы быстро и эффективно даже если провайдер не работает достаточно быстро. Кроме этого, ваша цифровая жизнь лучше защищена новейшими механизмами защиты DNS запросов.