拆分调试消息以在Ansible中提取消息的特定部分

时间:2018-08-07 19:53:49

标签: ansible

因此,我需要在我的剧本中使用调试信息的一部分,就像

---
  - name: extract  
    shell: grep "ScriptAlias /.*/" /etc/httpd/conf/httpd.conf
    register: st

  - debug:
      msg: "{{ st.stdout_lines | map('trim') | list }}"

并且该手册会在运行时打印出来

ok: [52.61.71.178] => {
    "msg": [
        "ScriptAlias /cgi-bin/ \"/var/www/cgi-bin/\""
    ]
}

所以我需要做的是将味精"ScriptAlias /cgi-bin/ \"/var/www/cgi-bin/\""放入数组中,并提取其中的最后一个元素"/var/www/cgi-bin/"

将味精中的最后一个元素提取到只能得到"/var/www/cgi-bin/"的位置的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

尝试如下操作。仅添加了regex_replace(来自Valdimir的答案)来获得您想要的东西。

     - hosts: localhost
       vars:
         lines:
           - "ScriptAlias /cgi-bin/ \"/var/www/cgi-bin/\""
       tasks:
        - debug:
           msg: "{{ item.split(' ')[2] | regex_replace('\"', '') }}"
          loop: "{{ lines }}"

输出应与::完全相同        "msg": "/var/www/cgi-bin/"

答案 1 :(得分:0)

split方法可以正常工作。输出被删节。

> ansible-playbook split_test.yml
    "msg": "\"/var/www/cgi-bin/\""

split_test.yml

- hosts: localhost                                                                           
  vars:                                                                                      
    lines:                                                                                   
      - "ScriptAlias /cgi-bin/ \"/var/www/cgi-bin/\""                                        
  tasks:                                                                                     
    - debug:                                                                                 
        msg: "{{ item.split(' ')[2] }}"                                                      
      loop: "{{ lines }}"