瀏覽代碼

Merge pull request #524 from Shubhangi-dell/pv

Powervault Changes
Lucas A. Wilson 3 年之前
父節點
當前提交
6ec9c231bb

+ 16 - 8
control_plane/input_params/powervault_me4_vars.yml

@@ -22,7 +22,7 @@ locale: "English"
 # Specify the system name to identify the system
 # By default it is set to "Uninitialized_Name"
 # Length should be less than 30 and it should not contain space.
-# This is "optional"
+# Optional
 powervault_me4_system_name: "Unintialized_Name"
 
 # Specify the snmp notification level
@@ -37,6 +37,11 @@ powervault_me4_system_name: "Unintialized_Name"
 # Compulsory
 powervault_me4_snmp_notify_level: "none"
 
+# The type of pool to be created on the powervault
+# It can be either linear or virtual.
+# Default: linear
+powervault_me4_pool_type: "linear"
+
 # Specify the required RAID Level
 # The different RAID levels and the min and max number of disks supported for each RAID are
 # r1/raid1: 2
@@ -53,24 +58,27 @@ powervault_me4_raid_levels: "raid1"
 # the enclosure number and disk range in the Enter Range of Disks text box. 
 # Use the format enclosure-number.disk-range,enclosure-number.disk-range. 
 # For example, to select disks 3-12 in enclosure 1 and 5-23 in enclosure 2, enter 1.3-12,2.5-23.
-# For ME4012 - 0.0-0.11,1.0-1.11 are the allowed values
+# For ME4012 - 0.0-0.11 are the allowed values
+# For RAID 10 disk range should be given in subgroups separated by colons with no spaces.
+# RAID-10 example:1.1-2:1.3-4:1.7,1.10
 # Default value is 0.1-2
 # Compulsory
 powervault_me4_disk_range: "0.1-2"
 
 # Specify the volume names
-# Cannot be left blank
 # the default value is "k8s_volume" and "slurm_volume"
 # Compulsory
 powervault_me4_k8s_volume_name: "k8s_volume"
 powervault_me4_slurm_volume_name: "slurm_volume"
 
 # Specify the disk group name
-# If left blank, system automatically assigns the name
+# Mandatory
 powervault_me4_disk_group_name: "omnia"
 
 # Specify the percentage for partition in disk
 # Default value is "60%"
+# Min: 5
+# Max: 90
 # Compulsory
 powervault_me4_disk_partition_size: "60"
 
@@ -79,12 +87,12 @@ powervault_me4_disk_partition_size: "60"
 # Compulsory
 powervault_me4_volume_size: "100GB"
 
-#Specify the pool for volume
+# Specify the pool for disk and volumes
 # Pool can either be  a/A or b/B.
-# Compulsory
+# Mandatory if powervault_me4_pool_type selected as "virtual".
 powervault_me4_pool: "a"
 
 # Specify the nic of the server with which Powervault is connected.
-# Default value is eno1.
+# Default value is em1.
 # Compulsory
-powervault_me4_server_nic: "eno1"
+powervault_me4_server_nic: "em1"

+ 14 - 6
control_plane/roles/powervault_me4/tasks/map_volume.yml

@@ -24,6 +24,7 @@
   changed_when: false
   no_log: true
   register: config_content
+  delegate_to: localhost
   run_once: true
 
 - name: Decrpyt login_vars.yml
@@ -32,6 +33,7 @@
     --vault-password-file {{ login_pv_vault_file }}
   changed_when: false
   run_once: true
+  delegate_to: localhost
   when: "'$ANSIBLE_VAULT;' in config_content.stdout"
 
 - name: Include variable file login_vars.yml
@@ -57,9 +59,18 @@
   delegate_to: localhost
   tags: install
 
+- name: Get map port
+  set_fact:
+    map_port: "{{ item.0 }}"
+  when: hostvars['pv']['map_ip'] == item.1
+  with_together:
+    - "{{ up_port }}"
+    - "{{ set_port_ip }}"
+  register: output
+
 - name: Map volume
   uri:
-    url: https://{{ groups['powervault_me4'][0] }}/api/map/volume/{{ powervault_me4_k8s_volume_name }}/access/{{ access }}/ports/{{ item.0 }}/lun/{{ lun1 }}/initiator/{{ hostvars['server_iqdn_id']['server_iqdn'] }}
+    url: https://{{ groups['powervault_me4'][0] }}/api/map/volume/{{ powervault_me4_k8s_volume_name }}/access/{{ access }}/ports/{{ map_port }}/lun/{{ lun1 }}/initiator/{{ hostvars['server_iqdn_id']['server_iqdn'] }}
     method: GET
     body_format: json
     validate_certs: no
@@ -67,14 +78,12 @@
     headers:
       {'sessionKey': "{{ map_session_key.json.status[0].response }}", 'datatype':'json'}
   register: map_vol1
-  with_together:
-    - "{{ up_port }}"
   delegate_to: localhost
   tags: install
 
 - name: Map volume
   uri:
-    url: https://{{ groups['powervault_me4'][0] }}/api/map/volume/{{ powervault_me4_slurm_volume_name }}/access/{{ access }}/ports/{{ item.0 }}/lun/{{ lun2 }}/initiator/{{ hostvars['server_iqdn_id']['server_iqdn']  }}
+    url: https://{{ groups['powervault_me4'][0] }}/api/map/volume/{{ powervault_me4_slurm_volume_name }}/access/{{ access }}/ports/{{ map_port }}/lun/{{ lun2 }}/initiator/{{ hostvars['server_iqdn_id']['server_iqdn']  }}
     method: GET
     body_format: json
     validate_certs: no
@@ -82,8 +91,6 @@
     headers:
       {'sessionKey': "{{ map_session_key.json.status[0].response }}", 'datatype':'json'}
   register: map_vol2
-  with_together:
-    - "{{ up_port }}"
   delegate_to: localhost
   tags: install
 
@@ -93,4 +100,5 @@
     --vault-password-file {{ login_pv_vault_file }}
   changed_when: false
   run_once: true
+  delegate_to: localhost
   when: "'$ANSIBLE_VAULT;' in config_content.stdout"

+ 5 - 0
control_plane/roles/powervault_me4/tasks/ports.yml

@@ -24,6 +24,7 @@
   changed_when: false
   no_log: true
   register: config_content
+  delegate_to: localhost
   run_once: true
 
 - name: Decrpyt login_vars.yml
@@ -32,6 +33,7 @@
     --vault-password-file {{ login_pv_vault_file }}
   changed_when: false
   run_once: true
+  delegate_to: localhost
   when: "'$ANSIBLE_VAULT;' in config_content.stdout"
 
 - name: Include variable file login_vars.yml
@@ -53,6 +55,7 @@
       {'datatype': 'json'}
     validate_certs: no
   register: port_session_key
+  delegate_to: localhost
   tags: install
 
 - name: Show ports
@@ -65,6 +68,7 @@
     headers:
       {'sessionKey': "{{ port_session_key.json.status[0].response }}", 'datatype':'json'}
   register: show_ports
+  delegate_to: localhost
   tags: install
 
 - name: Up ports
@@ -95,4 +99,5 @@
   with_together: 
     - "{{ set_port_ip }}"
     - "{{ up_port }}"
+  delegate_to: localhost
   tags: install

+ 4 - 4
control_plane/roles/powervault_me4/tasks/pv_me4_prereq.yml

@@ -57,14 +57,14 @@
 
 - name: Get the product id
   set_fact:
-    pv_id: system_info.json.system[0]['product-id']
+    pv_id: "{{ system_info.json.system[0]['product-id'] }}"
 
 - name: Verify the product id and model no. of device
   fail:
     msg: "{{ fail_pv_support }}"
   when:
-    - scsi_product_id in system_info.json.system[0]['scsi-product-id']
-    - pv_id  == "ME4084" or pv_id == "ME4024"  or pv_id == "ME4012"
+    - scsi_product_id not in system_info.json.system[0]['scsi-product-id']
+    - pv_id  != "ME4084" or pv_id != "ME4024"  or pv_id != "ME4012"
 
 - name: Set system name
   uri:
@@ -76,5 +76,5 @@
     headers:
       {'sessionKey': "{{ session_key.json.status[0].response }}", 'datatype':'json'}
   register: system_name
-  when: powervault_me4_system_name != ""
+  when: powervault_me4_system_name
   tags: install

+ 15 - 3
control_plane/roles/powervault_me4/tasks/pv_validation.yml

@@ -33,6 +33,7 @@
 - name: Check if system name has space
   shell: echo {{ powervault_me4_system_name }} | grep '\s' -c
   register: space_count
+  changed_when: false
   ignore_errors: true
   tags: install
 
@@ -46,6 +47,7 @@
 - name: Check if volume name has space
   shell: echo {{ powervault_me4_k8s_volume_name }} | grep '\s' -c
   register: vol_count1
+  changed_when: false
   ignore_errors: true
   tags: install
 
@@ -59,6 +61,7 @@
 - name: Check if volume name has space
   shell: echo {{ powervault_me4_slurm_volume_name }} | grep '\s' -c
   register: vol_count2
+  changed_when: false
   ignore_errors: true
   tags: install
 
@@ -80,6 +83,7 @@
   assert:
     that:
       - disk_count.stdout == "0"
+      - powervault_me4_disk_group_name | length > 1
       - powervault_me4_disk_group_name | length < 30
     msg: "{{ system_name_wrong }}" 
 
@@ -89,7 +93,7 @@
       - powervault_me4_snmp_notify_level | length >1
       - powervault_me4_snmp_notify_level == "crit" or powervault_me4_snmp_notify_level == "error" or powervault_me4_snmp_notify_level == "warn" or powervault_me4_snmp_notify_level == "resolved" or powervault_me4_snmp_notify_level == "info" or powervault_me4_snmp_notify_level == "none"
     fail_msg: "{{ snmp_wrong_value }}"
-    success_msg: "{{ snmp_success }}" 
+    success_msg: "{{ snmp_success }}"
 
 - name: Assert RAID value
   assert:
@@ -113,12 +117,20 @@
     that: 
       - powervault_me4_pool == "a" or powervault_me4_pool == "A" or powervault_me4_pool == "b" or powervault_me4_pool == "B"
     msg: "{{ wrong_pool }}"
+  when: powervault_me4_pool_type == "virtual"
+
+- name: Check pool type
+  assert:
+    that:
+      - powervault_me4_pool_type | length > 1
+      - powervault_me4_pool_type | lower == "virtual" or powervault_me4_pool_type | lower == "linear"
+    msg: "{{ wrong_pool_type }}"
 
 - name: Check parition percentage
   assert:
     that:
       - powervault_me4_disk_partition_size|int
-      - powervault_me4_disk_partition_size|int < 99
+      - powervault_me4_disk_partition_size|int < 90
       - powervault_me4_disk_partition_size|int > 5
     msg: "{{ wrong_partition }}"
 
@@ -133,4 +145,4 @@
 - name: Assert the nic provided
   assert:
     that:
-      - powervault_me4_server_nic | length > 2
+      - powervault_me4_server_nic | length > 2

+ 76 - 7
control_plane/roles/powervault_me4/tasks/volume.yml

@@ -30,22 +30,45 @@
   register: vol_session_key
   tags: install
 
-- name: Add disk group
+- name: Add disk group in virtual pool
   uri:
-    url: https://{{ inventory_hostname }}/api/add/disk-group/type/{{ type }}/disks/{{ powervault_me4_disk_range }}/level/{{ powervault_me4_raid_levels }}/pool/{{ powervault_me4_pool }}/{{ powervault_me4_disk_group_name }}
+    url: https://{{ inventory_hostname }}/api/add/disk-group/type/{{ powervault_me4_pool_type }}/disks/{{ powervault_me4_disk_range }}/level/{{ powervault_me4_raid_levels }}/pool/{{ powervault_me4_pool }}/{{ powervault_me4_disk_group_name }}
     method: GET
     body_format: json
     validate_certs: no
     use_proxy: no
     headers:
       {'sessionKey': "{{ vol_session_key.json.status[0].response }}", 'datatype':'json'}
-  register: pv_disk
+  register: pv_disk1
+  when: powervault_me4_pool_type|lower == "virtual"
+  tags: install
+
+- name: Add disk group in linear pool
+  uri:
+    url: https://{{ inventory_hostname }}/api/add/disk-group/type/{{ powervault_me4_pool_type }}/disks/{{ powervault_me4_disk_range }}/level/{{ powervault_me4_raid_levels }}/{{ powervault_me4_disk_group_name }}
+    method: GET
+    body_format: json
+    validate_certs: no
+    use_proxy: no
+    headers:
+      {'sessionKey': "{{ vol_session_key.json.status[0].response }}", 'datatype':'json'}
+  register: pv_disk2
+  when: powervault_me4_pool_type|lower == "linear"
   tags: install
 
 - name: Assert if disk group created or not
   fail:
-    msg: "{{ pv_disk.json.status[0].response }}"
-  when:  pv_disk.json.status[0] ['response-type'] == "Error"
+    msg: "{{ pv_disk1.json.status[0].response }}"
+  when:
+    - powervault_me4_pool_type|lower == "virtual"
+    - pv_disk1.json.status[0] ['response-type'] == "Error"
+
+- name: Assert if disk group created or not
+  fail:
+    msg: "{{ pv_disk2.json.status[0].response }}"
+  when:
+    - powervault_me4_pool_typ|lower e== "linear"
+    - pv_disk2.json.status[0] ['response-type'] == "Error"
 
 - name: Create volume1
   uri:
@@ -57,6 +80,7 @@
     headers:
       {'sessionKey': "{{ vol_session_key.json.status[0].response }}", 'datatype':'json'}
   register: pv_vol1
+  when: powervault_me4_pool_type|lower == "virtual"
   tags: install
 
 - name: Create volume2
@@ -69,14 +93,59 @@
     headers:
       {'sessionKey': "{{ vol_session_key.json.status[0].response }}", 'datatype':'json'}
   register: pv_vol2
+  when: powervault_me4_pool_type|lower == "virtual"
+  tags: install
+
+- name: Create volume1
+  uri:
+    url: https://{{ inventory_hostname }}/api/create/volume/size/{{ powervault_me4_volume_size }}/pool/{{ powervault_me4_disk_group_name }}/{{ powervault_me4_k8s_volume_name }}
+    method: GET
+    body_format: json
+    validate_certs: no
+    use_proxy: no
+    headers:
+      {'sessionKey': "{{ vol_session_key.json.status[0].response }}", 'datatype':'json'}
+  register: pv_vol3
+  when: powervault_me4_pool_type|lower == "linear"
+  tags: install
+
+- name: Create volume2
+  uri:
+    url: https://{{ inventory_hostname }}/api/create/volume/size/{{ powervault_me4_volume_size }}/pool/{{ powervault_me4_disk_group_name }}/{{ powervault_me4_slurm_volume_name }}
+    method: GET
+    body_format: json
+    validate_certs: no
+    use_proxy: no
+    headers:
+      {'sessionKey': "{{ vol_session_key.json.status[0].response }}", 'datatype':'json'}
+  register: pv_vol4
+  when: powervault_me4_pool_type|lower == "linear"
   tags: install
 
 - name: Assert if k8s_volume created correctly
   fail:
     msg: "{{ pv_vol1.json.status[0].response }}"
-  when: pv_vol1.json.status[0]['response-type'] == "Error"
+  when:
+    - powervault_me4_pool_type| lower == "virtual"
+    - pv_vol1.json.status[0]['response-type'] == "Error"
 
 - name: Assert if slurm_volume created correctly
   fail:
     msg: "{{ pv_vol2.json.status[0].response }}"
-  when: pv_vol2.json.status[0]['response-type'] == "Error"
+  when:
+    - powervault_me4_pool_type| lower == "virtual"
+    - pv_vol2.json.status[0]['response-type'] == "Error"
+
+- name: Assert if k8s_volume created correctly
+  fail:
+    msg: "{{ pv_vol3.json.status[0].response }}"
+  when:
+    - powervault_me4_pool_type| lower == "linear"
+    - pv_vol3.json.status[0]['response-type'] == "Error"
+
+- name: Assert if slurm_volume created correctly
+  fail:
+    msg: "{{ pv_vol4.json.status[0].response }}"
+  when:
+    - powervault_me4_pool_type|lower == "linear"
+    - pv_vol4.json.status[0]['response-type'] == "Error"

+ 1 - 2
control_plane/roles/powervault_me4/vars/main.yml

@@ -23,7 +23,7 @@ correct_disk_range: "Succes: Disk range is correct"
 wrong_pool: "Failed: Given pool value is wrong"
 wrong_partition: "Failed: Given partition is wrong"
 wrong_vol_size: "Failed: Given volume size is wrong"
-
+wrong_pool_type: "Failed: Given pool type value is wrong"
 
 # Usage: pv_me4_prereq.yml
 scsi_product_id: ME4
@@ -37,7 +37,6 @@ base_pv_file: "{{ role_path }}/../../input_params/base_vars.yml"
 # Usage: volume.yml
 lun1: 0
 lun2: 1
-type: virtual
 
 # Usage: ports.yml
 port_ip: 192.168.25.