diff options
Diffstat (limited to 'policy2tosca/policy2tosca/add_definition.py')
-rw-r--r-- | policy2tosca/policy2tosca/add_definition.py | 157 |
1 files changed, 157 insertions, 0 deletions
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 |