浏览代码

Merge pull request #451 from Shubhangi-dell/devel

Issue #450: Powervault Configurations
Lucas A. Wilson 3 年之前
父节点
当前提交
053215f3fc

+ 31 - 5
control_plane/roles/powervault_me4/tasks/main.yml

@@ -1,4 +1,4 @@
-# Copyright 2021 Dell Inc. or its subsidiaries. All Rights Reserved.
+#  Copyright 2021 Dell Inc. or its subsidiaries. All Rights Reserved.
 #
 #
 #  Licensed under the Apache License, Version 2.0 (the "License");
 #  Licensed under the Apache License, Version 2.0 (the "License");
 #  you may not use this file except in compliance with the License.
 #  you may not use this file except in compliance with the License.
@@ -13,7 +13,33 @@
 #  limitations under the License.
 #  limitations under the License.
 ---
 ---
 
 
-# Will be updated later in each PR
-- name: Pass
-  debug:
-    msg: "Pass"
+- name: Set powervault credentials
+  set_fact:
+    powervault_me4_username: "{{ lookup('env','ANSIBLE_NET_USERNAME') }}"
+    powervault_me4_password: "{{ lookup('env','ANSIBLE_NET_PASSWORD') }}"
+  no_log: true
+  run_once: true
+
+- name: Include variable file base_vars.yml
+  include_vars: "{{ base_pv_file }}"
+  no_log: true
+
+- name: Include variable file for powervault
+  include_vars: "{{ pv_file }}"
+  no_log: true
+
+- name: Include common variables
+  include_vars: ../../control_plane_common/vars/main.yml
+
+- name: Validation of powervault vars
+  include: pv_validation.yml
+
+- name: Check powervault pre-requisite
+  include_tasks: pv_me4_prereq.yml
+
+- name: Create volume
+  include_tasks: volume.yml
+
+- name: Set snmp parameters
+  include_tasks: set_snmp.yml
+  when: snmp_trap_destination != ""

+ 96 - 0
control_plane/roles/powervault_me4/tasks/map_volume.yml

@@ -0,0 +1,96 @@
+# Copyright 2021 Dell Inc. or its subsidiaries. All Rights Reserved.
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+---
+
+- name: Include powervault_me4_vars.yml
+  include_vars: "{{ playbook_dir }}/control_plane/input_params/powervault_me4_vars.yml"
+
+- name: Include powervault_me4 role variables
+  include_vars: "{{ playbook_dir }}/control_plane/roles/powervault_me4/vars/main.yml"
+
+- name: Check if login_vars.yml file is encrypted
+  command: cat {{ login_pv_file }}
+  changed_when: false
+  no_log: true
+  register: config_content
+  run_once: true
+
+- name: Decrpyt login_vars.yml
+  command: >-
+    ansible-vault decrypt {{ login_pv_file }}
+    --vault-password-file {{ login_pv_vault_file }}
+  changed_when: false
+  run_once: true
+  when: "'$ANSIBLE_VAULT;' in config_content.stdout"
+
+- name: Include variable file login_vars.yml
+  include_vars: "{{ login_pv_file }}"
+  no_log: true
+
+- name: Get auth string
+  shell: echo -n {{ powervault_me4_username }}_{{ powervault_me4_password }}  | sha256sum
+  register: map_auth_string
+  changed_when: false
+  ignore_errors: yes
+  delegate_to: localhost
+  tags: install
+
+- name: Get session key
+  uri:
+    url: https://{{ groups['powervault_me4'][0] }}/api/login/{{ map_auth_string.stdout | replace(" -", "") }}
+    method: GET
+    headers:
+      {'datatype': 'json'}
+    validate_certs: no
+  register: map_session_key
+  delegate_to: localhost
+  tags: install
+
+- 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'] }}
+    method: GET
+    body_format: json
+    validate_certs: no
+    use_proxy: no
+    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']  }}
+    method: GET
+    body_format: json
+    validate_certs: no
+    use_proxy: no
+    headers:
+      {'sessionKey': "{{ map_session_key.json.status[0].response }}", 'datatype':'json'}
+  register: map_vol2
+  with_together:
+    - "{{ up_port }}"
+  delegate_to: localhost
+  tags: install
+
+- name: Encypt login_vars.yml
+  command: >-
+    ansible-vault encrypt {{ login_pv_file }}
+    --vault-password-file {{ login_pv_vault_file }}
+  changed_when: false
+  run_once: true
+  when: "'$ANSIBLE_VAULT;' in config_content.stdout"

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

@@ -0,0 +1,98 @@
+# Copyright 2021 Dell Inc. or its subsidiaries. All Rights Reserved.
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+---
+
+- name: Include powervault_me4_vars.yml
+  include_vars: "{{ playbook_dir }}/control_plane/input_params/powervault_me4_vars.yml"
+
+- name: Include powervault_me4 role variables
+  include_vars: "{{ playbook_dir }}/control_plane/roles/powervault_me4/vars/main.yml"
+
+- name: Check if login_vars.yml file is encrypted
+  command: cat {{ login_pv_file }}
+  changed_when: false
+  no_log: true
+  register: config_content
+  run_once: true
+
+- name: Decrpyt login_vars.yml
+  command: >-
+    ansible-vault decrypt {{ login_pv_file }}
+    --vault-password-file {{ login_pv_vault_file }}
+  changed_when: false
+  run_once: true
+  when: "'$ANSIBLE_VAULT;' in config_content.stdout"
+
+- name: Include variable file login_vars.yml
+  include_vars: "{{ login_pv_file }}"
+  no_log: true
+
+- name: Get auth string
+  shell: echo -n {{ powervault_me4_username }}_{{ powervault_me4_password }}  | sha256sum
+  register: port_auth_string
+  changed_when: false
+  ignore_errors: yes
+  tags: install
+
+- name: Get session key
+  uri:
+    url: https://{{ groups['powervault_me4'][0] }}/api/login/{{ port_auth_string.stdout | replace(" -", "") }}
+    method: GET
+    headers:
+      {'datatype': 'json'}
+    validate_certs: no
+  register: port_session_key
+  tags: install
+
+- name: Show ports
+  uri:
+    url: https://{{ groups['powervault_me4'][0] }}/api/show/ports
+    method: GET
+    body_format: json
+    validate_certs: no
+    use_proxy: no
+    headers:
+      {'sessionKey': "{{ port_session_key.json.status[0].response }}", 'datatype':'json'}
+  register: show_ports
+  tags: install
+
+- name: Up ports
+  set_fact:
+    up_port: "{{ up_port + [item.port] }}"
+    target_id: "{{ item.get('target-id') }}"
+  when: item.status == "Up"
+  loop: "{{ show_ports.json.port }}"
+  loop_control:
+    label: "{{ item.port }}"
+
+- name: Set ip
+  set_fact:
+    set_port_ip: "{{ set_port_ip+['{{ port_ip }}{{ temp|int }}'] }}"
+    temp: "{{ temp|int+t|int }}"
+  loop: "{{ up_port }}"
+
+- name: Assign ip to ports
+  uri:
+    url: https://{{ groups['powervault_me4'][0] }}/api/set/host-parameters/gateway/{{ port_gateway }}/ip/{{ item.0 }}/netmask/{{ port_netmask }}/ports/{{ item.1 }}/prompt/yes/noprompt
+    method: GET
+    body_format: json
+    validate_certs: no
+    use_proxy: no
+    headers:
+      {'sessionKey': "{{ port_session_key.json.status[0].response }}", 'datatype':'json'}
+  register: set_ports
+  with_together: 
+    - "{{ set_port_ip }}"
+    - "{{ up_port }}"
+  tags: install

+ 80 - 0
control_plane/roles/powervault_me4/tasks/pv_me4_prereq.yml

@@ -0,0 +1,80 @@
+# Copyright 2021 Dell Inc. or its subsidiaries. All Rights Reserved.
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+---
+
+- name: Ping the powervault device to validate connectivity
+  command: ping -c1 {{ inventory_hostname }}
+  register: validate_login
+  changed_when: false
+  ignore_errors: yes
+  tags: install
+
+- name: Get auth string
+  shell: echo -n {{ powervault_me4_username }}_{{ powervault_me4_password }} | sha256sum
+  register: auth_string
+  changed_when: false
+  ignore_errors: yes
+  tags: install
+
+- name: Get session key
+  uri:
+    url: https://{{ inventory_hostname }}/api/login/{{ auth_string.stdout | replace(" -", "") }}
+    method: GET
+    headers:
+      {'datatype': 'json'}
+    validate_certs: no
+  register: session_key
+  tags: install
+
+- name: Set powervault ip
+  add_host:
+    name: "pv_ip"
+    powervault_ip: "{{ inventory_hostname }}"
+  tags: install
+
+- name: Execute show system command
+  uri:
+    url: https://{{ inventory_hostname }}/api/show/system
+    method: GET
+    body_format: json
+    validate_certs: no
+    use_proxy: no
+    headers:
+      {'sessionKey': "{{ session_key.json.status[0].response }}", 'datatype':'json'}
+  register: system_info
+  tags: install
+
+- name: Get the product id
+  set_fact:
+    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"
+
+- name: Set system name
+  uri:
+    url: https://{{ inventory_hostname }}/api/set/system/name/{{ powervault_me4_system_name }}
+    method: GET
+    body_format: json
+    validate_certs: no
+    use_proxy: no
+    headers:
+      {'sessionKey': "{{ session_key.json.status[0].response }}", 'datatype':'json'}
+  register: system_name
+  when: powervault_me4_system_name != ""
+  tags: install

+ 136 - 0
control_plane/roles/powervault_me4/tasks/pv_validation.yml

@@ -0,0 +1,136 @@
+# Copyright 2021 Dell Inc. or its subsidiaries. All Rights Reserved.
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+---
+
+- name: Get auth string
+  shell: echo -n {{ powervault_me4_username }}_{{ powervault_me4_password }} | sha256sum
+  register: val_auth_string
+  changed_when: false
+  ignore_errors: yes
+  tags: install
+
+- name: Get session key
+  uri:
+    url: https://{{ inventory_hostname }}/api/login/{{ val_auth_string.stdout | replace(" -", "") }}
+    method: GET
+    headers:
+      {'datatype': 'json'}
+    validate_certs: no
+  register: val_session_key
+  tags: install
+
+- name: Check if system name has space
+  shell: echo {{ powervault_me4_system_name }} | grep '\s' -c
+  register: space_count
+  ignore_errors: true
+  tags: install
+
+- name: Fail if system name has space
+  assert:
+    that:
+      - space_count.stdout|int == 0
+      - powervault_me4_system_name | length < 30
+    msg: "{{ system_name_wrong }}"
+
+- name: Check if volume name has space
+  shell: echo {{ powervault_me4_k8s_volume_name }} | grep '\s' -c
+  register: vol_count1
+  ignore_errors: true
+  tags: install
+
+- name: Fail if volume name has space
+  assert:
+    that:
+      - vol_count1.stdout == "0"
+      - powervault_me4_k8s_volume_name | length < 30
+    msg: "{{ system_name_wrong }}"
+
+- name: Check if volume name has space
+  shell: echo {{ powervault_me4_slurm_volume_name }} | grep '\s' -c
+  register: vol_count2
+  ignore_errors: true
+  tags: install
+
+- name: Assert if volume name has space
+  assert:
+    that:
+      - vol_count2.stdout == "0"
+      - powervault_me4_slurm_volume_name | length < 30
+    msg: "{{ system_name_wrong }}"
+
+- name: Check if disk name has space
+  shell: echo {{ powervault_me4_disk_group_name }} | grep '\s' -c
+  register: disk_count
+  when: powervault_me4_disk_group_name | length > 1
+  ignore_errors: true
+  tags: install
+
+- name: Assert if disk name has space
+  assert:
+    that:
+      - disk_count.stdout == "0"
+      - powervault_me4_disk_group_name | length < 30
+    msg: "{{ system_name_wrong }}" 
+
+- name: Assert snmp notification level
+  assert:
+    that:
+      - 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 }}" 
+
+- name: Assert RAID value
+  assert:
+    that: >
+      powervault_me4_raid_levels| lower == "r1" or powervault_me4_raid_levels| lower == "raid1" or
+      powervault_me4_raid_levels| lower == "r5" or powervault_me4_raid_levels| lower == "raid5" or
+      powervault_me4_raid_levels| lower == "r6" or powervault_me4_raid_levels| lower == "raid6" or
+      powervault_me4_raid_levels| lower == "r10" or powervault_me4_raid_levels| lower == "raid10" or
+      powervault_me4_raid_levels| lower == "adapt"
+    msg: "{{ raid_level_wrong }}"
+
+- name: Assert disk range
+  assert:
+    that:
+      - powervault_me4_disk_range | length >1
+    fail_msg: "{{ wrong_disk_range }}"
+    success_msg: "{{ correct_disk_range }}"
+
+- name: Check pool value
+  assert: 
+    that: 
+      - powervault_me4_pool == "a" or powervault_me4_pool == "A" or powervault_me4_pool == "b" or powervault_me4_pool == "B"
+    msg: "{{ wrong_pool }}"
+
+- 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 > 5
+    msg: "{{ wrong_partition }}"
+
+- name: Check the volume size
+  assert:
+    that: >
+      'GB' in powervault_me4_volume_size or 'TB' in powervault_me4_volume_size or 
+      'MB' in powervault_me4_volume_size or 
+      'B' in powervault_me4_volume_size 
+    msg: "{{ wrong_vol_size  }}"
+
+- name: Assert the nic provided
+  assert:
+    that:
+      - powervault_me4_server_nic | length > 2

+ 43 - 0
control_plane/roles/powervault_me4/tasks/set_snmp.yml

@@ -0,0 +1,43 @@
+#  Copyright 2021 Dell Inc. or its subsidiaries. All Rights Reserved.
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+---
+
+- name: Get auth string
+  shell: echo -n {{ powervault_me4_username }}_{{ powervault_me4_password }}  | sha256sum
+  register: snmp_auth_string
+  changed_when: false
+  ignore_errors: yes
+  tags: install
+
+- name: Get session key
+  uri:
+    url: https://{{ inventory_hostname }}/api/login/{{ snmp_auth_string.stdout | replace(" -", "") }}
+    method: GET
+    headers:
+      {'datatype': 'json'}
+    validate_certs: no
+  register: snmp_session_key
+  tags: install
+
+- name: Set snmp parameters
+  uri:
+    url: https://{{ inventory_hostname }}/api/set/snmp-parameters/enable/{{ powervault_me4_snmp_notify_level }}/add-trap-host/{{ snmp_trap_destination }}/read-community/{{ snmp_community_name }}
+    method: GET
+    body_format: json
+    validate_certs: no
+    use_proxy: no
+    headers:
+      {'sessionKey': "{{ snmp_session_key.json.status[0].response }}", 'datatype':'json'}
+  register: snmp
+  tags: install

+ 82 - 0
control_plane/roles/powervault_me4/tasks/volume.yml

@@ -0,0 +1,82 @@
+#  Copyright 2021 Dell Inc. or its subsidiaries. All Rights Reserved.
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+---
+
+- name: Get auth string
+  shell: echo -n {{ powervault_me4_username }}_{{ powervault_me4_password }}  | sha256sum
+  register: vol_auth_string
+  changed_when: false
+  ignore_errors: yes
+  tags: install
+
+- name: Get session key
+  uri:
+    url: https://{{ inventory_hostname }}/api/login/{{ vol_auth_string.stdout | replace(" -", "") }}
+    method: GET
+    headers:
+      {'datatype': 'json'}
+    validate_certs: no
+  register: vol_session_key
+  tags: install
+
+- name: Add disk group
+  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 }}
+    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
+  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"
+
+- name: Create volume1
+  uri:
+    url: https://{{ inventory_hostname }}/api/create/volume/size/{{ powervault_me4_volume_size }}/pool/{{ powervault_me4_pool }}/{{ 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_vol1
+  tags: install
+
+- name: Create volume2
+  uri:
+    url: https://{{ inventory_hostname }}/api/create/volume/size/{{ powervault_me4_volume_size }}/pool/{{ powervault_me4_pool }}/{{ 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_vol2
+  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"
+
+- name: Assert if slurm_volume created correctly
+  fail:
+    msg: "{{ pv_vol2.json.status[0].response }}"
+  when: pv_vol2.json.status[0]['response-type'] == "Error"

+ 54 - 0
control_plane/roles/powervault_me4/vars/main.yml

@@ -0,0 +1,54 @@
+# Copyright 2021 Dell Inc. or its subsidiaries. All Rights Reserved.
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+---
+
+# Usage: pv_validation.yml
+system_name_wrong: "Failed. Given name might be empty or it  containes space or is more than 30 in length"
+snmp_wrong_value: "Failed. Snmp value wrong"
+snmp_success: "Success: Snmp value correct"
+raid_level_wrong: "Failed: wrong raid level entered"
+wrong_disk_range: "Failed: disk range should not be empty"
+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"
+
+
+# Usage: pv_me4_prereq.yml
+scsi_product_id: ME4
+fail_pv_support: "Failed. Powervault not supported"
+success_pv_support: "Success. Powervault supported"
+
+# Usage: main.yml
+pv_file: "{{ role_path }}/../../input_params/powervault_me4_vars.yml"
+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.
+port_netmask: 255.255.255.0
+port_gateway: 192.168.25.1
+temp: 0
+t: 5
+set_port_ip: []
+up_port: []
+
+# Usage: map_volume.yml
+access: rw
+login_pv_file: "{{ playbook_dir }}/control_plane/input_params/login_vars.yml"
+login_pv_vault_file: "{{ playbook_dir }}/control_plane/input_params/.login_vault_key"