10-Ansible - Первые Playbook
Вставка
- Опубліковано 30 кві 2018
- #devops #девопс #ansible #ityoutubersru
Ansible - Первые Playbook'и
Пример создания трёх простых и используемых Playbook'ов.
Буду рад паре баксов, можно даже Канадских :) www.paypal.me/DenisAstahov
Спасибо!
И снова спасибо за поддержку!
Спасибо Денис, даже через столько лет ваши уроки помогают. 😊
Присоединяюсь. Отличный материал, приятная подача!
Спасибо большое! Очень помогло в автоматизации, вот таким людям как ты надо давать всякие награды за развитие общества)
прикольные видео, как раз смотрю и читаю книгу "запускаем ansible"
playbook2.yml для Ubuntu (в debian\ubuntu пакет httpd называется apache2 И вместо yum мы пишем apt)
---
- name: Install default Apache Web Server
hosts: all
become: yes
tasks:
- name: Install Apache Web Server
apt: name=apache2 state=latest
- name: Start Apache and enable it on the every boot
service: name=apache2 state=started enabled=yes
Привет, ничего не запускается :с
Пишет:
fatal: [server2]: FAILED! => {"changed": false, "msg": "Failed to lock apt for exclusive operation: Failed to lock directory /var/lib/apt/lists/: E:Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)"}
Хотя в конфиг файле сделал следующее:
[privilege_escalation]
become = True
become_method = sudo
become_user = server
become_ask_pass = False
Вроде бы права должны выдаваться, но ансибл в это не верит….
@@MrMikhailDJ Порылся в документации, по состоянию на 20.08.2022 работает:
---
---
- name: Install default Apache Web Server
hosts: all
become: yes
tasks:
- name: install apache webserver
ansible.builtin.apt:
name: apache2
state: latest
- name: start apache and enable it on the boot
ansible.builtin.service:
name: apache2
state: started
enabled: yes
@@niccolomachiavelli3542 у меня проблема была с правами sudoers на сервере)) все норм
@@niccolomachiavelli3542 Работает , только вот этого раньше не видел, ansible.builtin.apt:
@@niccolomachiavelli3542 спасибо, ваш способ заработал. Денисовский нет
Спасибо, Денис! Всё очень доступно объясняешь. Желаю удачи в развитии канала!
Ждём новых уроков, спасибо )
Спасибо! Ждем продолжения!
Спасибо огромное, Денис! Очень интересно и полезно!
Большое спасибо за крутой урок!
Хорошо когда у тебя есть проект и ты учишься новым вещам. Интеграция в процессе! Спасибо, Денис!
Огонь! Все идет, как по маслу!
Огромное спасибо за уроки. Доходчиво и задел на самостоятельное постижение деталей.
Друзья с новым 2023 м годом !!! -Верим в лучшее , технологии их развитие это по любому благо, которое и спасет этот мир . Огромное спасибо профессиональному комьюнити Дениса Астахова . Коменты к Видосам Дениса, это вообще отдельный кладезь мудрости, которая помогала найти выход из тупика. Уже к 50 му часу просмотров видио от Дениса , тоже появились свои мысли , которые планирую оставлять в комментариях , и они возможно будут кому то полезны
Вместо clear можно использовать сочетание клавиш Ctrl+l - это очень удобно.
для начинающих, может быть, не всегда понятно - как это быстро экран очищается
Спасибо большое
Спасибо Автору! Отличные и качественные видео уроки доступным и понятным языком для новичков!
Продолжайте в том же духе, у Вас отлично получается!!
Класс!!! Еще )
Огромное спасибо за труд!
Все очень доступно, брался за puppet, тяжко(еще и агенты ставить надо). Оказывается ansible интересная штука
Ansible the best!
Благодарю за ясный и полезный контент, добью ansible and become to learn AWS !
Спасибо большое за твои уроки. Раньше не понимал что за зверь такой Linux, но благодаря тебе и твоим урокам каждый день расту в этой теме!
Cпасибо за урок!
По твоим видео в прошлом месяце успел израсходовать всю квоту на AWS, пока ждал сброса, начал смотреть курс ансиблы, в итоге по этому уроку сегодня сделал пару-тройку плейбуков)
Мужик!)
Спасибо за такие видео! Прям респектую. Но заметил что за год синтаксис очень изменился, теперь ваш канал и doc.ansible как настольная книга перед сном.
Не на всех платных курсах так рассказывают!
Thank you so much.
Если использовать vim редактор, он сам правильно подгоняет пробелы. А вообще, спасибо за уроки. Классная подача и методика! :)
А vim'om не трудно пользоваться ?
@@yoasakura4651 Что там трудного ? комманд 10 основных, а возможностей вагон.
чувак, все работает! спасибо!
Ничего не понял, но вроде годно,начну сначала изучать. Спасибо автору!)
дякую!
Рестартовать Апач после изменений контента в докруте не нужно, но для демонстрации как работает хендлер можно допустить такое поведение :)
Молоток!
פשוט נהדר! מעריך אותך
תודה רבה
круто!
Кайф , спасибо
Спасибо
Привет. Спасибо что делишся знаниями. Я с ansible знаком но с интересом Смотрю. Писать не писал но менял много готовых. Не забудь рассказать где ansible может хранить переменные. У меня был случай на работе. Я менял переменные . А он запусался с другими параметрами.. полезно знать :) когда на работе много админов и общие плейбуки и запускаем на общем сервере :) а не на лаптопе (секюрти итд)
Сделал себе 3 сервера самых дешманских по 180р. Тренеруюсь на них. И вот очень часто один из 3 чем то не доволен. Повторно запускаю комманду, все ок)))😅
Спасибо за ролики!
Хорошо бы ещё про dynamic inventory и tag написать. И про роли, что это, как их писать и подключать. И про работу с переменными, как заданных в group_vars, так и после gather_facts - ip сервера и проч.
Не все сразу!
По очереди
Используй ctr + r для поиска команды, это гораздо быстрее, чем тыкать стрелку вверх
Такие дела =)
как передать переменную в модуль? к примеру я на питоне хочу получить какие то данные полученные от других модулей и уже свою логику запустить
Спасибо. Можно еще tasks создавать отдельным файлом в roles//tasks/main.yml . А в playbook писать только .
До этого тоже дойдём, будет урок по Roles
DMT роли можно и нужно создавать через ansible-galaxy init (rolename)
Спасибо за столь замечательные уроки! Урок по Roles теперь ждем с нетерпением!
Спасибо за туториал, но рестартить сервер при модификации файлов веб-приложения совсем не обязательно
Денис, продолжаю смотреть ваши материалы и снова вопрос, если скажем апач уже стоит но старый и мы выполняем команду установки со state=latest обновление произойдет?
Документацию посмотри docs.ansible.com/ansible/latest/modules/yum_module.html
latest will update the specified package if it's not of the latest available version.
Заместо restart я бы использовал reloaded,чтобы сервер не падал на рестарте.
Спасибо за уроки!!! Все классно жаль в этом уроке на рассказал подробно о переменных для Apache которые у тебя уже были созданы .
и по теме синтаксис изменился написания кода в одну строчку недопустимо . для Ubuntu актуально так
---
- name: Install Apache2
hosts: all
become: yes
tasks:
- name: Install Apache2
apt:
name: apache2
state: present
- name: Start Service Apche2 and enable
service:
name=apache2
state=started
enabled=yes
вопрос, в ансибле нет глюка по распаковке tgz, вроде всё как в оф доке делаю, но не отрабатывает, пробовал разные варианты, руководствовался инструкацией по unarchive
Проверил, всё работает, мож у тебя проблема с TGZ?
что то не получается использовать ни ключ -b в эт-хок комманде, ни become: yes в плейбуке! может что то изменилось за 5 лет в управлении ansible? подскажите пожалуйста)))
ping отрабатывает только если на удаленной стороне установлен python, не понимаю почему так назвали модуль между ним и ping большая разница
как с помощью Ansible дать право на копирование c под юзера var/www ?
Спасибо за отличный уроки! Подскажите пожалуйста, через ssh-public key работает, через команды ansible я pong получаю, но через playbook выдают ошибку: FAILED! => {"msg": "Missing sudo password"}. в чем может быть причина?
в конце команды в терминале -b -k -K или в судоерс добавить юзера.
@@greddery960 Спасибо!
Можно добавить в конце команды в терминале -b -k -K, как писали выше, но если на удаленных машинах в одной группе разные пароли и юзеры? При этом добавление пользователя в sudoers не помогает, т.к. требует ввода пароля по прежнему. Я вышел из ситуации, указав не требовать пароля для группы нужного мне пользователя, например: %user ALL=(ALL:ALL) NOPASSWD:ALL
Если у меня разные хосты в рамках одной группы, дебиан и центос, могу ли я запустить установку веб серверов на них одним плейбуком, без дополнительной группировки по дистрибутиву? Или в реальности так не делают и разные дистрибутивы всегда закидывают по разным группам?
Можешь конечно в одной группе, просто вставляй condition везде
Добрый день. Скажите пожалуйста, почему процедура копирования каталогов с файлами при помощи модуля "copy" выполняется очень долго ? к примеру: папку 20 МБ Ansible копирует 10 минут, а если просто через scp то 5 сек. Как можно пофиксить ?
Попробуй вместо copy использовать synchronize
- synchronize: src=myfile dest=/home/user/test/
@@ADV-IT Пробовал synckronize но лучше не стало, ansible на каждое действие клпирование файла инициирунт новое соединение и после копирования папки большого объема на серверах посмотреть в last то это будет гиганский список подключений от моего пользователя. Ну соответствено это забивает lastlog
пакуй в авхив, копируй, и там распаковывай
Доброй ночи.У меня возник вопрос.В уроке была сказано про строку notify.Как вообще понять,куда вставлять данную строку?И второй момент ,если вставлю данную строку под другим name,правильно понимаю,тогда будет просто перезапускаться служба apache произвольно .Если так,как часто?P.S/Прошу прощение,если запутал.Хочу разобраться .Спасибо,за понимание
Вставляй это в тот Task который должен позвать другой Task.
Это типа Goto как раньше программировали.
@@ADV-IT Заметил, что когда запускаем первый раз playbook3.yml, handler Restart Apache судя по выводу выполняется последним, хотя вызов прописан в задаче name: Copy index.html перед задачей name: Start Apache and Enable it on boot. Кажется не совсем правильным такое поведение, либо в данном случае можно было бы поставить копирование последней задачей.
Денис, спасибо за уроки, расскажи про выполнение команды от sudo без ввода пароля. Я, к примеру, дописываю аргументы -b -K и ввожу пароль, а как автоматизировать без ввода пароля sudo? И в playbook как это реализовать? Или ввод пароля считается нормой в реализации проекта на ansible?
Нужно твоего юзера добавить в sudoers лист без пароля, это не Ansible, это на linux
Вот linuxconfig.org/configure-sudo-without-password-on-ubuntu-20-04-focal-fossa-linux
@@ADV-IT , благодарю за ответ, но мне кажется это урон безопасности. Как в сообществе DevOps это считается правильно реализованной задачей? Или все от предпочтений каждого специалиста зависит и нет какого - то default решения?
@@itkrasnodar956 Такая компания как AWS - Amazon Web Services использует только юзера с ssh ключем, и без пароля на всех Linux системах.
@@ADV-IT как это не Ansible? Вполне себе задача именно что для Ansible:
ansible all -m shell -a "echo \"spurdo ALL=(ALL:ALL) NOPASSWD:ALL\" >> /etc/sudoers" -b --ask-become-pass
ansible-playbook playbook1.yml --ask-become-pass @@xremoteuser
Спасибо за уроки. А как всё-таки правильно playbook писать?
yum: name=httpd status=latest
Или
yum:
name: httpd
status: latest
Второе обычно
Первое - это устаревший, нерекомендуемый к использованию синтаксис
Привет, ты говорил, что у тебя есть git, и там есть несколько playbook для ansible. Можешь подсказать ссылку?
Есть Git но там не выкладывал playbooks
github.com/adv4000
спасибо, жду продолжения по ansible)
Добрый день Денис.
Неясно для чего рестартовать сервис, если изменился файл. К контексте ansible может это нужно, но изменение странички вручную не требует рестарта всего сервиса.
Не могли бы разъяснить этот вопрос?
Да, не требует, это я так чтобы показать как сделать тригер
лайк!
Что там с конкурсом на сайте массада? Еще будет видео?
Я застрял на Challenge#2, и уже опубликовали полное решение.
))) а где опубликовали? Где посмотреть? Может видос заснимешь что там и как было?
drive.google.com/file/d/14RcWa4hYOHiAEGKk5sR-0oUXmr7AF5Jh/view
www.israeldefense.co.il/node/33922
друг ты куда пропал ?
А можно засунуть Ad-Hoc команду в playbook? Если целый блок описывать лениво))) Ну или модулем ансибла не владеешь и отправлял команду как shell -a "****"???
На как плейбук нужен, что бы сократить количество скрипта. По идеи вообще можно и терраформ и ансибл не использовать, а вооьще всё одними скриптами запускать. А чё?)
День добрый, подскажите, есть у меня команда на скачивание не большого файла, иногда ansible прерывает выполнение по тайм-ауту, а иногда нормально всё. Подозреваю что файл не всегда успевает скачаться, как увеличить время тайм-аута?
Почитай документацию там ведь всё написано
docs.ansible.com/ansible/2.3/get_url_module.html
есть параметр timeout
по умолчанию он 10 секунд, сделай 20, 30, 40
Сделал на убунту плэйбук 3. На самом сервере страничка index.html открывается. Если по сети открываешь, то дефолтная от Апачи (. Почему?
- name: Fix default page issue
shell: a2dissite 000-default.conf
ERROR! Syntax Error while loading YAML.
mapping values are not allowed in this context
The error appears to have been in '/root/server.yml': line 4, column 8, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
become: yes
tasks:
^ here
вот так пише и все
Вот это тебе поможет: www.yamllint.com/
Ребят, всем привет, подскажите пожалуйста в чём может быть проблема. Сделал такой же плейбук по установке апачи, но не могу зайти на вебсервер, порты открыты, но не понимаю в чём прикол
А Apache установился? может не тот IP используешь для web?
@@ADV-IT Да, апачи установился, проверял по статусу, он даже запущен. Ip использовал такой же, как на видео
@@yoasakura4651 Зайди на один из серверов и проверь curl localhost,
если работает значит всё ок, и проблема в доступе снаружи, посмотри IP , Firewall
@@ADV-IT, уже разобрался, спасибо, оказывается нужно было настроить у инстанса входящие правила на aws )
@@yoasakura4651 Проклятые SecurityGroups, все беды от них :) LOL
С первым же плейбуком проблема. Через обычный модуль пинг всё проходит хорошо, а через плейбук не работает пишет ошибку, что не может подключиться к серверам.
fatal failed missing sudo password и все в таком духе… Делал все ровно по видео
Видать не все точь в точь
@@ADV-IT да всё точно. Проблема решилась добавлением NOPASSWD:ALL в sudoers
@@MrMikhailDJ Супер!
--ask-become-pass sprashevaetsa u menja. :( Vidimo nado nastroiki servera popravitj.
3й плейбук чёт не идёт
The offending line appears to be:
- name: Install Apache and Upload my Web Page
hosts: all
^ here
Смотри про основы YAML или внимательней смотри еще раз этот урок и посмотри сколько пробелов перед hosts: all
Как вызвать tree ?) Команда не найдена
Установи
sudo yum install tree
или
sudo apt-get tree
@@ADV-IT блин я думал это какой-то модуль ансибла )
@@ADV-IT если на то пошло , подскажешь как делать бэкап файла через ансибл ?)
почему у меня вылезли коровы после команды пинг? ))
То ли я тупой, то ли с YAML что-то не то... Но для меня от кажется очень сложным. json проще как-то...
Тоже самое было со мной. Но п отом все стало проще восприниматся.
это джейсон-то проще?)))
коментарии мы ж пишем как и в linux #?
ага
Кто сказал что YaML должен с "---" начинаться!? Или это фича ansible?
Это правила написания
Нашёл в доке: docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html
Просто "---" это разделитель документов в потоке, а не индикатор формата, он в начале файла yaml не обязателен (но допустим).
Но раз так принято в ansible - так нет проблем.
Все просто когда instance LinAWS а когда Ubuntu на AWS? Кароче навозился, и apt в итоге почемуто не работает... ну чайник я.... А так круто конечно, СПАСИБО! И ВОТ! Меняю коммент...... Вот... через один урок ADV-IT и на этот вопрос ответил.... ну блин спасибо... Я сутки возился пока не пришел к тому что причина в том что пакет не httpd а apache2 (для debian) ... и вот смотрю урок № 12 в котором об этом рассказано... Чего раньше не сказал? Пипец... Всеж не тупо копируют, я предполагаю решают свои задачи и примеряют на свои линухи... Зло!
не понял, почему надо апач рестартить когда html меняется? Там кеш?
WARNING]: Could not match supplied host pattern, ignoring: All
PLAY [Test my servers] *******************************************************************************************************************************************************************************
skipping: no hosts matched
PLAY RECAP *******************************************************************************************************************************************************************************************
Я самый невезучий... После 1 плейбука выдает такую ошибку
Вы все продолжаете транслировать свою логическую ошибку, что когда зеленый это ничего не сделано, а changed это признак выполнения, но желтый.
Это же не светофор.
Желтым подсвечивается статус changed для визуального вопроиятия того, что были произведены изменения.
Зеленым сообщется что изменений сделано не было.
Все и не надо ничего лишнего говорить от себя.
Чёто не принимает он ключи:
TASK [Gathering Facts] *****************************************************************************************************************************************
fatal: [yenten_host1]: FAILED! => {"changed": false, "module_stderr": "Shared connection to 10.10.0.106 closed.
", "module_stdout": "sudo: a password is required
", "msg": "MODULE FAILURE", "rc": 1}
Куда копать?
*sudo password is required*
Отмени пароль для sudo на этого юзера
@@ADV-IT Спс, после этого заработало. Это был вариант когда я pub ключ с ансибл-мастера добавил а authorized_keys на клиентах. Как я понял, у Вас на видео все наоборот, Вы pub ключи клиентов скинули на ансибл-мастер и указали в group_vars, в таком варианте другая проблема: "Failed to connect to the host via ssh: username@10.10.0.106: Permission denied (publickey,password).
"
Попробуй вручную приконектится в серверу ssh -i mykey.pem username@10.10.0.106
если сработает попробуй adhoc команды с debug:
ansible myserver_group -m ping -vvv
Хороший материал.. НО! Когда студент на стажировке , с пеной у рта мне рассказывал , что при обновлении страницы нужно рестартить апач... и дал эту ссылку , мне аж самому интересно стало , чтож там за апач такой. Лет так 20 его не резетил , а тут )) Вы серьезно ? Профессиональный плейбук, для резюме ... в котором рестартят апач после аплоада новой страницы ?))) Я бы на вас очень вдумчиво посмотрел на собеседовании, с таким резюме ... А если страница создается динамически ,что в принципе в 90% случаев, каждый раз резетить ? в продакшене? видимо по крону))) Зачем вы людям голову пудрите, они ведь реально это учат ...
Я учу пользоваться Ansible, а не Apache.
)) ну и муть, на python или powershell тоже самое реализовать гораздо проще чем через этот ансибл
«Тоже самое реализовать» это что подразумевается? Например, развёртывания приложения на 100500 серверов?))))) через питон? 😂
@@MrMikhailDJ да хоть 100000000 серверов, не проблема
@@babymayby9270 ещё бы понять, чем питон проще, когда ansible является безагентой средой, где удобно можно взаимодействовать с инфраструктурой безопасности компании… Ну это меньшая проблема, чем скорость с который на твое количество серваков, что ты написал в комменте будет разворачиваться твоя инфраструктура/приложение. Для небольших тасок подходит такой метод, но когда имеешь дело с высоконагруженными системами, то аналогов ансиблу стремится к нулю.
Использования питона предполагает наличие среды на обоих машинах. А для ансибла этого не нужно. Достаточно нативно установленного питона, который идёт со всеми de линуксовскими. Когда сможешь это осознать и найти настоящую работу в сфере IT, то поймёшь о чём я говорю. А так… Тренируйся дальше короче :)
@@MrMikhailDJ всяк кулик своё болото хвалит:) да не нужен питон чтобы запустить apt install по ssh вообще, ну а дальше зависит от того кто с чем работать умеет и у кого какой опыт и менталитет
@@babymayby9270 я не хвалю своё болото)) я просто хочу донести, как люди работают в больших компаниях по типу сбера, да и я уверен, что ansible это скорее мировая практика и какой-никакой этикет при настройке инфраструктуры, где одним apt install ты не ограничиваешься…
горе учителя
22:20 Если бы давали лёгкие задания после интервью, такие как развернуть Apache в Ansible.
Вот одно из последних, которое давали мне:
1. Clone this project, change its name and restructure it as you see fit, create your own GitHub repo with the code
2. Write an application that will extract the secret string from a DynamoDB table in our account
3. The secret_code lies in a DynamoDB table devops-challenge where code_name = #{codeName}
4. The keys that will provide access to the account have been provided separatly, DO NOT COMMIT THEM, if the keys are exposed to GitHub, we will be notified and you will be disqualified
5. Create a docker container that will publish secret_code to 127.0.0.1:5000/secret
6. Create a Drone CI account, and add a .drone.yml that will build, test and deploy your code and container/s
7. The Drone process should publish the contianer to your own docker hub account
8. A link to the container on docker hub should be published as container to /health (See requirement #2)
9. A link to the GitHub project should be published as project to /health (See requirement #2)
10. Once completed, reply to the challenge email
А к базе нужно было сочинить вот такой запрос
aws dynamodb get-item -table-name devops-challenge -key ‘{“code_name”: {“S”: “thedoctor”}}’
Ну не так уж и сложно, только много
@@ADV-IT про Drone CI я только из задания узнал
@@ADV-IT круто было бы увидеть от тебя видео с разбором этого и подобных ему заданий)
"Ansible - С Нуля до Профессионала" Denis Astahov - www.udemy.com/user/denis-astahov/ - отблагодарим Дениса за столь Шикарный курс!
Спасибо