{"id":19565384,"url":"https://github.com/nchekwa/apstra-onboarding","last_synced_at":"2026-06-09T22:31:18.317Z","repository":{"id":157757269,"uuid":"630894986","full_name":"nchekwa/apstra-onboarding","owner":"nchekwa","description":"Juniper Apstra Provisioning Tool","archived":false,"fork":false,"pushed_at":"2023-09-17T21:10:38.000Z","size":141,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-19T22:18:52.249Z","etag":null,"topics":["apstra","juniper","juniper-networks","provisioning","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nchekwa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-21T12:04:26.000Z","updated_at":"2023-05-11T00:04:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"c27f22f8-e6c9-448f-a911-e6e5bca56eaa","html_url":"https://github.com/nchekwa/apstra-onboarding","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nchekwa/apstra-onboarding","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nchekwa%2Fapstra-onboarding","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nchekwa%2Fapstra-onboarding/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nchekwa%2Fapstra-onboarding/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nchekwa%2Fapstra-onboarding/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nchekwa","download_url":"https://codeload.github.com/nchekwa/apstra-onboarding/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nchekwa%2Fapstra-onboarding/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34129072,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apstra","juniper","juniper-networks","provisioning","python3"],"created_at":"2024-11-11T05:26:31.114Z","updated_at":"2026-06-09T22:31:18.272Z","avatar_url":"https://github.com/nchekwa.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1\u003eThis project contains two libs:\u003c/h1\u003e\n\n* \u003ci\u003eapstra\u003c/i\u003e -  python lib which is dedicated to standardising API calls to the Juniper Apstra system (tested with 4.1.2).\n* \u003ci\u003eboarding\u003c/i\u003e - python lib which is using 'apstra' as a backend for executing commands based on YAML configuration\n\u003cbr\u003e\n\n\u003ch3\u003eOthere content\u003c/h3\u003e\n\n* \u003ci\u003eapstra-jupyter_docs\u003c/i\u003e - docs in Jupyter standard which can be used to get some base knowledge how to use \u003ci\u003e'apstra'\u003c/i\u003e lib\n* \u003ci\u003econfig\u003c/i\u003e - contains configuration YAML file / or folders - which are used by \u003ci\u003e\"onboarding.py\"\u003c/i\u003e script\n* \u003ci\u003eschemas\u003c/i\u003e - contains Draft7 json schema for validate YAML config files\n* \u003ci\u003etemplates\u003c/i\u003e - contains \u003ci\u003e'apstra'\u003c/i\u003e lib jinja template dedicated to having an easy way of generating the content of commands sent to Apstra API service.\n\n\u003ch1\u003eonboarding.py\u003c/h1\u003e\nDescription:\n\n```bash\n# python3 onboarding.py  -h\nusage: onboarding.py [-h] [-c CONFIG] [-d DEBUG]\n\noptions:\n  -h, --help            show this help message and exit\n  -c CONFIG, --config CONFIG\n                        YAML File (or dir) with configuration\n  -d DEBUG, --debug DEBUG\n                        Debug Screen Output Level [default: INFO]\n```\nHow to run:\n```bash\nonboarding.py -c ApstraDemo\n```\n\u003ch2\u003eWhat it will do?\u003c/h2\u003e\n\n- run validation of config file: check Draft7 validation, merge yaml file (if you are using folder content)\u003cbr\u003e\n[if you use dir: anchorn should be ALWAYS extracted to seperate file]\u003cbr\u003e\n- run sync process which will take config elements for compare between:\u003cbr\u003e\n\u0026nbsp; \u0026nbsp; \u0026nbsp; \u0026nbsp; YAML config file \u003c--and--\u003e Apstra server\u003cbr\u003e\n(configuration elements: routing_policies, nodes, connectivity_template, virtual_network, self.routing_zones)\n- if under blueprint 'sync' option would be set as True - config elements which not exist in configu YAML, and exist on Apstra server -\u003e \u003cu\u003ewould be removed from\u003c/u\u003e Apstra server\n- next would be trigere bording process: (routing_zones, virtual_network, connectivity_template, nodes, nodes_interface_speed, nodes_connectivity_template_assign)\n\n\u003ch2\u003eWhat it will NOT do?\u003c/h2\u003e\n\n- this is just Day-2 provisioning script - if you modyfie some parameters like name or vlan id - it will not be \"sync\" (will not update config on Apstra)\n- if you use sync=True - please be aware that element not listed in configuration would be removed from Apstra\n\n\n\n\n\u003ch2\u003eMain Features:\u003c/h2\u003e\n\n- YAML config validate by Draft7 schema\n- YAML will not use element IDs but only names/labels\n- configuration can be stored in multiple YAML files with anachors references (ie. same vlan for multiple blueprints)\n- create resource (asn/ip/vni)\n- create blueprints sub elements of Day2 configuration across multiple Bluprints on multiple Apstra Controllers\n- create blueprint -\u003e routing-policies\n- create blueprint -\u003e routing-zones\n- create blueprint -\u003e virtual-networks (bound to name of phisical swtich (leaf and access) which are translate to redundancy-groups)\n- create blueprint -\u003e connectivity-templates (single vlan / multivlan / bgp L3 peering / any othere predefined in jinja template file)\n- create blueprint -\u003e nodes (generic or external + links to leaf [Physical  or LAG])\n- create blueprint -\u003e nodes (change speed interface if needed)\n- assign tags to CT/NODEs/RESOURCEs\n- assign node interfaces to assign connectivity-templates to Physical or LAG interface (pointing server interface and then CT provision on Leaf interface side)\n- store logging for each run of script in seperate log file\n\n\n\u003ch2\u003eTodo:\u003c/h2\u003e\n\n- 'sync=True' option will allow to remove elements on Apstra which are not defined in YAML file\n- 'sync=True' will not remove elements from Apstra server (tagged as 'protect' will be keep on apstra side)\n- add option -commit for script which will Commit Configuration only if blueprint not repors any errors\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnchekwa%2Fapstra-onboarding","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnchekwa%2Fapstra-onboarding","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnchekwa%2Fapstra-onboarding/lists"}