English 中文(简体)
How to create new key: value items and add them to an existing list?
原标题:

*This is an Ansible question *

Here is my list:

  userdata.list:
  - ClassType: Full Time
    FirstName: Grace
    LastName: Higgins
    Username: g.higgins
  - ClassType: Part Time
    FirstName: Robert
    LastName: Miller
    Username: robmil
  - ClassType: Flexi
    FirstName: Jeffrey
    LastName: Keller
    Username: jeff.k

I want to append the following values to the existing list, looping for each user:

EmailAddress: {{ Username }} append to  @gmail.com 
OtherAddresses: primary:{{ Username }}@gmail.com,secondary:{{ Username }}@outlook.com
Registered: Yes

Expected output:

  userdata.list:
  - ClassType: Full Time
    FirstName: Grace
    LastName: Higgins
    Username: g.higgins
    EmailAddress: g.higgins@gmail.com
    OtherAddresses: primary:g.higgins@gmail.com,secondary:g.higgins@outlook.com
    Registered: Yes
  - ClassType: Part Time
    FirstName: Robert
    LastName: Miller
    Username: robmil
    EmailAddress: robmil@gmail.com
    OtherAddresses: primary:robmil@gmail.com,secondary:robmil@outlook.com
    Registered: Yes
  - ClassType: Flexi
    FirstName: Jeffrey
    LastName: Keller
    Username: jeff.k
    EmailAddress: jeff.k@gmail.com
    OtherAddresses: primary:jeff.k@gmail.com,secondary:jeff.k@outlook.com
    Registered: Yes

How do I create the dictionary to append the three new key: values, and loop for each user to produce the above output?

This is my current playbook:

- hosts: localhost
  tasks:
    - read_csv:
        path: /var/lib/awx/projects/file/creation.csv
        # key: FirstName 
        fieldnames: FirstName,LastName,ClassType
        delimiter:  , 
      register: userdata

    - debug:
        var: userdata.list
最佳回答

Given the mre data

  userdata:
    - Username: g.higgins
    - Username: robmil
    - Username: jeff.k

Use Jinja and create the dictionary update

  update: |
      {% filter from_yaml %}
      {% for user in  userdata|map(attribute= Username ) %}
      - EmailAddress: {{ user }}@gmail.com
        OtherAddresses:  primary:{{ user }}@gmail.com,secondary:{{ user }}@outlook.com 
        Registered:  Yes 
      {% endfor %}
      {% endfilter %}

gives

  update:
  - EmailAddress: g.higgins@gmail.com
    OtherAddresses: primary:g.higgins@gmail.com,secondary:g.higgins@outlook.com
    Registered:  Yes 
  - EmailAddress: robmil@gmail.com
    OtherAddresses: primary:robmil@gmail.com,secondary:robmil@outlook.com
    Registered:  Yes 
  - EmailAddress: jeff.k@gmail.com
    OtherAddresses: primary:jeff.k@gmail.com,secondary:jeff.k@outlook.com
    Registered:  Yes 

zip and combine the items of the lists

    - set_fact:
        userdata: "{{ userdata|zip(update)|map( combine ) }}"

Example of a complete mre playbook for testing

shell> cat pb.yml
- hosts: localhost

  vars:

    userdata:
      - Username: g.higgins
      - Username: robmil
      - Username: jeff.k

    update: |
      {% filter from_yaml %}
      {% for user in  userdata|map(attribute= Username ) %}
      - EmailAddress: {{ user }}@gmail.com
        OtherAddresses:  primary:{{ user }}@gmail.com,secondary:{{ user }}@outlook.com 
        Registered:  Yes 
      {% endfor %}
      {% endfilter %}

  tasks:

    - debug:
        var: update

    - set_fact:
        userdata: "{{ userdata|zip(update)|map( combine ) }}"
    - debug:
        var: userdata

gives

shell> ansible-playbook pb.yml

PLAY [localhost] ******************************************************************************

TASK [debug] **********************************************************************************
ok: [localhost] => 
  update:
  - EmailAddress: g.higgins@gmail.com
    OtherAddresses: primary:g.higgins@gmail.com,secondary:g.higgins@outlook.com
    Registered:  Yes 
  - EmailAddress: robmil@gmail.com
    OtherAddresses: primary:robmil@gmail.com,secondary:robmil@outlook.com
    Registered:  Yes 
  - EmailAddress: jeff.k@gmail.com
    OtherAddresses: primary:jeff.k@gmail.com,secondary:jeff.k@outlook.com
    Registered:  Yes 

TASK [set_fact] *******************************************************************************
ok: [localhost]

TASK [debug] **********************************************************************************
ok: [localhost] => 
  userdata:
  - EmailAddress: g.higgins@gmail.com
    OtherAddresses: primary:g.higgins@gmail.com,secondary:g.higgins@outlook.com
    Registered:  Yes 
    Username: g.higgins
  - EmailAddress: robmil@gmail.com
    OtherAddresses: primary:robmil@gmail.com,secondary:robmil@outlook.com
    Registered:  Yes 
    Username: robmil
  - EmailAddress: jeff.k@gmail.com
    OtherAddresses: primary:jeff.k@gmail.com,secondary:jeff.k@outlook.com
    Registered:  Yes 
    Username: jeff.k

PLAY RECAP ************************************************************************************
localhost: ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
问题回答

暂无回答




相关问题
Finding a class within list

I have a class (Node) which has a property of SubNodes which is a List of the Node class I have a list of Nodes (of which each Node may or may not have a list of SubNodes within itself) I need to be ...

How to flatten a List of different types in Scala?

I have 4 elements:List[List[Object]] (Objects are different in each element) that I want to zip so that I can have a List[List[obj1],List[obj2],List[obj3],List[obj4]] I tried to zip them and I ...

How to remove unique, then duplicate dictionaries in a list?

Given the following list that contains some duplicate and some unique dictionaries, what is the best method to remove unique dictionaries first, then reduce the duplicate dictionaries to single ...

Is List<> better than DataSet for UI Layer in ASP.Net?

I want to get data from my data access layer into my business layer, then prepare it for use in my UI. So i wonder: is it better to read my data by DataReader and use it to fill a List<BLClasses&...

What is the benefit to using List<T> over IEnumerable<T>?

or the other way around? I use generic lists all the time. But I hear occasionally about IEnumerables, too, and I honestly have no clue (today) what they are for and why I should use them. So, at ...

灵活性:在滚动之前显示错误的清单

我有一份清单,在你滚动之前没有显示任何物品,然后这些物品就显示。 是否有任何人知道如何解决这一问题? 我尝试了叫人名单。

Converting Dictionary to List? [duplicate]

I m trying to convert a Python dictionary into a Python list, in order to perform some calculations. #My dictionary dict = {} dict[ Capital ]="London" dict[ Food ]="Fish&Chips" dict[ 2012 ]="...

热门标签