Alex
и это еще я напрямую с ребятами из гугла общался, которые отвечали за эти модули :)
Oleg
Есть способ удалить содерживое файла не модулем shell и не удаляя файл? Спасибо.
George
типа echo "" > XXX ?
George
https://github.com/ansible/ansible-modules-core/issues/902 - видимо, это?
George
https://github.com/ansible/ansible-modules-core/issues/902#issuecomment-164043327
George
как один из способов это сделать @iNulll
Oleg
George
см. выше
𝚔𝚟𝚊𝚙𝚜
Вопрос не сколько по Ansible сколько по организации логики выполнения.
Есть роль которая может запускаться конкурентно в несколько потоков. Каждый запущенный инстанс роли ничего не знает о других запущенных инстансах этой же роли.
Запущенные роли могут ходить на один и тот же хост и запрашивать / обновлять там разного рода информацию.
Проблема:
После определённого количества установленных конкурентных соединений новые ssh-сессии могут дропаться.
Вопрос:
Как реализовать последовательное выполнение?
Думал есть какая-то опция для ssh-клиента, которая позволит держать открытым не более n сессий на конкретный хост
Либо использовать lock-файл. Но в этом случае возникает другой вопрос:
Если один выполняет, остальные 40 ждут пока lock-файл не исчезнет. Когда первый завершил выполнение, удалил locking, то как избежать что все 40 ломанутся выполнять свои задачи?
Anonymous
Anonymous
собствеено виду что выводиться более красиво
Dr. L.S.Dee
Вопрос не сколько по Ansible сколько по организации логики выполнения.
Есть роль которая может запускаться конкурентно в несколько потоков. Каждый запущенный инстанс роли ничего не знает о других запущенных инстансах этой же роли.
Запущенные роли могут ходить на один и тот же хост и запрашивать / обновлять там разного рода информацию.
Проблема:
После определённого количества установленных конкурентных соединений новые ssh-сессии могут дропаться.
Вопрос:
Как реализовать последовательное выполнение?
Думал есть какая-то опция для ssh-клиента, которая позволит держать открытым не более n сессий на конкретный хост
Либо использовать lock-файл. Но в этом случае возникает другой вопрос:
Если один выполняет, остальные 40 ждут пока lock-файл не исчезнет. Когда первый завершил выполнение, удалил locking, то как избежать что все 40 ломанутся выполнять свои задачи?
Ну кто-то из 40 добежит первым и создаст свой лок, так? Остальные 39 покурят пока.
А вообще, хоть я и не понимаю ничего в этом вашем красноглазии, кажется мне, что с логикой что-то не так. Но это, разумеется, вам виднее.
Anonymous
только не оч понятно, как это решило вопрос обрашения к конкретному value зная имя key_name
𝚔𝚟𝚊𝚙𝚜
Timur
George
George
ибо таймаут может истечь, а лок файл не освободиться. Ваши действия?
𝚔𝚟𝚊𝚙𝚜
George
Timur
Я ж изначально уточнял специально - что должно быть на выходе
Anonymous
похоже да, я вчера адски протупил с жтим
Timur
🤦♂️
George
поток 1 заблочил ресурс 1 и ждет ресурс 2
поток 2 заблочил ресурс 2 и ждет ресурс 1
George
George
или вообще напиши оператор куба
Anonymous
да ) был бы благодарен
Timur
да ) был бы благодарен
{{ tags | items2dict }}
Which turns:
tags:
- key: Application
value: payment
- key: Environment
value: dev
into:
Application: payment
Environment: dev
Anonymous
пойду равлекаться, спасибо
cent
Коллеги, а как прокинуть переменные в tasks из переменной?
- debug: var=some
vars: "{{ variable_dict_with_some }}"
𝚔𝚟𝚊𝚙𝚜
или вообще напиши оператор куба
Да я думал об этом, уже даже какой-никакой прототип написал, просто думаю что если решить этот вопрос с lock-файлами, то и с operator-sdk получится весьма здорово
Anonymous
@nett00n будет жить. Поприветствуем!
𝚔𝚟𝚊𝚙𝚜
В идеале конечно создавать лок не ансиблом а непосредственно перед запуском каждого таска и удалять его по завершению таска, так будет быстрее и не будет блокироваться исполнение остальных тасков в плейбуке
𝚔𝚟𝚊𝚙𝚜
Вот и думаю, может есть какая специфическая опция для ssh клиента, или ansible_ssh_executable переопределить
nett00n
Привет, подскажите, в чём я не прав с синтаксосом в таске:
- name: Copy jira-{{ item }}.example.ru nginx config
template:
src: templates/jira.example.ru.conf.j2
dest: "/etc/nginx/sites-enabled/jira{{ item }}.example.ru.conf"
mode: '0644'
backup: true
notify: Reload nginx
tags: nginx_config_jira_jira_example,nginx_config_jira
loop:
- {{ item: "prod", when "'prod' in groups" }}
- {{ item: "dev", when "'dev' in groups" }}
George
nett00n
а что ты хочешь
подставлять dev/prod в имя файла в зависимости от среды
Anonymous
а есть более менее рабочий пример ?
Timur
George
George
не проще просто без лупа сделать, а имя среды положить в переменную типа jira_environment и ее одну подставлять?
Timur
Sergey
nett00n
не проще просто без лупа сделать, а имя среды положить в переменную типа jira_environment и ее одну подставлять?
слишком анонимизировал. У меня есть переменная с названием среды, но она не совпадает с тем, что я хочу подставлять
должно было быть так:
- name: Copy jira{{ item }}.example.ru nginx config
template:
src: templates/jira.example.ru.conf.j2
dest: "/etc/nginx/sites-enabled/jira{{ item }}.example.ru.conf"
mode: '0644'
backup: true
notify: Reload nginx
tags: nginx_config_jira_jira_example,nginx_config_jira
loop:
- {{ item: "" when "'prod' in groups" }}
- {{ item: "-test" when "'dev' in groups" }}
George
это все в рамках одного хоста? или это роль такая? и прокатываться все равно будет ЛИБО одно, ЛИБО другое
Sergey
Всё равно не надо так. Это элементарно через group_vars и переменную для группы all делается.
nett00n
да, должно прокатываться либо одно либо другое на хост, в зависимости от того, в каком сегменте.
Сейчас этот кусок написан просто как два таска с when
Timur
Sergey
Timur
Ivan
Привет! а как мне из этого сделать list, в котором будет первый элемент этот дикт?
ok: [localhost] => {
"instance_config_dict": {
"address": "84.201.129.108",
"identity_file": "id_rsa.pub",
"instance": "ubuntu18",
"port": "22",
"user": "ubuntu"
}
}
Я попробовал | list , но получается фигня в виде:
"ansible_facts": {
"instance_conf": [
"instance",
"user",
"port",
"identity_file",
"address"
]
}
Ivan
как-то комбинировать надо с .values()?
Timur
Привет! а как мне из этого сделать list, в котором будет первый элемент этот дикт?
ok: [localhost] => {
"instance_config_dict": {
"address": "84.201.129.108",
"identity_file": "id_rsa.pub",
"instance": "ubuntu18",
"port": "22",
"user": "ubuntu"
}
}
Я попробовал | list , но получается фигня в виде:
"ansible_facts": {
"instance_conf": [
"instance",
"user",
"port",
"identity_file",
"address"
]
}
А второй элемент какой будет?
Ivan
А второй элемент какой будет?
а не будет второго элемента
мне надо из этого замутить подобную структуру:
```
"instance_conf": [
{
"address": "192.168.130.49",
"identity_file": "/tmp/temporary_ssh_key",
"instance": "node_ubuntu18",
"port": "22",
"user": "user"
}
]
```
Ivan
а у меня теряются значения почему-то
Timur
Timur
Что у вас за задача исходно?
Ivan
задача — сформировать instance_config.yml для молекулы
Timur
Timur
Вы свой delegated драйвер пишете?
Ivan
Привет! а как мне из этого сделать list, в котором будет первый элемент этот дикт?
ok: [localhost] => {
"instance_config_dict": {
"address": "84.201.129.108",
"identity_file": "id_rsa.pub",
"instance": "ubuntu18",
"port": "22",
"user": "ubuntu"
}
}
Я попробовал | list , но получается фигня в виде:
"ansible_facts": {
"instance_conf": [
"instance",
"user",
"port",
"identity_file",
"address"
]
}
дык вот тут проблема же.
Сделать странное
Timur
Делаете плейбуку create/destroy?
Ivan
Делаете плейбуку create/destroy?
Ага, делаю.
Destroy быстро сделал, там всего лишь терраформовское.
А вот чтобы молекуле передать дальше данные. на какой хост и с чем идти, у меня проблем
Timur
Ivan
Можете на наши примеры драйверов глянуть для ориентира
Примерно все, что я видел, копиапстят древнюю магию типа
- name: Dump instance config
copy:
# NOTE(retr0h): Workaround for Ansible 2.2.
# https://github.com/ansible/ansible/issues/20885
content: "{{ instance_conf | to_json | from_json | molecule_to_yaml | molecule_header }}"
ну и плейбук у всех почти один на гите
Timur
Вот тут например:
https://github.com/lean-delivery/ansible-molecule-drivers
Ivan
Timur
Ivan
ваще никаких претензий.
Просто у меня поему-то стадия Convert instance config dict to a list не работает, как показал выше.
Возможно, потому что я пока без .results это делаю, но имхо влияеть не должно
Artur
привет всем.
не могу понять в чём косяк.
имеется mysql сервак в контейнере.
ансайблом выполняю
- name: recreate/create database
mysql_db:
login_host: 127.0.0.1
login_user: root
login_password: '{{ mysql_admin_password }}'
name: '{{ mysql_item.0.schema }}'
state: '{{ mysql_item.1 }}'
with_nested:
- '{{ local_item.db }}'
- [ "absent","present"]
loop_control:
loop_var: mysql_item
а в ответ ловлю
unable to find /root/.my.cnf. Exception message: (2013, \"Lost connection to MySQL server at 'reading initial communication packet
файла этого действительно нет, и зачем, если я казал логин и пасс для подключения
Kirill
Артём
А есть ли приличный способ ансиблом сделать так, чтобы пакет был установлен из правильного репо? С реинсталлом в случае, если уже стоит из неправильного?
Sergey
Sergey
Т.к. в модуле ансибла нет концепта "правильной" и "неправильной" репы.
inqfen