George
Условный os_server возвращает критически важную информацию (uuid инстанса, который он только что запустил). Предложение никогда не смотреть на значения, которые возвращает модуль - утопия и шапкозакидательство.
Sergey
Sergey
И dynamic inventory - тоже.
George
А setup ты техниченько обошёл. нет такого модуля, да?
Sergey
George
Ты юлишь. setup это action plugin, но для нашего разговора "никогда не используй вовзращаемые значения модуля" это никакой разницы не играет. Есть масса _info модулей (официальная рекомендация в dev guide переименовать из с _facts на `_info`) - и ансибл полон таких модулей. Часть их них даже в base осталась.
Sergey
Ты юлишь. setup это action plugin, но для нашего разговора "никогда не используй вовзращаемые значения модуля" это никакой разницы не играет. Есть масса _info модулей (официальная рекомендация в dev guide переименовать из с _facts на `_info`) - и ансибл полон таких модулей. Часть их них даже в base осталась.
Вот не надо "ля-ля".
Почитай уже исходники.
setup - модуль, ибо живёт в ansible/modules/system/setup.py, и выглядит как
module = AnsibleModule(
argument_spec=dict(
gather_subset=dict(default=["all"], required=False, type='list'),
gather_timeout=dict(default=10, required=False, type='int'),
filter=dict(default="*", required=False),
fact_path=dict(default='/etc/ansible/facts.d', required=False, type='path'),
),
supports_check_mode=True,
)
Sergey
Если это плагин..... нутыпонел.
George
ты уходишь от вопроса про "не-использование возвращаемых значений". Кто их возвращает - модуль или плагин никакой роли не играет. register или не regsiter.
Aleksey
Вот не надо "ля-ля".
Почитай уже исходники.
setup - модуль, ибо живёт в ansible/modules/system/setup.py, и выглядит как
module = AnsibleModule(
argument_spec=dict(
gather_subset=dict(default=["all"], required=False, type='list'),
gather_timeout=dict(default=10, required=False, type='int'),
filter=dict(default="*", required=False),
fact_path=dict(default='/etc/ansible/facts.d', required=False, type='path'),
),
supports_check_mode=True,
)
хм. а что должно быть в /etc/ansible/facts.d ? yaml с фактами ?
George
George
Скрипт - исполняемый
Sergey
George
https://medium.com/opsops/custom-facts-for-ansible-ade5f78d6d94
Aleksey
кажется я в какой то момент когда прочитал об этом на столько весь ахуел что решил что никогда это не буду использовать
Aleksey
а как выключить не нашёл
Sergey
George
Только если ты эти значения в модуль передавать будешь. наверное, если туды lookup засунуть, то он исполнится. Но надо проверять.
George
Т.е по факту setup'а ничего плохого не будет. а вот если ты file path={{ansible_local.fact_name}} - то, наверное, может. Хотя 90% там !!unsafe.
George
Ладно, за параметры роли спасибо, по остальному не согласен. Но уже пора спать. /offline
Sergey
Aleksey
Sergey
Aleksey
Вон Георгий пишет что оно будет в ansible_local: {}
Sergey
Значит, я ошибся. Ткнул в исходники - точно, ansible_local.
Aleksey
нее. я соображаю над атакой
Aleksey
очень очевидный вектор атаки. наверняка прикрыт
George
Только если его использовать. Джинжа ленивая. И может быть помечена unsafe, тогда не выполнится.
George
Google: !!unsafe ansible
Aleksey
ну факты они как бы нужны что бы их использовать
Aleksey
а на плейбуки типа кубспрей вполне можно целится
George
Кубспрей использует кастомные факты?
Aleksey
я вооще не знаю ни кого кто их использовал бы
Sergey
Sergey
^^^ 👍
Aleksey
я почему то не верю ноде.
George
Aleksey
и это не часть bizantine problem
Aleksey
я считаю что ноду могли поднять с бекапа.
Aleksey
и там может быть что угодно в фактах
Aleksey
или из снапшота
Sergey
Кастомных это не касается.
Ну да, ну да.....
# push facts to main namespace
if C.INJECT_FACTS_AS_VARS:
all_vars = combine_vars(all_vars, wrap_var(clean_facts(facts)))
else:
# always 'promote' ansible_local
all_vars = combine_vars(all_vars, wrap_var({'ansible_local': facts.get('ansible_local', {})}))
George
Не, это решение другой проблемы. При сетапе надо ребуты и т.д. не глядя, а потом надо осторожно. Вот факт что продакшн мы ставим после начального сетапа. Получается очень кратко и надёжно.
Aleksey
так пацаны, я не понял. а почему все делают флаги для запуска сервисов и зачем они все их доблестно перечисляют в ExecStart=
почему это по нормальному не делать через EnviromnetFile=
в который положить
ARGS= "--help"
и написать ExecStart=/bin/myproga $ARGS
Aleksey
коллеги а я буду гореть в аду за
when: item.when | bool ?
George
Bool это не то, что ты думаешь.
Aleksey
djan
Arturd
The following example sets values for two role variables of role2. role1 is used in the same way as the previous example. Any defaults and vars variables are overridden when role2 is used.
---
- hosts: remote.example.com
roles:
- role: role1
- role: role2
var1: val1
var2: val2
Another equivalent YAML syntax which you might see in this case is:
---
- hosts: remote.example.com
roles:
- role: role1
- { role: role2, var1: val1, var2: val2 }
There are situations in which this can be harder to read, even though it is more compact.
IMPORTANT
Role variables set inline (role parameters), as in the preceding examples, have very high precedence. They will override most other variables.
Be very careful not to reuse the names of any role variables that you set inline anywhere else in your play, since the values of the role variables will override inventory variables and any play vars.
Arturd
Variable precedence can be confusing when working with role variables in a play.
• Almost any other variable will override a role's default variables: inventory variables, play vars, inline role parameters, and so on.
• Fewer variables can override variables defined in a role's vars directory. Facts, variables loaded with include_vars, registered variables, and role parameters are some of the variables that can do that. Inventory variables and play vars cannot. This is important because it helps keep your play from accidentally messing up the internal functioning of the role.
• However, variables declared inline as role parameters, like the last of the preceding examples, have very high precedence. They can override variables defined in a role's vars directory. If a role parameter has the same name as a variable set in play vars, a role's vars, or an inventory or playbook variable, the role parameter overrides the other variable.
Arturd
Anonymous
- name: "Load environment variables!"
shell:
cmd: "source /etc/profile.d/maven.sh"
почему после этого выдается ошибка в убунте? если тоже самое вставляешь в сам терминал то все ок
Anonymous
и на centos тоже все отрабатывает
Anonymous
ошибка такая
fatal: [192.168.60.5]: FAILED! => {"changed": true, "cmd": "source /etc/profile.d/maven.sh", "delta": "0:00:00.002493", "end": "2020-11-06 23:05:38.537560", "msg": "non-zero return code", "rc": 127, "start": "2020-11-06 23:05:38.535067", "stderr": "/bin/sh: 1: source: not found", "stderr_lines": ["/bin/sh: 1: source: not found"], "stdout": "", "stdout_lines": []}
Sebor▂▅▇█▓▒░
ошибка такая
fatal: [192.168.60.5]: FAILED! => {"changed": true, "cmd": "source /etc/profile.d/maven.sh", "delta": "0:00:00.002493", "end": "2020-11-06 23:05:38.537560", "msg": "non-zero return code", "rc": 127, "start": "2020-11-06 23:05:38.535067", "stderr": "/bin/sh: 1: source: not found", "stderr_lines": ["/bin/sh: 1: source: not found"], "stdout": "", "stdout_lines": []}
Потому что в убунте /bin/sh - это симлинк к dash, у которого нет команды source
И да, ансиболь здесь не при чем
Anonymous
Anonymous
я думал модуль shell просто вводит в терминал удаленной машины то что в кавычках, нет?
Sebor▂▅▇█▓▒░
Ты не знаешь, что такое shell?
Anonymous
ansible.builtin.shell – Execute shell commands on targets - из справки ансибла
Anonymous
вот я и хочу чтоб он сделал ексекуте команд
Sebor▂▅▇█▓▒░
У тебя нет базовых знаний
Anonymous
Andrey
Andrey
Ему проще про оболочки загуглить
Anonymous
Sebor▂▅▇█▓▒░
Anonymous
ну оболочка это типа программа которая обеспечивает cli
Andrey
О, погуглил
Anonymous
но разница то в чем? ансибл же должен войти в систему и ввести команду
Anonymous
Sebor▂▅▇█▓▒░