将一个数组转换为另一个数组

时间:2018-09-05 06:08:53

标签: ansible

我正在尝试将输出数组转换为另一个 array

假设我从命令获得以下输出:

kube-system        extension-apiserver-authentication   6         119d
kube-system        kube-dns                             0         119d
kube-system        kube-dns-autoscaler                  1         119d
kube-system        kube-flannel-cfg                     2         119d
kube-system        kubernetes-dashboard-settings        1         29d

我希望每个元素cut -d' ' -f2得到一个仅包含第2列的数组。

类似于Java 8中的list.stream().map(l -> l.getName()).collect(toList())

要在本地进行测试,我尝试使用ls -al作为

  1. ls -al一个文件夹;
  2. 获取第三列owner并返回所有者列表;

演示将是:


- name: Run in local to test loop
  hosts: 127.0.0.1 
  connection: local

  tasks:
  - name: List a folder
    shell: ls -al .
    register: result  

  - debug:
      msg: "{{ result.stdout_lines }}"

  - name: Get Second Separated by Space
    shell: echo '{{ item }}' | cut -d' ' -f3; # trying to get column 3
    loop: "{{ result.stdout_lines }}"
    register: result # this result is not what I am after :(

  - debug:
      msg: "{{ result }}"

对此有任何想法吗?

F.Y.I

我的PC中的ls -al输出类似于:

-rw-rw-r-- 1 hearen hearen     1 Sep   5 12:55 tmp

2 个答案:

答案 0 :(得分:0)

不要使用Ansible来实现您在Bash和don't parse ls output中编写的代码。

如果要获取所有者列表,可以使用以下方法:

$.ajax({
        url: "@Url.Action("GetState", "Country")",
        async: true,
        data: { search: search, StateId: state },
        success: function (data) {   
        }
  });

答案 1 :(得分:0)

我正在通过"{{ item.split()[2] }}"而不是cut -d' ' -f3解决此问题,使用 cut 元素有两种情况:

  1. 一个任务,我可以直接使用它来获取特定的column;

  - name: Get Second via split
    debug: 
      msg: "{{ item.split()[1] }}"
    loop: "{{ result.stdout_lines }}"
  1. 对于一些任务,我将使用循环越过块,您可以参考One loop over multiple Ansible tasksApply with_items on multiple tasksHow can Ansible loop over a sequence of tasks?