summaryrefslogtreecommitdiffstats
path: root/src/ansiblelint/rules/no_relative_paths.md
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 12:06:49 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-13 12:06:49 +0000
commit2fe34b6444502079dc0b84365ce82dbc92de308e (patch)
tree8fedcab52bbbc3db6c5aa909a88a7a7b81685018 /src/ansiblelint/rules/no_relative_paths.md
parentInitial commit. (diff)
downloadansible-lint-2fe34b6444502079dc0b84365ce82dbc92de308e.tar.xz
ansible-lint-2fe34b6444502079dc0b84365ce82dbc92de308e.zip
Adding upstream version 6.17.2.upstream/6.17.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/ansiblelint/rules/no_relative_paths.md')
-rw-r--r--src/ansiblelint/rules/no_relative_paths.md94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/ansiblelint/rules/no_relative_paths.md b/src/ansiblelint/rules/no_relative_paths.md
new file mode 100644
index 0000000..568a145
--- /dev/null
+++ b/src/ansiblelint/rules/no_relative_paths.md
@@ -0,0 +1,94 @@
+# no-relative-paths
+
+This rule checks for relative paths in the `ansible.builtin.copy` and
+`ansible.builtin.template` modules.
+
+Relative paths in a task most often direct Ansible to remote files and
+directories on managed nodes. In the `ansible.builtin.copy` and
+`ansible.builtin.template` modules, the `src` argument refers to local files and
+directories on the control node.
+
+The recommended locations to store files are as follows:
+
+- Use the `files/` folder in the playbook or role directory for the `copy`
+ module.
+- Use the `templates/` folder in the playbook or role directory for the
+ `template` module.
+
+These folders allow you to omit the path or use a sub-folder when specifying
+files with the `src` argument.
+
+!!! note
+
+ If resources are outside your Ansible playbook or role directory you should use an absolute path with the `src` argument.
+
+!!! warning
+
+ Do not store resources at the same directory level as your Ansible playbook or tasks files.
+ Doing this can result in disorganized projects and cause user confusion when distinguishing between resources of the same type, such as YAML.
+
+See
+[task paths](https://docs.ansible.com/ansible/latest/playbook_guide/playbook_pathing.html#task-paths)
+in the Ansible documentation for more information.
+
+## Problematic Code
+
+```yaml
+---
+- name: Example playbook
+ hosts: all
+ tasks:
+ - name: Template a file to /etc/file.conf
+ ansible.builtin.template:
+ src: ../my_templates/foo.j2 # <- Uses a relative path in the src argument.
+ dest: /etc/file.conf
+ owner: bin
+ group: wheel
+ mode: "0644"
+```
+
+```yaml
+- name: Example playbook
+ hosts: all
+ vars:
+ source_path: ../../my_templates/foo.j2 # <- Sets a variable to a relative path.
+ tasks:
+ - name: Copy a file to /etc/file.conf
+ ansible.builtin.copy:
+ src: "{{ source_path }}" # <- Uses the variable in the src argument.
+ dest: /etc/foo.conf
+ owner: foo
+ group: foo
+ mode: "0644"
+```
+
+## Correct Code
+
+```yaml
+---
+- name: Example playbook
+ hosts: all
+ tasks:
+ - name: Template a file to /etc/file.conf
+ ansible.builtin.template:
+ src: foo.j2 # <- Uses a path from inside templates/ directory.
+ dest: /etc/file.conf
+ owner: bin
+ group: wheel
+ mode: "0644"
+```
+
+```yaml
+- name: Example playbook
+ hosts: all
+ vars:
+ source_path: foo.j2 # <- Uses a path from inside files/ directory.
+ tasks:
+ - name: Copy a file to /etc/file.conf
+ ansible.builtin.copy:
+ src: "{{ source_path }}" # <- Uses the variable in the src argument.
+ dest: /etc/foo.conf
+ owner: foo
+ group: foo
+ mode: "0644"
+```