【问题标题】:How to get the remaining size on C: with ansible?如何使用 ansible 在 C: 上获得剩余大小?
【发布时间】:2019-11-02 08:51:53
【问题描述】:

我需要获取 C: 分区的剩余大小,但我无法使用 win_disk_fact 模块来完成。 最终目标是在处理软件安装之前检查剩余大小是否小于 4GB,但现在我只是尝试通过调试打印该值。

我使用 win_disk_facts 模块 (https://docs.ansible.com/ansible/latest/modules/win_disk_facts_module.html),我可以使用

显示正确的值
- debug:
    var: ansible_facts.disks[0].partitions[1].volumes[0].size_remaining

但是根据使用此角色的位置,C: 分区可能不在第一个磁盘、分区 1、卷 0 上,它可能在我不知道的其他地方(我正在开发一个通用角色大部分会被其他人使用)

我尝试使用 jinja 过滤器,但是当我显示 var 时它返回空:

var: 
  disk_C: '{{ ansible_facts.disks|selectattr("drive_letter", "C") }}'

  - debug:
      var: disk_C

如果我尝试在以下位置显示尺寸,还有一些我没有得到的东西:

- debug:
    var: ansible_facts.disks[0].partitions[1].volumes[0].size_remaining

结果是:

ok: [lab-win-01] => {
    "ansible_facts.disks[0].partitions[1].volumes[0].size_remaining": "52275679232"
}

但如果我尝试将此值存储为一个新变量(以便在其他地方重用它)

  vars:
    diskC: '{{ ansible_facts.disks[0].partitions[1].volumes[0].size_remaining }}'

- debug:
    var: diskC

那么结果是:

ok: [lab-bs-win-01] => {
    "diskC": "VARIABLE IS NOT DEFINED!"
}

拜托,有人可以就这两个问题启发我吗?

【问题讨论】:

    标签: windows ansible ansible-facts


    【解决方案1】:

    检查这个例子:

     # Check space free of directory C:
      - name: 'Check free space in C:'
        win_shell: 'Get-PSDrive C | Select-Object Free | ft -HideTableHeaders'
        register: freespace
    
      - block:
          - debug:
              msg: "Directory C: there is not free space enough. End of play."
          - meta: end_play
        when: freespace == '1500000000'
    
      - debug:
          msg: "Directory C: has free space enough. Continue play."
    

    【讨论】:

      【解决方案2】:
      when: freespace == '1500000000'
      
      

      上面的比较语句不能很好地比较整数。所以,下面是更新的代码。

      ---
      - name: Check disk space C for patch
        hosts: '{{ host }}'
        gather_facts: no
        tasks:
        - name: 'Check free space in C:'
          win_shell: 'Get-PSDrive C | Select-Object Free | ft -HideTableHeaders'
          register: freespace
      
        - block:
            - debug:
                msg: "Directory C: there is not free space enough. End of play. Free space is, {{ freespace.stdout_lines[1] }} "
            - meta: end_play
          when: freespace.stdout_lines[1]|int < 1500000000
      
        - debug:
            msg: "Directory C: has free space enough. Continue play."
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-05-01
        • 1970-01-01
        • 2014-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多