如何使用ansible为mariadb/mysql数据库设置随机(32个字符的字母数字)根密码并将其保存到 ~/.my.cnf
文件(允许命令查找此密码)?
它应该只配置一次,如果playbook运行多次,则不会每次都更改密码。
这将使用来自变量的密码。
如果我使用这个,它会在每次运行playbook时更改密码:(并且它无法保存密码-如果playbook在此任务之后被中断,密码将丢失)
- name: "Change database root user password"
mysql_user:
name: root
password: "{{ lookup('password','/dev/null chars=ascii_letters,digits length=32') }}"
host: "{{ item }}"
check_implicit_admin: yes
priv: "*.*:ALL,GRANT"
state: present
when: mysql_root_result.stat.exists == False
with_items:
- localhost
- "::1"
- 127.0.0.1
1条答案
按热度按时间disbfnqx1#
一些假设:
根用户被
'root'@'localhost'
需要删除其他本地根用户这些任务需要具有容错性。如果中断,应尽可能重新运行
ansible任务以根用户身份运行-
~/.my.cnf
扩展到/root/.my.cnf
任何需要密码的东西都可以从~/.my.cnf
(所有的普通工具都可以,只要它们以正确的用户身份运行,root
在这种情况下)概述:
这将使用以下命令生成根密码
它把它保存到
~/.my.cnf.new
(以确保在设置之前它在服务器上可用。如果中断,允许(手动)恢复)它在数据库中设置密码
它重命名文件(复制
mv
在两个任务中的功能(硬链接和删除)(link
以及unlink
)它清除任何其他等效用户,如
'root'@'127.0.0.1'
,'root'@'::1'
,'root'@'<hostname>'
(使用一些事实来确保大多数可能性被击中)密码配置模板:('templates/my\u passwd.cnf.j2'相对于角色目录)
任务: