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

未将控制节点纳入hosts时如何获取其时间日期?

Ansible 控制节点时间获取与时间戳文件夹落地方案

一、控制节点时间获取的替代方案(除ansible_date_time外)

考虑到你不想将控制节点纳入hosts以避免被补丁或重启,除了ansible_date_time,有两种可靠方式获取控制节点系统时间:

  1. 变量定义阶段直接获取
    在playbook的vars段通过pipe lookup直接生成时间戳变量,该变量会在playbook解析时执行,获取控制节点当前时间:
    vars:
      mydate: "{{ lookup('ansible.builtin.pipe', 'date +%Y-%m-%d_%H-%M-%S') }}"
    tasks:
      # 后续任务可直接引用{{ mydate }}
    
  2. 任务执行阶段注册变量
    如果需要精准获取任务启动时的时间(比如playbook运行周期长),可以通过debug任务配合注册变量,同时设置run_once: true确保仅执行一次:
    tasks:
      - name: 获取控制节点时间戳
        debug:
          msg: "{{ lookup('ansible.builtin.pipe', 'date +%Y-%m-%d_%H-%M-%S') }}"
        run_once: true
        delegate_to: localhost
        register: time_reg
    

二、提前创建时间戳命名的文件夹

无论用哪种方式获取时间戳,都可以通过file模块在控制节点创建目标文件夹,需指定delegate_to: localhost和run_once: true确保仅在控制节点执行一次:

方案1:基于预定义变量创建

vars:
  mydate: "{{ lookup('ansible.builtin.pipe', 'date +%Y-%m-%d_%H-%M-%S') }}"
tasks:
  - name: 创建时间戳存储文件夹
    ansible.builtin.file:
      path: "/your/local/path/{{ mydate }}"
      state: directory
      mode: '0755'
    delegate_to: localhost
    run_once: true
    # 此任务需放在补丁任务之前执行

  - name: 执行补丁任务并导出输出
    # 补丁任务逻辑,将输出写入上述时间戳文件夹

方案2:基于注册变量创建

tasks:
  - name: 获取控制节点时间戳
    debug:
      msg: "{{ lookup('ansible.builtin.pipe', 'date +%Y-%m-%d_%H-%M-%S') }}"
    run_once: true
    delegate_to: localhost
    register: time_reg

  - name: 创建时间戳存储文件夹
    ansible.builtin.file:
      path: "/your/local/path/{{ time_reg.msg }}"
      state: directory
      mode: '0755'
    delegate_to: localhost
    run_once: true

  - name: 执行补丁任务并导出输出
    # 补丁任务逻辑,输出路径使用{{ time_reg.msg }}拼接

三、提取注册变量中的纯时间戳

你提到注册变量包含冗余内容,这是因为debug模块注册的变量会附带changed、failed等元数据。纯时间戳字符串存储在time_reg.msg字段中,直接通过{{ time_reg.msg }}即可提取,用于文件夹命名或其他场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:23:16