Sergey
Если алгоритм - то в модуль его, разумеется. Со всякими там corner cases.
Oleg
ребята привет. кто использует ансибл для k8s ? интересует работает ли у вас definition из j2 template
Алексей
https://youtu.be/LApKSi5tUYo
тяжеловатый доклад, тема не раскрыта как мне кажется. Обзор по архитектуре дан.
Алексей
Если алгоритм - то в модуль его, разумеется. Со всякими там corner cases.
алгоритм в роли, модули это отдельный разговор. Я пока не понимаю насущности самописных модулей. Видимо не сталкивался с задачами где это требуется.
Timur
Пишите сразу все на баше и не мучайтесь
Алексей
Timur
Раскрой, в чём его назначение.
Основная фича ансибла - это возможность управлять инфраструктурой с помощью простых декларативных описаний, без необходимости программировать и думать об алгоритмах
Timur
Декларативный подход как раз не требует описания алгоритмов, он завязан лишь на описании желаемого состояния
Timur
При большом желании, конечно, можно и на ансибле что-то запрограммировать, но это странный подход
Timur
Т.к. для таких задач есть более подходящие инструменты
Алексей
Основная фича ансибла - это возможность управлять инфраструктурой с помощью простых декларативных описаний, без необходимости программировать и думать об алгоритмах
block/rescue уже не простое декларативное описание, а написание модулей - тем более. Я предложил проверить доступность базы без пароля путём башсибла, зарегистрировать результат и уже выполнять таски на основе этого результат. Чем этот вариант хуже block/rescue? Чем он не идемпотентен?
Алексей
Тем, что он уводит деталями исполнения от изначальной задачи. Логику - в модули, в этом смысл декларативности.
Ок, Сергей, используя block/rescue мы наваливаем ту же логику в тасках только другим раком. В чём разница?
Sergey
Не используй block и rescue.
Алексей
Не используй block и rescue.
я исхожу из обсуждения выше.
Sergey
Мою точку зрения ты услышал. Я пять лет пишу без этих штук. Как тебе делать - решай сам, просто потом не расстраивайся из-за результатов.
Anton
Товарищи, хочется совместить приятное с полезным include & until я правильно понимаю что это не совместимо от слова совсем?
Sergey
Include = obsolete
Алексей
Мою точку зрения ты услышал. Я пять лет пишу без этих штук. Как тебе делать - решай сам, просто потом не расстраивайся из-за результатов.
я предложил с башсиблом, мне сказали, что правильней с Блоком/рескью. Как ты предлагаешь - я вообще не понял. Что выносить в модуль? Зачем? Какой смысл в модуле в данном случае? Зачем генерить ещё модуль если есть стандартный для работы с mysql и т.д.
Oleg
Тогда join
а не подскажешь при использовании join он у меня делает так: бла-бла значение1 значение2.pdf хотя по идеи надо к каждому значению подставить расширение код такой: line: "бла-бла {{ item }}" with_items: - "{{ groups['var1'] }}" - "{{ groups['var2'] }}"
Алексей
Здесь не нужен башсибл. Сначала везде сделать бэкапы, потом везде поставить пароли.
не спорю, это верный путь. Но вопрос был как правильно обработать наличие/отсутсвие пароля.
Sergey
Правильно - НЕ обрабатывать.
Oleg
Не очень понял суть вопроса, если честно
Использую lineinfile : line: "бла-бла {{ item }}" with_items: - "{{ var1 }}" - "{{ var2 }}" - "{{ var10 }}"
Oleg
сек
Алексей
when undefined
а вот как узнать что его нет? )
Oleg
Не очень понял суть вопроса, если честно
Использую lineinfile : line: "бла-бла {{ item }}.pfd" with_items: - "{{ var1 | join(' ')}}" - "{{ var2| join(' ') }}" var1 и var2 - переменные которые хранят от 1 до нескольких значений, и как сделать так что бы при данном коде получалось что то типо следующего: бла-бла значение1.pdf бла-бла значение2.pdf значение3.pdf
Oleksandr
Oleg
просто с данным кодом выходит бла-бла значение1.pdf бла-бла значение2 значение3.pdf
Oleg
теряется расширение у значения2
Oleg
таск начинается с создания копии локальных файлов, с целью получения новых. как может получиться, что 'ansible_hostname' is undefined ?
Oleg
оттаке. TASK [is local rpm.list exists] ************************************************ task path: /opt/srv-rpm-lists/collect-rpm.yml:14 fatal: [172.16.0.125]: FAILED! => { "msg": "The task includes an option with an undefined variable. The error was: 'ansible_hostname' is undefined\n\nThe error appears to have been in '/opt/srv-rpm-lists/collect-rpm.yml': line 14, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - name: is local rpm.list exists\n ^ here\n" }/
Oleg
а таск такой: - name: is local rpm.list exists stat: path="{{ localbackdir }}/{{ ansible_hostname }}/rpm.list" delegate_to: localhost register: local_rpm_list
Damir
Здесь не нужен башсибл. Сначала везде сделать бэкапы, потом везде поставить пароли.
По такой логике получается, что архитектуру деплоя базы данных подстраивать под ансибл. Тоже как то не айс
Konstantin
Кто может объяснить поведение странное. Есть таска - name: Download Consul unarchive: src: https://releases.hashicorp.com/consul/{{ consul.version }}/consul_{{ consul.version }}_linux_amd64.zip dest: /usr/local/bin remote_src: true notify: restart consul Но почему то всегда changed
Damir
можно регистрировать + fail_when установить, чтобы не крошилось. но почему всех по линейке не выстроить?
Имейте ввиду отдельную роль для серверов где база с паролем, отдельный где без?
Konstantin
-vvvv
тормазнул… еще —check —diff. но там и там вот это
Konstantin
если ручками сделать diff на хосте измеений нет
Konstantin
возмоно это что то типа mtime ctime … хз короче
Max
-vvvv
словесный понос.
Konstantin
ну и чеерз -vvvv это так выглядит
Konstantin
так глубоко в ansible не погружался 🙂 хз что он там сравнивает
Oleg
Что вы хотите сделать?
Узнать есть ли локальный файл, и забекапить его
Oleg
А потом с удалённого хоста, скачать новый, и сравнить
Timur
заменить awk
Зачем ansible_hostname при этом в пути?
Oleg
Имя удалённого хоста
Timur
С чего вдруг удаленного, если у вас стоит delegate_to: localhost ?
Oleg
Имя удалённого хоста
Каждому хосту свой рабочий каталог на локальном
Pavel
коллеги подскажите зачем модуль synchronize(rsync) требует повышения привелегий и ввода локального пароля от рута,и как избежать этого,я врубил дебаг режим и на этапе выполнения шага с rsync вижу ESTABLISH LOCAL CONNECTION FOR USER: root
Oleg
Господи, зачем?
https://hastebin.com/jobopoduko.pl
Pavel
Код покажите
- hosts: testssh vars: date: "{{ lookup('pipe', 'date +%Y%m%d-%H%M') }}" tasks: - debug: msg="System {{ inventory_hostname }} and {{ lookup('env','USER') }} using Ansible" - name: Backup Old Dir with GameServer command: mv /cygdrive/c/Server /cygdrive/c/Server{{date}} - name: create infrastructure file: path: /cygdrive/c/Server state: directory - name: Rsync archive to hosts synchronize: src: /ftp/server/1.txt dest: /cygdrive/c/Server rsync_opts: - "--progress" - "-a" become: yes become_method: su become_user: xxx
Oleg
- "{{ var1 | join('.pdf ')}}"
спасибо мил человек!
Pavel
Код покажите
я пробовал и с использованием become и без при любых раскладах он пытается выполнить повышение привелегий и требует пасс T_T не совсем понимаю зачем и почему.
Oleg
https://hastebin.com/jobopoduko.pl
это список установленных пакетов, с учётом архитектуры и версии. для каждого хоста свой каталог. алгоритм: отложить локальную копию (с предыдущего раза), копирую новый список, и потом у меня питоноскрипт проходит по каталогам, анализирует изменения и формирует отчёт.
Pavel
Код покажите
Основной прикол в том что при запуске плейбука с пользователя xxx он не требует пасс,а при запуске от рута требует.Вот как бы этот момент перенести чисто на плейбук
Pavel
потому что если я дальше буду использовать awx который дёргает плейбуки также из под рута мне это будет просто не реально менеджерить
Pavel
нет хожу под пользователем xxx
Pavel
запускаю плейбук из под рута
Timur
Ничего не понял
Timur
Как и где у вас запускается плейбук?
Pavel
захожу на сервак,далее sudo su,дёргаю playbook ansible-playbook -vvvv rsync.yml
Pavel
в этом случае он запускается из под рута
Pavel
и требует pass
Pavel
если я запускаю его из под su xxx
Pavel
он не требует пасс