def updatePropertyRulesUsingConfig(version_number, master_config_list):
    print("Creating new ruleset based on list of master configs...")
    rules_tree = util.getJSONFromFile("./data/base_rules.json")

    parent_rule_template = util.getJSONFromFile("./data/base_env_rule.json")
    
    # Iterate through the configurations for each environment
    for env in master_config_list:
        parent_rule = copy.deepcopy(parent_rule_template)
        parent_rule["name"] = "{} (AUTO-GENERATED)".format(env["name"])
        parent_rule["criteria"][0]["options"]["matchOperator"] = "DOES_NOT_MATCH_ONE_OF" if ("prefix" not in env or env["prefix"] == "") else "MATCHES_ONE_OF"
        if ("prefix" not in env or env["prefix"] == ""):
            parent_rule["criteria"][0]["options"]["values"].append("/api")
            parent_rule["criteria"][0]["options"]["values"].append("/api/*")
            # Each env should exclude matches for other envs.
            for nomatch in (x for x in master_config_list if (x != env["name"] and "prefix" in x and x["prefix"] != "")):
                parent_rule["criteria"][0]["options"]["values"].append(nomatch["prefix"])
                parent_rule["criteria"][0]["options"]["values"].append(nomatch["prefix"] + "/*")
        else:
            parent_rule["criteria"][0]["options"]["values"].append(env["prefix"])
            parent_rule["criteria"][0]["options"]["values"].append(env["prefix"] + "/*")
            
        parent_rule["children"] = createRulesForEnv(env["config"], env["prefix"])
        rules_tree["rules"]["children"][2]["children"].append(parent_rule)

    # Update property with this new ruleset
    print("API - Updating rule tree...")
    response = json.loads(util.akamaiPut("/papi/v1/properties/prp_516561/versions/{}/rules?contractId=ctr_3-1MMN3Z&groupId=grp_134508&validateRules=true&validateMode=full".format(version_number),rules_tree))
def updatePropertyRulesUsingConfig(version_number,
                                   master_config_list,
                                   crc_env="stage"):
    print("Creating new ruleset based on list of master configs...")
    frontend_rule_index = 3 if ("stage" == crc_env) else 2
    replacements = [
        ("<<prod-gateway-secret>>", util.getEnvVar("GATEWAYSECRET")),
        ("<<pentest-gateway-secret>>", util.getEnvVar("PENTESTGATEWAYSECRET")),
        ("<<certauth-gateway-secret>>", util.getEnvVar("CERTAUTHSECRET")),
        ("<<gateway-origin-json>>",
         util.readFileAsString(util.getEnvVar("GATEWAYORIGINJSON")))
    ]

    rules_tree = util.getJSONFromFileWithReplacements(
        "./data/{}/base_rules.json".format(crc_env), replacements)

    parent_rule_template = util.getJSONFromFile("./data/base_env_rule.json")

    # Iterate through the configurations for each release
    for env in master_config_list:
        parent_rule = copy.deepcopy(parent_rule_template)
        parent_rule["name"] = "{} (AUTO-GENERATED)".format(env["name"])
        if ("url_prefix" not in env or env["url_prefix"] == ""):
            parent_rule["criteria"][0]["options"][
                "matchOperator"] = "DOES_NOT_MATCH_ONE_OF"
            parent_rule["criteria"][0]["options"]["values"].extend(
                ["/api", "/api/*", "/mirror/openshift*", "/wss/*"])
            # Each env should exclude matches for other envs.
            for nomatch in (x for x in master_config_list
                            if (x != env["name"] and "url_prefix" in x
                                and x["url_prefix"] != "")):
                parent_rule["criteria"][0]["options"]["values"].extend(
                    [nomatch["url_prefix"], nomatch["url_prefix"] + "/*"])
        else:
            parent_rule["criteria"][0]["options"][
                "matchOperator"] = "MATCHES_ONE_OF"
            parent_rule["criteria"][0]["options"]["values"].extend(
                [env["url_prefix"], env["url_prefix"] + "/*"])

        # Update pen-test cookie check, if necessary
        if ("cookie_required" in env and env["cookie_required"]):
            parent_rule["criteria"][1]["options"]["matchOperator"] = "EXISTS"

        parent_rule["children"] = createRulesForEnv(env["config"],
                                                    env["url_prefix"],
                                                    env["content_path_prefix"],
                                                    crc_env)
        rules_tree["rules"]["children"][frontend_rule_index][
            "children"].append(parent_rule)

    # Update property with this new ruleset
    print("API - Updating rule tree...")
    response = json.loads(
        util.akamaiPut(
            "/papi/v1/properties/{}/versions/{}/rules?contractId=ctr_3-1MMN3Z&groupId=grp_134508&validateRules=true&validateMode=full"
            .format(util.getPropertyIDForEnv(crc_env),
                    version_number), rules_tree))
    print("Response:")
    print(json.dumps(response))