Skip to main content

Invariant: manage ACLs in an entirely new way

Project description

Invariant CLI and Python SDK

Installation

The Invariant client is available as a Python package. You can install it through pip or pipx like so:

pip install invariant-client

# Or using pipx
pipx install invariant-client

The Invariant CLI can be used to run Invariant from your test automation workflow. This example shows one way to install it for Github Actions:

steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
  with:
    python-version: '3.11'
    cache: 'pip'
- name: Install dependencies
  run: python -m pip install --upgrade pip invariant-client
- name: Evaluate current directory using Invariant
  run: |
    python -m invariant-client run

Usage: Command Line Interface

The Invariant CLI can analyize local changes to network configuration files.

$ invariant login
Open this link in your browser to log in:
https://prod.invariant.tech/login?code=320664
Login successful.

$ invariant run
Uploading snapshot...
Processing... (5b7f28b5-95b3-44ee-8c42-ea0240ef52f5)
Analysis complete.

╭───────────────────────┬────────╮
│ Network Information      Rows │
├───────────────────────┼────────┤
│ nodes                      38 │
│ interfaces                201 │
│ named_structures          148 │
│ defined_structures        334 │
│ referenced_structures     333 │
│ unused_structures           5 │
│ vlan_properties            14 │
│ hsrp_properties             0 │
│ mlag_properties             0 │
│ ip_owners                  75 │
│ undefined_references        0 │
│ vrrp_properties             8 │
╰───────────────────────┴────────╯

╭───────────────┬────────╮
│ Topology         Rows │
├───────────────┼────────┤
│ edges             120 │
│ layer_1_edges       0 │
│ layer_3_edges     120 │
│ network_map         1 │
╰───────────────┴────────╯

╭────────────────────────────┬────────╮
│ Routing                       Rows │
├────────────────────────────┼────────┤
│ routes                        8994 │
│ bgp_process_config              12 │
│ bgp_peer_config                 24 │
│ bgp_session_compatibility       24 │
│ bgp_session_status              24 │
│ bgp_edges                       20 │
│ bgp_ribs                      4320 │
│ ospf_process_config              6 │
│ ospf_interface_config           36 │
│ ospf_area_config                 6 │
│ ospf_session_compatibility      20 │
╰────────────────────────────┴────────╯

╭───────────────────┬────────╮
│ Setup                Rows │
├───────────────────┼────────┤
│ unconnected_nodes       3 │
│ ignored_lines          49 │
│ file_parse_status      16 │
│ parse_warnings         92 │
│ errors                  0 │
╰───────────────────┴────────╯

╭────────────────────────┬────────╮
│ Inconsistent Traffic      Rows │
├────────────────────────┼────────┤
│ subnet_multipath             0 │
│ loopback_multipath           0 │
╰────────────────────────┴────────╯

╭──────────┬────────╮
│ Probes      Rows │
├──────────┼────────┤
│ probes         4 │
╰──────────┴────────╯

$ invariant show probes --json
[
  {
    "target": "8.8.8.8/32",
    "type": "ICMP_ECHO",
    "comment": "Custom 8.8.8.8 ECHO No-Ignore Filters",
    "ignore_filters": false,
    "node_outcomes": {
      "asa": "always",
      "border-1": "always",
      "core-1": "always",
      "core-2": "always",
      "dc-1": "always",
      "dist-1": "always",
      "dist-2": "always",
      "dmzfw-1": "always",
      "dmzsw-1": "always",
      "host-srv-dmz": "always",
      "i-01602d9efaed4409a": "always",
      "i-02cae6eaa9edeed70": "always",
      "i-04cd3db5124a05ee6": "never",
      "i-0a5d64b8b58c6dd09": "never",
      "internet": "always",
      "isp_64501": "always",
      "isp_64502": "always",
      "subnet-009d57c7f13813630": "never",
      "subnet-0333a0749ea4ce3df": "never",
      "subnet-03acae3b9a534fff9": "never",
      "subnet-06005943afe32f714": "never",
      "subnet-06a692ed4ef84368d": "never",
      "subnet-09b389def558a9c7d": "never",
      "subnet-0cb5f4c094bee5214": "never",
      "subnet-0f84a4be105f7aaef": "never",
      "tgw-06b348adabd13452d": "partial",
      "tgw-0888a76c8a371246d": "partial"
    }
  }
]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

invariant_client-2.2.0.tar.gz (151.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

invariant_client-2.2.0-py3-none-any.whl (462.7 kB view details)

Uploaded Python 3

File details

Details for the file invariant_client-2.2.0.tar.gz.

File metadata

  • Download URL: invariant_client-2.2.0.tar.gz
  • Upload date:
  • Size: 151.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.11.14 Darwin/25.2.0

File hashes

Hashes for invariant_client-2.2.0.tar.gz
Algorithm Hash digest
SHA256 a1b5544c4def79921fc822608ca065041f6320f10a9c338aaaebfefed3778b38
MD5 a17edf2b104fed28e7c883af807b756f
BLAKE2b-256 31f625cba95f52f213b7a290606d6eb432d25b556bf53ef1fd4222341d182c21

See more details on using hashes here.

File details

Details for the file invariant_client-2.2.0-py3-none-any.whl.

File metadata

  • Download URL: invariant_client-2.2.0-py3-none-any.whl
  • Upload date:
  • Size: 462.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.11.14 Darwin/25.2.0

File hashes

Hashes for invariant_client-2.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b80240c4c26d064f663194d1373bc0e1bfbfe4d3e93f881ae74f971a323fbd42
MD5 1a533b5eaa2ec625783e78730c835311
BLAKE2b-256 8b33a8a7aa8555e9bb3aa07a89c9e9d3a2f311e0e410355f32135d3d0778ba6b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page