如何用Ansible实现git init且规避ansible-lint警告?
解决Ansible中git init任务的ansible-lint警告问题
因为ansible.builtin.git模块的核心设计是克隆远程仓库,确实没有直接执行git init的参数,所以遇到这种场景,你有两种可行的解决方式:
方式一:忽略该任务的ansible-lint规则
直接在使用command模块的任务上添加注释,让ansible-lint跳过command-instead-of-module规则的检查,这是最直接的方案:
- name: Initialize git repository in ~/Projects/kernel/src ansible.builtin.command: git init args: chdir: ~/Projects/kernel/src creates: ~/Projects/kernel/src/.git # noqa command-instead-of-module
注释# noqa command-instead-of-module会告诉ansible-lint忽略当前任务的这条规则警告,同时保留creates参数避免重复执行的逻辑。
方式二:结合stat模块做条件判断执行
如果不想依赖lint忽略注释,可以先用stat模块检查目标目录下的.git文件夹是否存在,只有不存在时才执行git init:
- name: Check if .git directory exists ansible.builtin.stat: path: ~/Projects/kernel/src/.git register: git_dir_stat - name: Initialize git repository in ~/Projects/kernel/src ansible.builtin.command: git init args: chdir: ~/Projects/kernel/src when: not git_dir_stat.stat.exists # noqa command-instead-of-module
这种方式和creates参数的效果一致,同样需要添加lint忽略注释,因为本质还是用command模块执行git命令。
补充说明
ansible-lint的command-instead-of-module规则是建议性的最佳实践,当官方模块没有提供对应功能时,完全可以通过忽略规则的方式使用command/shell模块,这是合理的场景。
内容的提问来源于stack exchange,提问作者sbates-nvme
相关产品推荐
相关产品推荐

