My requiremnt , i need to add the disk to vms in vcenter by passing vm name, datastorename , and disk_size via csv file , with the following condition. 1. datastore which i am providing the csv should be in facts collected from vms 2.datastore free volume is greater than what we requested (disk_size) 3.after taking the required disk_size the datastore should be greater than equal to 20% of the total size of the datastore .
i can achieve this for the single server but for more than one server i am struggling , can any one help me , Working one (for one server ) cat test/diskadditionpre.yaml --- - hosts: localhost vars_prompt: - name: vcentername prompt: "Enter the vcenter name" private: no - name: vcenter_user prompt: "Enter the username" private: no - name: vcenter_password prompt: "Enter your password" - name: datastore_name prompt: "Enter the datastore name " private: no - name: disk_size prompt: "Enter the disksize in GB" tasks: - name: collecting the vminformation vmware_guest_facts: validate_certs: no hostname: "{{ vcentername }}" username: "{{ vcenter_user }}" password: "{{ vcenter_password }}" datacenter: DFW folder: /DFW/vm/Servers/Linux name: vmtest1 delegate_to: localhost register: vm_info - name: Get the datastores associated with the VM set_fact: datastorelist: "{{vm_info.instance.hw_files | join (' ')}}" # #converting list into the srting for easy when condition use# - name: checking wheather enter correct datastore assert: that: - "datastore_name in datastorelist" success_msg: 'VM has correct Datastore.' fail_msg: 'Pls Enter the correct Datastore name ' - name: Collecting the datastore information vmware_datastore_info: validate_certs: no hostname: '{{ vcentername }}' username: '{{ vcenter_user }}' password: '{{ vcenter_password }}' datacenter_name: DFW name: '{{datastore_name}}' delegate_to: localhost register: datastore_info when: " datastore_name in datastorelist " # if the datastorelist contains the name datastore_name procees furthur# - set_fact: datastore_cap="{{datastore_info.datastores[0].capacity |float / 1073741824|float }}" # byte to GB converstion - set_fact: datastore_free="{{datastore_info.datastores[0].freeSpace |float / 1073741824|float}}" - set_fact: datastore_used="{{datastore_info.datastores[0].provisioned|filesizeformat(true)}}" - set_fact: datastore_buffer="{{datastore_free|float - disk_size|float}}" - set_fact: datastore_buffer_s="{{(datastore_buffer)|float / ( datastore_cap)|float }}" - set_fact: datastore_buffer_percentage="{{100*(datastore_buffer_s) |float}}" when: " datastore_name in datastorelist " - name: Checking wheather datastore having enough disk assert: that: - "(datastore_free|float ) > (disk_size|float)" - "(datastore_buffer_percentage |float) > (20.0|float)" fail_msg: 'Free Disk is lesser than the required disksize' success_msg: 'Free Disk is greater than require disksize' - name: disk addition should be with either scsi controller with type no or controllernumber with type vmware_guest_disk: validate_certs: no hostname: "{{ vcentername }}" username: "{{ vcenter_user }}" password: "{{ vcenter_password }}" datacenter: DFW folder: /DFW/vm/Servers/Linux name: vmtest1 disk: - size_gb: "{{disk_size}}" type: thick state: present scsi_controller: 2 #required paramater scsi_type: 'paravirtual' #required paramater datastore: "{{datastore_name}}" unit_number: 3 #required paramater destroy: no when: - "(datastore_free|float ) > (disk_size|float)" - "( datastore_name) in (datastorelist) " - "(datastore_buffer_percentage |float) > (20.0|float)" NOT working (multiple servers) --- - hosts: localhost vars_prompt: - name: vcentername prompt: "Enter the vcenter name" private: no - name: vcenter_user prompt: "Enter the username" private: no - name: vcenter_password prompt: "Enter your password" # - name: disk_size # prompt: "Enter the disksize in GB" tasks: - name: read csv read_csv: path: /opt/depot/dinesh/diskaddition.csv register: serverlist - name: vminfo vmware_guest_facts: validate_certs: no hostname: "{{ vcentername }}" username: "{{ vcenter_user }}" password: "{{ vcenter_password }}" datacenter: DFW folder: /DFW/vm/Servers/Linux name: "{{item.servername}}" loop: "{{serverlist.list}}" delegate_to: localhost register: vm_info # - name: 2.setfact for datastore checking # set_fact: # datastoreinfo: "{{vm_info|json_query('results[*].instance.hw_datastores[0]')|join( ' ' )}}" # register: datastores_details - name: Gather info from datacenter about specific datastore vmware_datastore_info: validate_certs: no hostname: '{{ vcentername }}' username: '{{ vcenter_user }}' password: '{{ vcenter_password }}' datacenter_name: DFW name: '{{item.datastore_name}}' loop: "{{serverlist.list}}" delegate_to: localhost register: datastore_info - debug: msg="{{datastore_info}}" - set_fact: datastores_freea="{{datastore_info | json_query('results[*].datastores[0].freeSpace')}}" register: freea # when: "item.datastore_name in datastores_details|string" # loop: "{{serverlist.list}}" - name: setfactbuffer set_fact: datastores_buffer="{{(item.0|float / 1073741824|float) - item.1.disk_size|float}}" with_nested: - "{{freea|json_query('ansible_facts.datastores_freea')}}" - "{{serverlist.list}}" # when: "item.datastore_name in datastores_details|string" # loop: "{{serverlist.list}}" register: buffer - debug: msg="{{buffer}}" - name: setfactbufferpercentage set_fact: datastores_buffer_perc="{{100*(item|float / (8795824586752|float / 1073741824|float) )}}" with_items: "{{buffer|json_query('results[*].ansible_facts.datastores_buffer[::2]')}}" register: buffer_perc - debug: msg="{{buffer_perc}}" - name: adding vm disk without vmware_guest_disk: validate_certs: no hostname: "{{ vcentername }}" username: "{{ vcenter_user }}" password: "{{ vcenter_password }}" datacenter: DFW folder: /DFW/vm/Servers/Linux name: "{{item.0.servername}}" disk: - size_gb: "{{item.0.disk_size}}" type: thick state: present scsi_controller: 0 scsi_type: 'paravirtual' datastore: "{{item.0.datastore_name}}" unit_number: 5 destroy: no when: " (item.1|float) > (20.0|float) " with_nested: - "{{serverlist.list}}" - "{{buffer_perc|json_query('results[*].ansible_facts.datastores_buffer_perc')}}" -- You received this message because you are subscribed to the Google Groups "Ansible Project" group. To unsubscribe from this group and stop receiving emails from it, send an email to ansible-project+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/e4efa5d5-c6b1-4c38-bed7-1326718d5a6bn%40googlegroups.com.