cinder_250.py 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757
  1. # -*- coding: utf-8 -*-
  2. # Licensed under the Apache License, Version 2.0 (the "License");
  3. # you may not use this file except in compliance with the License.
  4. # You may obtain a copy of the License at
  5. #
  6. # http://www.apache.org/licenses/LICENSE-2.0
  7. #
  8. # Unless required by applicable law or agreed to in writing, software
  9. # distributed under the License is distributed on an "AS IS" BASIS,
  10. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
  11. # implied.
  12. # See the License for the specific language governing permissions and
  13. # limitations under the License.
  14. """
  15. Installs and configures Cinder
  16. """
  17. import re
  18. from packstack.installer import basedefs
  19. from packstack.installer import exceptions
  20. from packstack.installer import processors
  21. from packstack.installer import validators
  22. from packstack.installer.utils import split_hosts
  23. from packstack.installer import utils
  24. from packstack.modules.documentation import update_params_usage
  25. from packstack.modules.ospluginutils import generate_ssl_cert
  26. # ------------------ Cinder Packstack Plugin initialization ------------------
  27. PLUGIN_NAME = "OS-Cinder"
  28. PLUGIN_NAME_COLORED = utils.color_text(PLUGIN_NAME, 'blue')
  29. NETAPP_DEFAULT_STORAGE_FAMILY = "ontap_cluster"
  30. NETAPP_DEFAULT_STORAGE_PROTOCOL = "nfs"
  31. def initConfig(controller):
  32. conf_params = {
  33. "CINDER": [
  34. {"CMD_OPTION": "cinder-db-passwd",
  35. "PROMPT": "Enter the password for the Cinder DB access",
  36. "OPTION_LIST": [],
  37. "VALIDATORS": [validators.validate_not_empty],
  38. "DEFAULT_VALUE": "PW_PLACEHOLDER",
  39. "PROCESSORS": [processors.process_password],
  40. "MASK_INPUT": True,
  41. "LOOSE_VALIDATION": False,
  42. "CONF_NAME": "CONFIG_CINDER_DB_PW",
  43. "USE_DEFAULT": False,
  44. "NEED_CONFIRM": True,
  45. "CONDITION": False},
  46. {"CMD_OPTION": 'cinder-db-purge-enable',
  47. "PROMPT": (
  48. "Enter y if cron job for removing soft deleted DB rows "
  49. "should be created"
  50. ),
  51. "OPTION_LIST": ['y', 'n'],
  52. "VALIDATORS": [validators.validate_not_empty],
  53. "PROCESSORS": [processors.process_bool],
  54. "DEFAULT_VALUE": 'y',
  55. "MASK_INPUT": False,
  56. "LOOSE_VALIDATION": False,
  57. "CONF_NAME": 'CONFIG_CINDER_DB_PURGE_ENABLE',
  58. "USE_DEFAULT": False,
  59. "NEED_CONFIRM": True,
  60. "CONDITION": False},
  61. {"CMD_OPTION": "cinder-ks-passwd",
  62. "PROMPT": "Enter the password for the Cinder Keystone access",
  63. "OPTION_LIST": [],
  64. "VALIDATORS": [validators.validate_not_empty],
  65. "DEFAULT_VALUE": "PW_PLACEHOLDER",
  66. "PROCESSORS": [processors.process_password],
  67. "MASK_INPUT": True,
  68. "LOOSE_VALIDATION": False,
  69. "CONF_NAME": "CONFIG_CINDER_KS_PW",
  70. "USE_DEFAULT": False,
  71. "NEED_CONFIRM": True,
  72. "CONDITION": False},
  73. {"CMD_OPTION": "cinder-backend",
  74. "PROMPT": "Enter the Cinder backend to be configured",
  75. "OPTION_LIST": ["lvm", "gluster", "nfs", "vmdk", "netapp",
  76. "solidfire"],
  77. "VALIDATORS": [validators.validate_options],
  78. "DEFAULT_VALUE": "lvm",
  79. "MASK_INPUT": False,
  80. "LOOSE_VALIDATION": False,
  81. "CONF_NAME": "CONFIG_CINDER_BACKEND",
  82. "USE_DEFAULT": False,
  83. "NEED_CONFIRM": False,
  84. "CONDITION": False},
  85. ],
  86. "CINDERVOLUMECREATE": [
  87. {"CMD_OPTION": "cinder-volumes-create",
  88. "PROMPT": ("Should Cinder's volumes group be created (for "
  89. "proof-of-concept installation)?"),
  90. "OPTION_LIST": ["y", "n"],
  91. "VALIDATORS": [validators.validate_options],
  92. "DEFAULT_VALUE": "y",
  93. "MASK_INPUT": False,
  94. "LOOSE_VALIDATION": False,
  95. "CONF_NAME": "CONFIG_CINDER_VOLUMES_CREATE",
  96. "USE_DEFAULT": False,
  97. "NEED_CONFIRM": False,
  98. "CONDITION": False},
  99. ],
  100. "CINDERVOLUMESIZE": [
  101. {"CMD_OPTION": "cinder-volumes-size",
  102. "PROMPT": "Enter Cinder's volumes group usable size",
  103. "OPTION_LIST": [],
  104. "VALIDATORS": [validators.validate_not_empty],
  105. "DEFAULT_VALUE": "20G",
  106. "MASK_INPUT": False,
  107. "LOOSE_VALIDATION": False,
  108. "CONF_NAME": "CONFIG_CINDER_VOLUMES_SIZE",
  109. "USE_DEFAULT": False,
  110. "NEED_CONFIRM": False,
  111. "CONDITION": False},
  112. ],
  113. "CINDERGLUSTERMOUNTS": [
  114. {"CMD_OPTION": "cinder-gluster-mounts",
  115. "PROMPT": ("Enter a single or comma separated list of gluster "
  116. "volume shares to use with Cinder"),
  117. "OPTION_LIST": ["^([\d]{1,3}\.){3}[\d]{1,3}:/.*",
  118. "^[a-zA-Z0-9][\-\.\w]*:/.*"],
  119. "VALIDATORS": [validators.validate_multi_regexp],
  120. "PROCESSORS": [],
  121. "DEFAULT_VALUE": "",
  122. "MASK_INPUT": False,
  123. "LOOSE_VALIDATION": True,
  124. "CONF_NAME": "CONFIG_CINDER_GLUSTER_MOUNTS",
  125. "USE_DEFAULT": False,
  126. "NEED_CONFIRM": False,
  127. "CONDITION": False},
  128. ],
  129. "CINDERNFSMOUNTS": [
  130. {"CMD_OPTION": "cinder-nfs-mounts",
  131. "PROMPT": ("Enter a single or comma seprated list of NFS exports "
  132. "to use with Cinder"),
  133. "OPTION_LIST": [""],
  134. "VALIDATORS": [validators.validate_multi_export],
  135. "PROCESSORS": [],
  136. "DEFAULT_VALUE": "",
  137. "MASK_INPUT": False,
  138. "LOOSE_VALIDATION": True,
  139. "CONF_NAME": "CONFIG_CINDER_NFS_MOUNTS",
  140. "USE_DEFAULT": False,
  141. "NEED_CONFIRM": False,
  142. "CONDITION": False},
  143. ],
  144. "CINDERNETAPPMAIN": [
  145. {"CMD_OPTION": "cinder-netapp-login",
  146. "PROMPT": ("Enter a NetApp login"),
  147. "OPTION_LIST": [""],
  148. "VALIDATORS": [validators.validate_not_empty],
  149. "PROCESSORS": [],
  150. "DEFAULT_VALUE": "",
  151. "MASK_INPUT": False,
  152. "LOOSE_VALIDATION": False,
  153. "CONF_NAME": "CONFIG_CINDER_NETAPP_LOGIN",
  154. "USE_DEFAULT": False,
  155. "NEED_CONFIRM": False,
  156. "CONDITION": False},
  157. {"CMD_OPTION": "cinder-netapp-password",
  158. "PROMPT": ("Enter a NetApp password"),
  159. "OPTION_LIST": [""],
  160. "VALIDATORS": [validators.validate_not_empty],
  161. "PROCESSORS": [],
  162. "DEFAULT_VALUE": "",
  163. "MASK_INPUT": True,
  164. "LOOSE_VALIDATION": False,
  165. "CONF_NAME": "CONFIG_CINDER_NETAPP_PASSWORD",
  166. "USE_DEFAULT": False,
  167. "NEED_CONFIRM": True,
  168. "CONDITION": False},
  169. {"CMD_OPTION": "cinder-netapp-hostname",
  170. "PROMPT": ("Enter a NetApp hostname"),
  171. "OPTION_LIST": [],
  172. "VALIDATORS": [validators.validate_not_empty],
  173. "PROCESSORS": [processors.process_add_quotes_around_values],
  174. "DEFAULT_VALUE": "",
  175. "MASK_INPUT": False,
  176. "LOOSE_VALIDATION": False,
  177. "CONF_NAME": "CONFIG_CINDER_NETAPP_HOSTNAME",
  178. "USE_DEFAULT": False,
  179. "NEED_CONFIRM": False,
  180. "CONDITION": False},
  181. {"CMD_OPTION": "cinder-netapp-server-port",
  182. "PROMPT": ("Enter a NetApp server port"),
  183. "OPTION_LIST": [""],
  184. "VALIDATORS": [validators.validate_port],
  185. "PROCESSORS": [],
  186. "DEFAULT_VALUE": 80,
  187. "MASK_INPUT": False,
  188. "LOOSE_VALIDATION": True,
  189. "CONF_NAME": "CONFIG_CINDER_NETAPP_SERVER_PORT",
  190. "USE_DEFAULT": True,
  191. "NEED_CONFIRM": False,
  192. "CONDITION": False},
  193. {"CMD_OPTION": "cinder-netapp-storage-family",
  194. "PROMPT": ("Enter a NetApp storage family"),
  195. "OPTION_LIST": ["ontap_7mode", "ontap_cluster", "eseries"],
  196. "VALIDATORS": [validators.validate_options],
  197. "PROCESSORS": [],
  198. "DEFAULT_VALUE": NETAPP_DEFAULT_STORAGE_FAMILY,
  199. "MASK_INPUT": False,
  200. "LOOSE_VALIDATION": False,
  201. "CONF_NAME": "CONFIG_CINDER_NETAPP_STORAGE_FAMILY",
  202. "USE_DEFAULT": True,
  203. "NEED_CONFIRM": False,
  204. "CONDITION": False},
  205. {"CMD_OPTION": "cinder-netapp-transport-type",
  206. "PROMPT": ("Enter a NetApp transport type"),
  207. "OPTION_LIST": ["http", "https"],
  208. "VALIDATORS": [validators.validate_options],
  209. "PROCESSORS": [],
  210. "DEFAULT_VALUE": "http",
  211. "MASK_INPUT": False,
  212. "LOOSE_VALIDATION": False,
  213. "CONF_NAME": "CONFIG_CINDER_NETAPP_TRANSPORT_TYPE",
  214. "USE_DEFAULT": True,
  215. "NEED_CONFIRM": False,
  216. "CONDITION": False},
  217. {"CMD_OPTION": "cinder-netapp-storage-protocol",
  218. "PROMPT": ("Enter a NetApp storage protocol"),
  219. "OPTION_LIST": ["iscsi", "fc", "nfs"],
  220. "VALIDATORS": [validators.validate_options],
  221. "PROCESSORS": [],
  222. "DEFAULT_VALUE": NETAPP_DEFAULT_STORAGE_PROTOCOL,
  223. "MASK_INPUT": False,
  224. "LOOSE_VALIDATION": False,
  225. "CONF_NAME": "CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL",
  226. "USE_DEFAULT": True,
  227. "NEED_CONFIRM": False,
  228. "CONDITION": False},
  229. ],
  230. "CINDERNETAPPONTAPISCSI": [
  231. {"CMD_OPTION": "cinder-netapp-size-multiplier",
  232. "PROMPT": ("Enter a NetApp size multiplier"),
  233. "OPTION_LIST": [""],
  234. "VALIDATORS": [],
  235. "PROCESSORS": [],
  236. "DEFAULT_VALUE": "1.0",
  237. "MASK_INPUT": False,
  238. "LOOSE_VALIDATION": False,
  239. "CONF_NAME": "CONFIG_CINDER_NETAPP_SIZE_MULTIPLIER",
  240. "USE_DEFAULT": True,
  241. "NEED_CONFIRM": False,
  242. "CONDITION": False},
  243. ],
  244. "CINDERNETAPPNFS": [
  245. {"CMD_OPTION": "cinder-netapp-expiry-thres-minutes",
  246. "PROMPT": ("Enter a threshold"),
  247. "OPTION_LIST": [""],
  248. "VALIDATORS": [validators.validate_integer],
  249. "PROCESSORS": [],
  250. "DEFAULT_VALUE": 720,
  251. "MASK_INPUT": False,
  252. "LOOSE_VALIDATION": False,
  253. "CONF_NAME": "CONFIG_CINDER_NETAPP_EXPIRY_THRES_MINUTES",
  254. "USE_DEFAULT": True,
  255. "NEED_CONFIRM": False,
  256. "CONDITION": False},
  257. {"CMD_OPTION": "cinder-netapp-thres-avl-size-perc-start",
  258. "PROMPT": ("Enter a value"),
  259. "OPTION_LIST": [""],
  260. "VALIDATORS": [validators.validate_integer],
  261. "PROCESSORS": [],
  262. "DEFAULT_VALUE": 20,
  263. "MASK_INPUT": False,
  264. "LOOSE_VALIDATION": False,
  265. "CONF_NAME": "CONFIG_CINDER_NETAPP_THRES_AVL_SIZE_PERC_START",
  266. "USE_DEFAULT": True,
  267. "NEED_CONFIRM": False,
  268. "CONDITION": False},
  269. {"CMD_OPTION": "cinder-netapp-thres-avl-size-perc-stop",
  270. "PROMPT": ("Enter a value"),
  271. "OPTION_LIST": [""],
  272. "VALIDATORS": [validators.validate_integer],
  273. "PROCESSORS": [],
  274. "DEFAULT_VALUE": 60,
  275. "MASK_INPUT": False,
  276. "LOOSE_VALIDATION": False,
  277. "CONF_NAME": "CONFIG_CINDER_NETAPP_THRES_AVL_SIZE_PERC_STOP",
  278. "USE_DEFAULT": True,
  279. "NEED_CONFIRM": False,
  280. "CONDITION": False},
  281. {"CMD_OPTION": "cinder-netapp-nfs-shares",
  282. "PROMPT": ("Enter a single or comma-separated list of NetApp NFS shares"),
  283. "OPTION_LIST": [""],
  284. "VALIDATORS": [],
  285. "PROCESSORS": [],
  286. "DEFAULT_VALUE": "",
  287. "MASK_INPUT": False,
  288. "LOOSE_VALIDATION": False,
  289. "CONF_NAME": "CONFIG_CINDER_NETAPP_NFS_SHARES",
  290. "USE_DEFAULT": True,
  291. "NEED_CONFIRM": False,
  292. "CONDITION": False},
  293. {"CMD_OPTION": "cinder-netapp-nfs-shares-config",
  294. "PROMPT": ("Enter a NetApp NFS share config file"),
  295. "OPTION_LIST": [""],
  296. "VALIDATORS": [],
  297. "PROCESSORS": [],
  298. "DEFAULT_VALUE": "/etc/cinder/shares.conf",
  299. "MASK_INPUT": False,
  300. "LOOSE_VALIDATION": False,
  301. "CONF_NAME": "CONFIG_CINDER_NETAPP_NFS_SHARES_CONFIG",
  302. "USE_DEFAULT": True,
  303. "NEED_CONFIRM": False,
  304. "CONDITION": False},
  305. ],
  306. "CINDERNETAPPISCSI7MODE": [
  307. {"CMD_OPTION": "cinder-netapp-volume-list",
  308. "PROMPT": ("Enter a NetApp volume list"),
  309. "OPTION_LIST": [""],
  310. "VALIDATORS": [validators.validate_not_empty],
  311. "PROCESSORS": [],
  312. "DEFAULT_VALUE": "",
  313. "MASK_INPUT": False,
  314. "LOOSE_VALIDATION": True,
  315. "CONF_NAME": "CONFIG_CINDER_NETAPP_VOLUME_LIST",
  316. "USE_DEFAULT": True,
  317. "NEED_CONFIRM": False,
  318. "CONDITION": False},
  319. {"CMD_OPTION": "cinder-netapp-vfiler",
  320. "PROMPT": ("Enter a NetApp vFiler"),
  321. "OPTION_LIST": [""],
  322. "VALIDATORS": [validators.validate_not_empty],
  323. "PROCESSORS": [],
  324. "DEFAULT_VALUE": "",
  325. "MASK_INPUT": False,
  326. "LOOSE_VALIDATION": True,
  327. "CONF_NAME": "CONFIG_CINDER_NETAPP_VFILER",
  328. "USE_DEFAULT": True,
  329. "NEED_CONFIRM": False,
  330. "CONDITION": False},
  331. ],
  332. "CINDERNETAPP7MODEFC": [
  333. {"CMD_OPTION": "cinder-netapp-partner-backend-name",
  334. "PROMPT": ("Enter a NetApp partner backend name"),
  335. "OPTION_LIST": [""],
  336. "VALIDATORS": [validators.validate_not_empty],
  337. "PROCESSORS": [],
  338. "DEFAULT_VALUE": "",
  339. "MASK_INPUT": False,
  340. "LOOSE_VALIDATION": False,
  341. "CONF_NAME": "CONFIG_CINDER_NETAPP_PARTNER_BACKEND_NAME",
  342. "USE_DEFAULT": True,
  343. "NEED_CONFIRM": False,
  344. "CONDITION": False},
  345. ],
  346. "CINDERNETAPPVSERVER": [
  347. {"CMD_OPTION": "cinder-netapp-vserver",
  348. "PROMPT": ("Enter a NetApp Vserver"),
  349. "OPTION_LIST": [""],
  350. "VALIDATORS": [validators.validate_not_empty],
  351. "PROCESSORS": [],
  352. "DEFAULT_VALUE": "",
  353. "MASK_INPUT": False,
  354. "LOOSE_VALIDATION": False,
  355. "CONF_NAME": "CONFIG_CINDER_NETAPP_VSERVER",
  356. "USE_DEFAULT": True,
  357. "NEED_CONFIRM": False,
  358. "CONDITION": False},
  359. ],
  360. "CINDERNETAPPESERIES": [
  361. {"CMD_OPTION": "cinder-netapp-controller-ips",
  362. "PROMPT": ("Enter a value"),
  363. "OPTION_LIST": [""],
  364. "VALIDATORS": [validators.validate_multi_ping],
  365. "PROCESSORS": [],
  366. "DEFAULT_VALUE": "",
  367. "MASK_INPUT": False,
  368. "LOOSE_VALIDATION": False,
  369. "CONF_NAME": "CONFIG_CINDER_NETAPP_CONTROLLER_IPS",
  370. "USE_DEFAULT": True,
  371. "NEED_CONFIRM": False,
  372. "CONDITION": False},
  373. {"CMD_OPTION": "cinder-netapp-sa-password",
  374. "PROMPT": ("Enter a password"),
  375. "OPTION_LIST": [""],
  376. "VALIDATORS": [],
  377. "PROCESSORS": [],
  378. "DEFAULT_VALUE": "",
  379. "MASK_INPUT": True,
  380. "LOOSE_VALIDATION": False,
  381. "CONF_NAME": "CONFIG_CINDER_NETAPP_SA_PASSWORD",
  382. "USE_DEFAULT": True,
  383. "NEED_CONFIRM": False,
  384. "CONDITION": False},
  385. {"CMD_OPTION": "cinder-netapp-eseries-host-type",
  386. "PROMPT": ("Enter a host type"),
  387. "OPTION_LIST": [""],
  388. "VALIDATORS": [validators.validate_not_empty],
  389. "PROCESSORS": [],
  390. "DEFAULT_VALUE": "linux_dm_mp",
  391. "MASK_INPUT": False,
  392. "LOOSE_VALIDATION": True,
  393. "CONF_NAME": "CONFIG_CINDER_NETAPP_ESERIES_HOST_TYPE",
  394. "USE_DEFAULT": True,
  395. "NEED_CONFIRM": False,
  396. "CONDITION": False},
  397. {"CMD_OPTION": "cinder-netapp-webservice-path",
  398. "PROMPT": ("Enter a path"),
  399. "OPTION_LIST": ["^[/].*$"],
  400. "VALIDATORS": [validators.validate_regexp],
  401. "PROCESSORS": [],
  402. "DEFAULT_VALUE": "/devmgr/v2",
  403. "MASK_INPUT": False,
  404. "LOOSE_VALIDATION": True,
  405. "CONF_NAME": "CONFIG_CINDER_NETAPP_WEBSERVICE_PATH",
  406. "USE_DEFAULT": True,
  407. "NEED_CONFIRM": False,
  408. "CONDITION": False},
  409. {"CMD_OPTION": "cinder-netapp-storage-pools",
  410. "PROMPT": ("Enter a value"),
  411. "OPTION_LIST": [""],
  412. "VALIDATORS": [],
  413. "PROCESSORS": [],
  414. "DEFAULT_VALUE": "",
  415. "MASK_INPUT": False,
  416. "LOOSE_VALIDATION": True,
  417. "CONF_NAME": "CONFIG_CINDER_NETAPP_STORAGE_POOLS",
  418. "USE_DEFAULT": True,
  419. "NEED_CONFIRM": False,
  420. "CONDITION": False},
  421. ],
  422. "CINDERSOLIDFIRE": [
  423. {"CMD_OPTION": "cinder-solidfire-login",
  424. "PROMPT": ("Enter the cluster admin login"),
  425. "OPTION_LIST": [""],
  426. "VALIDATORS": [validators.validate_not_empty],
  427. "PROCESSORS": [],
  428. "DEFAULT_VALUE": "",
  429. "MASK_INPUT": False,
  430. "LOOSE_VALIDATION": False,
  431. "CONF_NAME": "CONFIG_CINDER_SOLIDFIRE_LOGIN",
  432. "USE_DEFAULT": False,
  433. "NEED_CONFIRM": False,
  434. "CONDITION": False},
  435. {"CMD_OPTION": "cinder-solidfire-password",
  436. "PROMPT": ("Enter cluster admin password"),
  437. "OPTION_LIST": [""],
  438. "VALIDATORS": [validators.validate_not_empty],
  439. "PROCESSORS": [],
  440. "DEFAULT_VALUE": "",
  441. "MASK_INPUT": True,
  442. "LOOSE_VALIDATION": False,
  443. "CONF_NAME": "CONFIG_CINDER_SOLIDFIRE_PASSWORD",
  444. "USE_DEFAULT": False,
  445. "NEED_CONFIRM": True,
  446. "CONDITION": False},
  447. {"CMD_OPTION": "cinder-solidfire-hostname",
  448. "PROMPT": ("Enter a SolidFire hostname or IP"),
  449. "OPTION_LIST": [],
  450. "VALIDATORS": [validators.validate_not_empty],
  451. "PROCESSORS": [processors.process_add_quotes_around_values],
  452. "DEFAULT_VALUE": "",
  453. "MASK_INPUT": False,
  454. "LOOSE_VALIDATION": False,
  455. "CONF_NAME": "CONFIG_CINDER_SOLIDFIRE_HOSTNAME",
  456. "USE_DEFAULT": False,
  457. "NEED_CONFIRM": False,
  458. "CONDITION": False},
  459. ]
  460. }
  461. update_params_usage(basedefs.PACKSTACK_DOC, conf_params)
  462. conf_groups = [
  463. {"GROUP_NAME": "CINDER",
  464. "DESCRIPTION": "Cinder Config parameters",
  465. "PRE_CONDITION": "CONFIG_CINDER_INSTALL",
  466. "PRE_CONDITION_MATCH": "y",
  467. "POST_CONDITION": False,
  468. "POST_CONDITION_MATCH": True},
  469. {"GROUP_NAME": "CINDERVOLUMECREATE",
  470. "DESCRIPTION": "Cinder volume create Config parameters",
  471. "PRE_CONDITION": check_lvm_options,
  472. "PRE_CONDITION_MATCH": True,
  473. "POST_CONDITION": False,
  474. "POST_CONDITION_MATCH": True},
  475. {"GROUP_NAME": "CINDERVOLUMESIZE",
  476. "DESCRIPTION": "Cinder volume size Config parameters",
  477. "PRE_CONDITION": check_lvm_vg_options,
  478. "PRE_CONDITION_MATCH": True,
  479. "POST_CONDITION": False,
  480. "POST_CONDITION_MATCH": True},
  481. {"GROUP_NAME": "CINDERGLUSTERMOUNTS",
  482. "DESCRIPTION": "Cinder gluster Config parameters",
  483. "PRE_CONDITION": check_gluster_options,
  484. "PRE_CONDITION_MATCH": True,
  485. "POST_CONDITION": False,
  486. "POST_CONDITION_MATCH": True},
  487. {"GROUP_NAME": "CINDERNFSMOUNTS",
  488. "DESCRIPTION": "Cinder NFS Config parameters",
  489. "PRE_CONDITION": check_nfs_options,
  490. "PRE_CONDITION_MATCH": True,
  491. "POST_CONDITION": False,
  492. "POST_CONDITION_MATCH": True},
  493. {"GROUP_NAME": "CINDERNETAPPMAIN",
  494. "DESCRIPTION": "Cinder NetApp main configuration",
  495. "PRE_CONDITION": check_netapp_options,
  496. "PRE_CONDITION_MATCH": True,
  497. "POST_CONDITION": False,
  498. "POST_CONDITION_MATCH": True},
  499. {"GROUP_NAME": "CINDERNETAPPONTAPISCSI",
  500. "DESCRIPTION": "Cinder NetApp ONTAP-iSCSI configuration",
  501. "PRE_CONDITION": check_netapp_ontap_iscsi_options,
  502. "PRE_CONDITION_MATCH": True,
  503. "POST_CONDITION": False,
  504. "POST_CONDITION_MATCH": True},
  505. {"GROUP_NAME": "CINDERNETAPPNFS",
  506. "DESCRIPTION": "Cinder NetApp NFS configuration",
  507. "PRE_CONDITION": check_netapp_nfs_settings,
  508. "PRE_CONDITION_MATCH": True,
  509. "POST_CONDITION": False,
  510. "POST_CONDITION_MATCH": True},
  511. {"GROUP_NAME": "CINDERNETAPPISCSI7MODE",
  512. "DESCRIPTION": "Cinder NetApp iSCSI & 7-mode configuration",
  513. "PRE_CONDITION": check_netapp_7modeiscsi_options,
  514. "PRE_CONDITION_MATCH": True,
  515. "POST_CONDITION": False,
  516. "POST_CONDITION_MATCH": True},
  517. {"GROUP_NAME": "CINDERNETAPP7MODEFC",
  518. "DESCRIPTION": "Cinder NetApp 7-mode Fibre Channel configuration",
  519. "PRE_CONDITION": check_netapp_7mode_fc_options,
  520. "PRE_CONDITION_MATCH": True,
  521. "POST_CONDITION": False,
  522. "POST_CONDITION_MATCH": True},
  523. {"GROUP_NAME": "CINDERNETAPPVSERVER",
  524. "DESCRIPTION": "Cinder NetApp Vserver configuration",
  525. "PRE_CONDITION": check_netapp_vserver_options,
  526. "PRE_CONDITION_MATCH": True,
  527. "POST_CONDITION": False,
  528. "POST_CONDITION_MATCH": True},
  529. {"GROUP_NAME": "CINDERNETAPPESERIES",
  530. "DESCRIPTION": "Cinder NetApp E-Series configuration",
  531. "PRE_CONDITION": check_netapp_eseries_options,
  532. "PRE_CONDITION_MATCH": True,
  533. "POST_CONDITION": False,
  534. "POST_CONDITION_MATCH": True},
  535. {"GROUP_NAME": "CINDERSOLIDFIRE",
  536. "DESCRIPTION": "Cinder SolidFire configuration",
  537. "PRE_CONDITION": check_solidfire_options,
  538. "PRE_CONDITION_MATCH": True,
  539. "POST_CONDITION": False,
  540. "POST_CONDITION_MATCH": True}
  541. ]
  542. for group in conf_groups:
  543. params = conf_params[group["GROUP_NAME"]]
  544. controller.addGroup(group, params)
  545. def initSequences(controller):
  546. config = controller.CONF
  547. if config['CONFIG_CINDER_INSTALL'] != 'y':
  548. return
  549. config['CONFIG_CINDER_BACKEND'] = (
  550. [i.strip() for i in config['CONFIG_CINDER_BACKEND'].split(',') if i]
  551. )
  552. for key in ('CONFIG_CINDER_NETAPP_VOLUME_LIST',
  553. 'CONFIG_CINDER_GLUSTER_MOUNTS',
  554. 'CONFIG_CINDER_NFS_MOUNTS'):
  555. if key in config:
  556. config[key] = [i.strip() for i in config[key].split(',') if i]
  557. cinder_steps = []
  558. if 'lvm' in config['CONFIG_CINDER_BACKEND']:
  559. cinder_steps.append(
  560. {'title': 'Checking if the Cinder server has a cinder-volumes vg',
  561. 'functions': [check_cinder_vg]})
  562. cinder_steps.append(
  563. {'title': 'Preparing Cinder entries',
  564. 'functions': [create_manifest]}
  565. )
  566. controller.addSequence("Installing OpenStack Cinder", [], [], cinder_steps)
  567. # ------------------------- helper functions -------------------------
  568. def check_lvm_options(config):
  569. return (config['CONFIG_CINDER_INSTALL'] == 'y' and
  570. 'lvm' in config['CONFIG_CINDER_BACKEND'])
  571. def check_lvm_vg_options(config):
  572. return (config['CONFIG_CINDER_INSTALL'] == 'y' and
  573. 'lvm' in config['CONFIG_CINDER_BACKEND'])
  574. def check_gluster_options(config):
  575. return (config['CONFIG_CINDER_INSTALL'] == 'y' and
  576. 'gluster' in config['CONFIG_CINDER_BACKEND'])
  577. def check_nfs_options(config):
  578. return (config['CONFIG_CINDER_INSTALL'] == 'y' and
  579. 'nfs' in config['CONFIG_CINDER_BACKEND'])
  580. def check_netapp_options(config):
  581. return (config['CONFIG_CINDER_INSTALL'] == 'y' and
  582. 'netapp' in config['CONFIG_CINDER_BACKEND'])
  583. def check_netapp_ontap_iscsi_options(config):
  584. return (check_netapp_options(config) and
  585. config['CONFIG_CINDER_NETAPP_STORAGE_FAMILY'] in
  586. ['ontap_cluster', 'ontap_7mode'] and
  587. config['CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL'] == "iscsi")
  588. def check_netapp_nfs_settings(config):
  589. return (check_netapp_options(config) and
  590. config['CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL'] == "nfs")
  591. def check_netapp_7modeiscsi_options(config):
  592. return (check_netapp_options(config) and
  593. config['CONFIG_CINDER_NETAPP_STORAGE_FAMILY'] == 'ontap_7mode' and
  594. config['CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL'] == 'iscsi')
  595. def check_netapp_7mode_fc_options(config):
  596. return (check_netapp_options(config) and
  597. config['CONFIG_CINDER_NETAPP_STORAGE_FAMILY'] == "ontap_7mode"
  598. and config['CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL'] == "fc")
  599. def check_netapp_vserver_options(config):
  600. return (check_netapp_options(config) and
  601. config['CONFIG_CINDER_NETAPP_STORAGE_FAMILY'] == "ontap_cluster"
  602. and config['CONFIG_CINDER_NETAPP_STORAGE_PROTOCOL'] in
  603. ['nfs', 'iscsi'])
  604. def check_netapp_eseries_options(config):
  605. return (check_netapp_options(config) and
  606. config['CONFIG_CINDER_NETAPP_STORAGE_FAMILY'] == "eseries")
  607. def check_solidfire_options(config):
  608. return (config['CONFIG_CINDER_INSTALL'] == 'y' and
  609. 'solidfire' in config['CONFIG_CINDER_BACKEND'])
  610. # -------------------------- step functions --------------------------
  611. def check_cinder_vg(config, messages):
  612. cinders_volume = 'cinder-volumes'
  613. # Do we have a cinder-volumes vg?
  614. have_cinders_volume = False
  615. server = utils.ScriptRunner(config['CONFIG_STORAGE_HOST'])
  616. server.append('vgdisplay %s' % cinders_volume)
  617. try:
  618. server.execute()
  619. have_cinders_volume = True
  620. except exceptions.ScriptRuntimeError:
  621. pass
  622. if config["CONFIG_CINDER_VOLUMES_CREATE"] == "n":
  623. if not have_cinders_volume:
  624. raise exceptions.MissingRequirements("The cinder server should "
  625. "contain a cinder-volumes "
  626. "volume group")
  627. match = re.match('^(?P<size>\d+)G$',
  628. config['CONFIG_CINDER_VOLUMES_SIZE'].strip())
  629. if not match:
  630. msg = 'Invalid Cinder volumes VG size.'
  631. raise exceptions.ParamValidationError(msg)
  632. cinders_volume_size = int(match.group('size')) * 1024
  633. cinders_reserve = int(cinders_volume_size * 0.03)
  634. cinders_volume_size = cinders_volume_size + cinders_reserve
  635. config['CONFIG_CINDER_VOLUMES_SIZE'] = '%sM' % cinders_volume_size
  636. def create_manifest(config, messages):
  637. if config['CONFIG_AMQP_ENABLE_SSL'] == 'y':
  638. ssl_host = config['CONFIG_STORAGE_HOST']
  639. ssl_cert_file = config['CONFIG_CINDER_SSL_CERT'] = (
  640. '/etc/pki/tls/certs/ssl_amqp_cinder.crt'
  641. )
  642. ssl_key_file = config['CONFIG_CINDER_SSL_KEY'] = (
  643. '/etc/pki/tls/private/ssl_amqp_cinder.key'
  644. )
  645. service = 'cinder'
  646. generate_ssl_cert(config, ssl_host, service, ssl_key_file,
  647. ssl_cert_file)
  648. fw_details = dict()
  649. for host in split_hosts(config['CONFIG_COMPUTE_HOSTS']):
  650. if (config['CONFIG_NOVA_INSTALL'] == 'y' and
  651. config['CONFIG_VMWARE_BACKEND'] == 'n'):
  652. key = "cinder_%s" % host
  653. fw_details.setdefault(key, {})
  654. fw_details[key]['host'] = "%s" % host
  655. else:
  656. key = "cinder_all"
  657. fw_details.setdefault(key, {})
  658. fw_details[key]['host'] = "ALL"
  659. fw_details[key]['service_name'] = "cinder"
  660. fw_details[key]['chain'] = "INPUT"
  661. fw_details[key]['ports'] = ['3260']
  662. fw_details[key]['proto'] = "tcp"
  663. config['FIREWALL_CINDER_RULES'] = fw_details
  664. # cinder API should be open for everyone
  665. fw_details = dict()
  666. key = "cinder_api"
  667. fw_details.setdefault(key, {})
  668. fw_details[key]['host'] = "ALL"
  669. fw_details[key]['service_name'] = "cinder-api"
  670. fw_details[key]['chain'] = "INPUT"
  671. fw_details[key]['ports'] = ['8776']
  672. fw_details[key]['proto'] = "tcp"
  673. config['FIREWALL_CINDER_API_RULES'] = fw_details