Esempio n. 1
0
    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
Esempio n. 2
0
    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()
Esempio n. 3
0
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
Esempio n. 4
0
    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