如果文件不存在,使用 Ansible 创建文件有更好的方法吗?

问题描述 投票:0回答:1

我想创建一个 ansible 任务。 playbook 本身应该在我的新 Linux 环境中安装和配置一些设置,因此,我需要做的事情之一就是安装 zsh,然后,以这种方式向 /etc/zsh/zshenv 写入一行:

- name: Check if /etc/zsh/zshenv exists
  ansible.builtin.stat:
    path: "/etc/zsh/zshenv"
  register: file_status


- name: Creates /etc/zsh/zshenv if it doesn't exists
  ansible.builtin.file:
    path: /etc/zsh/zshenv
    state: touch
    owner: root
    group: root
    mode: '0644'
  when: not file_status.stat.exists


- name: configure ZDOTDIR en /etc/zsh/zshenv
  ansible.builtin.lineinfile:
    path: /etc/zsh/zshenv
    line: 'ZDOTDIR=$HOME/.config/zsh/'
    state: present

我想知道是否有任何方法可以只使用一两个任务而不是三个。更好的是,由于我没有运行 ansible 的经验,我想知道是否有更好的方法来做到这一点。

提前非常感谢!

ansible task file-exists
1个回答
3
投票
  1. Ansible 模块默认是幂等的 - 您不需要检查文件是否存在。
  2. lineinfile
    模块具有
    create
    参数来创建文件(如果尚不存在)
  3. 它还允许设置
    mode
    group
    owner
    ,就像
    file
    模块一样。

总而言之,您只需要一项任务即可实现您的目标:

- name: Configure ZDOTDIR en /etc/zsh/zshenv
  ansible.builtin.fileinfile:
    path: /etc/zsh/zshenv
    line: 'ZDOTDIR=$HOME/.config/zsh/'
    create: true
    state: present
    owner: root
    group: root
    mode: '0644'
© www.soinside.com 2019 - 2024. All rights reserved.