Timur
lineinfile?
John
Всем привет!
John
Уже задавал вопрос, правда в другой группе, тут надеюсь гуру ansible подскажут
John
При выполнении таска из плейбука возникает одна и та же ошибка.Но когда запускаешь второй раз эту задачу все выполняется без ошибки.Задача удалить директорию.Пробовал двумя разными способами через shell rm -rf и через absent результат ниже. shell TASK [rm-dir] ****************************************************** fatal: [stpl3]: FAILED! => {"changed": true, "cmd": "cd ~/ && rm -rf project", "delta": "0:00:00.562030", "end": "2019-01-22 12:43:50.671451", "msg": "non-zero return code", "rc": 1, "start": "2019-01-22 12:43:50.109421", "stderr": "rm: cannot remove 'project': Directory not empty", "stderr_lines": ["rm: cannot remove 'project': Directory not empty"], "stdout": "", "stdout_lines": []} absent TASK [rm_dir] ****************************************************** fatal: [ stpl3 ]: FAILED! => {"changed": false, "msg": "rmtree failed: [Errno 39] Directory not empty: '/home/user/project'"}
Timur
Код где?
John
удалить директорию
Timur
show me the code
John
Код где?
сорян сек
John
Код где?
- name: rm_dir file: state: absent path: "~/project"
Timur
А таск из-под юзера с какими правами запускается? На той же машине или на удаленной?
John
А таск из-под юзера с какими правами запускается? На той же машине или на удаленной?
Один пользователь и на машине где запускается таск и на машине где этот таск исполняется.Есть одно но в той директории есть файлы принадлежащие другому пользователю но изменять и удалять пользователь который запускает рлейбук их естессно может у него права есть.Когда запускаешь повторно например задачу она выполняется без ошибки.
John
А таск из-под юзера с какими правами запускается? На той же машине или на удаленной?
Конешн можно люто психануть и все из под рута косить но это мне кажется не совсем правильно и от этой плавающей ошибки не факт что спасет.
Timur
- name: rm_dir file: state: absent path: "~/project" register: remove until: remove is succeeded
John
Если так, то, может, просто retry добавить?
Благодарю за подсказку возможно так и сделаю.
John
Но все же думаю это баг какой то.
Timur
Но все же думаю это баг какой то.
Такое бывает, если в момент удаления папки в неё пишут ещё какие-то другие процессы
John
Такое бывает, если в момент удаления папки в неё пишут ещё какие-то другие процессы
Вооот а вот это ближе к истине. Да скорее всего так и есть. Ещё раз благодарю за помощь комрад!
MRY
Всех приветсвую. Ансибл ругается на: - name: install RHEL/CentOS packages yum: name: "{{ item }}" with_items: - "{{ rh_packages }}" when: (ansible_os_family == "RedHat") Говорит что depricated, просит в переменной вместо {{item}} использовать {{ packages }} но тогда перестает работать with_items: А он берет список пакетов из roles/blabla/defaults/main.yml в виде --- deb_packages: - curl - git - vim rh_packages: - bash-completion - epel-release.noarch - net-tools.x86_64 - git - vim - wget Как быть ? забить на варнинги или сейчас используют другое представление ??? какой сейчас best practice для установки пакетов в зависимости от дистрибутива ????
Timur
По поводу дистрибутива я выше как-то пример приводил. Нужно инклуд тасков в зависимости от факта делать
MRY
Можно линкануть на пример ???
MRY
ссылку имею ввиду
Timur
Вот тут смотрите: https://t.me/pro_ansible/69033
MRY
ок Спасибо
Timur
По поводу нового способа установки пакетов списком примеры есть в основной документации ансибла
Sergey
Подчистил.
Футуристичный
Коллеги, приветствую. Подскажите, как увеличить таймаут выполнения таска? Выполняю apt update и apt upgrade, когда ОС только что созданная задача не успевает выполниться, и прерывается с комментом to retry, use: --limit @/etc/ansible/playbook.retry, но со второго раза отрабатывает.
Vladislav 👻
Почему template постоянно может возвращать changed?
Nklya
Включи дифф в кфг и посмотри что меняется
Vladislav 👻
в конфиге именно или через --diff?
Vladislav 👻
Так, понял, почему, у меня в списке хостов из группы постоянно меняется последовательность... Есть идеи, как это можно устаканить?
Vladislav 👻
Сделать сортировку или есть какой-то более элегантный вариант?
Vladislav 👻
типа хосты в другом порядке пошли из-за этого идет changed
Timur
типа хосты в другом порядке пошли из-за этого идет changed
А где именно порядок у вас используется?
Vladislav 👻
он не используется
Timur
В каком таске?
Vladislav 👻
написал же, что т.к. лист не гарантирует последовательность элементов, то при заполнении конфига получается постоянно новая последовательность, отсюда идет diff
Vladislav 👻
Вот такая логика в конфиге: {% for h in groups[job.target_group] %} - "{{ hostvars[h]['ansible_host'] }}:{{ job.target_port }}" {% endfor %}
Timur
Именно поэтому таски в плейбуках - это лист, а не словарь
Vladislav 👻
блин, точно, что-то утром туплю
Vladislav 👻
тогда я не понимаю, почему возвращается другая последовательность
Timur
Потому что вы делаете луп по словарю
Timur
Который не гарантирует последовательность элементов
Vladislav 👻
в словаре же лист
Vladislav 👻
получается, при каждом запуске он заново собирается, причем рандомно
Vladislav 👻
😕
Nklya
можно посмотреть в жинже фильтр сортировки для лупа
Vladislav 👻
да, как раз колдую над этим
Vladislav 👻
да, пришлось сортировать лист, т.к. он формируется из словаря инвентори 🙁
Womchik
ppl, а как мне правильно ip из inventory вытащить? host1 ansible_hostname=192.168.1.1 debug: var: hostvars['host1'].ansible_hostname выдаёт host1
Pavel
конкретно в данном случае hostvars['host1']['ansible_default_ipv4']['address']
Womchik
А если ansible_host?
нет такой переменной
Timur
нет такой переменной
В инвентори вместо ansible_hostname поставьте ansible_host
Womchik
В инвентори вместо ansible_hostname поставьте ansible_host
это дубль получается, так как ansible_hostname мне сейчас там нужен
Timur
Попробуйте как я сказал
Womchik
Попробуйте как я сказал
я не могу сейчас убрать ansible_hostname=ip - тогда анлибл сервера не увидит
Womchik
добавлять ещё одну переменную с тем же значением не хочется
Timur
ansible_host на что?
Womchik
ааа. понял
Timur
ansible_hostname ансибл сам задаёт
Warrax
lineinfile?
- name: set hostname in netdata.conf        lineinfile:          path: /opt/netdata/etc/netdata/netdata.conf          regexp: ^#hostname=short_hostname          insertafter: ^#hostname=short_hostname          line: hostname = {{ ansible_hostname }}        notify:         - Restart NetData добавляет строку почему-то то в конец файла... где я ошибся?
Tadeusz
не ты первый, у кого lineinfile в конец файла добавляет)
Warrax
Некорректный регексп видимо
да, протупил - там табуляция в начале строки, нужно с другой стороны - $
Ruslan
Привет. Ни кто не сталкивался с проблемой, в ансибле не выполняется таск с установкой обновление пакета pip. Именно в ансибле. Напрямую через Пип пакет ставится, проблема при установке обновлении любого пакета.
Ruslan
Если использовать модуль pip