По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
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 следует отнести и то, что заданную команду система может выполнять практически до бесконечности. Пока не наступит требуемый результат трансформации не прекратятся. Пользователю можно не беспокоиться - программа сама всё сделает за Вас, а Вы можете заниматься другими делами.
Полученную от маршрутизаторов «соседей» и других устройств в рамках сети роутер хранит в нескольких таблицах. Существует 3 типа таблиц:
Таблица соседей:
Хранит информацию от устройств подключенных напрямую. Вся собранная от соседей информация добавляется в таблицу соседей и включает наименования интерфейсов и соответствующих адресов. По умолчанию, “Hello” пакеты отправляются с интерфейсов каждые 5 секунд, чтобы быть уверенным, что сосед работает. Каждый EIGRP маршрутизатор хранит свой собственный экземпляр такой таблицы. Таким образом:
Каждый маршрутизатор имеет четкое представление о напрямую подключенных устройствах.
Каждый роутер располагает топологией сети в рамках своего ближайшего окружения.
Топологическая таблица:
Представляет собой набор из таблиц других EIGRP устройств полученных от соседей. Данная таблица представляет из себя список сетей назначения и соответствующих метрик. Выглядит данная таблица вот так:
При условии доступность устройств Successor и Feasible Successor они так же присутствуют в таблице для каждой из сетей. Каждый из пунктов маркируется буков A или P, что означает активное или пассивное состояние. Пассивное состояние говорит о том, что роутер знает маршрут к пункту назначения, в то время как активный означает, что топология изменилась и маршрутизатор обновляет данные для данного маршрута. Подчеркнем следующие позиции:
Для каждой из сетей назначения маршрутизатор хранит маршрут через Feasible Successor, т.е маршрут, который считается вторым по приоритету после маршрута через Successor.
Таблица маршрутизации:
Данная таблица представляет собой карту из всех известных маршрутов. Данная таблица строится на основании данных, полученных из топологической таблицы. Можно сказать, что указанные выше таблицы используются для количественной характеристики маршрутов, а таблица маршрутизации дает нам качественную характеристику. Что важно:
Только один маршрут через Successor попадает в таблицу маршрутизации и используется для отправки пакетов (в случае доступности).
Если маршрут через Successor оказывается недоступным, в таблицу маршрутизации из топологической таблицы копируется маршрут через Feasible Successor и используется в качестве альтернативного.
Что такое Successor?
Существует два главных типа устройств в сетях EIGRP. Оба устройства гарантируют отсутствие петель в сети:
Successor: Устройство, которое обеспечивает самую короткую дистанцию маршрута на пути пакета в сеть назначения. Другими словами, это устройство обеспечивает наилучший маршрут в сеть назначения.
Feasible Successor: Это устройство обеспечивает второй по приоритету маршрут в сеть назначения после маршрута Successor – устройства.
Типы пакетов EIGRP
EIGRP использует 5 типов пакетов:
Hello/ACKs пакеты: Это мультикаст пакеты, используемые для обнаружения и отслеживания состояния соседских устройств в сети. Любой Hello пакет должен получить подтверждение, или другими словами ответ – то есть ACK сообщение. Хочется отметить, что ACK пакет является юникастовым.
Updates: Надежные юникастовые пакеты, который содержат обновления маршрутной информации для построения/перестроения таблицы маршрутизации.
Queries: Мультикаст пакеты, которые отправляет устройство при переходе в активное состояние. Если пакет отправляется в качестве ответа, то он будет юникастовым.
Replies: Это надежные юникаст пакеты отправленные в ответ на queries пакеты. Данные пакет говорит получателю о том, что устройство Feasible Successor доступно и не должно переходить в активный режим.
Requests: Ненадежные мультикаст или юникаст пакеты, используемые для сбора информации от соседних устройств.
В следующей статье мы расскажем о сходимости EIGRP сетей.
Для того, чтобы стать полноценным администратором Asterisk, вам необходимо уметь администрировать операционную систему IP – АТС. О том, как заботиться о своем Asterisk установленном на CentOS расскажем дальше.
Сменить SSH порт
Подключение и управление операционной системой CentOS осуществляется по протоколу SSH (Secure Shell), который позволяет безопасно производить операции на ОС удаленно. По умолчанию, протокол SSH работает на 22 порту. Чтобы подключиться к серверу IP – АТС, откройте программу SSH – клиент Putty, и в поле, указанном красным, введите IP – адрес или доменное имя вашего Asterisk
Мы рекомендуем сохранить подключение в программе. Для этого, в поле, выделенном оранжевым, укажите имя для подключения и нажмите Save
В целях повышения безопасности, вы можете его изменить следующим образом:
Входим в режим редактирования демона SSH
[root@localhost ~]# nano /etc/ssh/sshd_config
Ищем строчку, которая содержит запись #Port 22. Обычно она находится под текстовым баннером:
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options change a
# default value.
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
Уберите символ # (решетку) в начале строчки и укажите номер порта, который вам необходим. Например, 7022
Port 7022
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
Сохраните изменения. После успешного сохранения, выполните рестарт демона SSH:
[root@localhost ~]# /etc/init.d/sshd restart
Управление дисковым пространством
Если на вашем Asterisk включен функционал записи телефонных разговоров, то вам необходимо отслеживать свободное дисковое пространство. Мы рекомендуем прибегать в этом вопросе к автоматизации – написанию скриптов, которые будут удалять записи, старше определенного срока автоматически. Итак, перейдем к просмотру свободного дискового пространства.
Команда du выводит размер файлов и папок в директории, в которой вы находитесь на текущий момент:
[root@localhost ~]# du
1240 ./.mozilla/firefox/5r4h2uwt.default/gmp-gmpopenh264/1.5.3
1244 ./.mozilla/firefox/5r4h2uwt.default/gmp-gmpopenh264
4 ./.mozilla/firefox/5r4h2uwt.default/healthreport
Более удобным для человеческого восприятия является команда с флагом -h du -h, которая указывает размер файлов и папок в текущей директории с указанием приставки (K – килобайт, М – мегабайт и так далее.)
[root@localhost ~]# du -h
1.3M ./.mozilla/firefox/5r4h2uwt.default/gmp-gmpopenh264/1.5.3
1.3M ./.mozilla/firefox/5r4h2uwt.default/gmp-gmpopenh264
4.0K ./.mozilla/firefox/5r4h2uwt.default/healthreport
Наиболее «тяжелой» с точки зрения занимаемого пространства директорией в файловой структуре Asterisk является папка /var/spool/asterisk/, в которой находятся файлы голосовой почты, системы записи, факсы и так далее. Если мы хотим узнать размер папки, в которой мы храним файлы системы записи, то добавляем к конструкции du -h флаг s:
[root@localhost asterisk]# du -sh /var/spool/asterisk/monitor/
111M /var/spool/asterisk/monitor/
Отлично, с этим разобрались. Теперь нам надо научиться понимать размер наших дисков. Это гораздо проще – укажите команду df - h и система выведет все диски, с указанием свободного пространства, общего объема и процентной загрузки:
[root@localhost asterisk]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 146G 4.8G 134G 4% /
tmpfs 498M 72K 498M 1% /dev/shm
/dev/sda1 283M 25M 244M 10% /boot
Нужные команды файловой системы
Перечислим важные команды, которые пригодятся Вам в процессе администрирования вашего Asterisk:
ls - вывод списка файлов и папок в текущей директории
ls -l – более подробная модификация указанной выше команды. Помимо прочего, команда выводит в консоль права на файл и его владельца.
cd /var/spool/asterisk/monitor/ - сделать папку с записями телефонных разговоров текущей директорией.
cd .. - вернуться на одну папку назад по файловой иерархии
cd ../.. - вернуться на две директории обратно
cp index.php /var - скопировать файл index.php в директорию /var
cp index.php /var - переместить файл index.php в директорию /var
Время и настройка NTP
Для синхронизации серверного времени по протоколу NTP, выполните следующие команды:
service ntpd stop
ntpdate pool.ntp.org
service ntpd start
service httpd restart
Устанавливаем временную зоны сервера:
Подключитесь пользователем root к серверу и выполните команду date. Система укажет Вам текущую дату, время и временную зону.
[root@localhost ~]# date
echo date("D M j G:i:s T Y");
Измените текущую директорию с помощью команды cd /usr/share/zoneinfo. Далее выберите наиболее подходящий регион. Например, если вы из Самары, то перейдите в папку /Europe/Samara
Далее нужно создать линк настройки /etc/localtime. В случае с Самарой, команда будет такой: ln -sf /usr/share/zoneinfo/Europe/Samara /etc/localtime
Установим переменную ZONE в файле /etc/sysconfig/clock на Europe/Samara. Выполните следующие команды:
[root@localhost ~]# vim /etc/sysconfig/clock
В открывшемся файле для редактирования через vim нажмите клавишу «o» на клавиатуре. Стрелками сотрите содержимое файла и вставьте нужную временную зону, в нашем примере будет так : ZONE=Europe/Samara. Сохраните изменения нажав :x! и затем клавишу Enter.
Установите аппаратное время сервера командой /sbin/hwclock --systohc
Просмотр крупных файлов
tail /home/log.txt - вывод последних 10 строчек указанного файла. В данном случае файл /home/log.txt
tail -f /home/log.txt - вывод последних 10 строчек указанного файла. Если в файл будет динамически добавлены новые строки, это отразится в выводе команды в реальном времени
tail –n 100 /home/log.txt - вывод последних 100 строчек указанного файла.
tail –n 100 /home/log.txt > result.txt - данная команда запишет 100 последних строчек файла /home/log.txt в файл result.txt