trove_850.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  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 Trove
  16. """
  17. from packstack.installer import basedefs
  18. from packstack.installer import utils
  19. from packstack.installer import validators
  20. from packstack.installer import processors
  21. from packstack.modules.documentation import update_params_usage
  22. from packstack.modules.ospluginutils import generate_ssl_cert
  23. # ------------------ Trove Packstack Plugin initialization ------------------
  24. PLUGIN_NAME = "OS-Trove"
  25. PLUGIN_NAME_COLORED = utils.color_text(PLUGIN_NAME, 'blue')
  26. # NOVA_USER, NOVA_TENANT, NOVA_PW
  27. def process_trove_nova_pw(param, param_name, config=None):
  28. if (param == 'PW_PLACEHOLDER' and
  29. config['CONFIG_TROVE_NOVA_USER'] == 'trove'):
  30. return config['CONFIG_TROVE_KS_PW']
  31. else:
  32. return param
  33. def initConfig(controller):
  34. parameters = [
  35. {"CONF_NAME": "CONFIG_TROVE_DB_PW",
  36. "CMD_OPTION": "trove-db-passwd",
  37. "PROMPT": "Enter the password to use for Trove to access the DB",
  38. "OPTION_LIST": [],
  39. "VALIDATORS": [validators.validate_not_empty],
  40. "DEFAULT_VALUE": "PW_PLACEHOLDER",
  41. "PROCESSORS": [processors.process_password],
  42. "MASK_INPUT": True,
  43. "LOOSE_VALIDATION": False,
  44. "USE_DEFAULT": False,
  45. "NEED_CONFIRM": True,
  46. "CONDITION": False},
  47. {"CONF_NAME": "CONFIG_TROVE_KS_PW",
  48. "CMD_OPTION": "trove-ks-passwd",
  49. "PROMPT": "Enter the password for Trove Keystone access",
  50. "OPTION_LIST": [],
  51. "VALIDATORS": [validators.validate_not_empty],
  52. "DEFAULT_VALUE": "PW_PLACEHOLDER",
  53. "PROCESSORS": [processors.process_password],
  54. "MASK_INPUT": True,
  55. "LOOSE_VALIDATION": False,
  56. "USE_DEFAULT": False,
  57. "NEED_CONFIRM": True,
  58. "CONDITION": False},
  59. {"CONF_NAME": "CONFIG_TROVE_NOVA_USER",
  60. "CMD_OPTION": "trove-nova-user",
  61. "PROMPT": "Enter the user for Trove to use to connect to Nova",
  62. "OPTION_LIST": [],
  63. "VALIDATORS": [validators.validate_not_empty],
  64. "DEFAULT_VALUE": "trove",
  65. "MASK_INPUT": False,
  66. "LOOSE_VALIDATION": False,
  67. "USE_DEFAULT": True,
  68. "NEED_CONFIRM": True,
  69. "CONDITION": False},
  70. {"CONF_NAME": "CONFIG_TROVE_NOVA_TENANT",
  71. "CMD_OPTION": "trove-nova-tenant",
  72. "PROMPT": "Enter the tenant for Trove to use to connect to Nova",
  73. "OPTION_LIST": [],
  74. "VALIDATORS": [validators.validate_not_empty],
  75. "DEFAULT_VALUE": "services",
  76. "MASK_INPUT": False,
  77. "LOOSE_VALIDATION": False,
  78. "USE_DEFAULT": True,
  79. "NEED_CONFIRM": True,
  80. "CONDITION": False},
  81. {"CONF_NAME": "CONFIG_TROVE_NOVA_PW",
  82. "CMD_OPTION": "trove-nova-passwd",
  83. "PROMPT": "Enter the password for Trove to use to connect to Nova",
  84. "OPTION_LIST": [],
  85. "VALIDATORS": [validators.validate_not_empty],
  86. "DEFAULT_VALUE": "PW_PLACEHOLDER", # default is trove pass
  87. "PROCESSORS": [process_trove_nova_pw],
  88. "MASK_INPUT": True,
  89. "LOOSE_VALIDATION": False,
  90. "USE_DEFAULT": False,
  91. "NEED_CONFIRM": True,
  92. "CONDITION": False},
  93. ]
  94. update_params_usage(basedefs.PACKSTACK_DOC, parameters, sectioned=False)
  95. group = {"GROUP_NAME": "Trove",
  96. "DESCRIPTION": "Trove config parameters",
  97. "PRE_CONDITION": "CONFIG_TROVE_INSTALL",
  98. "PRE_CONDITION_MATCH": "y",
  99. "POST_CONDITION": False,
  100. "POST_CONDITION_MATCH": True}
  101. controller.addGroup(group, parameters)
  102. def initSequences(controller):
  103. config = controller.CONF
  104. if config['CONFIG_TROVE_INSTALL'] != 'y':
  105. return
  106. steps = [
  107. {'title': 'Preparing Trove entries',
  108. 'functions': [create_manifest]}
  109. ]
  110. controller.addSequence("Installing Trove", [], [], steps)
  111. # ------------------------ step functions --------------------------
  112. def create_manifest(config, messages):
  113. if config['CONFIG_AMQP_ENABLE_SSL'] == 'y':
  114. ssl_cert_file = config['CONFIG_TROVE_SSL_CERT'] = (
  115. '/etc/pki/tls/certs/ssl_amqp_trove.crt'
  116. )
  117. ssl_key_file = config['CONFIG_TROVE_SSL_KEY'] = (
  118. '/etc/pki/tls/private/ssl_amqp_trove.key'
  119. )
  120. ssl_host = config['CONFIG_CONTROLLER_HOST']
  121. service = 'trove'
  122. generate_ssl_cert(config, ssl_host, service, ssl_key_file,
  123. ssl_cert_file)
  124. if (config['CONFIG_TROVE_NOVA_USER'] == 'trove' and
  125. config['CONFIG_TROVE_NOVA_PW'] == ''):
  126. config['CONFIG_TROVE_NOVA_PW'] = config['CONFIG_TROVE_KS_PW']
  127. fw_details = dict()
  128. key = "trove"
  129. fw_details.setdefault(key, {})
  130. fw_details[key]['host'] = "ALL"
  131. fw_details[key]['service_name'] = "trove api"
  132. fw_details[key]['chain'] = "INPUT"
  133. fw_details[key]['ports'] = ['8779']
  134. fw_details[key]['proto'] = "tcp"
  135. config['FIREWALL_TROVE_API_RULES'] = fw_details