首页 > 解决方案 > Ansible 警告“字符串字段中的类型列表已转换为字符串类型”

问题描述

我有一项为每个用户添加 Gnome 收藏夹的任务:

users:
  - name: username
    email: email@server.com
    favorites: "'pk1.desktop', 'pk2.desktop', 'pk3.desktop', pk4.desktop'"

- name: "[DCONF] Add favorites"
  dconf:
    key: /org/gnome/shell/favorite-apps
    value: "[{{ item.favorites }}]"
    state: present
  become: yes
  become_user: "{{ item.name }}"
  with_items: "{{ users }}"

我收到此错误:

[WARNING]: The value ['pk1.desktop', 'pk2.desktop', 'pk3.desktop', pk4.desktop'] (type list) in a string field was converted to u"['pk1.desktop', 'pk2.desktop', 'pk3.desktop', pk4.desktop']" (type string). If this does
not look like what you expect, quote the entire value to ensure it does not change.

我怎么能解决这个问题?

另外,我怎么能把它转换成这样:

users:
  - name: username
    email: email@server.com
    favorites: 
      - 'pk1.desktop'
      - 'pk2.desktop'
      - 'pk3.desktop'
      - 'pk4.desktop'

原因是我有很多这些最爱,这样我会更容易处理,也因为我想学习如何做到这一点;)

标签: ansible

解决方案


我无法重现您的警告消息(ansible 2.9.9)。请注意,最后一个值缺少单引号。

同时,由于为了简单起见,您希望过渡到在列表中声明您的值,因此以下内容应该允许您这样做并一起解决您的问题。

---
- name: Set favs
  hosts: somehost
  remote_user: someuser

  vars:
    users:
      - name: username
        email: email@server.com
        favorites:
          - pk1.desktop
          - pk2.desktop
          - pk3.desktop
          - pk4.desktop

  tasks:
    - name: "[DCONF] Add favorites"
      dconf:
        key: /org/gnome/shell/favorite-apps
        value: "{{ item.favorites | string }}"
        state: present
      become: yes
      become_user: "{{ item.name }}"
      with_items: "{{ users }}"

推荐阅读