行太长:Ansible lint

qui*_*ver 9 static-analysis ansible ansible-lint

这是我的 Ansible 任务

- name: no need to import it.
  ansible.builtin.uri:
    url: >
      https://{{ vertex_region }}-aiplatform.googleapis.com/v1/projects/{{ project }}/locations/{{ vertex_region }}/datasets/{{ dataset_id }}/dataItems
    method: GET
    headers:
      Content-Type: "application/json"
      Authorization: Bearer "{{ gcloud_auth }}"
  register: images
Run Code Online (Sandbox Code Playgroud)

在检查 Ansible lint 时,它会溢出:

行太长(151 > 120 个字符)(行长度)

该错误是针对url任务的参数的。我已经习惯>了分解url,不知道如何进一步减少它以适应 Ansible lint 给出的行约束?

Zei*_*tor 12

如果你想遵守 lint 行长度规则,你需要将你的 url 分成几行。

>是 yaml 折叠标量块指示器:新行将被空格替换。这不是你想要的。

这里最好的解决方案是使用双引号流标量,您可以在其中转义新行,以便它们不会转换为空格,例如:

    url: "https://{{ vertex_region }}-aiplatform.googleapis.com/v1/projects/\
         {{ project }}/locations/{{ vertex_region }}/datasets/{{ dataset_id }}/dataItems"
Run Code Online (Sandbox Code Playgroud)

如果这仍然太长,您可以根据需要添加任意数量的转义新行。

https://yaml-multiline.info/是一个很好的资源,可以了解 yaml 中多行字符串的所有可能性。


β.ε*_*.βε 8

由于它是一个 URL 并且空格应该已经经过 URL 编码,因此您可以使用 YAML折叠样式\xe2\x80\x94 >\xe2\x80\x94 与剪辑块 chomping 指示符\xe2\x80\x94 -\xe2的组合\x80\x94 以及 Jinja空白控制\xe2\x80\x94 {{- ... -}}

\n

所有这些都可以分成多行,例如:

\n
- ansible.builtin.uri:\n    url: >-\n      https://\n      {{- vertex_region -}}\n      -aiplatform.googleapis.com/v1/projects/\n      {{- project -}}\n      /locations/\n      {{- vertex_region -}}\n      /datasets/\n      {{- dataset_id -}}\n      /dataItems\n
Run Code Online (Sandbox Code Playgroud)\n

对于不包含任何 Jinja 语句或表达式的长行,请参阅@Zeitounator\'s 答案,或者使用 Jinja 注释块和空格控制:

\n
- ansible.builtin.uri:\n    url: >-\n      https://this_is_a_super_long_url_\n      {#- -#}\n      that_looks_like_it_cannot_be_split_\n      {#- -#}\n      into_multiples_lines_is_it_\n      {#- -#}\n      question_mark.example.com\n
Run Code Online (Sandbox Code Playgroud)\n
\n

鉴于任务:

\n
- name: Demo debug with variable\n  ansible.builtin.debug:\n    msg: >-\n      https://\n      {{- vertex_region -}}\n      -aiplatform.googleapis.com/v1/projects/\n      {{- project -}}\n      /locations/\n      {{- vertex_region -}}\n      /datasets/\n      {{- dataset_id -}}\n      /dataItems\n  vars:\n    vertex_region: foo_region\n    dataset_id: bar_id\n    project: bar_project\n\n- name: Demo debug without variable\n  ansible.builtin.debug:\n    msg: >-\n      https://this_is_a_super_long_url_\n      {#- -#}\n      that_looks_like_it_cannot_be_split_\n      {#- -#}\n      into_multiples_lines_is_it_\n      {#- -#}\n      question_mark.example.com\n
Run Code Online (Sandbox Code Playgroud)\n

这给出:

\n
TASK [Demo debug with variable] ******************************************************************\nok: [localhost] => \n  msg: https://foo_region-aiplatform.googleapis.com/v1/projects/bar_project/locations/foo_region/datasets/bar_id/dataItems\n\nTASK [Demo debug without variable] ***************************************************************\nok: [localhost] => \n  msg: https://this_is_a_super_long_url_that_looks_like_it_cannot_be_split_into_multiples_lines_is_it_question_mark.example.com\n
Run Code Online (Sandbox Code Playgroud)\n