【规则解释・共享】禁止使用相对路径
这篇文章是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