首页 > 解决方案 > 如何解决警告:字符串字段中的值 4(类型 int)在 Ansible 中被转换为 u'4'(类型字符串)?

问题描述

我已经在 Ansible 剧本中解码了额外的变量。我将额外的变量作为编码格式传递。我正在解码额外的变量并解析代码中的键和值。代码是:

meta="{"hostname":"oracleserver","username":"root","password":"admin@123","new_disk":"/dev/sdb","vg_name":"ts","lv_name":"tsdev","mnt_point":"/dev/sdb1","lv_size":"3G"}"

我已将编码的元变量作为 base64encode 传递,如下所示:

ansible-playbook init.yml -e meta=eyJob3N0bmFtZSI6Im9yYWNsZXNlcnZlciIsInVzZXJuYW1lIjoicm9vdCIsInBhc3N3b3JkIjoiYWRtaW5AMTIzIiwibmV3X2Rpc2siOiIvZGV2L3NkYiIsInZnX25hbWUiOiJ0cyIsImx2X25hbWUiOiJ0c2RldiIsIm1udF9wb2ludCI6Ii9kZXYvc2RiMSIsImx2X3NpemUiOiIzRyJ9
- name: creating the custom inventory at run time   
  hosts: localhost
  tasks:
    - name: Getting the meta json data
      set_fact:
        decoded_meta_data: "{{ meta | b64decode }}"
    - name: extracting the  hostname from meta data
      set_fact:
        hostname: "{{ decoded_meta_data.hostname }}"
    - debug: msg="{{ decoded_meta_data}} {{ decoded_meta_data.hostname}} {{ decoded_meta_data.lv_size }}"

解码值后,我得到的输出和警告为:

PLAY [creating the custom inventory at run time] ****************************************************************************************************

TASK [Gathering Facts] ******************************************************************************************************************************
ok: [localhost]

TASK [Getting the meta json data] *******************************************************************************************************************
ok: [localhost]

TASK [extracting the  hostname from meta data] ******************************************************************************************************
ok: [localhost]

TASK [debug] ****************************************************************************************************************************************
ok: [localhost] => {
    "msg": "{'username': u'root', 'mnt_point': u'/dev/sdb1', 'new_disk': u'/dev/sdb', 'lv_name': u'tsdev', 'hostname': u'oracleserver', 'vg_name': u'ts', 'lv_size': u'3G', 'password': u'admin@123'} oracleserver 3G"
}

[警告]:字符串字段中的值 4(int 类型)已转换为 u'4'(字符串类型)。如果这看起来不像您所期望的,请引用整个值以确保它不会改变。

标签: jsonansible

解决方案


您可以在 ~/.ansible.cfg 的默认部分中添加以下行

/etc/ansible/ansible.cfg
[defaults]
string_conversion_action = ignore

推荐阅读