我正在学习Ansible,并且作为学习练习的一部分,我写了一本ansible剧本,其内容如下-
除了2件事之外,一切都很好-
数据库/用户创建脚本需要mysql root用户密码,如果我在本地运行,则提示我在运行时输入。但是,当从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
}