【问题标题】:Change Elasticsearch password with Ansible使用 Ansible 更改 Elasticsearch 密码
【发布时间】:2023-01-21 19:52:43
【问题描述】:
我已经使用 ansible AWX 在 Windows 服务器上安装了 Elasticsearch。
现在我正在尝试将初始密码重置为我的新密码(也使用 ansible)。
我知道我可以手动完成:
D:\elasticsearch-8.6.0\bin\elasticsearch-reset-password -b -u elastic -i
但我找不到一种方法来做到这一点/通过 ansible 阅读它。
我还可以使用 ansible 发送 API 请求:
- name: Push password
ansible.windows.win_uri:
url: http://localhost:9200/_security/user/_password?pretty
method: PUT
url_username: elastic
url_password: my_password
body:
password: my_new_password
headers:
Content-Type: "application/json"
但它需要我提供旧密码,在我手动重置它之前我不知道它(这就是我试图自动化的)。
有没有办法用ansible做到这一点?
【问题讨论】:
标签:
windows
elasticsearch
ansible
【解决方案1】:
最有效的方法是直接将密码重置为目标密码。但是由于您只能与elasticsearch-reset-password 交互地执行此操作,因此这需要使用ansible.builtin.expect module,不幸的是available only for linux hosts
所以在windows下,恐怕唯一的选择是:
- 重置为随机密码并在变量中读取
- 将随机密码更改为您要配置的密码
发出以下命令:
elasticsearch-reset-password -u elastic -b
在stdout 上输出如下内容:
Password for the [elastic] user successfully reset.
New value: dTrR*tAdnCCkTZ4+Edgd
所以我们要查找的信息在最后一行
考虑到这一点,下面的(未经测试的)剧本应该可以达到您的预期(或者至少让您走上正轨)。
- name: Reset elastic user password to random
ansible.builtin.win_command: elasticsearch-reset-password -u elastic -b
register: reset_cmd
- name: Push password
vars:
my_password: "{{ reset_cmd.stdout_lines[-1]
| regex_replace('^New value: (.*)$', '\1') }}"
ansible.windows.win_uri:
url: http://localhost:9200/_security/user/_password?pretty
method: PUT
url_username: elastic
url_password: "{{ my_password }}"
body:
password: "verysecurenewpassword"
headers:
Content-Type: "application/json"