我有一个文件
/u/mybank/UNX/config/.unx_env
,其中包含以下内容:
export EF_OID=AP0084
export EF_PWD=mypass1
export OID=ap0085
export PWD=mypass2
export FDPWD=mypass2
export AP0085_PWD=mypass2
export SVR=AFFPROD
export TWO_TASK=db01
给定用户 ID
ap0085
在 Solaris 上,以下命令为我提供该用户 ID 的密码:
$ nawk 'tolower($0) ~ /\=ap0085/ {getline; print}' /u/mybank/UNX/config/.unx_env | awk -F= '{print $2}'
Output:
mypass2
我想在 ansible 中尝试相同的操作,并尝试了
raw:
和 shell:
模块。
虽然原始模块出错,但 shell 模块没有获取输出中的任何内容。
Ansible 玩法:
- name: Debug Search for the password
debug:
msg: "nawk 'tolower($0) ~ /\\={{ executeuser }}/ {getline; print}' /u/mybank/UNX/config/.unx_env | awk -F= '{print $2}'"
- name: Search for the password
shell: "nawk 'tolower($0) ~ /\\={{ executeuser }}/ {getline; print}' /u/mybank/UNX/config/.unx_env | awk -F= '{print $2}'"
become: true
become_user: "{{ copyuserondest }}"
ignore_errors: true
register: passfound
- debug:
msg: "pass found: {{ passfound.stdout }}"
输出:
TASK [Debug Search for the password] *******************************************
ok: [remotehost] => {
"msg": "nawk 'tolower($0) ~ /\\\\=ap0085/ {getline; print}' /u/mybank/UNX/config/.unx_env | awk -F= '{print $2}'"
}
TASK [Search for the password] *************************************************
changed: [remotehost]
TASK [debug] *******************************************************************
ok: [remotehost] => {
"msg": "pass found: "
}
如您所见,找到的密码为空。
您能否建议如何逃脱让相同的手动命令在 ansible 中工作?
对于给定的文件,一个最小的示例剧本
---
- hosts: localhost
become: false
gather_facts: false
vars:
USERID: AP0085
tasks:
- slurp:
src: unix.env
register: unix_env
- debug:
msg: "{{ unix_env.content | b64decode | regex_search(USERID ~ '_PWD=(.+)', '\\1') | first }}"
将产生
的输出TASK [debug] *****
ok: [localhost] =>
msg: mypass2
感谢