【规则解释・共享】禁止使用相对路径

这篇文章是Ansible lint Advent Calendar 2022第24天的文章。

这次我将解释规则”no-relative-paths”。

不使用相对路径

在ansible.builtin.copy模块和ansible.builtin.template模块中,检查src键的元素是否包含相对路径的no-relative-paths选项。

如果使用 ansible.builtin.copy 模块和 ansible.builtin.template 模块进行文件操作,那么文件路径的指定方式是固定的。如果使用 ansible.builtin.copy 模块复制文件,文件应该被放置在项目的 files/ 目录下。如果要将文件放置在 files/ 目录之外的路径上,路径必须使用绝对路径指定。同样,如果使用 ansible.builtin.template 模块进行文件操作,则假定模板文件被放置在项目的 templates/ 目录下。如果要将文件放置在 templates/ 目录之外的路径上,则路径必须使用绝对路径指定。

有问题的代码1

src的路径是以相对路径指定的。

---
- name: Example playbook
  hosts: all
  tasks:
    - name: Template a file to /etc/file.conf
      ansible.builtin.template:
        src: ../my_templates/foo.j2 # <- 相対パスになっている
        dest: /etc/file.conf
        owner: bin
        group: wheel
        mode: "0644"

修复后的代码1

指定项目中的”templates”文件夹路径

---
- name: Example playbook
  hosts: all
  tasks:
    - name: Template a file to /etc/file.conf
      ansible.builtin.template:
        src: foo.j2 # <- `templates`ディレクトリ内のパスを指定する
        dest: /etc/file.conf
        owner: bin
        group: wheel
        mode: "0644"

有問題的代碼2

- name: Example playbook
  hosts: all
  vars:
    source_path: ../../my_templates/foo.j2 # <- 相対パスが指定されている
  tasks:
    - name: Copy a file to /etc/file.conf
      ansible.builtin.copy:
        src: "{{ source_path }}" # <- 変数が代入されている部分
        dest: /etc/foo.conf
        owner: foo
        group: foo
        mode: "0644"

我修正过的代码2

- name: Example playbook
  hosts: all
  vars:
    source_path: foo.j2 # <- filesディレクトリ内でのパスを指定する
  tasks:
    - name: Copy a file to /etc/file.conf
      ansible.builtin.copy:
        src: "{{ source_path }}" # <- 変数が代入されている部分
        dest: /etc/foo.conf
        owner: foo
        group: foo
        mode: "0644"

请参考以下网站。

    no-relative-paths — Ansible Lint Documentation
广告
将在 10 秒后关闭
bannerAds