From 64e749d53a5679808b312e0a960a015d1352d833 Mon Sep 17 00:00:00 2001 From: Isaac Mungai Date: Mon, 4 Apr 2016 11:51:22 -0400 Subject: [PATCH] Add storage for sni cert info Change-Id: I9e10a79dfdef5fae249347400ea5b6b59ec49004 --- .../cert_info_storage/cassandra_storage.py | 23 +++++- poppy/provider/akamai/driver.py | 2 + .../cassandra/upsert_sni_cert_info.py | 72 +++++++++++++++++++ 3 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 scripts/providers/akamai/san_cert_info/cassandra/upsert_sni_cert_info.py diff --git a/poppy/provider/akamai/cert_info_storage/cassandra_storage.py b/poppy/provider/akamai/cert_info_storage/cassandra_storage.py index b092ac68..8373022b 100644 --- a/poppy/provider/akamai/cert_info_storage/cassandra_storage.py +++ b/poppy/provider/akamai/cert_info_storage/cassandra_storage.py @@ -299,9 +299,26 @@ class CassandraSanInfoStorage(base.BaseAkamaiSanInfoStorage): enabled = the_san_cert_info.get('enabled', True) return enabled - def update_san_info(self, san_info_dict): - provider_info = {} - provider_info['san_info'] = json.dumps(san_info_dict) + def update_san_info(self, info_dict, info_type=None): + if info_type == 'san': + info_key = 'san_info' + elif info_type == 'sni': + info_key = 'sni_info' + else: + # defaults to san_info + info_key = 'san_info' + + try: + provider_info = self._get_akamai_provider_info()['info'] + except (ValueError, KeyError) as err: + # no providers info, create them + LOG.error( + "Unable to retrieve providers info: {0} " + "Creating new providers info entries.".format(err) + ) + provider_info = dict() + + provider_info[info_key] = json.dumps(info_dict) stmt = query.SimpleStatement( CREATE_PROVIDER_INFO, diff --git a/poppy/provider/akamai/driver.py b/poppy/provider/akamai/driver.py index 524c9706..5c56fdd6 100644 --- a/poppy/provider/akamai/driver.py +++ b/poppy/provider/akamai/driver.py @@ -90,6 +90,8 @@ AKAMAI_OPTIONS = [ 'Custom cert https policies' ), + cfg.ListOpt('sni_cert_cnames', + help='A list of sni certs cname host names'), # SANCERT related configs cfg.ListOpt('san_cert_cnames', help='A list of san certs cnamehost names'), diff --git a/scripts/providers/akamai/san_cert_info/cassandra/upsert_sni_cert_info.py b/scripts/providers/akamai/san_cert_info/cassandra/upsert_sni_cert_info.py new file mode 100644 index 00000000..c963e123 --- /dev/null +++ b/scripts/providers/akamai/san_cert_info/cassandra/upsert_sni_cert_info.py @@ -0,0 +1,72 @@ +# Copyright (c) 2015 Rackspace, Inc. +# +# 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. + +from oslo_config import cfg +from six.moves import input + +from poppy.provider.akamai.cert_info_storage import cassandra_storage +from poppy.provider.akamai import driver + + +CONF = cfg.CONF +CONF.register_cli_opts(cassandra_storage.CASSANDRA_OPTIONS, + group=cassandra_storage.AKAMAI_CASSANDRA_STORAGE_GROUP) +CONF.register_cli_opts(driver.AKAMAI_OPTIONS, driver.AKAMAI_GROUP) +CONF(prog='akamai-config') + + +def main(): + v_cassandra_storage = cassandra_storage.CassandraSanInfoStorage(CONF) + + sni_attribute_default_list = { + 'enrollmentId': None, + } + + sni_info_dict = dict() + + for sni_cert_name in CONF[driver.AKAMAI_GROUP].sni_cert_cnames: + sni_info_dict[sni_cert_name] = {} + print("Insert SNI info for: {0}".format(sni_cert_name)) + for attr in sni_attribute_default_list: + user_input = None + while ((user_input or "").strip() or user_input) in ["", None]: + user_input = input( + 'Please input value for attr: {0}, SNI cert: {1}, ' + 'default value: {2} (if default is None, ' + 'that means a real value has to be input): '.format( + attr, + sni_cert_name, + sni_attribute_default_list[attr] + ) + ) + # enrollmentId is required + if user_input in ["", None] and attr == "enrollmentId": + break + if sni_attribute_default_list[attr] is None: + continue + else: + user_input = sni_attribute_default_list[attr] + break + sni_info_dict[sni_cert_name][attr] = user_input + + v_cassandra_storage.update_san_info(sni_info_dict, info_type='sni') + + +if __name__ == "__main__": + ''' + example usage: + python upsert_sni_cert_info.py --config-file ~/.poppy/poppy.conf + ''' + main()