简体   繁体   中英

How do I re-gather device facts to remove any partitioned disks?

I'm building a role for which I'm trying to gather disks without any partitions using

disks: "{{ ansible_devices | dict2items | selectattr('key', 'match', '^sd.*')  |  selectattr('value.partitions', 'match', '{}' )  | list  }}"

and then mount on the partition. But, as I'm running over a loop I wanted to update the list/disks when the mount and partition is completed.

For example, if my list at the start looks like

disks: [sdb,sdc,sdd,sde]

when the partitioning and mounting on sdb using the mount module in Ansible is done, the list should be updated and look something like this

disks: [sdc,sdd,sde]

How can I achieve this?

You should be able to refresh the facts by calling the setup module after your mounts.

So, a plain and simple task reading:

- setup:

And Ansible will gather the facts of the host(s) again, so, your partition list should be up-to-date.


Since you cannot do it in the task itself, what you could do, in your role is to have an include_tasks that would make an unicity of the tasks: parted (or whatever you are using to partition); mount and setup .

Something like:

- include_tasks: partition-mount-and-setup.yml
  loop: "{{ mounts }}"

And in partition-mount-and-setup.yml , something like

- parted:
    device: "{{ item.mount_point }}"
    number: 1
    state: present
    part_end: "{{ item.size }}"

- mount:
    src: "{{ item.mount_point }}"
    path: "/mnt/{{ item.mount_point }}"
    state: mounted
    fstype: ext2

- setup:

All this is untested, but you could just follow the general logic

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM