Ansible:删除stdout中不需要的字符

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

我正在运行一个ansible play,我想解析kubect cluser-info命令的输出。

我期望得到的是:

    $ kubectl cluster-info
    Kubernetes master is running at https://192.168.60.11:6443
    KubeDNS is running at https://192.168.60.11:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

我实际从以下任务中获得了什么:

    - name: master_setup.yml --> Check if cluster is already running and exit if so
      shell: "kubectl cluster-info"
      failed_when: false
      register: rv_cluster_info
      environment:
        KUBECONFIG: "/etc/kubernetes/admin.conf"
      become: yes


    - name: master_setup.yml --> DEBUG
      debug:
        var: rv_cluster_info

这是:

ok: [kubernetes-master-1] => 
  rv_cluster_info:
    changed: true
    cmd: kubectl cluster-info
    delta: '0:00:00.174232'
    end: '2019-04-07 09:41:39.237907'
    failed: false
    failed_when_result: false
    rc: 0
    start: '2019-04-07 09:41:39.063675'
    stderr: ''
    stderr_lines: []
    stdout: |-
      [0;32mKubernetes master[0m is running at [0;33mhttps://192.168.60.11:6443[0m
      [0;32mKubeDNS[0m is running at [0;33mhttps://192.168.60.11:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy[0m

      To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
    stdout_lines:
    - "\e[0;32mKubernetes master\e[0m is running at \e[0;33mhttps://192.168.60.11:6443\e[0m"
    - "\e[0;32mKubeDNS\e[0m is running at \e[0;33mhttps://192.168.60.11:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy\e[0m"
    - ''
    - To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

我该如何摆脱这种烦人的\e[0;33东西?

编辑:显然这些是由kubectl默认打印的颜色代码。

ansible
1个回答
0
投票

这样做了

- name: master_setup.yml --> DEBUG REGEX
  debug:
    var: rv_cluster_info.stdout | regex_replace('\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]', '')

使用来自this的正则表达式回答。

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