无法将命令输出传递给变量并无法在以后的另一个任务中使用

时间:2020-05-17 21:59:01

标签: ansible

我的Ansible剧本。

  • 主机:全部
vars:

      alias_name: '{{ alias }}'
      upload_file: '{{ upload }}'
      pack1: /home/ansible

 tasks:
  - name: Copy file with owner and permissions
    copy:
     src: '{{ upload_file }}'
     dest: '{{ pack1 }}'
     owner: ansible
     group: ansible
     mode: '0777'

 - name: return motd to registered var
    shell: "ls -Art | tail -n 1"
    args:
     chdir: '{{ pack1 }}'
     register: mymotd


  - name: Import SSL certificate from google.com to a given cacerts keystore
    java_cert:
     cert_path: '{{ pack1 }}/{{ mymotd.stdout }}'
     cert_alias: '{{ alias_name }}'
     keystore_path: '/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64/jre/lib/security/cacerts'
     keystore_pass: changeit
     state: present

错误:

FAILED! => {
    "changed": false, 
    "invocation": {
        "module_args": {
            "_raw_params": "ls -Art | tail -n 1", 
            "chdir": "/home/ansible", 
            "register": "mymotd", 
            "warn": true
        }
    }, 
    "msg": "Unsupported parameters for (command) module: register Supported parameters include: _raw_params, _uses_shell, argv, chdir, creates, executable, removes, stdin, stdin_add_newline, strip_empty_ends, warn"
}

PLAY RECAP ***********************************************************************************************************************************
172.16.217.129             : ok=2    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

还有其他方法可以建议我做同样的事情吗?我的主要目的是将命令输出传递给变量,并稍后使用该变量附加到证书路径中。

1 个答案:

答案 0 :(得分:1)

您需要像下面一样纠正return motd to registered var任务的缩进。还可以使用shell模块而不是command来使用“ <”,““>”,“ |”,“;”之类的操作。和“&”。

请按照正确的YAML syntax格式化可播放的剧本。

  - name: return motd to registered var
    shell: "ls -Art | tail -n 1"
    args:
      chdir: '{{ pack1 }}'
    register: mymotd
相关问题