Я изучаю Ansible, и как часть моего учебного упражнения я написал ANSIBLE Playbook, которая выполняет следующие действия:
- Настройка структуры каталогов резервного копирования базы данных MySQL на удаленных серверах в соответствии с нашим требованием
- копирует некоторые сценарии на удаленные серверы
- Запускает сценарий создания базы данных / пользователя на удаленных серверах
Все отлично работает, кроме двух вещей -
Сценарий создания базы данных / пользователя требует наличия пароля пользователя root mysql, который, если я запускаю локально, выдает запрос на ввод во время выполнения.Тем не менее, при удаленном запуске с ansible, сервер не запрашивает пароль и скрипт завершается неудачно.В качестве обходного пути я жестко кодирую пароль в скрипте на удаленном сервере, и он отлично работает.
Внутри этого скрипта я создаю скрытый файл.Опять же, при локальном запуске скрытый файл создается, но с удаленного сервера, кажется, команда для создания скрытого файла игнорируется
---
- hosts: database-servers
tasks:
- name: create directories, if not existing
file:
path: "{{ item }}"
state: directory
mode: 0775
become: yes
become_user: mysql
with_items:
- /my/location/backups/db1
- /my/location/scripts
- /my/location/backups/db2
- /my/location/log
- /my/location/bk/scripts
- name: copy files to db servers
copy:
src: "{{ item }}"
dest: "/my/location/scripts"
mode: 0755
become: yes
become_user: mysql
with_fileglob:
- "/my/location/scripts/*.sh"
- name: run script with argument
script: /my/location/scripts/createDbUser.sh --host=localhost --database=testdb --user=test
Код, который используется для создания скрытого файла :-
CRED_FIL="/some/location/scripts/.selp"
BACK_PASS=$(generatePassword)!
--
--
--
function createBackupUserCredentialFile()
{
if [[ ! -e ${CRED_FIL} ]]; then
echo ${BACK_PASS} > ${CRED_FIL}
chmod 640 ${CRED_FIL}
_success "Credential file created.."
else
_success "Credential file existing. No change is made"
fi
}