线路太长:Ansible lint

Line too long: 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

在检查 Ansible lint 时,它溢出 行太长(151 > 120 个字符)(行长度)

错误是针对代码的 uri 部分。我已经使用 > 来分解 uri,不知道如何进一步减少它以适应 ansible lint 给出的行约束?

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

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

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

    url: "https://{{ vertex_region }}-aiplatform.googleapis.com/v1/projects/\
         {{ project }}/locations/{{ vertex_region }}/datasets/{{ dataset_id }}/dataItems"

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

https://yaml-multiline.info/ 是学习 yaml 中多行字符串的所有可能性的好资源。

因为它是一个 URL 并且空格应该已经被 URL 编码,你可以使用 YAML folded style> — with a clip block chomping indicator- — along with Jinja whitespace control 的组合 - {{- ... -}}.

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

- ansible.builtin.uri:
    url: >-
      https://
      {{- vertex_region -}}
      -aiplatform.googleapis.com/v1/projects/
      {{- project -}}
      /locations/
      {{- vertex_region -}}
      /datasets/
      {{- dataset_id -}}
      /dataItems

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

- ansible.builtin.uri:
    url: >-
      https://this_is_a_super_long_url_
      {#- -#}
      that_looks_like_it_cannot_be_split_
      {#- -#}
      into_multiples_lines_is_it_
      {#- -#}
      question_mark.co.uk

鉴于任务:

- name: Demo debug with variable
  ansible.builtin.debug:
    msg: >-
      https://
      {{- vertex_region -}}
      -aiplatform.googleapis.com/v1/projects/
      {{- project -}}
      /locations/
      {{- vertex_region -}}
      /datasets/
      {{- dataset_id -}}
      /dataItems
  vars:
    vertex_region: foo_region
    dataset_id: bar_id
    project: bar_project

- name: Demo debug without variable
  ansible.builtin.debug:
    msg: >-
      https://this_is_a_super_long_url_
      {#- -#}
      that_looks_like_it_cannot_be_split_
      {#- -#}
      into_multiples_lines_is_it_
      {#- -#}
      question_mark.co.uk

这给出:

TASK [Demo debug with variable] ******************************************************************
ok: [localhost] => 
  msg: https://foo_region-aiplatform.googleapis.com/v1/projects/bar_project/locations/foo_region/datasets/bar_id/dataItems

TASK [Demo debug without variable] ***************************************************************
ok: [localhost] => 
  msg: https://this_is_a_super_long_url_that_looks_like_it_cannot_be_split_into_multiples_lines_is_it_question_mark.co.uk