You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ansible Playbook中根据主机名设置目录所有者

优化后的Ansible Playbook:按主机名动态设置目录所有者

需求说明

在多台RHEL 8服务器上创建目录/usr/dir/newdir,要求:

  • 权限模式统一设为0755
  • 所属组固定为chosengroup
  • 所属用户根据主机名动态匹配:
    • 主机名格式为hostnameABCdb时,所有者为ABCadm
    • 主机名格式为hostnameDEFdb时,所有者为DEFadm

原方案分两个Playbook执行(先创建目录、再逐个修改所有者),流程繁琐,以下是合并后的优化方案。

优化后的Playbook代码

- hosts: all
  become: yes
  become_method: sudo
  gather_facts: yes  # 开启以获取主机名变量

  tasks:
    - name: 创建目录并配置所有者、组和权限
      file:
        path: /usr/dir/newdir
        state: directory
        recurse: yes
        owner: "{{ inventory_hostname | regex_replace('^hostname(.*)db$', '\\1adm') }}"
        group: chosengroup
        mode: 0755

关键逻辑说明

  1. 获取主机名:开启gather_facts: yes后,Ansible会自动收集目标主机的inventory_hostname变量(即主机清单中配置的主机名)
  2. 动态生成所有者:使用regex_replace过滤器处理主机名:
    • 正则^hostname(.*)db$匹配hostnameXXdb格式的主机名,捕获中间的XX标识
    • 替换为\\1adm,将捕获的标识拼接成目标所有者(如ABC→ABCadm)
  3. 一步完成所有配置:通过file模块一次性完成目录创建、权限设置、所有者和组配置,无需拆分多个Playbook或调用系统chown命令,符合Ansible声明式配置的最佳实践

验证与测试

  • 预览执行结果(不实际修改服务器):
    ansible-playbook -i inventory.ini your_playbook.yml --check
    
  • 针对单台主机测试:
    ansible-playbook -i inventory.ini your_playbook.yml --limit hostnameABCdb
    

内容的提问来源于stack exchange,提问作者lnmeyid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 11:33:17