password_config.yml 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. # Copyright 2020 Dell Inc. or its subsidiaries. All Rights Reserved.
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License");
  4. # you may not use this file except in compliance with the License.
  5. # You may obtain a copy of the License at
  6. #
  7. # http://www.apache.org/licenses/LICENSE-2.0
  8. #
  9. # Unless required by applicable law or agreed to in writing, software
  10. # distributed under the License is distributed on an "AS IS" BASIS,
  11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. # See the License for the specific language governing permissions and
  13. # limitations under the License.
  14. ---
  15. - name: Check input config file is encrypted
  16. command: cat {{ input_config_filename }}
  17. changed_when: false
  18. register: config_content
  19. - name: Decrpyt appliance_config.yml
  20. command: >-
  21. ansible-vault decrypt {{ input_config_filename }}
  22. --vault-password-file {{ vault_filename }}
  23. changed_when: false
  24. when: "'$ANSIBLE_VAULT;' in config_content.stdout"
  25. - name: Include variable file appliance_config.yml
  26. include_vars: "{{ input_config_filename }}"
  27. no_log: true
  28. - name: Validate input parameters are not empty
  29. fail:
  30. msg: "{{ input_config_failure_msg }}"
  31. register: input_config_check
  32. when:
  33. - provision_password | length < 1 or
  34. awx_password | length < 1 or
  35. hpc_nic | length < 1 or
  36. public_nic | length < 1 or
  37. dhcp_start_ip_range | length < 1 or
  38. dhcp_end_ip_range | length < 1
  39. - name: Save input variables from file
  40. set_fact:
  41. cobbler_password: "{{ provision_password }}"
  42. admin_password: "{{ awx_password }}"
  43. nic: "{{ hpc_nic }}"
  44. internet_nic: "{{ public_nic }}"
  45. dhcp_start_ip: "{{ dhcp_start_ip_range | ipv4 }}"
  46. dhcp_end_ip: "{{ dhcp_end_ip_range | ipv4 }}"
  47. mapping_file: "{{ mapping_file_exists }}"
  48. no_log: true
  49. - name: Get the system hpc ip
  50. shell: "ifconfig {{ hpc_nic }} | grep 'inet' |cut -d: -f2 | awk '{ print $2}'"
  51. register: ip
  52. changed_when: false
  53. - name: Get the system public ip
  54. shell: "ifconfig {{ internet_nic }} | grep 'inet' |cut -d: -f2 | awk '{ print $2}'"
  55. register: internet_ip
  56. changed_when: false
  57. - name: Get the system netmask
  58. shell: "ifconfig {{ hpc_nic }} | grep 'inet' |cut -d: -f2 | awk '{ print $4}'"
  59. register: net
  60. changed_when: false
  61. - name: HPC nic IP
  62. set_fact:
  63. hpc_ip: "{{ ip.stdout }}"
  64. public_ip: "{{ internet_ip.stdout }}"
  65. - name: Netmask
  66. set_fact:
  67. netmask: "{{ net.stdout }}"
  68. - name: shell try
  69. shell: |
  70. IFS=. read -r i1 i2 i3 i4 <<< "{{ hpc_ip }}"
  71. IFS=. read -r m1 m2 m3 m4 <<< "{{ netmask }}"
  72. printf "%d.%d.%d.%d\n" "$((i1 & m1))" "$((i2 & m2))" "$((i3 & m3))" "$((i4 & m4))"
  73. register: sub_result
  74. changed_when: false
  75. - name: Subnet
  76. set_fact:
  77. subnet: "{{ sub_result.stdout }}"
  78. - name: Assert provision_password
  79. assert:
  80. that:
  81. - cobbler_password | length > min_length | int - 1
  82. - cobbler_password | length < max_length | int + 1
  83. - '"-" not in cobbler_password '
  84. - '"\\" not in cobbler_password '
  85. - '"\"" not in cobbler_password '
  86. - " \"'\" not in cobbler_password "
  87. success_msg: "{{ success_msg_provision_password }}"
  88. fail_msg: "{{ fail_msg_provision_password }}"
  89. no_log: true
  90. register: cobbler_password_check
  91. - name: Assert awx_password
  92. assert:
  93. that:
  94. - admin_password | length > min_length | int - 1
  95. - admin_password | length < max_length | int + 1
  96. - '"-" not in admin_password '
  97. - '"\\" not in admin_password '
  98. - '"\"" not in admin_password '
  99. - " \"'\" not in admin_password "
  100. success_msg: "{{ success_msg_awx_password }}"
  101. fail_msg: "{{ fail_msg_awx_password }}"
  102. no_log: true
  103. register: awx_password_check
  104. - name: Assert hpc_ip
  105. assert:
  106. that:
  107. - hpc_ip | length > 7
  108. success_msg: "{{ success_hpc_ip }}"
  109. fail_msg: "{{ fail_hpc_ip }}"
  110. register: hpc_ip_check
  111. - name: Assert public_ip
  112. assert:
  113. that:
  114. - public_ip | length > 7
  115. success_msg: "{{ success_hpc_ip }}"
  116. fail_msg: "{{ fail_hpc_ip }}"
  117. register: public_ip_check
  118. - name: Assert hpc_nic
  119. assert:
  120. that:
  121. - nic | length > nic_min_length | int - 1
  122. - nic != internet_nic
  123. success_msg: "{{ success_msg_hpc_nic }}"
  124. fail_msg: "{{ fail_msg_hpc_nic }}"
  125. register: hpc_nic_check
  126. - name: Assert public_nic
  127. assert:
  128. that:
  129. - internet_nic | length > nic_min_length | int - 1
  130. - nic != internet_nic
  131. success_msg: "{{ success_msg_public_nic }}"
  132. fail_msg: "{{ fail_msg_public_nic }}"
  133. register: public_nic_check
  134. - name: Assert mapping_file_exists
  135. assert:
  136. that:
  137. - "( mapping_file == true) or ( mapping_file == false)"
  138. success_msg: "{{ success_mapping_file }}"
  139. fail_msg: "{{ fail_mapping_file }}"
  140. register: mapping_file_check
  141. - name: Check the subnet of dhcp start range
  142. shell: |
  143. IFS=. read -r i1 i2 i3 i4 <<< "{{ dhcp_start_ip }}"
  144. IFS=. read -r m1 m2 m3 m4 <<< "{{ netmask }}"
  145. printf "%d.%d.%d.%d\n" "$((i1 & m1))" "$((i2 & m2))" "$((i3 & m3))" "$((i4 & m4))"
  146. args:
  147. warn: no
  148. register: dhcp_start_sub_result
  149. changed_when: false
  150. when: dhcp_start_ip != "false"
  151. - name: Set the start dhcp subnet
  152. set_fact:
  153. dhcp_start_sub: "{{ dhcp_start_sub_result.stdout }}"
  154. when: dhcp_start_ip != "false"
  155. - name: Check the subnet of dhcp end range
  156. shell: |
  157. IFS=. read -r i1 i2 i3 i4 <<< "{{ dhcp_end_ip }}"
  158. IFS=. read -r m1 m2 m3 m4 <<< "{{ netmask }}"
  159. printf "%d.%d.%d.%d\n" "$((i1 & m1))" "$((i2 & m2))" "$((i3 & m3))" "$((i4 & m4))"
  160. register: dhcp_end_sub_result
  161. when: dhcp_end_ip != "false"
  162. changed_when: false
  163. - name: Set the end dhcp subnet
  164. set_fact:
  165. dhcp_end_sub: "{{ dhcp_end_sub_result.stdout }}"
  166. when: dhcp_end_ip != "false"
  167. - name: Assert dhcp_start_ip_range
  168. assert:
  169. that:
  170. - dhcp_start_ip != "false"
  171. - dhcp_start_ip != dhcp_end_ip
  172. - dhcp_start_sub == subnet
  173. - dhcp_start_sub == dhcp_end_sub
  174. success_msg: "{{ success_dhcp_range }}"
  175. fail_msg: "{{ fail_dhcp_range }}"
  176. register: dhcp_start_ip_check
  177. - name: Assert dhcp_end_ip_range
  178. assert:
  179. that:
  180. - dhcp_end_ip != "false"
  181. - dhcp_start_ip != dhcp_end_ip
  182. - dhcp_end_sub == subnet
  183. - dhcp_start_sub == dhcp_end_sub
  184. success_msg: "{{ success_dhcp_range }}"
  185. fail_msg: "{{ fail_dhcp_range }}"
  186. register: dhcp_end_ip_check
  187. - name: Create ansible vault key
  188. set_fact:
  189. vault_key: "{{ lookup('password', '/dev/null chars=ascii_letters') }}"
  190. when: "'$ANSIBLE_VAULT;' not in config_content.stdout"
  191. - name: Save vault key
  192. copy:
  193. dest: "{{ vault_filename }}"
  194. content: |
  195. {{ vault_key }}
  196. owner: root
  197. force: yes
  198. when: "'$ANSIBLE_VAULT;' not in config_content.stdout"
  199. - name: Encrypt input config file
  200. command: >-
  201. ansible-vault encrypt {{ input_config_filename }}
  202. --vault-password-file {{ vault_filename }}
  203. changed_when: false
  204. - name: Check if omnia_vault_key exists
  205. stat:
  206. path: "{{ role_path }}/../../../{{ config_vaultname }}"
  207. register: vault_key_result
  208. - name: Create ansible vault key if it does not exist
  209. set_fact:
  210. vault_key: "{{ lookup('password', '/dev/null chars=ascii_letters') }}"
  211. when: not vault_key_result.stat.exists
  212. - name: Save vault key
  213. copy:
  214. dest: "{{ role_path }}/../../../{{ config_vaultname }}"
  215. content: |
  216. {{ vault_key }}
  217. owner: root
  218. force: yes
  219. when: not vault_key_result.stat.exists
  220. - name: Check if omnia config file is encrypted
  221. command: cat {{ role_path }}/../../../{{ config_filename }}
  222. changed_when: false
  223. register: config_content
  224. no_log: True
  225. - name: Decrpyt omnia_config.yml
  226. command: >-
  227. ansible-vault decrypt {{ role_path }}/../../../{{ config_filename }}
  228. --vault-password-file {{ role_path }}/../../../{{ config_vaultname }}
  229. when: "'$ANSIBLE_VAULT;' in config_content.stdout"
  230. - name: Include variable file omnia_config.yml
  231. include_vars: "{{ role_path }}/../../../{{ config_filename }}"
  232. no_log: True
  233. - name: Validate input parameters are not empty
  234. fail:
  235. msg: "{{ input_config_failure_msg }}"
  236. register: input_config_check
  237. when:
  238. - mariadb_password | length < 1 or
  239. k8s_cni | length < 1
  240. - name: Assert mariadb_password
  241. assert:
  242. that:
  243. - mariadb_password | length > min_length | int - 1
  244. - mariadb_password | length < max_length | int + 1
  245. - '"-" not in mariadb_password '
  246. - '"\\" not in mariadb_password '
  247. - '"\"" not in mariadb_password '
  248. - " \"'\" not in mariadb_password "
  249. success_msg: "{{ success_msg_mariadb_password }}"
  250. fail_msg: "{{ fail_msg_mariadb_password }}"
  251. - name: Assert kubernetes cni
  252. assert:
  253. that: "('calico' in k8s_cni) or ('flannel' in k8s_cni)"
  254. success_msg: "{{ success_msg_k8s_cni }}"
  255. fail_msg: "{{ fail_msg_k8s_cni }}"
  256. - name: Save input variables from file
  257. set_fact:
  258. db_password: "{{ mariadb_password }}"
  259. k8s_cni: "{{ k8s_cni }}"
  260. no_log: True
  261. - name: Encrypt input config file
  262. command: >-
  263. ansible-vault encrypt {{ role_path }}/../../../{{ config_filename }}
  264. --vault-password-file {{ role_path }}/../../../{{ config_vaultname }}
  265. changed_when: false