Ansible 装饰绳

问题描述 投票:0回答:2

我正在尝试编写一个角色来安装 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}')}}"

谢谢。

ansible
2个回答
1
投票

regex_findall的结果是一个列表,因为可能有更多匹配项。拿走最后一项

- set_fact: mysql_root_old_password: "{{ mysql_root_old_password.content| b64decode| regex_findall('generated for root@localhost: (.*)$', 'multiline=true')| last }}"
    

0
投票
根据你的描述

.my.cnf

上我得到带有引号和括号的密码...如何修剪它

我知道你喜欢阅读像

my.cnf.ini

 这样的 INI 文件

[client] user=root password=['A1234567890B']
其中键 

password

 的值看起来像 YAML 中包含一个元素的列表,并且结构没有改变,但您感兴趣的是不带前导和尾随方括号以及单引号的值。

这样做有多种可能性。


通过 Ansible

查找插件

--- - 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 控制机上执行和评估。

进一步问答

更多文档


通过 Ansible shell 模块,

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 }}"


请注意从 SQL 服务、

.cnf 文件、['

 角度来看的“
我获取带有引号和括号的密码 ... ['
'] ...如何修剪它?
']
 实际上是密码的一部分!

- name: Server template template: src: "my.cnf.ini" dest: "/root/.my.cnf"
如果这是正确的,那么它们对于服务的正常运行是必要的。

© www.soinside.com 2019 - 2024. All rights reserved.