我正在设置一个MySQL服务器,并希望Ansible在安装过程中设置mysql-root
密码。
在互联网的帮助下,我想出了这个解决scheme:
- name: Set MySQL root password before installing debconf: name='mysql-server' question='mysql-server/root_password' value='{{mysql_root_pwd | quote}}' vtype='password' - name: Confirm MySQL root password before installing debconf: name='mysql-server' question='mysql-server/root_password_again' value='{{mysql_root_pwd | quote}}' vtype='password' - name: Install Mysql apt: pkg=mysql-server state=latest
mysql_root_pwd
是一个从Ansible Vault加载的variables。 这运行正常,但现在在服务器上有很多日志中的行:
Apr 10 14:39:59 servername ansible-debconf: Invoked with value=THEPASSWORD vtype=password question=mysql-server/root_password name=mysql-server unseen=None Apr 10 14:39:59 servername ansible-debconf: Invoked with value=THEPASSWORD vtype=password question=mysql-server/root_password_again name=mysql-server unseen=None
如何阻止Ansible将明文密码写入日志文件?
为防止logging机密信息的任务,请在syslog或其他系统日志中设置no_log:true:
- name: secret stuff command: "echo {{secret_root_password}} | sudo su -" no_log: true
任务的运行仍然会被logging下来,但是没有什么细节。 另外,使用的模块必须支持no_log,所以testing自定义模块。
有关更多详细信息,请参阅Ansible FAQ 。 它可以应用到整个剧本,但是输出会受到“审查”的一点点讨厌! 消息。
观察到的行为似乎是debconf模块中的一个错误。 我提交了一个错误报告 。
github上的用户bcoca指出,可以在任务中使用no_log: true
指令,设置密码以防止日志logging。 这是一个解决方法,这个工作对我来说,直到错误被修复。
我通过将Ansible版本升级到1.6.1来解决
sudo pip install ansible==1.6.1
根据Ansible文档 :
log_path
如果存在并在
ansible.cfg
configuration,Ansible将在指定位置logging有关执行的信息。 确保运行Ansible的用户对日志文件具有权限:log_path=/var/log/ansible.log
此行为默认情况下不是。 请注意,如果没有这个设置,那么将会logging被调用到被pipe理机器的系统日志的模块参数。 密码参数被排除在外。
听起来像在控制节点上设置log_path
将导致没有在目标节点上的日志。