如何使用Ansible在/ home / {user} /中为所有现有用户创建子目录

时间:2019-08-07 19:00:08

标签: ansible

我正在尝试为所有现有用户创建本地路径,该用户在该路径/home/{username}/.local下有本地子目录/home/{username} 系统中的每个群集。

例如

/home/user1/.local
/home/user2/.local
        .
        .
        .
/home/usern/.local

并且没有一个集群具有相同数量的用户,某些用户可能不存在于特定集群中。

有可能这样做吗?

从我的角度来看,我会

  1. 循环收集/ home /下的所有用户,并将其追加到列表变量或文件中。
  2. 使用变量创建用户路径。

我应该从什么开始?还是这里有更好的主意?

提前谢谢

2 个答案:

答案 0 :(得分:1)

可以找到 / home中的所有目录并创建目录

- hosts: all
  become: yes
  tasks:
    - find:
        paths: /home
        file_type: directory
      register: result
    - file:
        state: directory
        path: "{{ item.path }}/.local"
      loop: "{{ result.files }}"

除此之外,还可以读取 passwd 并将循环限制为仅系统用户

- hosts: all
  become: yes
  tasks:
    - getent:
        database: passwd
    - find:
        paths: /home
        file_type: directory
      register: result
    - file:
        state: directory
        path: "{{ item.path }}/.local"
      loop: "{{ result.files }}"
      when: item.path|basename in getent_passwd.keys()

答案 1 :(得分:0)

使用find模块查找/home中存在的所有目录,然后根据该条件在其中创建目录。

这是一种肮脏的方式:

---
- hosts: some_hosts
  tasks:
    - name: hacky way to do create directories in /home/*/
      shell: "for dir in /home/* ; do mkdir $dir/.local ; done"