По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
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 следует отнести и то, что заданную команду система может выполнять практически до бесконечности. Пока не наступит требуемый результат трансформации не прекратятся. Пользователю можно не беспокоиться - программа сама всё сделает за Вас, а Вы можете заниматься другими делами.
img
Сегодня речь в статье пойдет о Docker. Все, кто хоть как-то касаются сферы IT слышали про Docker, но не все знают, что же это такое. Итак, сегодня мы простыми словами расскажем о том, что такое Docker, чем это отличается от виртуализации, покажем подробный процесс инсталляции на CentOS 7 и установим просто графический интерфейс Portainer, для управления контейнерами. Также немного коснемся команд для использования Docker. Что такое Docker? Docker - это платформа, которая может “упаковать” приложение, его зависимости, middleware и так далее в так называемый “контейнер”, после чего у вас появится возможность развернуть данный контейнер на любом сервере, на котором установлен Docker - причем буквально за доли секунды, одной командой. Благодаря этим решается сразу несколько задач - в первую очередь, процесс запуска приложения на сервере многократно упрощается, во вторую - какие-либо баги в контейнеризированном приложении никак не повлияют на сам сервер, также как и специфические настройки сервера не повлияют на приложение. И хоть кажется, что Docker выглядит и работает как виртуальная машина, на самом деле они очень разные: виртуальная машина эмулирует сервер целиком, включая все аппаратные ресурсы, а контейнер изолирует приложение, процессы, юзеров и файловую систему. При этом все контейнеры используют общее Linux ядро хоста и запускается в нативном режиме только на Linux машинах, но зато на одной машине можно запустить примерно в 5-6 раз больше контейнеров, чем виртуальных машинах. Ниже на схеме показаны различия: Установка Docker Как было упомянуто в начале статьи, устанавливать Докер мы будем на CentOS 7 - процесс установки крайне простой и быстрый. Итак, сначала необходимо установить с помощью yum несколько пакетов: yum install -y yum-utils device-mapper-persistent-data Lvm2 Далее необходимо установить stable репозиторий для Докера, который вам понадобится, даже если вы захотите устанавливать билды из edge и test репозиториев: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo Затем устанавливаем сам Docker: yum install docker-ce И, наконец, запускаем Docker: systemctl start docker Проверяем, что Docker запустился и работает в два шага: systemctl status docker Вы должны увидеть следующий вывод: После этого пробуем развернуть контейнер hello-world: docker run hello-world Если все шаги были выполнены корректно, то на экране должно появится следующее: Установка Portainer Portainer - это очень удобный графический интерфейс для управления Docker или Docker Swarm. Устанавливается он практически в одно действие - так как сам точно также является контейнером. Итак: Создаем разметку для Portainer: docker volume create portainer_data И затем запускаем сам контейнер: docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer После чего заходите на сетевой адрес вашего сервера на порт 9000, и вы должны увидеть окно с предложением установить пароль администратора: Далее выбираем где находится наш Докер - на этом же сервере, или на другом (в нашем случае - Local) и кликаем Connect. После чего вас встретит красивый дэшборд: Я предлагаю вам попробовать разобраться со всем многообразием дэшборда самим и задавать нам вопросы в комментариях - а мы пока продемонстрируем несколько фич. Итак, сначала кликните на Containers - вы увидите все имеющиеся контейнеры с информацией о них: Как вы можете видеть, у нас на данный момент запущен только один контейнер - Portainer, и доступ к нему открыт по порту 9000 (столбец Published Ports), и адрес во внутренней сети Docker - 172.17.0.2. Далее кликните на App Templates в меню справа - и вы увидите весь список приложений, который можно запустить одним кликом: Зайдем во вкладку Httpd: Сперва, назовите данный контейнер как-нибудь - мы назвали test-merionet. Затем, можете кликнуть на Show advanced options и вы увидите возможность выбора какой порт, протокол и том будет использоваться данным контейнером. Затем просто нажмите на Deploy the container. Пройдет буквально несколько секунд и вас должно перекинуть обратно на вкладку Containers, но, с уже вторым запущенным контейнером: Отсюда вы увидите, что httpd сервер доступен на 32768 порту. Итак, пробуем зайти на данный сервер через браузер: Вы должны будете увидеть надпись It works! так же как на скриншоте выше - дальнейшую настройку httpd мы пока оставляем за кадром. Донастройка Docker и полезные команды Итак, вы уже познакомились с Docker и получили представление о его возможностях. Ниже в тексте мы опишем действия, которые также необходимо сделать после установки и некоторые команды, без которых буквально трудно жить, если активно используешь Докер. Первым делом, настройте автозапуск для сервиса Docker: systemctl enable docker Затем, вы можете проверить запущенные контейнеры в консоли (на случай если вам не нравится идея использования GUI) с помощью команды docker ps Теперь немного о командах и синтаксисе - будем показывать на примерах: Допустим, нам нужно запустить CentOS и выполнить в нем команду echo: docker run centos echo “Hello from Merion Networks” Запустить CentOS и подключиться к его терминалу: docker run -t-i centos /bin/bash Можете сразу указать нужные порты с помощью ключа -p и запустить контейнер в бэкграунде с помощью ключа --d: docker run -p 80:80 --d nodejs-app Итак, совсем немного об опциях для команды docker run - полный список можно найти по ссылке https://docs.docker.com/engine/reference/commandline/run/#description -p - открываем конкретные порты через пробел - порт доступа и порт на контейнере, к примеру docker run -p 9876:80 %imagename% -P - открываем сразу все порты; -t - подключение к терминалу контейнера; -i - интерактивный режим, STDIN все время будет открыт; Обязательно посетите Docker Hub, так как там можно найти кучу интересных контейнеров с примерами их установки и доступом к Docker-файлу, это что-то вроде GitHub только для контейнеров. Заключение На этом всё, спасибо за внимание! Пишите в комментариях, что еще вам интересно узнать про Докер - в следующих статьях мы покроем такие темы как: создание своего собственного Докер-файла и образа, как подключить папку файловой системы с вашего хоста, интересное на Docker Hub и так далее.
img
В сегодняшней статье расскажем про настройку IVR (Interactive Voice Response) стандартными способами Asterisk, без использования графической оболочки FreePBX. Аббревиатура IVR описывает систему, в которой вызывающий абонент, по средствам кнопок на телефоне осуществляет навигацию в голосовом меню и соединяется с нужным отделом, сотрудником и службой. В масштабах крупного "Enterprise", конечно, IVR описывает гораздо более сложные системы, где используются различные технологии интеграции. Но мы рассмотрим простейший вариант. Про настройку IVR через графический интерфейс FreePBX, читайте в нашей статье. Немного теории Перед тем как создать простейший пример IVR, необходимо разобраться во внутренних приложениях, которыми оперирует Asterisk. Приложение Background() проигрывает звуковую запись и в то же время слушает входящие сигналы DTMF (Dual-Tone Multi-Frequency). Система, тем временем, пытается найти совпадения введённых цифр DTMF и внутреннего номера (extension) в текущем контексте дайл-плана, если совпадение есть, то Asterisk отправит вызов на найденный номер. Приложение WaitExten() необходимо, если вы хотите заставить Asterisk подождать какое-то время после того, как он воспроизведет звуковую запись. Параметры, задающиеся в WaitExten() - это количество секунд, которые система будет ждать, прежде чем разрешит абоненту совершить набор внутреннего номера, например – WaitExten(10). Приложение Goto() позволяет переходить с одной позиции в дайл-плане на другую – это может быть контекст (context), внутренний номер (extension) и приоритет (priority). Конфигурация Теперь мы можем создать простейший пример голосового меню, используя вышеупомянутые приложения. Как правило, IVR создаётся в новом контексте, таким образом оставаясь независимым от остальных настроенных extension’ов в дайл-плане. Основная запись, содержащая сценарий голосового меню будет следующей: "Здравствуйте вы позвонили в компанию %companyname%. Для того, чтобы соединиться с отделом поддержки нажмите 1. Для того, чтобы соединиться с отделом продаж нажмите 2. Если Вы знаете внутренний номер абонента, наберите его в тональном режиме". Настройку IVR проводим в файле extensions.conf и добавляем туда следующую запись: [ivr-example] exten => s,1,Answer(500) same => n(loop),Background(Main_IVR_record) exten => 1,1,Goto(3445,s,1) #Переход в контекст отдела поддержки по нажатию кнопки 1. 3444 – Ринг группа отдела поддержки. exten => 2,1,Goto(3444,s,1) #Переход в контекст отдела продаж нажатию кнопки 2. 3445 – Ринг группа отдела продаж. exten => _XXX,1,Dial(SIP/${EXTEN}@Asterisk) #Набор внутреннего номера сотрудника Теперь, для инициализации IVR, остается только вызвать контекст [ivr-example].
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59