keystone_100.py 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792
  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 Keystone
  16. """
  17. import uuid
  18. from packstack.installer import basedefs
  19. from packstack.installer import validators
  20. from packstack.installer import processors
  21. from packstack.installer import utils
  22. from packstack.modules.documentation import update_params_usage
  23. # ------------- Keystone Packstack Plugin Initialization --------------
  24. PLUGIN_NAME = "OS-Keystone"
  25. PLUGIN_NAME_COLORED = utils.color_text(PLUGIN_NAME, 'blue')
  26. def initConfig(controller):
  27. keystone_params = {
  28. "KEYSTONE": [ # base keystone options
  29. {"CMD_OPTION": "keystone-db-passwd",
  30. "PROMPT": "Enter the password for the Keystone DB access",
  31. "OPTION_LIST": [],
  32. "VALIDATORS": [validators.validate_not_empty],
  33. "PROCESSORS": [processors.process_password],
  34. "DEFAULT_VALUE": "PW_PLACEHOLDER",
  35. "MASK_INPUT": True,
  36. "LOOSE_VALIDATION": False,
  37. "CONF_NAME": "CONFIG_KEYSTONE_DB_PW",
  38. "USE_DEFAULT": False,
  39. "NEED_CONFIRM": True,
  40. "CONDITION": False},
  41. {"CMD_OPTION": 'keystone-db-purge-enable',
  42. "PROMPT": (
  43. "Enter y if cron job for removing soft deleted DB rows "
  44. "should be created"
  45. ),
  46. "OPTION_LIST": ['y', 'n'],
  47. "VALIDATORS": [validators.validate_not_empty],
  48. "PROCESSORS": [processors.process_bool],
  49. "DEFAULT_VALUE": 'y',
  50. "MASK_INPUT": False,
  51. "LOOSE_VALIDATION": False,
  52. "CONF_NAME": 'CONFIG_KEYSTONE_DB_PURGE_ENABLE',
  53. "USE_DEFAULT": False,
  54. "NEED_CONFIRM": True,
  55. "CONDITION": False},
  56. {"CMD_OPTION": "keystone-region",
  57. "PROMPT": "Region name",
  58. "OPTION_LIST": [],
  59. "VALIDATORS": [validators.validate_not_empty],
  60. "DEFAULT_VALUE": "RegionOne",
  61. "MASK_INPUT": False,
  62. "LOOSE_VALIDATION": False,
  63. "CONF_NAME": "CONFIG_KEYSTONE_REGION",
  64. "USE_DEFAULT": False,
  65. "NEED_CONFIRM": False,
  66. "CONDITION": False},
  67. {"CMD_OPTION": "keystone-admin-token",
  68. "PROMPT": "The token to use for the Keystone service api",
  69. "OPTION_LIST": [],
  70. "VALIDATORS": [validators.validate_not_empty],
  71. "DEFAULT_VALUE": uuid.uuid4().hex,
  72. "MASK_INPUT": True,
  73. "LOOSE_VALIDATION": False,
  74. "CONF_NAME": "CONFIG_KEYSTONE_ADMIN_TOKEN",
  75. "USE_DEFAULT": True,
  76. "NEED_CONFIRM": False,
  77. "CONDITION": False},
  78. {"CMD_OPTION": "keystone-admin-email",
  79. "PROMPT": "Enter the email address for the Keystone admin user",
  80. "OPTION_LIST": [],
  81. "VALIDATORS": [validators.validate_not_empty],
  82. "DEFAULT_VALUE": "root@localhost",
  83. "MASK_INPUT": False,
  84. "LOOSE_VALIDATION": False,
  85. "CONF_NAME": "CONFIG_KEYSTONE_ADMIN_EMAIL",
  86. "USE_DEFAULT": False,
  87. "NEED_CONFIRM": False,
  88. "CONDITION": False},
  89. {"CMD_OPTION": "keystone-admin-username",
  90. "PROMPT": "Enter the username for the Keystone admin user",
  91. "OPTION_LIST": [],
  92. "VALIDATORS": [validators.validate_not_empty],
  93. "DEFAULT_VALUE": "admin",
  94. "MASK_INPUT": False,
  95. "LOOSE_VALIDATION": False,
  96. "CONF_NAME": "CONFIG_KEYSTONE_ADMIN_USERNAME",
  97. "USE_DEFAULT": False,
  98. "NEED_CONFIRM": False,
  99. "CONDITION": False},
  100. {"CMD_OPTION": "keystone-admin-passwd",
  101. "PROMPT": "Enter the password for the Keystone admin user",
  102. "OPTION_LIST": [],
  103. "VALIDATORS": [validators.validate_not_empty],
  104. "DEFAULT_VALUE": "PW_PLACEHOLDER",
  105. "PROCESSORS": [processors.process_password],
  106. "MASK_INPUT": True,
  107. "LOOSE_VALIDATION": False,
  108. "CONF_NAME": "CONFIG_KEYSTONE_ADMIN_PW",
  109. "USE_DEFAULT": False,
  110. "NEED_CONFIRM": True,
  111. "CONDITION": False},
  112. {"CMD_OPTION": "keystone-demo-passwd",
  113. "PROMPT": "Enter the password for the Keystone demo user",
  114. "OPTION_LIST": [],
  115. "VALIDATORS": [validators.validate_not_empty],
  116. "DEFAULT_VALUE": "PW_PLACEHOLDER",
  117. "PROCESSORS": [processors.process_password],
  118. "MASK_INPUT": True,
  119. "LOOSE_VALIDATION": False,
  120. "CONF_NAME": "CONFIG_KEYSTONE_DEMO_PW",
  121. "USE_DEFAULT": False,
  122. "NEED_CONFIRM": True,
  123. "CONDITION": False},
  124. {"CMD_OPTION": "keystone-api-version",
  125. "PROMPT": "Enter the Keystone API version string.",
  126. "OPTION_LIST": ['v2.0', 'v3'],
  127. "VALIDATORS": [validators.validate_options],
  128. "DEFAULT_VALUE": 'v3',
  129. "MASK_INPUT": False,
  130. "LOOSE_VALIDATION": False,
  131. "CONF_NAME": 'CONFIG_KEYSTONE_API_VERSION',
  132. "USE_DEFAULT": True,
  133. "NEED_CONFIRM": False,
  134. "CONDITION": False},
  135. {"CMD_OPTION": "keystone-token-format",
  136. "PROMPT": "Enter the Keystone token format.",
  137. "OPTION_LIST": ['UUID', 'PKI', 'FERNET'],
  138. "VALIDATORS": [validators.validate_options],
  139. "DEFAULT_VALUE": 'FERNET',
  140. "MASK_INPUT": False,
  141. "LOOSE_VALIDATION": False,
  142. "CONF_NAME": 'CONFIG_KEYSTONE_TOKEN_FORMAT',
  143. "USE_DEFAULT": False,
  144. "NEED_CONFIRM": False,
  145. "CONDITION": False},
  146. {"CMD_OPTION": "keystone-identity-backend",
  147. "PROMPT": "Enter the Keystone identity backend type.",
  148. "OPTION_LIST": ['sql', 'ldap'],
  149. "VALIDATORS": [validators.validate_options],
  150. "DEFAULT_VALUE": "sql",
  151. "MASK_INPUT": False,
  152. "LOOSE_VALIDATION": False,
  153. "CONF_NAME": 'CONFIG_KEYSTONE_IDENTITY_BACKEND',
  154. "USE_DEFAULT": False,
  155. "NEED_CONFIRM": False,
  156. "CONDITION": False}
  157. ],
  158. "KEYSTONE_LDAP": [ # keystone ldap identity backend options
  159. {"CMD_OPTION": "keystone-ldap-url",
  160. "PROMPT": "Enter the Keystone LDAP backend URL.",
  161. "OPTION_LIST": [],
  162. "VALIDATORS": [validators.validate_ldap_url],
  163. "DEFAULT_VALUE": host_to_ldap_url(utils.get_localhost_ip()),
  164. "MASK_INPUT": False,
  165. "LOOSE_VALIDATION": False,
  166. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_URL',
  167. "USE_DEFAULT": False,
  168. "NEED_CONFIRM": False,
  169. "CONDITION": False},
  170. {"CMD_OPTION": "keystone-ldap-user-dn",
  171. "PROMPT": "Enter the Keystone LDAP user DN.",
  172. "OPTION_LIST": [],
  173. "VALIDATORS": [validators.validate_ldap_dn],
  174. "DEFAULT_VALUE": "",
  175. "MASK_INPUT": False,
  176. "LOOSE_VALIDATION": False,
  177. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_DN',
  178. "USE_DEFAULT": False,
  179. "NEED_CONFIRM": False,
  180. "CONDITION": False},
  181. {"CMD_OPTION": "keystone-ldap-user-password",
  182. "PROMPT": "Enter the Keystone LDAP user password.",
  183. "OPTION_LIST": [],
  184. "VALIDATORS": [],
  185. "DEFAULT_VALUE": "",
  186. "PROCESSORS": [processors.process_password],
  187. "MASK_INPUT": True,
  188. "LOOSE_VALIDATION": False,
  189. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_PASSWORD',
  190. "USE_DEFAULT": False,
  191. "NEED_CONFIRM": False,
  192. "CONDITION": False},
  193. {"CMD_OPTION": "keystone-ldap-suffix",
  194. "PROMPT": "Enter the Keystone LDAP suffix.",
  195. "OPTION_LIST": [],
  196. "VALIDATORS": [validators.validate_not_empty,
  197. validators.validate_ldap_dn],
  198. "DEFAULT_VALUE": "",
  199. "MASK_INPUT": False,
  200. "LOOSE_VALIDATION": False,
  201. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_SUFFIX',
  202. "USE_DEFAULT": False,
  203. "NEED_CONFIRM": False,
  204. "CONDITION": False},
  205. {"CMD_OPTION": "keystone-ldap-query-scope",
  206. "PROMPT": "Enter the Keystone LDAP query scope.",
  207. "OPTION_LIST": ['base', 'one', 'sub'],
  208. "VALIDATORS": [validators.validate_options],
  209. "DEFAULT_VALUE": "one",
  210. "MASK_INPUT": False,
  211. "LOOSE_VALIDATION": False,
  212. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_QUERY_SCOPE',
  213. "USE_DEFAULT": False,
  214. "NEED_CONFIRM": False,
  215. "CONDITION": False},
  216. {"CMD_OPTION": "keystone-ldap-page-size",
  217. "PROMPT": "Enter the Keystone LDAP query page size.",
  218. "OPTION_LIST": [],
  219. "VALIDATORS": [validators.validate_integer],
  220. "DEFAULT_VALUE": "-1",
  221. "MASK_INPUT": False,
  222. "LOOSE_VALIDATION": False,
  223. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_PAGE_SIZE',
  224. "USE_DEFAULT": False,
  225. "NEED_CONFIRM": False,
  226. "CONDITION": False},
  227. {"CMD_OPTION": "keystone-ldap-user-subtree",
  228. "PROMPT": "Enter the Keystone LDAP user subtree.",
  229. "OPTION_LIST": [],
  230. "VALIDATORS": [validators.validate_not_empty,
  231. validators.validate_ldap_dn],
  232. "DEFAULT_VALUE": "",
  233. "MASK_INPUT": False,
  234. "LOOSE_VALIDATION": False,
  235. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_SUBTREE',
  236. "USE_DEFAULT": False,
  237. "NEED_CONFIRM": False,
  238. "CONDITION": False},
  239. {"CMD_OPTION": "keystone-ldap-user-filter",
  240. "PROMPT": "Enter the Keystone LDAP user query filter.",
  241. "OPTION_LIST": [],
  242. "VALIDATORS": [],
  243. "DEFAULT_VALUE": "",
  244. "MASK_INPUT": False,
  245. "LOOSE_VALIDATION": False,
  246. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_FILTER',
  247. "USE_DEFAULT": False,
  248. "NEED_CONFIRM": False,
  249. "CONDITION": False},
  250. {"CMD_OPTION": "keystone-ldap-user-objectclass",
  251. "PROMPT": "Enter the Keystone LDAP user objectclass.",
  252. "OPTION_LIST": [],
  253. "VALIDATORS": [],
  254. "DEFAULT_VALUE": "",
  255. "MASK_INPUT": False,
  256. "LOOSE_VALIDATION": False,
  257. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_OBJECTCLASS',
  258. "USE_DEFAULT": False,
  259. "NEED_CONFIRM": False,
  260. "CONDITION": False},
  261. {"CMD_OPTION": "keystone-ldap-user-id-attribute",
  262. "PROMPT": "Enter the Keystone LDAP user ID attribute.",
  263. "OPTION_LIST": [],
  264. "VALIDATORS": [],
  265. "DEFAULT_VALUE": "",
  266. "MASK_INPUT": False,
  267. "LOOSE_VALIDATION": False,
  268. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_ID_ATTRIBUTE',
  269. "USE_DEFAULT": False,
  270. "NEED_CONFIRM": False,
  271. "CONDITION": False},
  272. {"CMD_OPTION": "keystone-ldap-user-name-attribute",
  273. "PROMPT": "Enter the Keystone LDAP user name attribute.",
  274. "OPTION_LIST": [],
  275. "VALIDATORS": [],
  276. "DEFAULT_VALUE": "",
  277. "MASK_INPUT": False,
  278. "LOOSE_VALIDATION": False,
  279. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_NAME_ATTRIBUTE',
  280. "USE_DEFAULT": False,
  281. "NEED_CONFIRM": False,
  282. "CONDITION": False},
  283. {"CMD_OPTION": "keystone-ldap-user-mail-attribute",
  284. "PROMPT": "Enter the Keystone LDAP user email address attribute.",
  285. "OPTION_LIST": [],
  286. "VALIDATORS": [],
  287. "DEFAULT_VALUE": "",
  288. "MASK_INPUT": False,
  289. "LOOSE_VALIDATION": False,
  290. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_MAIL_ATTRIBUTE',
  291. "USE_DEFAULT": False,
  292. "NEED_CONFIRM": False,
  293. "CONDITION": False},
  294. {"CMD_OPTION": "keystone-ldap-user-enabled-attribute",
  295. "PROMPT": "Enter the Keystone LDAP user enabled attribute.",
  296. "OPTION_LIST": [],
  297. "VALIDATORS": [],
  298. "DEFAULT_VALUE": "",
  299. "MASK_INPUT": False,
  300. "LOOSE_VALIDATION": False,
  301. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_ENABLED_ATTRIBUTE',
  302. "USE_DEFAULT": False,
  303. "NEED_CONFIRM": False,
  304. "CONDITION": False},
  305. {"CMD_OPTION": "keystone-ldap-user-enabled-mask",
  306. "PROMPT": "Enter the Keystone LDAP user enabled mask.",
  307. "OPTION_LIST": [],
  308. "VALIDATORS": [validators.validate_integer],
  309. "DEFAULT_VALUE": "-1",
  310. "MASK_INPUT": False,
  311. "LOOSE_VALIDATION": False,
  312. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_ENABLED_MASK',
  313. "USE_DEFAULT": False,
  314. "NEED_CONFIRM": False,
  315. "CONDITION": False},
  316. {"CMD_OPTION": "keystone-ldap-user-enabled-default",
  317. "PROMPT": "Enter the Keystone LDAP user enabled default.",
  318. "OPTION_LIST": [],
  319. "VALIDATORS": [],
  320. "DEFAULT_VALUE": "TRUE",
  321. "MASK_INPUT": False,
  322. "LOOSE_VALIDATION": False,
  323. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_ENABLED_DEFAULT',
  324. "USE_DEFAULT": False,
  325. "NEED_CONFIRM": False,
  326. "CONDITION": False},
  327. {"CMD_OPTION": "keystone-ldap-user-enabled-invert",
  328. "PROMPT": "Enter the Keystone LDAP user enabled invert (n or y).",
  329. "OPTION_LIST": ['n', 'y'],
  330. "VALIDATORS": [validators.validate_options],
  331. "DEFAULT_VALUE": 'n',
  332. "MASK_INPUT": False,
  333. "LOOSE_VALIDATION": False,
  334. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_ENABLED_INVERT',
  335. "USE_DEFAULT": False,
  336. "NEED_CONFIRM": False,
  337. "CONDITION": False},
  338. {"CMD_OPTION": "keystone-ldap-user-attribute-ignore",
  339. "PROMPT": (
  340. "Enter the comma separated Keystone LDAP user "
  341. "attributes to ignore."
  342. ),
  343. "OPTION_LIST": [],
  344. "DEFAULT_VALUE": "",
  345. "MASK_INPUT": False,
  346. "LOOSE_VALIDATION": False,
  347. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_ATTRIBUTE_IGNORE',
  348. "USE_DEFAULT": False,
  349. "NEED_CONFIRM": False,
  350. "CONDITION": False},
  351. {"CMD_OPTION": "keystone-ldap-user-default-project-id-attribute",
  352. "PROMPT": (
  353. "Enter the Keystone LDAP user default_project_id attribute."
  354. ),
  355. "OPTION_LIST": [],
  356. "DEFAULT_VALUE": "",
  357. "MASK_INPUT": False,
  358. "LOOSE_VALIDATION": False,
  359. "CONF_NAME":
  360. 'CONFIG_KEYSTONE_LDAP_USER_DEFAULT_PROJECT_ID_ATTRIBUTE',
  361. "USE_DEFAULT": False,
  362. "NEED_CONFIRM": False,
  363. "CONDITION": False},
  364. {"CMD_OPTION": "keystone-ldap-user-allow-create",
  365. "PROMPT": (
  366. "Do you want to allow user create through Keystone (n or y)."
  367. ),
  368. "OPTION_LIST": ['n', 'y'],
  369. "VALIDATORS": [validators.validate_options],
  370. "DEFAULT_VALUE": 'n',
  371. "MASK_INPUT": False,
  372. "LOOSE_VALIDATION": False,
  373. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_ALLOW_CREATE',
  374. "USE_DEFAULT": False,
  375. "NEED_CONFIRM": False,
  376. "CONDITION": False},
  377. {"CMD_OPTION": "keystone-ldap-user-allow-update",
  378. "PROMPT": (
  379. "Do you want to allow user update through Keystone (n or y)."
  380. ),
  381. "OPTION_LIST": ['n', 'y'],
  382. "VALIDATORS": [validators.validate_options],
  383. "DEFAULT_VALUE": 'n',
  384. "MASK_INPUT": False,
  385. "LOOSE_VALIDATION": False,
  386. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_ALLOW_UPDATE',
  387. "USE_DEFAULT": False,
  388. "NEED_CONFIRM": False,
  389. "CONDITION": False},
  390. {"CMD_OPTION": "keystone-ldap-user-allow-delete",
  391. "PROMPT": (
  392. "Do you want to allow user delete through Keystone (n or y)."
  393. ),
  394. "OPTION_LIST": ['n', 'y'],
  395. "VALIDATORS": [validators.validate_options],
  396. "DEFAULT_VALUE": 'n',
  397. "MASK_INPUT": False,
  398. "LOOSE_VALIDATION": False,
  399. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_ALLOW_DELETE',
  400. "USE_DEFAULT": False,
  401. "NEED_CONFIRM": False,
  402. "CONDITION": False},
  403. {"CMD_OPTION": "keystone-ldap-user-pass-attribute",
  404. "PROMPT": "Enter the Keystone LDAP user password attribute.",
  405. "OPTION_LIST": [],
  406. "DEFAULT_VALUE": "",
  407. "MASK_INPUT": False,
  408. "LOOSE_VALIDATION": False,
  409. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_PASS_ATTRIBUTE',
  410. "USE_DEFAULT": False,
  411. "NEED_CONFIRM": False,
  412. "CONDITION": False},
  413. {"CMD_OPTION": "keystone-ldap-user-enabled-emulation-dn",
  414. "PROMPT": "Enter the Keystone LDAP enabled emulation DN.",
  415. "OPTION_LIST": [],
  416. "VALIDATORS": [validators.validate_ldap_dn],
  417. "DEFAULT_VALUE": "",
  418. "MASK_INPUT": False,
  419. "LOOSE_VALIDATION": False,
  420. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USER_ENABLED_EMULATION_DN',
  421. "USE_DEFAULT": False,
  422. "NEED_CONFIRM": False,
  423. "CONDITION": False},
  424. {"CMD_OPTION": "keystone-ldap-user-additional-attribute-mapping",
  425. "PROMPT": (
  426. "Enter the comma separated Keystone LDAP user additional "
  427. "attribute mappings in the form "
  428. "ldap_attr:user_attr[,ldap_attr:user_attr]...."
  429. ),
  430. "OPTION_LIST": [],
  431. "DEFAULT_VALUE": "",
  432. "MASK_INPUT": False,
  433. "LOOSE_VALIDATION": False,
  434. "CONF_NAME":
  435. 'CONFIG_KEYSTONE_LDAP_USER_ADDITIONAL_ATTRIBUTE_MAPPING',
  436. "USE_DEFAULT": False,
  437. "NEED_CONFIRM": False,
  438. "CONDITION": False},
  439. {"CMD_OPTION": "keystone-ldap-group-subtree",
  440. "PROMPT": "Enter the Keystone LDAP group subtree.",
  441. "OPTION_LIST": [],
  442. "VALIDATORS": [validators.validate_not_empty,
  443. validators.validate_ldap_dn],
  444. "DEFAULT_VALUE": "",
  445. "MASK_INPUT": False,
  446. "LOOSE_VALIDATION": False,
  447. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_GROUP_SUBTREE',
  448. "USE_DEFAULT": False,
  449. "NEED_CONFIRM": False,
  450. "CONDITION": False},
  451. {"CMD_OPTION": "keystone-ldap-group-filter",
  452. "PROMPT": "Enter the Keystone LDAP group query filter.",
  453. "OPTION_LIST": [],
  454. "VALIDATORS": [],
  455. "DEFAULT_VALUE": "",
  456. "MASK_INPUT": False,
  457. "LOOSE_VALIDATION": False,
  458. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_GROUP_FILTER',
  459. "USE_DEFAULT": False,
  460. "NEED_CONFIRM": False,
  461. "CONDITION": False},
  462. {"CMD_OPTION": "keystone-ldap-group-objectclass",
  463. "PROMPT": "Enter the Keystone LDAP group objectclass.",
  464. "OPTION_LIST": [],
  465. "VALIDATORS": [],
  466. "DEFAULT_VALUE": "",
  467. "MASK_INPUT": False,
  468. "LOOSE_VALIDATION": False,
  469. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_GROUP_OBJECTCLASS',
  470. "USE_DEFAULT": False,
  471. "NEED_CONFIRM": False,
  472. "CONDITION": False},
  473. {"CMD_OPTION": "keystone-ldap-group-id-attribute",
  474. "PROMPT": "Enter the Keystone LDAP group ID attribute.",
  475. "OPTION_LIST": [],
  476. "VALIDATORS": [],
  477. "DEFAULT_VALUE": "",
  478. "MASK_INPUT": False,
  479. "LOOSE_VALIDATION": False,
  480. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_GROUP_ID_ATTRIBUTE',
  481. "USE_DEFAULT": False,
  482. "NEED_CONFIRM": False,
  483. "CONDITION": False},
  484. {"CMD_OPTION": "keystone-ldap-group-name-attribute",
  485. "PROMPT": "Enter the Keystone LDAP group name attribute.",
  486. "OPTION_LIST": [],
  487. "VALIDATORS": [],
  488. "DEFAULT_VALUE": "",
  489. "MASK_INPUT": False,
  490. "LOOSE_VALIDATION": False,
  491. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_GROUP_NAME_ATTRIBUTE',
  492. "USE_DEFAULT": False,
  493. "NEED_CONFIRM": False,
  494. "CONDITION": False},
  495. {"CMD_OPTION": "keystone-ldap-group-member-attribute",
  496. "PROMPT": "Enter the Keystone LDAP group member attribute.",
  497. "OPTION_LIST": [],
  498. "VALIDATORS": [],
  499. "DEFAULT_VALUE": "",
  500. "MASK_INPUT": False,
  501. "LOOSE_VALIDATION": False,
  502. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_GROUP_MEMBER_ATTRIBUTE',
  503. "USE_DEFAULT": False,
  504. "NEED_CONFIRM": False,
  505. "CONDITION": False},
  506. {"CMD_OPTION": "keystone-ldap-group-desc-attribute",
  507. "PROMPT": "Enter the Keystone LDAP group description attribute.",
  508. "OPTION_LIST": [],
  509. "VALIDATORS": [],
  510. "DEFAULT_VALUE": "",
  511. "MASK_INPUT": False,
  512. "LOOSE_VALIDATION": False,
  513. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_GROUP_DESC_ATTRIBUTE',
  514. "USE_DEFAULT": False,
  515. "NEED_CONFIRM": False,
  516. "CONDITION": False},
  517. {"CMD_OPTION": "keystone-ldap-group-attribute-ignore",
  518. "PROMPT": (
  519. "Enter the comma separated Keystone LDAP group "
  520. "attributes to ignore."
  521. ),
  522. "OPTION_LIST": [],
  523. "DEFAULT_VALUE": "",
  524. "MASK_INPUT": False,
  525. "LOOSE_VALIDATION": False,
  526. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_GROUP_ATTRIBUTE_IGNORE',
  527. "USE_DEFAULT": False,
  528. "NEED_CONFIRM": False,
  529. "CONDITION": False},
  530. {"CMD_OPTION": "keystone-ldap-group-allow-create",
  531. "PROMPT": (
  532. "Do you want to allow group create through Keystone (n or y)."
  533. ),
  534. "OPTION_LIST": ['n', 'y'],
  535. "VALIDATORS": [validators.validate_options],
  536. "DEFAULT_VALUE": 'n',
  537. "MASK_INPUT": False,
  538. "LOOSE_VALIDATION": False,
  539. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_GROUP_ALLOW_CREATE',
  540. "USE_DEFAULT": False,
  541. "NEED_CONFIRM": False,
  542. "CONDITION": False},
  543. {"CMD_OPTION": "keystone-ldap-group-allow-update",
  544. "PROMPT": (
  545. "Do you want to allow group update through Keystone (n or y)."
  546. ),
  547. "OPTION_LIST": ['n', 'y'],
  548. "VALIDATORS": [validators.validate_options],
  549. "DEFAULT_VALUE": 'n',
  550. "MASK_INPUT": False,
  551. "LOOSE_VALIDATION": False,
  552. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_GROUP_ALLOW_UPDATE',
  553. "USE_DEFAULT": False,
  554. "NEED_CONFIRM": False,
  555. "CONDITION": False},
  556. {"CMD_OPTION": "keystone-ldap-group-allow-delete",
  557. "PROMPT": (
  558. "Do you want to allow group delete through Keystone (n or y)."
  559. ),
  560. "OPTION_LIST": ['n', 'y'],
  561. "VALIDATORS": [validators.validate_options],
  562. "DEFAULT_VALUE": 'n',
  563. "MASK_INPUT": False,
  564. "LOOSE_VALIDATION": False,
  565. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_GROUP_ALLOW_DELETE',
  566. "USE_DEFAULT": False,
  567. "NEED_CONFIRM": False,
  568. "CONDITION": False},
  569. {"CMD_OPTION": "keystone-ldap-group-additional-attribute-mapping",
  570. "PROMPT": (
  571. "Enter the comma separated Keystone LDAP group additional "
  572. "attribute mappings in the form "
  573. "ldap_attr:group_attr[,ldap_attr:group_attr]...."
  574. ),
  575. "OPTION_LIST": [],
  576. "DEFAULT_VALUE": "",
  577. "MASK_INPUT": False,
  578. "LOOSE_VALIDATION": False,
  579. "CONF_NAME":
  580. 'CONFIG_KEYSTONE_LDAP_GROUP_ADDITIONAL_ATTRIBUTE_MAPPING',
  581. "USE_DEFAULT": False,
  582. "NEED_CONFIRM": False,
  583. "CONDITION": False},
  584. {"CMD_OPTION": "keystone-ldap-use-tls",
  585. "PROMPT": (
  586. "Enable TLS for Keystone communicating with "
  587. "LDAP servers (n or y)."
  588. ),
  589. "OPTION_LIST": ['n', 'y'],
  590. "VALIDATORS": [validators.validate_options],
  591. "DEFAULT_VALUE": 'n',
  592. "MASK_INPUT": False,
  593. "LOOSE_VALIDATION": False,
  594. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_USE_TLS',
  595. "USE_DEFAULT": False,
  596. "NEED_CONFIRM": False,
  597. "CONDITION": False},
  598. {"CMD_OPTION": "keystone-ldap-tls-cacertdir",
  599. "PROMPT": "CA Certificate directory for Keystone LDAP.",
  600. "OPTION_LIST": [],
  601. "DEFAULT_VALUE": "",
  602. "MASK_INPUT": False,
  603. "LOOSE_VALIDATION": False,
  604. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_TLS_CACERTDIR',
  605. "USE_DEFAULT": False,
  606. "NEED_CONFIRM": False,
  607. "CONDITION": False},
  608. {"CMD_OPTION": "keystone-ldap-tls-cacertfile",
  609. "PROMPT": "CA Certificate file for Keystone LDAP.",
  610. "OPTION_LIST": [],
  611. "DEFAULT_VALUE": "",
  612. "MASK_INPUT": False,
  613. "LOOSE_VALIDATION": False,
  614. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_TLS_CACERTFILE',
  615. "USE_DEFAULT": False,
  616. "NEED_CONFIRM": False,
  617. "CONDITION": False},
  618. {"CMD_OPTION": "keystone-ldap-tls-req-cert",
  619. "PROMPT": (
  620. "Keystone LDAP certificate checking strictness "
  621. "(never, allow, demand)"
  622. ),
  623. "OPTION_LIST": ["never", "allow", "demand"],
  624. "VALIDATORS": [validators.validate_options],
  625. "DEFAULT_VALUE": "demand",
  626. "MASK_INPUT": False,
  627. "LOOSE_VALIDATION": False,
  628. "CONF_NAME": 'CONFIG_KEYSTONE_LDAP_TLS_REQ_CERT',
  629. "USE_DEFAULT": False,
  630. "NEED_CONFIRM": False,
  631. "CONDITION": False}
  632. ]
  633. }
  634. update_params_usage(basedefs.PACKSTACK_DOC, keystone_params)
  635. keystone_groups = [
  636. {"GROUP_NAME": "KEYSTONE",
  637. "DESCRIPTION": "Keystone Config parameters",
  638. "PRE_CONDITION": lambda x: 'yes',
  639. "PRE_CONDITION_MATCH": "yes",
  640. "POST_CONDITION": False,
  641. "POST_CONDITION_MATCH": True},
  642. {"GROUP_NAME": "KEYSTONE_LDAP",
  643. "DESCRIPTION": "Keystone LDAP Identity Backend Config parameters",
  644. "PRE_CONDITION": 'CONFIG_KEYSTONE_IDENTITY_BACKEND',
  645. "PRE_CONDITION_MATCH": "ldap",
  646. "POST_CONDITION": False,
  647. "POST_CONDITION_MATCH": True}
  648. ]
  649. for group in keystone_groups:
  650. params = keystone_params[group["GROUP_NAME"]]
  651. controller.addGroup(group, params)
  652. def initSequences(controller):
  653. keystonesteps = [
  654. {'title':
  655. 'Fixing Keystone LDAP config parameters to be undef if empty',
  656. 'functions': [munge_ldap_config_params]},
  657. {'title': 'Preparing Keystone entries',
  658. 'functions': [create_manifest]},
  659. ]
  660. controller.addSequence("Installing OpenStack Keystone", [], [],
  661. keystonesteps)
  662. # ------------------------- helper functions -------------------------
  663. def host_to_ldap_url(hostfqdn):
  664. """Converts a host fqdn into an appropriate default
  665. LDAP URL.
  666. """
  667. return "ldap://%s" % hostfqdn
  668. # -------------------------- step functions --------------------------
  669. def munge_ldap_config_params(config, messages):
  670. def is_bool(keyname):
  671. return keyname in (
  672. 'CONFIG_KEYSTONE_LDAP_USER_ENABLED_INVERT',
  673. 'CONFIG_KEYSTONE_LDAP_USER_ALLOW_CREATE',
  674. 'CONFIG_KEYSTONE_LDAP_USER_ALLOW_UPDATE',
  675. 'CONFIG_KEYSTONE_LDAP_USER_ALLOW_DELETE',
  676. 'CONFIG_KEYSTONE_LDAP_GROUP_ALLOW_CREATE',
  677. 'CONFIG_KEYSTONE_LDAP_GROUP_ALLOW_UPDATE',
  678. 'CONFIG_KEYSTONE_LDAP_GROUP_ALLOW_DELETE',
  679. 'CONFIG_KEYSTONE_LDAP_USE_TLS'
  680. )
  681. def yn_to_bool(val):
  682. return {'n': False, 'y': True}.get(val, False)
  683. for key in config:
  684. if not key.startswith('CONFIG_KEYSTONE_LDAP_'):
  685. continue
  686. if key in ('CONFIG_KEYSTONE_LDAP_PAGE_SIZE',
  687. 'CONFIG_KEYSTONE_LDAP_USER_ENABLED_MASK'):
  688. if config[key] == '-1':
  689. config[key] = None
  690. elif is_bool(key):
  691. config[key] = yn_to_bool(config[key])
  692. elif config[key] == '':
  693. config[key] = None
  694. def create_manifest(config, messages):
  695. if config['CONFIG_IP_VERSION'] == 'ipv6':
  696. host = config['CONFIG_CONTROLLER_HOST']
  697. config['CONFIG_KEYSTONE_HOST_URL'] = "[%s]" % host
  698. else:
  699. config['CONFIG_KEYSTONE_HOST_URL'] = config['CONFIG_CONTROLLER_HOST']
  700. config['CONFIG_KEYSTONE_PUBLIC_URL'] = "http://%s:5000/%s" % (
  701. config['CONFIG_KEYSTONE_HOST_URL'],
  702. config['CONFIG_KEYSTONE_API_VERSION']
  703. )
  704. config['CONFIG_KEYSTONE_PUBLIC_URL_VERSIONLESS'] = "http://%s:5000/" % (
  705. config['CONFIG_KEYSTONE_HOST_URL']
  706. )
  707. config['CONFIG_KEYSTONE_ADMIN_URL'] = "http://%s:35357" % (
  708. config['CONFIG_KEYSTONE_HOST_URL']
  709. )
  710. fw_details = dict()
  711. key = "keystone"
  712. fw_details.setdefault(key, {})
  713. fw_details[key]['host'] = "ALL"
  714. fw_details[key]['service_name'] = "keystone"
  715. fw_details[key]['chain'] = "INPUT"
  716. fw_details[key]['ports'] = ['5000', '35357']
  717. fw_details[key]['proto'] = "tcp"
  718. config['FIREWALL_KEYSTONE_RULES'] = fw_details