Stas
Но я понял ошибку, спасибо!
GDI
Коллеги, всем привет, а у нас есть тут люди кто внедрял ансимбл в CI CD?
Jungo
Факты вида ansible_hostname и ansible_fqdn сильно зависят от локального окружения и настроек днс
ты прав! ansible_fqdn берется видимо из hostname например когда я использую gather_facts то ansible_fqdn=hostname а если не использую то ansible_fqdn=hostname.fqdn думаю как еще можно сохранить fqdn и gather_facts yes
GDI
В гитлаб чтоле?
да неважно что, гитлаб-си, дженкинс)
inqfen
Ты вопрос задай
Div
Вот-вот.
GDI
Ты вопрос задай
Мне больше интересно опыт, подводные камни, кто с чем столкнулся)
Stas
Мне больше интересно опыт, подводные камни, кто с чем столкнулся)
ни с чем, все запускается и работает как и с локального хоста
Div
Мне больше интересно опыт, подводные камни, кто с чем столкнулся)
Три команды макс а дальше магия ансибля. Вот и весь cicd
Div
На жэке через плагин или баш. Гитлаб и того меньше танцев.
GithubReleases
aelsabbahy/goss description changed: v0.3.10 Link: https://github.com/aelsabbahy/goss/releases/tag/v0.3.10 Release notes: release v0.3.10
GithubReleases
aelsabbahy/goss description changed: v0.3.10 Link: https://github.com/aelsabbahy/goss/releases/tag/v0.3.10 Release notes: # Features Many thanks to all the contributors on this release! ## In this release * Fix udp reachable check ([#545](https://github.com/aelsabbahy/goss/pull/545)) * [[#439](https://github.com/aelsabbahy/goss/issues/439)] Add --vars-inline that... More
Lev
Мне больше интересно опыт, подводные камни, кто с чем столкнулся)
Ci cd для написания ролей? Тогда сюда тебе https://github.com/ultral/awesome-iac-testing читать подборку по теме. Если речь про деливери продукта через ансибл, тотут ограничивается твоей фантазией и увереностью что твоя автоматизация прод не поломает
Alex
а есть ли принципиальная разница между hostvars['SRV1']['field1'] vs hostvars['SRV1'].field1 ?
Aleksey
потому что аттрибут класса
Lev
потому что аттрибут класса
а есть цифры какие-нибудь?
Aleksey
Python 3.6.9 (default, Nov 7 2019, 10:44:02) class A: test = 1 %timeit A.test 23.9 ns ± 0.223 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each) B={} B["test"]=1 %timeit B["test"] 24.8 ns ± 0.137 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
Aleksey
Python 2.7.17 (default, Nov 7 2019, 10:07:09) In [1]: class A: ...: test = 1 In [2]: %timeit A.test The slowest run took 53.63 times longer than the fastest. This could mean that an intermediate result is being cached. 10000000 loops, best of 3: 25.9 ns per loop In [3]: B={} In [4]: B["test"]=1 ...: %timeit B["test"] The slowest run took 48.11 times longer than the fastest. This could mean that an intermediate result is being cached. 10000000 loops, best of 3: 24.8 ns per loop
Boris 🦍
Привет, вопрос философсикй. Нужно ли стремиться к 100% идемпотентности. Т.е state ok вместо changed ? Или это глупости. Ведь не редко, когда меняется контрольная сумма, например, директории с изменяемыми данными внутри. Поэтому, статус таски мостоянно может быть changed. Считается, ли в таком случае, что я нарушаю идеологию ансибла о идемпотентности, но фактически не афекчу свое окружение.
Aleksey
считается
Aleksey
если ансибл что то поменял значит система приведена в другое состояние
Ждун
везде где не надо считать изменения можно указать про это в плейбуке, всегда надо стремиться к идемпотентности
Ждун
changed_when: False
Lev
а есть цифры какие-нибудь?
@freeseacher от души набросил конечно, я не удержался и решил проверить. не сильно большая разница. но есть. test_square.yml 100: real 0m7.335s user 0m6.541s sys 0m0.454s test_dot.yml 100: real 0m7.502s user 0m6.751s sys 0m0.456s test_square.yml 1000: real 0m48.537s user 0m50.381s sys 0m1.728s test_dot.yml 1000: real 0m49.145s user 0m51.123s sys 0m1.768s плэйбуки cat test_dot.yml --- - hosts: lindev-lgonchar2 tasks: - copy: dest: /tmp/test_dot.txt content: |+ {% for key in lookup('sequence', 'start=1 end=1000').split(',') %} {{ hostvars[inventory_hostname].ansible_date_time.date }} {{ hostvars[inventory_hostname].ansible_date_time.day }} {{ hostvars[inventory_hostname].ansible_date_time.epoch }} {{ hostvars[inventory_hostname].ansible_date_time.hour }} {% endfor %} test_square.yml --- - hosts: lindev-lgonchar2 tasks: - copy: dest: /tmp/test_square.txt content: |+ {% for key in lookup('sequence', 'start=1 end=1000').split(',') %} {{ hostvars[inventory_hostname]['ansible_date_time']['date'] }} {{ hostvars[inventory_hostname]['ansible_date_time']['day'] }} {{ hostvars[inventory_hostname]['ansible_date_time']['epoch'] }} {{ hostvars[inventory_hostname]['ansible_date_time']['hour'] }} {% endfor %}
Alex
больше никаких подводных камней нет?
Aleksey
или у тя вдруг ансибл не поверх питона работает :)
Aleksey
дак они проверяемые тесты то
Lev
дак йопта. я же тесты приложил
Я видел. Но решил посмотреть на цифры в рамках реальной эксплуатации
Aleksey
Лев просто хотел в E2E тесты
Ivan
опять вы в свои непонятные буквы тут играете
Sergey
потому что аттрибут класса
да, get_attr под капотом ещё
Sergey
по идее, на разных развесистых клюквах може подтормаживать
Lev
по идее, на разных развесистых клюквах може подтормаживать
Кмк тут в целом на уровне погрешности. Тк ссш больше задержки вносит
Alex
по идее, на разных развесистых клюквах може подтормаживать
т.е. форма hostvars['SRV1']['field1'] более предпочтительная?
Lev
т.е. форма hostvars['SRV1']['field1'] более предпочтительная?
она работает быстрее. я тестил против одного хоста. не против если кто-нибудь прогонит на сотню хостов, а лучше 1000 =)
Serg
Добрый день всем, кто-нибудь может подсказать, может ли awx использовать для каждого хоста в инветнтори свой закрытый ключ, наподобие ansible_ssh_private_key_file в inventory самого ansible
Serg
может, хотя и задолбаешься
можешь подсказать, статью или что-то?
Sergey
можешь подсказать, статью или что-то?
логика подсказывает: ansible_ssh_private_key_file задавай для каждого хоста
Timur
@ultralisc большое спасибо за наводку на pulp project :)
Kirill
Всем привет. Есть норм мануалка по доступу ansible по ssh, но через openvpn?
Kirill
Чтобы ansible сначала делал коннект vpn и потом уже запускал плейбуки
inqfen
tasks: - name: start vpn delegate_to: localhost - name: edem dalshe
inqfen
Ну лучше через отдельный hosts конечно
inqfen
Но вообще еще лучше так не делать, странный кейс
Kirill
уже передумал)
Ivan
товарищи! помогите починить красиво. есть таска в initial-плейбуке - name: initial 1. Installing python for Ubuntu and Debian tags: - initial - skip_ansible_lint raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal) register: output changed_when: output.stdout != "" при проходе на тестах через ansible lint ругается на 602 Don't compare to empty string как правильно поменять?
inqfen
Пустая строка false
inqfen
changed_when: output.stdout
inqfen
Если строка не пуста, то она true
Ivan
Если строка не пуста, то она true
аааа. вообще без сравнения?
Timur
аааа. вообще без сравнения?
Можно добавить фильтр length для гарантии
Peter
Добрый вечер, коллеги. Заметил интересное поведение, прошу направить если ошибаюсь. Есть заголовок в файле к примеру такой: # # serial number = Хочу убрать одиночный символ '#' # < его # serial number = - name: Remove symbol # lineinfile: path: /testfile state: absent regexp: '^#$' Не работает, меняю регулярку на '^#.$' работает. Когда пишу регулярки пользуюсь https://regex101.com/ и там вообще обратный результат. Пример упрощен. Ansible v2.8.8 Python 3.6
Андрій
Peter
>>> re.search(r'^#$', symbol) <re.Match object; span=(0, 1), match='#'> >>> re.search(r'^#.$', symbol) >>> А в ansible результат обратный.
Peter
А вы уверены что в файле одиночный # ? Может там пробел после него
Уверен, черезь vim смотрел скрытые символы. Сначала думал проблема в определении конца строки или с символом новой строки, но тоже нет.
Roman
Всем привет. подскажите как правильно использовать теги? хочу отдельно запустит вот такой кусок - name: Set resolv.conf Domain Boston tags : -resolv template: src: ~/documents/ans/templates/resolv_boston.j2 dest: /etc/resolv.conf owner: root group: root mode: 0644
Gunnery
Всем привет. подскажите как правильно использовать теги? хочу отдельно запустит вот такой кусок - name: Set resolv.conf Domain Boston tags : -resolv template: src: ~/documents/ans/templates/resolv_boston.j2 dest: /etc/resolv.conf owner: root group: root mode: 0644
запускай плейбук с этим тэгом: —tags="resolv" если в роли нет других тасков с тэгом allways или каких импортов (ролей, тасков), то должно быть норм
Gunnery
и да, товарищ @UglyKoyote внимательнее меня
UglyKoyote
ну кстати не, я думал вопрос как "корректно" использовать" теги, а не как запустить с тегом)
元帥
Всем привет, как подружить with_dict и when?
元帥
Выдаёт ошибку типа 'list object' has no attribute 'use_sudo'
UglyKoyote
>>> re.search(r'^#$', symbol) <re.Match object; span=(0, 1), match='#'> >>> re.search(r'^#.$', symbol) >>> А в ansible результат обратный.
# cat test.sh # # A # B ]# cat test.sh # A # B Костыль конечно и за такое руки отрывать надо.. - name: Replace replace: dest: /root/test.sh regexp: '^#$' replace: ''
元帥
У меня есть dictionary с группами, внутри которых есть атрибут use_sudo: yes (или no)