主頁 > 移動端開發 > 在ansible中將字串轉換為整數

在ansible中將字串轉換為整數

2021-10-24 13:29:04 移動端開發

在 ansible 中,我負責為某些專案創建保留規則。使用 PUT 方法,我將結果存盤在暫存器模塊中,我正在嘗試從中讀取結果,retention_id: "59"并且project_id: "80"我需要將其作為整數59 and 80,但它正在將字串作為欄位傳遞給欄位,但我需要將其作為整數。我試圖通過使用 "{{ item.project_id | int }}"{{ item.metadata.retention_id | int}}

它沒有更改為整數,我試圖將 yaml 主體轉換為 JSON 以求好運。我仍然收到錯誤。

從一個星期開始,我就對這項任務感到震驚。請提供任何解決方案來擺脫這種情況。

您的回復將不勝感激。謝謝

實際劇本:

---
# List of projects to check retention and project ID's
- name: get projects
  uri:
    url: "https://{{ ansible_host }}/api/v2.0/projects"
    method: GET
    headers:
      Authorization: "{{ admin_passwd }}"
      Accept: application/json
    validate_certs: no
  register: projects_result 
- debug:
    var: projects_result.json | flatten(levels=1)
  
# Create retention rules for the projects
- name: creating retention rules 
  uri:
    url: "https://{{ ansible_host }}/api/v2.0/retentions/{{ item.metadata.retention_id | int}}"
    method: PUT
    body_format: json
    headers:
      Content-Type: application/json
      Authorization: "{{ admin_passwd }}"
      Accept: 'application/json, text/plain, */*'      
    body: 
      algorithm: "or"
      id: "{{ item.metadata.retention_id | int }}"
      rules: 
      - action: "retain"
        params: 
          latestPushedK: 3
        scope_selectors:
          repository: 
          - decoration: "repoMatches"
            kind: "doublestar"
            pattern: "**"
        tag_selectors: 
        - decoration: "matches"
          extras: "{\"untagged\":true}"
          kind: "doublestar"
          pattern: "**" 
        template: latestPushedK 
      scope: 
        level: "project"
        ref: "{{ item.project_id | int }}"
      trigger: 
        kind: "Schedule"
        settings:
          cron: "0 0 * * * *"
    validate_certs: no
    status_code: 200
  when: "item.registry_id is defined"
  loop: "{{ projects_result.json | flatten(levels=1) }}"
  ignore_errors: yes

有了這個,我收到了這個錯誤:

$ ansible-playbook -i ansible/inventories/shiplab ansible/playbooks/harbor-configurations.yaml --ask-vault-pass
Vault password:

PLAY [harbor] ***********************************************************************************************************************************************

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

TASK [../roles/harbor-retention-rules : get projects] *******************************************************************************************************
ok: [harbor_shiplab_test1e]

TASK [../roles/harbor-retention-rules : debug] **************************************************************************************************************
ok: [harbor_shiplab_test1e] => {
    "projects_result.json | flatten(levels=1)": [
        {
            "chart_count": 0,
            "creation_time": "2021-10-21T07:35:28.228Z",
            "current_user_role_id": 1,
            "current_user_role_ids": [
                1
            ],
            "cve_allowlist": {
                "creation_time": "0001-01-01T00:00:00.000Z",
                "id": 56,
                "items": [],
                "project_id": 75,
                "update_time": "0001-01-01T00:00:00.000Z"
            },
            "metadata": {
                "public": "true",
                "retention_id": "54"
            },
            "name": "harbor-esl-proxy",
            "owner_id": 1,
            "owner_name": "admin",
            "project_id": 75,
            "registry_id": 101,
            "repo_count": 0,
            "update_time": "2021-10-21T07:35:28.228Z"
        },
        {
            "chart_count": 0,
            "creation_time": "2021-10-21T07:35:43.098Z",
            "current_user_role_id": 1,
            "current_user_role_ids": [
                1
            ],
            "cve_allowlist": {
                "creation_time": "0001-01-01T00:00:00.000Z",
                "id": 58,
                "items": [],
                "project_id": 77,
                "update_time": "0001-01-01T00:00:00.000Z"
            },
            "metadata": {
                "public": "true",
                "retention_id": "56"
            },
            "name": "harbor-library-proxy",
            "owner_id": 1,
            "owner_name": "admin",
            "project_id": 77,
            "registry_id": 103,
            "repo_count": 0,
            "update_time": "2021-10-21T07:35:43.098Z"
        },
        {
            "chart_count": 0,
            "creation_time": "2021-10-21T07:35:13.930Z",
            "current_user_role_id": 1,
            "current_user_role_ids": [
                1
            ],
            "cve_allowlist": {
                "creation_time": "0001-01-01T00:00:00.000Z",
                "id": 54,
                "items": [],
                "project_id": 73,
                "update_time": "0001-01-01T00:00:00.000Z"
            },
            "metadata": {
                "public": "true",
                "retention_id": "52"
            },
            "name": "harbor-megatron-proxy",
            "owner_id": 1,
            "owner_name": "admin",
            "project_id": 73,
            "registry_id": 104,
            "repo_count": 0,
            "update_time": "2021-10-21T07:35:13.930Z"
        },
        {
            "chart_count": 0,
            "creation_time": "2021-10-21T07:35:50.271Z",
            "current_user_role_id": 1,
            "current_user_role_ids": [
                1
            ],
            "cve_allowlist": {
                "creation_time": "0001-01-01T00:00:00.000Z",
                "id": 59,
                "items": [],
                "project_id": 78,
                "update_time": "0001-01-01T00:00:00.000Z"
            },
            "metadata": {
                "public": "true",
                "retention_id": "57"
            },
            "name": "harbor-migration-poc-proxy",
            "owner_id": 1,
            "owner_name": "admin",
            "project_id": 78,
            "registry_id": 105,
            "repo_count": 0,
            "update_time": "2021-10-21T07:35:50.271Z"
        },
        {
            "chart_count": 0,
            "creation_time": "2021-10-21T07:35:57.671Z",
            "current_user_role_id": 1,
            "current_user_role_ids": [
                1
            ],
            "cve_allowlist": {
                "creation_time": "0001-01-01T00:00:00.000Z",
                "id": 60,
                "items": [],
                "project_id": 79,
                "update_time": "0001-01-01T00:00:00.000Z"
            },
            "metadata": {
                "public": "true",
                "retention_id": "58"
            },
            "name": "harbor-payment-proxy",
            "owner_id": 1,
            "owner_name": "admin",
            "project_id": 79,
            "registry_id": 106,
            "repo_count": 0,
            "update_time": "2021-10-21T07:35:57.671Z"
        },
        {
            "chart_count": 0,
            "creation_time": "2021-10-21T07:36:05.861Z",
            "current_user_role_id": 1,
            "current_user_role_ids": [
                1
            ],
            "cve_allowlist": {
                "creation_time": "0001-01-01T00:00:00.000Z",
                "id": 61,
                "items": [],
                "project_id": 80,
                "update_time": "0001-01-01T00:00:00.000Z"
            },
            "metadata": {
                "public": "true",
                "retention_id": "59"
            },
            "name": "harbor-platform-proxy",
            "owner_id": 1,
            "owner_name": "admin",
            "project_id": 80,
            "registry_id": 107,
            "repo_count": 0,
            "update_time": "2021-10-21T07:36:05.861Z"
        },
        {
            "chart_count": 1,
            "creation_time": "2021-08-19T15:50:23.772Z",
            "current_user_role_id": 1,
            "current_user_role_ids": [
                1
            ],
            "cve_allowlist": {
                "creation_time": "0001-01-01T00:00:00.000Z",
                "id": 1,
                "items": [],
                "project_id": 1,
                "update_time": "0001-01-01T00:00:00.000Z"
            },
            "metadata": {
                "public": "true"
            },
            "name": "library",
            "owner_id": 1,
            "owner_name": "admin",
            "project_id": 1,
            "repo_count": 3,
            "update_time": "2021-08-19T15:50:23.772Z"
        },
        {
            "chart_count": 2,
            "creation_time": "2021-08-24T16:45:19.230Z",
            "current_user_role_id": 1,
            "current_user_role_ids": [
                1
            ],
            "cve_allowlist": {
                "creation_time": "0001-01-01T00:00:00.000Z",
                "id": 2,
                "items": [],
                "project_id": 2,
                "update_time": "0001-01-01T00:00:00.000Z"
            },
            "metadata": {
                "public": "true"
            },
            "name": "platform",
            "owner_id": 1,
            "owner_name": "admin",
            "project_id": 2,
            "repo_count": 11,
            "update_time": "2021-08-24T16:45:19.230Z"
        }
    ]
}

TASK [../roles/harbor-retention-rules : creating retention rules] *******************************************************************************************
failed: [harbor_shiplab_test1e] (item={'chart_count': 0, 'creation_time': '2021-10-21T07:35:28.228Z', 
'current_user_role_id': 1, 'current_user_role_ids': [1], 'cve_allowlist': {'creation_time': '0001-01-01T00:00:00.000Z', 
'id': 56, 'items': [], 'project_id': 75, 'update_time': '0001-01-01T00:00:00.000Z'}, 
'metadata': {'public': 'true', 'retention_id': '54'}, 'name': 'harbor-esl-proxy', 'owner_id': 1, 'owner_name': 'admin', 'project_id': 75, 
'registry_id': 101, 'repo_count': 0, 'update_time': '2021-10-21T07:35:28.228Z'}) => {"ansible_loop_var": "item", "changed": false, 
"connection": "close", "content": "{\"errors\":[{\"code\":\"UNPROCESSABLE_ENTITY\",\"message\":\"validation failure 
list:\\nparsing policy body from \\\"\\\" failed, because json: cannot unmarshal string into Go struct field RetentionPolicy.id of type int64\"}]}\n", 
"content_length": "213", "content_type": "application/json; charset=utf-8", "date": "Fri, 22 Oct 2021 12:26:56 GMT", "elapsed": 1, 
"item": {"chart_count": 0, "creation_time": "2021-10-21T07:35:28.228Z", "current_user_role_id": 1, "current_user_role_ids": [1], 
"cve_allowlist": {"creation_time": "0001-01-01T00:00:00.000Z", "id": 56, "items": [], "project_id": 75, "update_time": "0001-01-01T00:00:00.000Z"}, 
"metadata": {"public": "true", "retention_id": "54"}, "name": "harbor-esl-proxy", "owner_id": 1, "owner_name": "admin", "project_id": 75, 
"registry_id": 101, "repo_count": 0, "update_time": "2021-10-21T07:35:28.228Z"}, "json": {"errors": [{"code": "UNPROCESSABLE_ENTITY", 
"message": "validation failure list:\nparsing policy body from \"\" failed, because json: cannot unmarshal string into Go struct field RetentionPolicy.id of type int64"}]}, 
"msg": "Status code was 422 and not [200]: HTTP Error 422: Unprocessable Entity", "redirected": false, "set_cookie": "sid=2e5f911867c675528b5e23c74f803240; Path=/; HttpOnly", 
"status": 422, "url": "https://harbor.tst1e.k8s.shiplab.ss.rccl.com/api/v2.0/retentions/54", "vary": "Accept-Encoding", "x_request_id": "334cb06f-c161-4085-8df2-a448b7776819"}

在此之后,我將 body 更改為 json :

json 轉換:

- name: creating retention rules 
  uri:
    url: "https://{{ ansible_host }}/api/v2.0/retentions/{{ item.metadata.retention_id | int }}"
    method: PUT
    body_format: json
    headers:
      Content-Type: application/json
      Authorization: "{{ admin_passwd }}"
      Accept: 'application/json, text/plain, */*'      
    body: 
     '{ "algorithm": "or",
      "id": {{ item.metadata.retention_id | int }},
      "rules": [{
      "action": "retain",
        "params": {
          "latestPushedK": 3 },
        "scope_selectors":{
          "repository": [{
          "decoration": "repoMatches",
            "kind": "doublestar",
            "pattern": "**" } ] },
        "tag_selectors": [{
        "decoration": "matches",
          "extras": "{\"untagged\":true}",
          "kind": "doublestar",
          "pattern": "**" }],
        "template": latestPushedK } ],
      "scope": {
        "level": "project",
        "ref": {{ item.project_id | int }} },
      "trigger": {
        "kind": "Schedule",
        "settings":{
          "cron": "0 0 * * * *" }}}'
    validate_certs: no
    status_code: 200
  when: "item.registry_id is defined"
  loop: "{{ projects_result.json | flatten(levels=1) }}"
  ignore_errors: yes

我也遇到了同樣的錯誤。請幫我解決這個問題。

詳細資訊:

ansible-playbook -i ansible/inventories/shiplab ansible/playbooks/harbor-configurations.yaml --ask-vault-pass -vvv

ansible-playbook -i ansible/inventories/shiplab ansible/playbooks/harbor-configurations.yaml --ask-vault-pass -vvv
ansible-playbook 2.8.4
  config file = /home/ZL744US/repos/harbor/konvoy/ansible.cfg
  configured module search path = ['/home/ZL744US/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.7/site-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 3.7.10 (default, May  5 2021, 11:43:58) [GCC 10.2.0]
Using /home/ZL744US/repos/harbor/konvoy/ansible.cfg as config file
Vault password:
host_list declined parsing /home/ZL744US/repos/harbor/konvoy/ansible/inventories/shiplab/test1e as it did not pass it's verify_file() method
auto declined parsing /home/ZL744US/repos/harbor/konvoy/ansible/inventories/shiplab/test1e as it did not pass it's verify_file() method
Parsed /home/ZL744US/repos/harbor/konvoy/ansible/inventories/shiplab/test1e inventory source with ini plugin

PLAYBOOK: harbor-configurations.yaml ************************************************************************************************************************
1 plays in ansible/playbooks/harbor-configurations.yaml

PLAY [harbor] ***********************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************
task path: /home/ZL744US/repos/harbor/konvoy/ansible/playbooks/harbor-configurations.yaml:2
<harbor.tst1e.k8s.shiplab.ss.acl.com> ESTABLISH LOCAL CONNECTION FOR USER: MEA ZL744US
<harbor.tst1e.k8s.shiplab.ss.acl.com> EXEC /bin/sh -c 'echo '"'"'~MEA ZL744US'"'"' && sleep 0'
<harbor.tst1e.k8s.shiplab.ss.acl.com> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo ~MEA ZL744US/.ansible/tmp/ansible-tmp-1634916091.044559-272844769197129 `" && echo ansible-tmp-1634916091.044559-272844769197129="` echo ~MEA ZL744US/.ansible/tmp/ansible-tmp-1634916091.044559-272844769197129 `" ) && sleep 0'
<harbor_shiplab_test1e> Attempting python interpreter discovery
<harbor.tst1e.k8s.shiplab.ss.acl.com> EXEC /bin/sh -c 'echo PLATFORM; uname; echo FOUND; command -v '"'"'/usr/bin/python'"'"'; command -v '"'"'python3.7'"'"'; command -v '"'"'python3.6'"'"'; command -v '"'"'python3.5'"'"'; command -v '"'"'python2.7'"'"'; command -v '"'"'python2.6'"'"'; command -v '"'"'/usr/libexec/platform-python'"'"'; command -v '"'"'/usr/bin/python3'"'"'; command -v '"'"'python'"'"'; echo ENDFOUND && sleep 0'
<harbor_shiplab_test1e> Python interpreter discovery fallback (unsupported platform for extended discovery: cygwin_nt-10.0)
Using module file /usr/lib/python3.7/site-packages/ansible/modules/system/setup.py
<harbor.tst1e.k8s.shiplab.ss.acl.com> PUT /home/ZL744US/.ansible/tmp/ansible-local-1736l28mza02/tmp5ucaxth_ TO /home/ZL744US/.ansible/tmp/ansible-tmp-1634916091.044559-272844769197129/AnsiballZ_setup.py
<harbor.tst1e.k8s.shiplab.ss.acl.com> EXEC /bin/sh -c 'chmod u x /home/ZL744US/.ansible/tmp/ansible-tmp-1634916091.044559-272844769197129/ /home/ZL744US/.ansible/tmp/ansible-tmp-1634916091.044559-272844769197129/AnsiballZ_setup.py && sleep 0'
<harbor.tst1e.k8s.shiplab.ss.acl.com> EXEC /bin/sh -c '/usr/bin/python /home/ZL744US/.ansible/tmp/ansible-tmp-1634916091.044559-272844769197129/AnsiballZ_setup.py && sleep 0'
<harbor.tst1e.k8s.shiplab.ss.acl.com> EXEC /bin/sh -c 'rm -f -r /home/ZL744US/.ansible/tmp/ansible-tmp-1634916091.044559-272844769197129/ > /dev/null 2>&1 && sleep 0'
ok: [harbor_shiplab_test1e]
META: ran handlers

TASK [../roles/harbor-retention-rules : get projects] *******************************************************************************************************
task path: /home/ZL744US/repos/harbor/konvoy/ansible/roles/harbor-retention-rules/tasks/main.yml:3
<harbor.tst1e.k8s.shiplab.ss.acl.com> ESTABLISH LOCAL CONNECTION FOR USER: MEA ZL744US
<harbor.tst1e.k8s.shiplab.ss.acl.com> EXEC /bin/sh -c 'echo '"'"'~MEA ZL744US'"'"' && sleep 0'
<harbor.tst1e.k8s.shiplab.ss.acl.com> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo ~MEA ZL744US/.ansible/tmp/ansible-tmp-1634916112.1313658-277975019551630 `" && echo ansible-tmp-1634916112.1313658-277975019551630="` echo ~MEA ZL744US/.ansible/tmp/ansible-tmp-1634916112.1313658-277975019551630 `" ) && sleep 0'
Using module file /usr/lib/python3.7/site-packages/ansible/modules/net_tools/basics/uri.py
<harbor.tst1e.k8s.shiplab.ss.acl.com> PUT /home/ZL744US/.ansible/tmp/ansible-local-1736l28mza02/tmpsm6sxu8_ TO /home/ZL744US/.ansible/tmp/ansible-tmp-1634916112.1313658-277975019551630/AnsiballZ_uri.py
<harbor.tst1e.k8s.shiplab.ss.acl.com> EXEC /bin/sh -c 'chmod u x /home/ZL744US/.ansible/tmp/ansible-tmp-1634916112.1313658-277975019551630/ /home/ZL744US/.ansible/tmp/ansible-tmp-1634916112.1313658-277975019551630/AnsiballZ_uri.py && sleep 0'
<harbor.tst1e.k8s.shiplab.ss.acl.com> EXEC /bin/sh -c '/usr/bin/python /home/ZL744US/.ansible/tmp/ansible-tmp-1634916112.1313658-277975019551630/AnsiballZ_uri.py && sleep 0'
<harbor.tst1e.k8s.shiplab.ss.acl.com> EXEC /bin/sh -c 'rm -f -r /home/ZL744US/.ansible/tmp/ansible-tmp-1634916112.1313658-277975019551630/ > /dev/null 2>&1 && sleep 0'
ok: [harbor_shiplab_test1e] => {
    "changed": false,
    "connection": "close",
    "content_type": "application/json",
    "cookies": {
        "sid": "033af4ae913d69a8314a4edb84512aa6"
    },
    "cookies_string": "sid=033af4ae913d69a8314a4edb84512aa6",
    "date": "Fri, 22 Oct 2021 15:22:01 GMT",
    "elapsed": 1,
    "invocation": {
        "module_args": {
            "attributes": null,
            "backup": null,
            "body": null,
            "body_format": "raw",
            "client_cert": null,
            "client_key": null,
            "content": null,
            "creates": null,
            "delimiter": null,
            "dest": null,
            "directory_mode": null,
            "follow": false,
            "follow_redirects": "safe",
            "force": false,
            "force_basic_auth": false,
            "group": null,
            "headers": {
                "Accept": "application/json",
                "Authorization": "Basic YWRtaW46SGFyYm9yMTIzNDU="
            },
            "http_agent": "ansible-httpget",
            "method": "GET",
            "mode": null,
            "owner": null,
            "regexp": null,
            "remote_src": null,
            "removes": null,
            "return_content": false,
            "selevel": null,
            "serole": null,
            "setype": null,
            "seuser": null,
            "src": null,
            "status_code": [
                200
            ],
            "timeout": 30,
            "unix_socket": null,
            "unsafe_writes": null,
            "url": "https://harbor.tst1e.k8s.shiplab.ss.acl.com/api/v2.0/projects",
            "url_password": null,
            "url_username": null,
            "use_proxy": true,
            "validate_certs": false
        }
    },
    "json": [
        {
            "chart_count": 0,
            "creation_time": "2021-10-21T07:35:28.228Z",
            "current_user_role_id": 1,
            "current_user_role_ids": [
                1
            ],
            "cve_allowlist": {
                "creation_time": "0001-01-01T00:00:00.000Z",
                "id": 56,
                "items": [],
                "project_id": 75,
                "update_time": "0001-01-01T00:00:00.000Z"
            },
            "metadata": {
                "public": "true",
                "retention_id": "54"
            },
            "name": "harbor-esl-proxy",
            "owner_id": 1,
            "owner_name": "admin",
            "project_id": 75,
            "registry_id": 101,
            "repo_count": 0,
            "update_time": "2021-10-21T07:35:28.228Z"
        }
            ],
    "msg": "OK (unknown bytes)",
    "redirected": false,
    "set_cookie": "sid=033af4ae913d69a8314a4edb84512aa6; Path=/; HttpOnly",
    "status": 200,
    "transfer_encoding": "chunked",
    "url": "https://harbor.tst1e.k8s.shiplab.ss.acl.com/api/v2.0/projects",
    "vary": "Accept-Encoding",
    "x_request_id": "c1d907c3-e324-49a5-a582-82f9672d1f8d",
    "x_total_count": "8"
}


TASK [../roles/harbor-retention-rules : creating retention rules] *******************************************************************************************
task path: /home/ZL744US/repos/harbor/konvoy/ansible/roles/harbor-retention-rules/tasks/main.yml:36
<harbor.tst1e.k8s.shiplab.ss.acl.com> ESTABLISH LOCAL CONNECTION FOR USER: MEA ZL744US
<harbor.tst1e.k8s.shiplab.ss.acl.com> EXEC /bin/sh -c 'echo '"'"'~MEA ZL744US'"'"' && sleep 0'
<harbor.tst1e.k8s.shiplab.ss.acl.com> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo ~MEA ZL744US/.ansible/tmp/ansible-tmp-1634916125.1009495-142461137289702 `" && echo ansible-tmp-1634916125.1009495-142461137289702="` echo ~MEA ZL744US/.ansible/tmp/ansible-tmp-1634916125.1009495-142461137289702 `" ) && sleep 0'
Using module file /usr/lib/python3.7/site-packages/ansible/modules/net_tools/basics/uri.py
<harbor.tst1e.k8s.shiplab.ss.acl.com> PUT /home/ZL744US/.ansible/tmp/ansible-local-1736l28mza02/tmpy38u0lww TO /home/ZL744US/.ansible/tmp/ansible-tmp-1634916125.1009495-142461137289702/AnsiballZ_uri.py
<harbor.tst1e.k8s.shiplab.ss.acl.com> EXEC /bin/sh -c 'chmod u x /home/ZL744US/.ansible/tmp/ansible-tmp-1634916125.1009495-142461137289702/ /home/ZL744US/.ansible/tmp/ansible-tmp-1634916125.1009495-142461137289702/AnsiballZ_uri.py && sleep 0'
<harbor.tst1e.k8s.shiplab.ss.acl.com> EXEC /bin/sh -c '/usr/bin/python /home/ZL744US/.ansible/tmp/ansible-tmp-1634916125.1009495-142461137289702/AnsiballZ_uri.py && sleep 0'
<harbor.tst1e.k8s.shiplab.ss.acl.com> EXEC /bin/sh -c 'rm -f -r /home/ZL744US/.ansible/tmp/ansible-tmp-1634916125.1009495-142461137289702/ > /dev/null 2>&1 && sleep 0'
failed: [harbor_shiplab_test1e] (item={'chart_count': 0, 'creation_time': '2021-10-21T07:35:28.228Z', 'current_user_role_id': 1, 'current_user_role_ids': [1], 'cve_allowlist': {'creation_time': '0001-01-01T00:00:00.000Z', 'id': 56, 'items': [], 'project_id': 75, 'update_time': '0001-01-01T00:00:00.000Z'}, 'metadata': {'public': 'true', 'retention_id': '54'}, 'name': 'harbor-esl-proxy', 'owner_id': 1, 'owner_name': 'admin', 'project_id': 75, 'registry_id': 101, 'repo_count': 0, 'update_time': '2021-10-21T07:35:28.228Z'}) => {
    "ansible_loop_var": "item",
    "changed": false,
    "connection": "close",
    "content": "{\"errors\":[{\"code\":\"UNPROCESSABLE_ENTITY\",\"message\":\"validation failure list:\\nparsing policy body from \\\"\\\" failed, because json: cannot unmarshal string into Go struct field RetentionPolicy.id of type int64\"}]}\n",
    "content_length": "213",
    "content_type": "application/json; charset=utf-8",
    "date": "Fri, 22 Oct 2021 15:22:17 GMT",
    "elapsed": 3,
    "invocation": {
        "module_args": {
            "attributes": null,
            "backup": null,
            "body": {
                "algorithm": "or",
                "id": "54",
                "rules": [
                    {
                        "action": "retain",
                        "params": {
                            "latestPushedK": 3
                        },
                        "scope_selectors": {
                            "repository": [
                                {
                                    "decoration": "repoMatches",
                                    "kind": "doublestar",
                                    "pattern": "**"
                                }
                            ]
                        },
                        "tag_selectors": [
                            {
                                "decoration": "matches",
                                "extras": "{\"untagged\":true}",
                                "kind": "doublestar",
                                "pattern": "**"
                            }
                        ],
                        "template": "latestPushedK"
                    }
                ],
                "scope": {
                    "level": "project",
                    "ref": "75"
                },
                "trigger": {
                    "kind": "Schedule",
                    "settings": {
                        "cron": "0 0 * * * *"
                    }
                }
            },
            "body_format": "json",
            "client_cert": null,
            "client_key": null,
            "content": null,
            "creates": null,
            "delimiter": null,
            "dest": null,
            "directory_mode": null,
            "follow": false,
            "follow_redirects": "safe",
            "force": false,
            "force_basic_auth": false,
            "group": null,
            "headers": {
                "Accept": "application/json, text/plain, */*",
                "Authorization": "Basic YWRtaW46SGFyYm9yMTIzNDU=",
                "Content-Type": "application/json"
            },
            "http_agent": "ansible-httpget",
            "method": "PUT",
            "mode": null,
            "owner": null,
            "regexp": null,
            "remote_src": null,
            "removes": null,
            "return_content": false,
            "selevel": null,
            "serole": null,
            "setype": null,
            "seuser": null,
            "src": null,
            "status_code": [
                "200"
            ],
            "timeout": 30,
            "unix_socket": null,
            "unsafe_writes": null,
            "url": "https://harbor.tst1e.k8s.shiplab.ss.acl.com/api/v2.0/retentions/54",
            "url_password": null,
            "url_username": null,
            "use_proxy": true,
            "validate_certs": false
        }
    },
    "item": {
        "chart_count": 0,
        "creation_time": "2021-10-21T07:35:28.228Z",
        "current_user_role_id": 1,
        "current_user_role_ids": [
            1
        ],
        "cve_allowlist": {
            "creation_time": "0001-01-01T00:00:00.000Z",
            "id": 56,
            "items": [],
            "project_id": 75,
            "update_time": "0001-01-01T00:00:00.000Z"
        },
        "metadata": {
            "public": "true",
            "retention_id": "54"
        },
        "name": "harbor-esl-proxy",
        "owner_id": 1,
        "owner_name": "admin",
        "project_id": 75,
        "registry_id": 101,
        "repo_count": 0,
        "update_time": "2021-10-21T07:35:28.228Z"
    },
    "json": {
        "errors": [
            {
                "code": "UNPROCESSABLE_ENTITY",
                "message": "validation failure list:\nparsing policy body from \"\" failed, because json: cannot unmarshal string into Go struct field RetentionPolicy.id of type int64"
            }
        ]
    },
    "msg": "Status code was 422 and not [200]: HTTP Error 422: Unprocessable Entity",
    "redirected": false,
    "set_cookie": "sid=5ffe84980b5cb188e7821ae838e4fc33; Path=/; HttpOnly",
    "status": 422,
    "url": "https://harbor.tst1e.k8s.shiplab.ss.acl.com/api/v2.0/retentions/54",
    "vary": "Accept-Encoding",
    "x_request_id": "d7a855cf-3de6-47ab-8b47-d275cda5274b"
}
   "skip_reason": "Conditional result was False"
}
...ignoring
META: ran handlers
META: ran handlers

PLAY RECAP **************************************************************************************************************************************************
harbor_shiplab_test1e      : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=1

uj5u.com熱心網友回復:

哇,多么迷人的兔子洞:-(

因此,存在一個報告該行為的現有問題,但它已被關閉“按設計作業”,以及一些關于以某種不兼容的方式配置 jinja2 的廢話

從運行一系列實驗中我可以看出,手動制作該 JSON 有效負載是唯一安全的方法:

      body_format: json
      body: >-
        {{ 
         (
          {
            "algorithm": "or",
            "id": item.metadata.retention_id | int,
            "rules": [
              {
                "action": "retain",
                "params": {
                  "latestPushedK": 3
                },
                "scope_selectors": {
                  "repository": [
                    {
                      "decoration": "repoMatches",
                      "kind": "doublestar",
                      "pattern": "**"
                    }
                  ]
                },
                "tag_selectors": [
                  {
                    "decoration": "matches",
                    "kind": "doublestar",
                    "pattern": "**"
                  }
                ],
                "template": "latestPushedK"
              }
            ],
            "scope": {
              "level": "project",
              "ref": item.project_id | int
            },
            "trigger": {
              "kind": "Schedule",
              "settings": {
                "cron": "0 0 * * * *"
              }
            }
          }
          ) | to_json }}
    when: "item.registry_id is defined"

我希望我對正在發生的事情有一個更好的解釋,但鑒于對該問題的回應,我不確定他們甚至認為您的經歷是一個錯誤

但是為了清楚起見,這里發生的事情是里面的那些前導大括號字符()python dict文字,這就是為什么"id": item.metadata.retention_id | int,不需要任何特殊考慮——兩邊都是 python (err, jinja2, but same-same)

()很可能不是絕對必要的,但不要讓它超級什么明顯被送入| to_json過濾器

然后,外部{{是您習慣的 jinja2 分隔符,以便運行所有內部 jinja2 代碼,并且body: >-是讓我們擺脫 yaml 參考地獄

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/334130.html

標籤:json 能听懂的 回放

上一篇:如何在c#中將href插入到json中

下一篇:使用GSONJsonReader讀取一個簡單的JSON檔案

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more