def to_json(self, fname, path="data", absolute_path=None): self.item = {} if absolute_path: fname_csv = "{}/{}.csv".format(absolute_path, fname) fname_json = "{}/{}.json".format(absolute_path, fname) else: fname_csv = utils.get_path(fname, path, "csv") entries = [] try: with open(fname_csv, encoding="windows-1251", newline='') as csv_file: reader = csv.DictReader(csv_file, skipinitialspace=True) for entry in reader: entries.append(entry) item = entry.get("syslogEnabled") if item: if item.lower() == "true": entry["syslogEnabled"] = True else : entry["syslogEnabled"] = False #self.Schema.validate(entry) if absolute_path: Json().writer_full_path(fname_json, entries) else: Json().writer(fname, entries, path) except Exception as err: l.logger.error("fname: {} not found".format(fname)) l.runlogs_logger.error("fname: {} not found".format(fname)) gv.EOM() gv.fake_assert() return entries
def data_to_csv(self, json_data, fname_csv, header=None): if type(json_data) == list: fieldNames = [k for k in json_data[0].keys()] else: fieldNames = [k for k in json_data.keys()] # Turn boolean field names into strings self.fix_bool_to_lower(json_data) if header is not None: headerOkay = True for column in header: if column not in fieldNames: headerOkay = False l.logger.error( "header column: {} not found".format(column)) gv.EOM() gv.fake_assert() if headerOkay is False: return # This will make it use the order provided fieldNames = header try: import os if os.name == 'nt': with open(fname_csv, 'w', newline='') as csvfile: self.write_lines(csvfile, fieldNames, json_data) else: with open(fname_csv, 'w') as csvfile: self.write_lines(csvfile, fieldNames, json_data) except Exception as err: l.logger.error("fname:{}".format(fname_csv)) l.runlogs_logger.error("fname:{}".format(fname_csv)) gv.fake_assert()
def goahead_confirm(_module): time.sleep(1) sys.stdout.flush() if gv.force_yes is False: resp = input( "\n# WARNING !!! #\n# Please review settings above for {} #\n\nType in 'yes' to proceed or any other character to abort." "enter (yes/No):".format(_module)) if resp.lower() != "yes": l.runlogs_logger.error("Aborted by user !!!") gv.EOM() gv.fake_abort() print("Proceeding with {} deploy.".format(_module)) sys.stdout.flush() return True
def to_json_and_validate(self, fname, input_path=None, output_path=None): json_data = Json.reader("valid_inputs", path="templates") self.schemas = json_data[0] self.item = {} fname_csv = "{}/{}.csv".format(input_path, fname) fname_json = "{}/{}.json".format(output_path, fname) entries = [] # Find schema to use in validation file_type=None schema = None for entry in self.schemas: item = self.schemas[entry] fname_pattern = item["fname_pattern"] if fname.find(fname_pattern) == 0: file_type = entry schema = item["json_schema"] break if schema is None: print ("No valid schema match\n" "check file name follows correct pattern: {}\n" "store-list-* / org-* / l3fwrules_template_ / s2svpnrules_".format(fname)) gv.EOM() gv.fake_assert() with open(fname_csv, encoding="windows-1251", newline='') as csv_file: entries = csv.DictReader(csv_file, skipinitialspace=True) line_count = 0 for entry in entries: line_count +=1 try: validate(entry, schema) # Validate Fields are the same and same order schema_keys = list(schema["properties"].keys()) item_keys = list(entry.keys()) result = [i for i, j in zip(schema_keys, item_keys) if i != j] if len(result) != 0: print("line #:{} - mismatch schema keys: {}".format(line_count, schema_keys)) print("line #:{} - mismatch item keys: {}".format(line_count, item_keys)) gv.EOM() gv.fake_assert() except: print ("invalid schema line number :{} \ {}".format(line_count, entry)) gv.EOM() gv.fake_assert() is_firewall = (file_type=="l3fwrules" or file_type=="s2svpnrules") json_data = [] line_count = 0 with open(fname_csv, encoding="windows-1251", newline='') as csv_file: line_count +=1 entries = csv.DictReader(csv_file, skipinitialspace=True) if is_firewall is False: for entry in entries: json_data.append(entry) else: for entry in entries: line_count += 1 # It is a firewall fix syslogEnabled to false item = entry.get("syslogEnabled") if item: if item.lower() == "false": entry["syslogEnabled"] = False elif item.lower() == "true": entry["syslogEnabled"] = True # Eliminates \n chars from string fields for field in ["srcCidr","destCidr","comment","srcPort","destPort"]: entry[field] = entry[field].replace("\n", "") # force Any to any in protocol fields for field in ["protocol","srcCidr","destCidr","comment","srcPort","destPort"]: entry[field]= entry[field].replace("Any", "any") # validate src and dest ports self.validate_port(entry, "srcPort", line_count) self.validate_port(entry, "destPort", line_count) # For l3fwrules only ensure VLAN Fields are valid if file_type == "l3fwrules" : self.validate_vlan_and_ip(entry, "srcCidr", line_count) self.validate_vlan_and_ip(entry, "destCidr", line_count) else: self.validate_ip_range(entry, "srcCidr", line_count) self.validate_ip_range(entry, "destCidr", line_count) item = entry.get("comment") if item == "Default rule": continue json_data.append(entry) Json().writer_full_path(fname_json, json_data) return entries