【问题标题】:Line too long: Ansible lint行太长:Ansible lint
【发布时间】:2022-06-30 02:37:21
【问题描述】:

这是我的 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 时,它会溢出 line too long (151 > 120 characters) (line-length)

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

【问题讨论】:

    标签: ansible uri lint


    【解决方案1】:

    如果你想遵守 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 中多行字符串的所有可能性的好资源。

    【讨论】:

      【解决方案2】:

      由于它是一个 URL,并且空格应该已经是 URL 编码的,因此您可以使用 YAML folded style> — 与 clip block chomping indicator- — 以及 Jinja whitespace control — 的组合{{- ... -}}.

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

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

      对于不包含任何 Jinja 语句或表达式的长行,请参阅 @Zeitounator's answer,或者,使用 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.example.com
      

      给定任务:

      - 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.example.com
      

      这给出了:

      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.example.com
      

      【讨论】:

        猜你喜欢
        • 2015-02-13
        • 2019-03-19
        • 2019-08-06
        • 2018-06-29
        • 2012-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多