Неприятный обход, но, безусловно, возможно использовать вложенный запрос. Создайте временную таблицу MYVALUES со столбцом в ней. Вставьте свой список значений в таблицу MYVALUES. Затем выполните
select my_column from my_table where search_column in ( SELECT value FROM MYVALUES )
Ужасно, но жизнеспособной альтернативой, если ваш список значений очень велик.
Этот метод имеет дополнительное преимущество потенциально лучших планов запросов от оптимизатора (проверьте страница для нескольких значений, таблицы могут быть только один раз вместо одного значения и т. д.) могут сэкономить накладные расходы, если ваша база данных не кэширует подготовленные операторы. Ваши «INSERTS» должны выполняться в пакетном режиме, и таблица MYVALUES может потребоваться изменить, чтобы иметь минимальную блокировку или другие высоконадежные защиты.
Прежде всего, это не проблема. Вам нужно получить доступ к ключу для подключения к нескольким хостам.
Вы можете создать ssh-ключ на пульте и сохранить локальные все открытые ключи.
Добавьте их permenantly ssh config;
vim ~ / .ssh / config
IdentitiyFile ~/.ssh/pub.key
Если вам нужно больше узнать об этом , вы можете проверить здесь
Теперь вы можете получить доступ ко всем ключам без ключа. ENJOY>!
Хорошо, у вас есть два вопроса:
Как подключиться к разным хостам с разными SSH-ключами?
Создайте другой файл group_vars для каждого набора хостов и установите там учетные данные.
# group_vars/legacy
---
ansible_ssh_user: myuser
ansible_ssh_key: ~/.ssh/legacy_key.pem
Затем Ansible применит другой ключ, основанный на том, в какой группе находится каждый хост, просто так.
Как использовать разные учетные данные для каждого узла для повышения эскалации привилегий?
Еще раз поместите их в разные файлы group_vars для каждого набора хостов:
# group_vars/legacy
---
ansible_become_user: root
ansible_become_pass: "{{ vaulted_legacy_password }}"
Затем вы можете использовать ключевое слово become: yes
для эскалации привилегий, а Ansible будет применять правильные учетные данные для каждой группы. Если вы уже являетесь пользователем root, ключевое слово become
просто не будет иметь никакого эффекта.
А потом ... видите ли там {{ vaulted_legacy_password }}
переменную?
Лучшая практика, и только разумная вещь, чтобы сделать , если вы когда-либо делитесь этим кодом, заключается в создании файла Ansible Vault и сохранении ваших паролей там. Пароль Ansible Vault защищает ваши чувствительные переменные и позволяет расшифровать их во время работы.
Вы можете либо сделать весь ваш group_vars/legacy
файл сводчатым (если учетные данные являются единственной информацией в нем), либо создать папку group_vars / legacy с одним файлом открытого текста и одним зашифрованным файлом. Все файлы в подкаталоге group_vars будут получены и применены к группе с именем папки.
ansible_become_user: deploy
и ansible_become_pass: passw0rd1
в свой group_vars и запускаю свою игру, это не работает. Вместо этого я получаю либо эту ошибку: msg: Failed to lock apt for exclusive operation
, либо это: failed: [testserv1] => {"failed": true, "parsed": false} BECOME-SUCCESS-zddkeemojwrlxnblahblahhalbikigqgpwd
– risa_risa
18 October 2015 в 03:17
BECOME-SUCCESS
на вашем выходе, похоже, что команда становится командой (ей удается переключить выполняемые пользователем задачи с той, что вы ssh'd, как на пользователя deploy
), но все еще не имеет прав для выполнения этой задачи. Если вы входите в систему как deploy
и пытаетесь использовать apt вручную, это работает?
– nikobelia
18 October 2015 в 10:39
test/group_vars/new/some_file_with_a_passwd.yml
, я бы добавил следующее:ansible_sudo_pass=whateverThePasswordis
и все? (опять же, безопасность в стороне.) – risa_risa 15 October 2015 в 20:09