命令手动运行,但 ansible 失败

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

我有一个文件

/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 中工作?

awk ansible escaping pattern-matching solaris
1个回答
0
投票

对于给定的文件,一个最小的示例剧本

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

感谢

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