我正在尝试编写一个角色来安装 MySQL 8 并遇到问题:
- name: Extract root password from logs into {{ mysql_root_old_password }} variable
ansible.builtin.slurp:
src: "{{ mysql_logfile_path }}"
register: mysql_root_old_password
#when: "'mysql' in ansible_facts.packages"
- name: Extract root password from logs into {{ mysql_root_old_password }} variable
set_fact:
mysql_root_old_password: "{{ mysql_root_old_password.content | b64decode | regex_findall('generated for root@localhost: (.*)$', 'multiline=true') }}"
#when: "'mysqld' in ansible_facts.packages"
- name: Get Server template
ansible.builtin.template:
src: "{{ item.name }}.j2"
dest: "{{ item.path }}"
loop:
- { name: "my.cnf", path: "/root/.my.cnf" }
notify:
- Restart mysqld
在
.my.cnf
上我得到带有引号和括号的密码:
[client]
user=root
password=['th6k(gZeJSt4']
如何修剪?
我尝试的:
- name: trim password
set_fact:
mysql_root_old_password2: "{{ mysql_root_old_password | regex_findall('[a-zA-Z0-9,()!@#$%^&*]{12}')}}"
谢谢。
regex_findall的结果是一个列表,因为可能有更多匹配项。拿走最后一项
- set_fact:
mysql_root_old_password: "{{ mysql_root_old_password.content|
b64decode|
regex_findall('generated for root@localhost: (.*)$', 'multiline=true')|
last }}"
我知道你喜欢阅读像在
.my.cnf
上我得到带有引号和括号的密码...如何修剪它
my.cnf.ini
[client]
user=root
password=['A1234567890B']
其中键 password
的值看起来像 YAML 中包含一个元素的列表,并且结构没有改变,但您感兴趣的是不带前导和尾随方括号以及单引号的值。这样做有多种可能性。
---
- hosts: localhost
become: false
gather_facts: false
tasks:
- name: Extract root password from INI file
debug:
msg: "{{ lookup('ini', 'password section=client file=my.cnf.ini') }}"
register: result
- name: Show result with type
debug:
msg:
- "{{ result.msg }}"
- "result.msg is of type {{ result.msg | type_debug }}"
- "Show password only {{ result.msg[0] }}" # the first list element
这种方法适用于控制节点。
与所有模板一样,查找在 Ansible 控制机上执行和评估。
进一步问答
.ini
和
.conf
有什么区别?
更多文档
sed
和
cut
。
---
- hosts: localhost
become: false
gather_facts: false
tasks:
- name: Extract root password from INI file
shell:
cmd: echo $(sed -n 's/^password=//p' my.cnf.ini | cut -d "'" -f 2)
register: result
- name: Show result
debug:
msg: "{{ result.stdout }}"
.cnf
文件、['
角度来看的“我获取带有引号和括号的密码 ... ['
'] ...如何修剪它?”
']
实际上是密码的一部分!
- name: Server template
template:
src: "my.cnf.ini"
dest: "/root/.my.cnf"
如果这是正确的,那么它们对于服务的正常运行是必要的。