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.4.0.tar.gz (156.4 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.4.0-py3-none-any.whl (477.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for invariant_client-2.4.0.tar.gz
Algorithm Hash digest
SHA256 cae3f9aadf5b95f93059532d89d0cdbc239c79e12dfadd3c437aac5e7c586741
MD5 6f76f19c52ea5306e956b652a0a3efd3
BLAKE2b-256 d889681c84ed00ec2343526355ead6a618e918cf43d2f94f59340faab3eb5306

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for invariant_client-2.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7a40e6b50dbff5012462765ca3fbb0c39663f24db22224c8fedb3da2d6f9578a
MD5 55c3aae2c6b7bff7e8c75227f9f72cbd
BLAKE2b-256 bc499cc96aaafb9293bd6b2c644cbb990f22e369ea7c929b6820868721484550

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