-
Notifications
You must be signed in to change notification settings - Fork 372
[Nexthop][fboss2-dev] Replace file-based config versioning with Git #825
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
benoit-nexthop
wants to merge
8
commits into
facebook:main
Choose a base branch
from
nexthop-ai:fboss2-cli-prototype_part15
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
[Nexthop][fboss2-dev] Replace file-based config versioning with Git #825
benoit-nexthop
wants to merge
8
commits into
facebook:main
from
nexthop-ai:fboss2-cli-prototype_part15
+4,927
−889
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add some helper code to process interface-list arguments.
1. Some of the configuration commands like QoS buffer pool modification
requires an agent restart and some are hitless. Inorder to take
appropriate action during the commit, track the highest impact action by
storing the same in `$HOME/.fboss2/action_level` at the end of each
configuration change. The proposed change only prints a warning if the
action needs to be taken. Later this can be modified to perform the
action automatically
2. Add QoS buffer pool configuration commands
```
- fboss2 config qos buffer-pool <name> shared-bytes <value>
- fboss2 config qos buffer-pool <name> headroom-bytes <value>
- fboss2 config qos buffer-pool <name> reserved-bytes <value>
```
1. Updated existing UT for action information
2. Added new tests for QoS buffer bool configurations.
```
[admin@fboss101 ~]$ ~/benoit/fboss2-dev config qos buffer-pool testpool headroom-bytes 1024
Successfully set headroom-bytes for buffer-pool 'testpool' to 1024
[admin@fboss101 ~]$ ~/benoit/fboss2-dev config session diff
--- current live config
+++ session config
@@ -121,6 +121,12 @@
"arpAgerInterval": 5,
"arpRefreshSeconds": 20,
"arpTimeoutSeconds": 60,
+ "bufferPoolConfigs": {
+ "testpool": {
+ "headroomBytes": 1024,
+ "sharedBytes": 0
+ }
+ },
"clientIdToAdminDistance": {
"0": 20,
"1": 1,
[admin@fboss101 ~]$ ll ~/.fboss2
total 216
-rw-r--r-- 1 admin admin 213283 Jan 13 05:15 agent.conf
-rw-r--r-- 1 admin admin 42 Jan 13 05:15 conf_metadata.json
[admin@fboss101 ~]$ cat ~/.fboss2/conf_metadata.json
{
"action": {
"WEDGE_AGENT": "AGENT_RESTART"
}
}
```
…mand. This doesn't yet automatically create the VLAN if it doesn't exist.
A recent merge introduced a duplicate command by mistake (bad merge on my part) and this escaped because of lack of test coverage. Also make sure we keep `cmake/CliFboss2Test.cmake` sorted.
Now every config command is saved in the CLI session metadata so we can easily tell what commands were used in a given session. The metadata is now also saved along the config when we commit the session. A future commit will make rollback also rely on this metadata to decide whether or not to restart the agent.
Replace the basic file-based configuration versioning mechanism with Git-based versioning for the CLI config session. Key changes: - Add new Git class (Git.h/cpp) providing a simple interface for Git operations: init, commit, log, show, resolveRef, getHead, hasCommits - Use folly::Subprocess with full path /usr/bin/git for all Git commands - Replace revision files (agent-rN.conf + symlink) with atomic writes to agent.conf tracked in a local Git repository - Use Git commit SHAs as revision identifiers instead of rN format - Update RevisionList validation to accept Git SHAs (7+ hex chars) Repository initialization: - Automatically initialize Git repo if it doesn't exist - Automatically create initial commit if repo has no commits but config file exists - Use --shared=group flag and umask 0002 to ensure .git directory is group-writable when /etc/coop is group-writable Commands updated: - config history: Shows Git commit log with SHA, author, timestamp, message - config session diff: Uses git show to compare commits - config session commit: Creates Git commits with username as author - config rollback: Reads config from Git history and creates new commit Test updates: - Update all CLI config tests to use Git-based setup - Initialize Git repo and create initial commit in test fixtures
2 tasks
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Pre-submission checklist
pip install -r requirements-dev.txt && pre-commit installpre-commit runSummary
Replace the basic file-based configuration versioning mechanism with Git-based versioning for the CLI config session.
Key changes:
Gitclass providing a simple interface for Git operations: init, commit, log, show, etcfolly::Subprocesswith full path/usr/bin/gitfor all Git commandsagent-rN.conf+ symlink) with atomic writes to agent.conf tracked in a local Git repositoryRepository initialization:
--shared=groupflag and umask 0002 to ensure.gitdirectory is group-writable when/etc/coopis group-writableCommands updated:
Note: this change is part of a series, the previous one is #809.
Test Plan
Test updates:
Sample usage
TBD