From: shiva-charan.m-s Date: Wed, 27 Jul 2016 03:34:23 +0000 (-0500) Subject: policy2tosca patch set-6 X-Git-Tag: colorado.1.0~18 X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=commitdiff_plain;h=b2b1fea8a0da80e59490f8c407a10915808cf004;p=parser.git policy2tosca patch set-6 Change-Id: Id93490753ba93e4c3aa00cd487855e3d2970ae9a Signed-off-by: shiva-charan (cherry picked from commit d93490753ba93e4c3aa00cd487855e3d2970ae9a) --- diff --git a/policy2tosca/README.rst b/policy2tosca/README.rst new file mode 100644 index 0000000..9877499 --- /dev/null +++ b/policy2tosca/README.rst @@ -0,0 +1,37 @@ +================= + Running demoapp +================= + +Pre-requisite +------------- + +Install cliff with the following links. +:: + +- `install ` + or +- `demoapp ` + +Setup +----- + +Now, install the policy2tosca module. +:: + + $ cd policy2tosca + $ python setup.py install + +Usage +----- + +To see a list of commands available, run +:: + + $ policy2tosca --help + + +To see help for an individual command, include the command name on the command line +:: + + $ policy2tosca help add_type + diff --git a/policy2tosca/build/lib.linux-x86_64-2.7/policy2tosca/__init__.py b/policy2tosca/build/lib.linux-x86_64-2.7/policy2tosca/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/policy2tosca/build/lib.linux-x86_64-2.7/policy2tosca/add_definition.py b/policy2tosca/build/lib.linux-x86_64-2.7/policy2tosca/add_definition.py new file mode 100644 index 0000000..953c377 --- /dev/null +++ b/policy2tosca/build/lib.linux-x86_64-2.7/policy2tosca/add_definition.py @@ -0,0 +1,93 @@ +# 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. + +import logging +import os +import re +from cliff.command import Command +from cliff.show import ShowOne + + +class add_definition(Command): + "Add policy definition in a tosca file" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(add_definition, self).get_parser(prog_name) + parser.add_argument('--policy_name', dest='policy_name', required=True, + help='add policy name') + parser.add_argument('--policy_type', dest='policy_type', required=True, + help='belongs to policy type') + parser.add_argument('--targets', dest='targets', nargs='+', + help='specify N number of targets') + parser.add_argument('--metadata', dest='metadata', nargs='?', + help='metadata') + parser.add_argument('--description', dest='description', nargs='?', + help='description') + parser.add_argument('--properties', dest='properties', nargs='+', + help='properties') + parser.add_argument('--triggers', dest='triggers', nargs='+', + help='triggers') + parser.add_argument('--source', dest='source', nargs='?', + help='source tosca yaml file') + return parser + + def take_action(self, parsed_args): + inputfile = open(parsed_args.source, 'r').readlines() + policy_def = 0 + policy_type = 0 + policy_type = self.check_policy_type(parsed_args) + policy_def = self.check_definition(parsed_args) + if policy_def == 0 and policy_type == 0: + self.insert_policy_def(parsed_args) + + def check_definition(self, parsed_args): + filename = parsed_args.source + filehandler = open(filename, "r") + lines = filehandler.readlines() + policy_def = 0 + policy_name = " - " + str(parsed_args.policy_name) + ":" + for line in lines: + if policy_name in line: + print "policy definition exists" + policy_def = 1 + return policy_def + + def insert_policy_def(self, parsed_args): + filename = parsed_args.source + filehandle = open(filename, "a") + print "Adding Definition" + filehandle.write(" - " + str(parsed_args.policy_name) + ":\n") + filehandle.write(" type: " + str(parsed_args.policy_type) + + "\n") + filehandle.write(" description: " + str(parsed_args.description) + + "\n") + filehandle.write(" metadata: \n " + + str(parsed_args.metadata) + "\n") + filehandle.write(" properties: \n " + + str(parsed_args.properties) + "\n") + filehandle.write(" targets:\n " + + str(parsed_args.targets) + "\n") + filehandle.write(" triggers: \n " + + str(parsed_args.triggers) + "\n") + + def check_policy_type(self, parsed_args): + policy_name = parsed_args.policy_type + ":$" + inputfile = open(parsed_args.source, 'r').readlines() + policy_exists = 0 + for line in inputfile: + if re.search(policy_name, line): + print "policy type exists" + policy_exists = 1 + return policy_exists diff --git a/policy2tosca/build/lib.linux-x86_64-2.7/policy2tosca/add_type.py b/policy2tosca/build/lib.linux-x86_64-2.7/policy2tosca/add_type.py new file mode 100644 index 0000000..0afa0e8 --- /dev/null +++ b/policy2tosca/build/lib.linux-x86_64-2.7/policy2tosca/add_type.py @@ -0,0 +1,121 @@ +# 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. + +import logging +import os +from cliff.command import Command +from cliff.show import ShowOne +import re + + +class add_type(Command): + + "Add policy type in a tosca file" + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(add_type, self).get_parser(prog_name) + parser.add_argument('--policy_type', dest='policy_type', nargs='?', + help='add policy type') + parser.add_argument('--derived_from', dest='derived_from', nargs='?', + help='policy dervied from') + parser.add_argument('--version_number', dest='version_number', + nargs='?', help='version number of the policy') + parser.add_argument('--targets', dest='targets', nargs='+', + help='specify N number of targets') + parser.add_argument('--metadata', dest='metadata', nargs='?', + help='metadata') + parser.add_argument('--description', dest='description', nargs='?', + help='metadata') + parser.add_argument('--properties', dest='properties', nargs='+', + help='properties') + parser.add_argument('--triggers', dest='triggers', nargs='+', + help='triggers') + parser.add_argument('--source', dest='source', nargs='?', + help='source tosca yaml file') + return parser + + def take_action(self, parsed_args): + inputfile = open(parsed_args.source, 'r').readlines() + policy_block = 0 + for line in inputfile: + if re.search('policy_types:', line): + print "policy block exists" + policy_block = 1 + if policy_block == 0: + self.insert_policy_block(parsed_args) + policy_block = 1 + policy_exists = self.check_policy(parsed_args) + if policy_exists == 0: + self.insert_policy(parsed_args) + + def insert_policy_block(self, parsed_args): + inputfile = open(parsed_args.source, 'r').readlines() + filename = parsed_args.source + "_temp" + filehandle = open(filename, 'w') + for line in inputfile: + filehandle.write(line) + if re.search('topology_template:', line): + print "Inserting policy block" + filehandle.write("\tpolicy_types:\n") + + filehandle.close() + filehandles = open(parsed_args.source, "w") + filename = parsed_args.source + "_temp" + filehandle = open(filename, 'r') + lines = filehandle.readlines() + for line in lines: + filehandles.write(line) + os.system('rm '+filename) + + def check_policy(self, parsed_args): + policy_name = parsed_args.policy_type + ":$" + inputfile = open(parsed_args.source, 'r').readlines() + policy_exists = 0 + for line in inputfile: + if re.search(policy_name, line): + print "policy type exists" + policy_exists = 1 + return policy_exists + + def insert_policy(self, parsed_args): + inputfile = open(parsed_args.source, 'r').readlines() + filename = parsed_args.source + "_temp" + filehandle = open(filename, 'w') + for line in inputfile: + filehandle.write(line) + if re.search('policy_types:', line): + print "Inserting policy type" + filehandle.write("\t "+str(parsed_args.policy_type) + ":\n") + filehandle.write("\t derived_from: " + + str(parsed_args.derived_from) + "\n") + filehandle.write("\t version: " + + str(parsed_args.version_number) + "\n") + filehandle.write("\t description: " + + str(parsed_args.description) + "\n") + filehandle.write("\t metadata: \n\t " + + str(parsed_args.metadata) + "\n") + filehandle.write("\t properties: \n\t " + + str(parsed_args.properties) + "\n") + filehandle.write("\t targets:\n\t " + + str(parsed_args.targets) + "\n") + filehandle.write("\t triggers: \n\t " + + str(parsed_args.triggers) + "\n") + filehandle.close() + filehandles = open(parsed_args.source, "w") + filename = parsed_args.source + "_temp" + filehandle = open(filename, 'r') + lines = filehandle.readlines() + for line in lines: + filehandles.write(line) + os.system('rm ' + filename) diff --git a/policy2tosca/build/lib.linux-x86_64-2.7/policy2tosca/del_definition.py b/policy2tosca/build/lib.linux-x86_64-2.7/policy2tosca/del_definition.py new file mode 100644 index 0000000..f1b9132 --- /dev/null +++ b/policy2tosca/build/lib.linux-x86_64-2.7/policy2tosca/del_definition.py @@ -0,0 +1,45 @@ +# 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. + +import logging +import os +from cliff.command import Command +from cliff.show import ShowOne +import yaml +import json + + +class delete_definition(Command): + "Delete policy in a tosca file" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(delete_definition, self).get_parser(prog_name) + parser.add_argument('--policy_name', dest='policy_name', nargs='?', + help='delete policy') + parser.add_argument('--source', dest='source', nargs='?', + help='source tosca yaml file') + return parser + + def take_action(self, parsed_args): + yml = open(parsed_args.source, "r") + data = yaml.load(yml) + json_dump = json.dumps(data) + tosca_json = json.loads(json_dump) + del tosca_json['topology_template']['policies'][parsed_args.policy_name] + tosca = json.dumps(tosca_json) + data2 = json.loads(tosca) + yml2 = yaml.safe_dump(data2, default_flow_style=False) + tosca_file = open(parsed_args.source, "w") + tosca_file.write(yml2) diff --git a/policy2tosca/build/lib.linux-x86_64-2.7/policy2tosca/del_type.py b/policy2tosca/build/lib.linux-x86_64-2.7/policy2tosca/del_type.py new file mode 100644 index 0000000..70adc0e --- /dev/null +++ b/policy2tosca/build/lib.linux-x86_64-2.7/policy2tosca/del_type.py @@ -0,0 +1,47 @@ +# 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. + +import logging +import os +from cliff.command import Command +from cliff.show import ShowOne +import yaml +import json + + +class delete_type(Command): + "Delete policy type in a tosca file" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(delete_type, self).get_parser(prog_name) + parser.add_argument('--policy_type', dest='policy_type', nargs='?', + help='delete policy type') + parser.add_argument('--source', dest='source', nargs='?', + help='source tosca yaml file') + return parser + + def take_action(self, parsed_args): + yml = open(parsed_args.source, "r") + #lines=filehandle.readlines() + data = yaml.load(yml) + json_dump = json.dumps(data) + #print json_dump + tosca_json = json.loads(json_dump) + del tosca_json['topology_template']['policy_types'][parsed_args.policy_type] + tosca = json.dumps(tosca_json) + data2 = json.loads(tosca) + yml2 = yaml.safe_dump(data2, default_flow_style=False) + tosca_file = open(parsed_args.source, "w") + tosca_file.write(yml2) diff --git a/policy2tosca/build/lib.linux-x86_64-2.7/policy2tosca/main.py b/policy2tosca/build/lib.linux-x86_64-2.7/policy2tosca/main.py new file mode 100644 index 0000000..39aabfa --- /dev/null +++ b/policy2tosca/build/lib.linux-x86_64-2.7/policy2tosca/main.py @@ -0,0 +1,37 @@ +import logging +import sys + +from cliff.app import App +from cliff.commandmanager import CommandManager + + +class policy2tosca(App): + + log = logging.getLogger(__name__) + + def __init__(self): + super(policy2tosca, self).__init__( + description='Parser Policy2Tosca', + version='0.1', + command_manager=CommandManager('cliff.demo'), + ) + + def initialize_app(self, argv): + self.log.debug('initialize_app') + + def prepare_to_run_command(self, cmd): + self.log.debug('prepare_to_run_command %s', cmd.__class__.__name__) + + def clean_up(self, cmd, result, err): + self.log.debug('clean_up %s', cmd.__class__.__name__) + if err: + self.log.debug('got an error: %s', err) + + +def main(argv=sys.argv[1:]): + myapp = policy2tosca() + return myapp.run(argv) + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff --git a/policy2tosca/dist/policy2tosca-0.1-py2.7.egg b/policy2tosca/dist/policy2tosca-0.1-py2.7.egg new file mode 100644 index 0000000..cf512ae Binary files /dev/null and b/policy2tosca/dist/policy2tosca-0.1-py2.7.egg differ diff --git a/policy2tosca/policy2tosca.egg-info/PKG-INFO b/policy2tosca/policy2tosca.egg-info/PKG-INFO new file mode 100644 index 0000000..897fcca --- /dev/null +++ b/policy2tosca/policy2tosca.egg-info/PKG-INFO @@ -0,0 +1,54 @@ +Metadata-Version: 1.1 +Name: policy2tosca +Version: 0.1 +Summary: Parser policy2tosca +Home-page: UNKNOWN +Author: Shiva Charan M S +Author-email: shiva-charan.m-s@hpe.com +License: UNKNOWN +Description: ================= + Running demoapp + ================= + + Pre-requisite + ------------- + + Install cliff with the following links. + + http://docs.openstack.org/developer/cliff/install.html + or + http://docs.openstack.org/developer/cliff/demoapp.html + + Setup + ----- + + Now, install the policy2tosca module. + + :: + + $ cd policy2tosca + $ python setup.py install + + Usage + ----- + + To see a list of commands available, run:: + + $ policy2tosca --help + + + To see help for an individual command, include the command name on the + command line:: + + $ policy2tosca help add_type + + +Platform: Any +Classifier: License :: OSI Approved :: Apache Software License +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.2 +Classifier: Intended Audience :: Developers +Classifier: Environment :: Console diff --git a/policy2tosca/policy2tosca.egg-info/SOURCES.txt b/policy2tosca/policy2tosca.egg-info/SOURCES.txt new file mode 100644 index 0000000..8efd66c --- /dev/null +++ b/policy2tosca/policy2tosca.egg-info/SOURCES.txt @@ -0,0 +1,16 @@ +README.rst +setup.py +policy2tosca/__init__.py +policy2tosca/add_definition.py +policy2tosca/add_type.py +policy2tosca/del_definition.py +policy2tosca/del_type.py +policy2tosca/main.py +policy2tosca.egg-info/PKG-INFO +policy2tosca.egg-info/SOURCES.txt +policy2tosca.egg-info/dependency_links.txt +policy2tosca.egg-info/entry_points.txt +policy2tosca.egg-info/namespace_packages.txt +policy2tosca.egg-info/not-zip-safe +policy2tosca.egg-info/requires.txt +policy2tosca.egg-info/top_level.txt \ No newline at end of file diff --git a/policy2tosca/policy2tosca.egg-info/dependency_links.txt b/policy2tosca/policy2tosca.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/policy2tosca/policy2tosca.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/policy2tosca/policy2tosca.egg-info/entry_points.txt b/policy2tosca/policy2tosca.egg-info/entry_points.txt new file mode 100644 index 0000000..ad58b44 --- /dev/null +++ b/policy2tosca/policy2tosca.egg-info/entry_points.txt @@ -0,0 +1,9 @@ +[console_scripts] +policy2tosca = policy2tosca.main:main + +[cliff.demo] +delete-definition = policy2tosca.del_definition:delete_definition +delete-type = policy2tosca.del_type:delete_type +add-type = policy2tosca.add_type:add_type +add-definition = policy2tosca.add_definition:add_definition + diff --git a/policy2tosca/policy2tosca.egg-info/namespace_packages.txt b/policy2tosca/policy2tosca.egg-info/namespace_packages.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/policy2tosca/policy2tosca.egg-info/namespace_packages.txt @@ -0,0 +1 @@ + diff --git a/policy2tosca/policy2tosca.egg-info/not-zip-safe b/policy2tosca/policy2tosca.egg-info/not-zip-safe new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/policy2tosca/policy2tosca.egg-info/not-zip-safe @@ -0,0 +1 @@ + diff --git a/policy2tosca/policy2tosca.egg-info/requires.txt b/policy2tosca/policy2tosca.egg-info/requires.txt new file mode 100644 index 0000000..4ba1219 --- /dev/null +++ b/policy2tosca/policy2tosca.egg-info/requires.txt @@ -0,0 +1 @@ +cliff \ No newline at end of file diff --git a/policy2tosca/policy2tosca.egg-info/top_level.txt b/policy2tosca/policy2tosca.egg-info/top_level.txt new file mode 100644 index 0000000..87ec9fd --- /dev/null +++ b/policy2tosca/policy2tosca.egg-info/top_level.txt @@ -0,0 +1 @@ +policy2tosca diff --git a/policy2tosca/policy2tosca/__init__.py b/policy2tosca/policy2tosca/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/policy2tosca/policy2tosca/add_definition.py b/policy2tosca/policy2tosca/add_definition.py new file mode 100644 index 0000000..cb534f4 --- /dev/null +++ b/policy2tosca/policy2tosca/add_definition.py @@ -0,0 +1,157 @@ +# 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. + +import logging +import os +import re +from cliff.command import Command +from cliff.show import ShowOne +import yaml +import json + + +class Add_definition(Command): + "Add policy definition in a tosca file" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(Add_definition, self).get_parser(prog_name) + parser.add_argument('--policy_name', dest='policy_name', required=True, + help='add policy name') + parser.add_argument('--policy_type', dest='policy_type', required=True, + help='belongs to policy type') + parser.add_argument('--targets', dest='targets', nargs='*', + help='specify N number of targets') + parser.add_argument('--metadata', dest='metadata', nargs='?', + help='metadata') + parser.add_argument('--description', dest='description', nargs='?', + help='description') + parser.add_argument('--properties', dest='properties', nargs='+', + help='properties') + parser.add_argument('--triggers', dest='triggers', nargs='*', + help='triggers') + parser.add_argument('--source', dest='source', nargs='?', + help='source tosca yaml file') + return parser + + def take_action(self, parsed_args): + inputfile = open(parsed_args.source, 'r').readlines() + policy_def = 0 + policy_type = 0 + policy_type = self.check_policy_type(parsed_args) + policy_def = self.check_definition(parsed_args) + if policy_def == 0 and policy_type == 0: + self.insert_policy_def(parsed_args) + + def check_definition(self, parsed_args): + filename = parsed_args.source + filehandler = open(filename, "r") + lines = filehandler.readlines() + policy_def = 0 + policy_name = " - " + str(parsed_args.policy_name) + ":" + for line in lines: + if policy_name in line: + print "policy definition exists" + policy_def = 1 + return policy_def + + def insert_policy_def(self, parsed_args): + searchline = ' policies:\n' + f = open(parsed_args.source, "r") + lines = f.readlines() + num = lines.index(searchline) + string = lines[num + 1] + leading_spaces = len(string) - len(string.lstrip()) + policy_name = "- " + str(parsed_args.policy_name) + ":" + properties = parsed_args.properties[0] + prop_str = self.make_list(properties,leading_spaces) + if (parsed_args.triggers and parsed_args.targets): + policy = "".join((leading_spaces * " ") + policy_name + "\n" + + "".join((leading_spaces * " ")) + " type: " + + str(parsed_args.policy_type) + "\n" + "".join((leading_spaces * " ")) + + " description: " + str(parsed_args.description) + "\n" + + "".join((leading_spaces * " ")) + " metadata: " + str(parsed_args.metadata) + "\n" + + "".join((leading_spaces * " ")) + " properties: \n" + "".join((leading_spaces * 2 * " ")) + prop_str + + "targets: " + str(parsed_args.targets) + "\n" + + "".join((leading_spaces * " ")) + " triggers: " + str(parsed_args.triggers) + "\n" + ) + elif (parsed_args.triggers): + policy = "".join((leading_spaces * " ") + policy_name + "\n" + + "".join((leading_spaces * " ")) + " type: " + + str(parsed_args.policy_type) + "\n" + "".join((leading_spaces * " ")) + + " description: " + str(parsed_args.description) + "\n" + + "".join((leading_spaces * " ")) + " metadata: " + str(parsed_args.metadata) + "\n" + + "".join((leading_spaces * " ")) + " properties: \n" + "".join((leading_spaces * 2 * " ")) + prop_str + + "".join((leading_spaces * " ")) + " triggers: " + str(parsed_args.triggers) + "\n" + ) + elif (parsed_args.targets): + policy = "".join((leading_spaces * " ") + policy_name + "\n" + + "".join((leading_spaces * " ")) + " type: " + + str(parsed_args.policy_type) + "\n" + "".join((leading_spaces * " ")) + + " description: " + str(parsed_args.description) + "\n" + + "".join((leading_spaces * " ")) + " metadata: " + str(parsed_args.metadata) + "\n" + + "".join((leading_spaces * " ")) + " properties: \n" + "".join((leading_spaces * 2 * " ")) + prop_str + + "targets: " + str(parsed_args.targets) + "\n" + ) + + lines.insert(num+1,policy) + + f2 = open(parsed_args.source, "w") + for line in lines: + f2.write(line) + + def make_list(self, properties, leading_spaces): + props = properties.split(",") + lists = [] + i = 0 + for p in props: + lables = p.split(":") + + lists.insert(i,lables) + i = i + 1 + title_list=[] + i =0 + for l in lists: + title_list.insert(i,l[0]) + i = i + 1 + prop_title = "" + len_list = len(lists) + title_list = set(title_list) + final_list = [] + i = 0 + + for t in title_list: + final_str = t + ":" + for l in lists: + if t == l[0]: + final_str = final_str + " " + l[1] + "," + final_str = final_str[:-1] + final_list.insert(i,final_str) + i =+ 1 + + prop_str = "" + for f in final_list: + prop_str = prop_str + f +"\n" + "".join((leading_spaces * 2 *" ")) + return prop_str[:-1] + + def check_policy_type(self, parsed_args): + policy_type = parsed_args.policy_type + ":$" + inputfile = open(parsed_args.source, 'r').readlines() + policy_exists = 0 + for line in inputfile: + if re.search(policy_type, line): + print "policy type exists" + policy_exists = 1 + break + return policy_exists diff --git a/policy2tosca/policy2tosca/add_type.py b/policy2tosca/policy2tosca/add_type.py new file mode 100644 index 0000000..ded3732 --- /dev/null +++ b/policy2tosca/policy2tosca/add_type.py @@ -0,0 +1,121 @@ +# 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. + +import logging +import os +from cliff.command import Command +from cliff.show import ShowOne +import re + + +class Add_type(Command): + + "Add policy type in a tosca file" + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(Add_type, self).get_parser(prog_name) + parser.add_argument('--policy_type', dest='policy_type', nargs='?', + help='add policy type') + parser.add_argument('--derived_from', dest='derived_from', nargs='?', + help='policy dervied from') + parser.add_argument('--version_number', dest='version_number', + nargs='?', help='version number of the policy') + parser.add_argument('--targets', dest='targets', nargs='+', + help='specify N number of targets') + parser.add_argument('--metadata', dest='metadata', nargs='?', + help='metadata') + parser.add_argument('--description', dest='description', nargs='?', + help='metadata') + parser.add_argument('--properties', dest='properties', nargs='+', + help='properties') + parser.add_argument('--triggers', dest='triggers', nargs='+', + help='triggers') + parser.add_argument('--source', dest='source', nargs='?', + help='source tosca yaml file') + return parser + + def take_action(self, parsed_args): + inputfile = open(parsed_args.source, 'r').readlines() + policy_block = 0 + for line in inputfile: + if re.search('policy_types:', line): + print "policy block exists" + policy_block = 1 + if policy_block == 0: + self.insert_policy_block(parsed_args) + policy_block = 1 + policy_exists = self.check_policy(parsed_args) + if policy_exists == 0: + self.insert_policy(parsed_args) + + def insert_policy_block(self, parsed_args): + inputfile = open(parsed_args.source, 'r').readlines() + filename = parsed_args.source + "_temp" + filehandle = open(filename, 'w') + for line in inputfile: + filehandle.write(line) + if re.search('topology_template:', line): + print "Inserting policy block" + filehandle.write("\tpolicy_types:\n") + + filehandle.close() + filehandles = open(parsed_args.source, "w") + filename = parsed_args.source + "_temp" + filehandle = open(filename, 'r') + lines = filehandle.readlines() + for line in lines: + filehandles.write(line) + os.system('rm '+filename) + + def check_policy(self, parsed_args): + policy_name = parsed_args.policy_type + ":$" + inputfile = open(parsed_args.source, 'r').readlines() + policy_exists = 0 + for line in inputfile: + if re.search(policy_name, line): + print "policy type exists" + policy_exists = 1 + break + return policy_exists + + def insert_policy(self, parsed_args): + inputfile = open(parsed_args.source, 'r').readlines() + filename = parsed_args.source + "_temp" + filehandle = open(filename, 'w') + for line in inputfile: + filehandle.write(line) + if re.search('policy_types:', line): + print "Inserting policy type" + filehandle.write("\t "+str(parsed_args.policy_type) + ":\n") + filehandle.write("\t derived_from: " + + str(parsed_args.derived_from) + "\n") + filehandle.write("\t version: " + + str(parsed_args.version_number) + "\n") + filehandle.write("\t description: " + + str(parsed_args.description) + "\n") + filehandle.write("\t metadata: \n\t " + + str(parsed_args.metadata) + "\n") + filehandle.write("\t properties: \n\t " + + str(parsed_args.properties) + "\n") + filehandle.write("\t targets:\n\t " + + str(parsed_args.targets) + "\n") + filehandle.write("\t triggers: \n\t " + + str(parsed_args.triggers) + "\n") + filehandle.close() + filehandles = open(parsed_args.source, "w") + filehandle = open(filename, 'r') + lines = filehandle.readlines() + for line in lines: + filehandles.write(line) + os.system('rm ' + filename) diff --git a/policy2tosca/policy2tosca/del_definition.py b/policy2tosca/policy2tosca/del_definition.py new file mode 100644 index 0000000..d8345cd --- /dev/null +++ b/policy2tosca/policy2tosca/del_definition.py @@ -0,0 +1,45 @@ +# 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. + +import logging +import os +from cliff.command import Command +from cliff.show import ShowOne +import yaml +import json + + +class Delete_definition(Command): + "Delete policy in a tosca file" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(Delete_definition, self).get_parser(prog_name) + parser.add_argument('--policy_name', dest='policy_name', nargs='?', + help='delete policy') + parser.add_argument('--source', dest='source', nargs='?', + help='source tosca yaml file') + return parser + + def take_action(self, parsed_args): + yml = open(parsed_args.source, "r") + data = yaml.load(yml) + json_dump = json.dumps(data) + tosca_json = json.loads(json_dump) + del tosca_json['topology_template']['policies'][parsed_args.policy_name] + tosca = json.dumps(tosca_json) + data2 = json.loads(tosca) + yml2 = yaml.safe_dump(data2, default_flow_style=False) + tosca_file = open(parsed_args.source, "w") + tosca_file.write(yml2) diff --git a/policy2tosca/policy2tosca/del_type.py b/policy2tosca/policy2tosca/del_type.py new file mode 100644 index 0000000..144deec --- /dev/null +++ b/policy2tosca/policy2tosca/del_type.py @@ -0,0 +1,47 @@ +# 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. + +import logging +import os +from cliff.command import Command +from cliff.show import ShowOne +import yaml +import json + + +class Delete_type(Command): + "Delete policy type in a tosca file" + + log = logging.getLogger(__name__) + + def get_parser(self, prog_name): + parser = super(Delete_type, self).get_parser(prog_name) + parser.add_argument('--policy_type', dest='policy_type', nargs='?', + help='delete policy type') + parser.add_argument('--source', dest='source', nargs='?', + help='source tosca yaml file') + return parser + + def take_action(self, parsed_args): + yml = open(parsed_args.source, "r") + #lines=filehandle.readlines() + data = yaml.load(yml) + json_dump = json.dumps(data) + #print json_dump + tosca_json = json.loads(json_dump) + del tosca_json['topology_template']['policy_types'][parsed_args.policy_type] + tosca = json.dumps(tosca_json) + data2 = json.loads(tosca) + yml2 = yaml.safe_dump(data2, default_flow_style=False) + tosca_file = open(parsed_args.source, "w") + tosca_file.write(yml2) diff --git a/policy2tosca/policy2tosca/main.py b/policy2tosca/policy2tosca/main.py new file mode 100644 index 0000000..39aabfa --- /dev/null +++ b/policy2tosca/policy2tosca/main.py @@ -0,0 +1,37 @@ +import logging +import sys + +from cliff.app import App +from cliff.commandmanager import CommandManager + + +class policy2tosca(App): + + log = logging.getLogger(__name__) + + def __init__(self): + super(policy2tosca, self).__init__( + description='Parser Policy2Tosca', + version='0.1', + command_manager=CommandManager('cliff.demo'), + ) + + def initialize_app(self, argv): + self.log.debug('initialize_app') + + def prepare_to_run_command(self, cmd): + self.log.debug('prepare_to_run_command %s', cmd.__class__.__name__) + + def clean_up(self, cmd, result, err): + self.log.debug('clean_up %s', cmd.__class__.__name__) + if err: + self.log.debug('got an error: %s', err) + + +def main(argv=sys.argv[1:]): + myapp = policy2tosca() + return myapp.run(argv) + + +if __name__ == '__main__': + sys.exit(main(sys.argv[1:])) diff --git a/policy2tosca/setup.py b/policy2tosca/setup.py new file mode 100644 index 0000000..1cd6732 --- /dev/null +++ b/policy2tosca/setup.py @@ -0,0 +1,75 @@ +# 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. + +#!/usr/bin/env python + +PROJECT = 'policy2tosca' + +# Change docs/sphinx/conf.py too! +VERSION = '0.1' + +from setuptools import setup, find_packages + +try: + long_description = open('README.rst', 'rt').read() +except IOError: + long_description = '' + +setup( + name=PROJECT, + version=VERSION, + + description='Parser policy2tosca', + long_description=long_description, + + author='Shiva Charan M S', + author_email='shiva-charan.m-s@hpe.com', + + url='', + download_url='', + + classifiers=['License :: OSI Approved :: Apache Software License', + 'Programming Language :: Python', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.2', + 'Intended Audience :: Developers', + 'Environment :: Console', + ], + + platforms=['Any'], + + scripts=[], + + provides=[], + install_requires=['cliff'], + + namespace_packages=[], + packages=find_packages(), + include_package_data=True, + + entry_points={ + 'console_scripts': [ + 'policy2tosca = policy2tosca.main:main' + ], + 'cliff.demo': [ + 'delete-type = policy2tosca.del_type:Delete_type', + 'delete-definition = policy2tosca.del_definition:Delete_definition', + 'add-type = policy2tosca.Add_type:add_type', + 'add-definition = policy2tosca.add_definition:Add_definition', + ], + }, + + zip_safe=False, +)