{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "aerleon.yml",
  "description": "Configure Aerleon's aclgen, aclcheck, and pol2yaml command line tools",
  "type": "object",
  "properties": {
    "base_directory": {
      "type": "string",
      "description": "aclgen and pol2yaml will search this directory recursively for policy files to process, except if the flag `--policy_file` is used to give a specific input file (aclgen only).\n\nRelative paths that appear in 'include' directives will be resolved against base_directory.\n\nThe default value is './policies'.",
      "minLength": 1
    },
    "definitions_directory": {
      "type": "string",
      "description": "All network and service definition files in this directory will be loaded and used to resolve symbolic network and service names. \n\nUnlike base_directory, definitions_directory is not searched recursively for input files.\n\nThe default value is './def'.",
      "minLength": 1
    },
    "output_directory": {
      "type": "string",
      "description": "aclgen will place all generated ACLs in this directory. For `aclgen` the default value is the current directory.\n\npol2yaml will place each converted file adjacent to its input file by default. If output_directory is given, pol2yaml will mirror the directory structure of the input files in the output_directory, potentially creating directories in the process.",
      "minLength": 1
    },
    "optimize": {
      "type": "boolean",
      "description": "Causes aclgen to produce a more compact address book by collapsing adjacent or overlapping CIDR expressions within the same network.\n\nOn some platforms (Juniper SRX and platforms configured with the 'object-group' option) address book compression is restricted to only collapse addresses that share the same network token (name).\n\nThis flag is not enabled by default, although a secondary address book compression pass is always performed for Juniper SRX and Palo Alto Networks firewalls regardless of this setting."
    },
    "recursive": {
      "type": "boolean",
      "description": "UNUSED. This field is not used."
    },
    "debug": {
      "type": "boolean",
      "description": "Causes aclgen to display very detailed log messages if true. The default value is false."
    },
    "verbose": {
      "type": "boolean",
      "description": "UNUSED. This field is not used. To get detailed log messages, use 'debug'."
    },
    "max_renderers": {
      "type": "integer",
      "description": "Controls the number of parallel processes used by aclgen to render ACLs. The aclgen program uses Python's OS process-based multiprocessing, so setting max_renderers to '2' would cause aclgen to spawn two OS processes that will generate ACLs.\n\nSetting max_renderers to '1' will disable multiprocessing.\n\nBy default, max_renderers is set to '10'. Users may wish to set this to the number of available CPUs on the current system."
    },
    "shade_check": {
      "type": "boolean",
      "description": "Causes aclgen to produce a warning if any unreachable term is encountered if true. The default value is false."
    },
    "exp_info": {
      "type": "integer",
      "description": "aclgen will produce a warning if it encounters a term set to expire in the near future. Expired terms are ignored. Setting exp_info controls the number of weeks ahead that aclgen will check for soon-to-expire terms.\n\nThe default value is '2' (two weeks)."
    }
  },
  "additionalProperties": false
}