Denis 災 nobody
вопрос кто НЕ юзал? )
Denis
вопрос как сделать
Sergey
Да, я это слышал, уже, спасибо. С интересом посмотрю на питоновую реализацию этого же для ansible.
from hashlib import md5 class FilterModule(object): def filters(self): return { 'georgify': self.examplefilter, } def examplefilter(self, inp, start_port=0x0400, end_port=0xC000): result = '' target_range = end_port - start_port source_range = 0x0FFFF scale_factor = source_range / float(target_range) if (start_port > 0x0FFFF) or (start_port < 0): raise AnsibleFilterError('start_port should be between 0 and 65535') if (end_port > 0xFFFF) or (end_port < 0): raise AnsibleFilterError('end_port should be between 0 and 65535') if end_port <= start_port: raise AnsibleFilterError('end_port should be bigger than start_port') if isinstance(inp, string_types): m = int(floor(int(md5(inp).hexdigest()[-4:],16)/scale_factor) + start_port) else: raise AnsibleFilterError('Input value should have string type, now {}'.format(type(inp)) return m
George
Спасибо, я впечатлён. Почти так же компактно, как range(1000, 37272) | random(seed=item)
Sergey
Спасибо, я впечатлён. Почти так же компактно, как range(1000, 37272) | random(seed=item)
...и чуть больше параметров принимает 😉 (не говоря уже об обработке ошибок)
Sergey
Вызывается, кстати, очень просто в минимальном варианте и с дефолтами: "{{ item | georgify }}" 😃
kSandr
Спасибо, я впечатлён. Почти так же компактно, как range(1000, 37272) | random(seed=item)
аргумент в стиле загляни в исходники любого бинарника и впечатлись ...
George
Не, спор был что лучше - написать на jinja/ansible или сразу всё бросать и начинать писать на питоне.
kSandr
Не, спор был что лучше - написать на jinja/ansible или сразу всё бросать и начинать писать на питоне.
ну общая концепция это если в ансибле нет реализации, написать собственный модуль реализующий необходимый функционал и использовать его , ... вот это вот лучше. Но с другой стороны это сложнее ,геморнее и дольше чем просто вмазать баш ... что определенно не является best practice
George
В примере выше нет баша, чистый ansible и jinja. В моём первом варианте было md5 с подстрокой, но SO подсказал, что random прям умеет seed из строки.
kSandr
В примере выше нет баша, чистый ansible и jinja. В моём первом варианте было md5 с подстрокой, но SO подсказал, что random прям умеет seed из строки.
ну честно говоря не имею ничего против, я просто хотел сказать что сравнение примера использования сишных утилит из баша и питоновского модуля некорректны, и при использовании в ансибле модули таки более православный путь ... а если сравнивать по количеству строк, тогда нужно смотреть на количество строк в исходнике а не в команде вызова бинарника.
George
@kSandr, а где ты увидел сишные утилиты и баш? Ни один из примеров не делал exec'а.
kSandr
@kSandr, а где ты увидел сишные утилиты и баш? Ни один из примеров не делал exec'а.
а сорян, это не баш там у тебя с ранджом ? ... перепутал )
George
Это всё jinja2 с фильтрами ансибла. И даже первая версия (с md5 и подстроками) тоже была на чистой jinja.
kSandr
ну тогда действительно не вижу смысла пилить модуль )
George
Насчёт удовольствия от использования баша - тут я полностью согласен, ибо лучше в 10 раз больше на ЯП написать, чем один пайп потом разбирать.
Denis
обычный
Denis
в процессе плэйбука я дергаю томкат и мне надо получить его логи
Denis
Какой еще tail?
это реально ?
Timur
в процессе плэйбука я дергаю томкат и мне надо получить его логи
Да, можно файл считывать как текст средствами ансибла, а потом парсить фильтрами
Denis
а как ?
Timur
Файл с локалхоста - лукапом
Timur
С удаленного - slurp
Timur
Опять же - в чем конкретно задача? Что именно вы хотите добиться чтением файла?
Maxim
set_facts какой-нибудь, может быть?
Timur
При чем тут set_facts?
Maxim
при том, что исходя из логов, можно понять, что где-то поменялось и как поменялось?
George
По поводу стабильного числового хеша из строки. SO ответил круче: range(1000, 37272) | random(seed=item)
А рандом не может сломаться при переходе с одной версии ОС на другую или при обновлении ансибла?
George
В смысле, у тебя хэши будут разные. Или тебе нужно именно локально обеспечить их уникальность
George
Если будет random меняться (другие значения для того же сида) - это будет регрессия. Впрочем, обычная при апргейде с версии на версию у ансибла
Anonymous
Привет. Начал баловаться с Ansible, пытаюсь создать несколько раздел на диске, используя модуль parted. Вот мой небольшой плейбук: http://ix.io/1RpZ Проблема в том, что в конце таблица разделов получается не gpt, а msdos. Если запихнуть label во второй таск, то тогда пропадает первый раздел, потому что таблица разделов пересоздается, видимо. За один таск можно создать только один раздел, если я правильно понял. Как быть?
George
потом можно поискать примеры на гитхабе и почитать ишью
Anonymous
Да я вроде бы прочитал
George
например, есть такое https://github.com/ansible/ansible/issues/38594
George
это похоже прям точь-в-точь на твой кейс
Anonymous
George
если полная засада - то по идее можно вступить в сделку с совестью и заюзать shell/command
George
а потом уже отрефакторить на нормальные модули
George
и, да, когда что-то такое сломано постоянно - это нормально для такого сложного проекта как ансибл
Anonymous
если полная засада - то по идее можно вступить в сделку с совестью и заюзать shell/command
Да я так весь скрипт на баше могу в ансибл засунуть, выйдет колхоз правда
Anonymous
это похоже прям точь-в-точь на твой кейс
«Ran into the same issue. Accidentally formatted my drives and removed all partitions. Repeating the existing label prevents it.» Если повторить лейбл, то он создает два раздела по 512B
George
🤷‍♂️
Anonymous
Перезапустил QEMU, заработало
Anonymous
Подскажите пожалуйста, есть у кого-то примеры красивого стиля jinja шаблонов? Пробовал разные варианты с различными схемами отступов и все равно какашка какая-то выходит
Anonymous
И так ерунда, и так ерунда. оба варианта тяжело читаются
Anonymous
Anonymous
Timur
@tgadiev возможно у вас есть пример грамотного стиля?
Нет, для jinja такого пока не видел, к сожалению
George
Не сильно плохо выглядит
Anonymous
Спасибо, попробуем пожить с вторым вариантом тогда. Большая часть команды тоже к этому варианту склонна.
orginux
Подскажите, почему playbook не передает переменные в роль?
orginux
Ivan
а мне первый вариант нравится
orginux
Ошибка: The error was: 'virtualenv_name' is undefined
Sergey
Подскажите, почему playbook не передает переменные в роль?
Нестандартное размещение. Структура проекта, в которой работают все умолчальные пути, есть по ссылке в правилах чата (в пине).
Alexander
Как понять, какую версию Jinja2 использует ansible?
George
Системную. pip freeze или pip list сделай и посмотри. Или ты про что-то другое ?
Alexandr
Всем привет, у меня такой трабл : failed to transfer file to /root/.ansible/tmp/ansible-local-31036GGXwfN/tmp3uukXl syntax error (line 1 column 5)/AnsiballZ routeros command.py:\n\nscp error: : No such file or directory\n"} , я нашел багрепорты по такой же проблеме : https://github.com/ansible/ansible/issues/41808 https://github.com/ansible/ansible/pull/36755 https://github.com/StackStorm-Exchange/stackstorm-ansible/issues/25
Alexandr
все сводится к некоему :
Alexandr
pass those environment variables to ansible-local command: ANSIBLE_LOCAL_TEMP=$HOME/.ansible/tmp ANSIBLE_REMOTE_TEMP=$HOME/.ansible/tmp
Alexandr
что есть ансибл-локал комманд ?
⪓⚝⪔
что есть ансибл-локал комманд ?
то что выполняется локально на управляющем узле
Alexandr
я только ставлю его, так что легче не стало, трабл при коннекте к микротикам, винда и линух пинги выдают
⪓⚝⪔
плейбук покажите
Alexandr
GNU nano 2.3.1 Файл: test_data_get.yml - name: Getting data from routers hosts: routers gather_facts: false tasks: - name: system command routeros_command: commands: /system routerboard print register: system_print - name: debug print debug: var=system_print.stdout_lines
Alexandr
https://spw.ru/educate/articles/ispolzovanie-ansible/ взято отсюда в общем
Anonymous
По мне так выглядит круто. У меня хуже смотрится.
Alexander
Можно ли запустить плейбук, не изменяя его, выставив между всеми тасками паузу?
Denis
--step one-step-at-a-time: confirm each task before running
Alexander
--step one-step-at-a-time: confirm each task before running
Очень помогло, спасибо
Alexander
Есть такой таск: - name: Create directory with config file: path: "{{ ansible_config_location }}" state: directory owner: '{{ app_user }}' group: '{{ app_user_group }}' mode: u=rwx,g=rwx,o=r Директория создается, но с правами drwxr-xr-x, а должно быть drwxrwxr-x
Alexander
И на этом моменте происходит фейл
Alexander
Руками папка создается нормально, права есть