Skip to content

Commit a6be413

Browse files
benoit-nexthopmeta-codesync[bot]
authored andcommitted
Add a very basic prototype of a config session. (#756)
Summary: **Pre-submission checklist** - [x] I've ran the linters locally and fixed lint errors related to the files I modified in this PR. You can install the linters by running `pip install -r requirements-dev.txt && pre-commit install` - [x] `pre-commit run` This can handle only one session per user, the current live config is copied into `~/.fboss2/agent.conf` and when committing an atomic symlink update is performed on /etc/coop/agent.conf, which is the only config file supported by this basic prototype. Note: this change is part of a series, the previous one is #755, the next one is #757. Pull Request resolved: #756 Test Plan: Unit tests. Reviewed By: KevinYakar Differential Revision: D90088260 Pulled By: joseph5wu fbshipit-source-id: 14aacaae143bb6c70455e592512d6afb31a95fbe
1 parent b80f0e7 commit a6be413

File tree

12 files changed

+1263
-1
lines changed

12 files changed

+1263
-1
lines changed

cmake/CliFboss2.cmake

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,10 @@ add_library(fboss2_config_lib
575575
fboss/cli/fboss2/commands/config/CmdConfigAppliedInfo.cpp
576576
fboss/cli/fboss2/commands/config/CmdConfigReload.h
577577
fboss/cli/fboss2/commands/config/CmdConfigReload.cpp
578+
fboss/cli/fboss2/commands/config/session/CmdConfigSessionCommit.h
579+
fboss/cli/fboss2/commands/config/session/CmdConfigSessionCommit.cpp
580+
fboss/cli/fboss2/session/ConfigSession.h
581+
fboss/cli/fboss2/session/ConfigSession.cpp
578582
fboss/cli/fboss2/CmdListConfig.cpp
579583
fboss/cli/fboss2/CmdHandlerImplConfig.cpp
580584
)

cmake/CliFboss2Test.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ add_executable(fboss2_cmd_test
55
fboss/cli/fboss2/test/TestMain.cpp
66
fboss/cli/fboss2/test/CmdConfigAppliedInfoTest.cpp
77
fboss/cli/fboss2/test/CmdConfigReloadTest.cpp
8+
fboss/cli/fboss2/test/CmdConfigSessionTest.cpp
89
fboss/cli/fboss2/test/CmdSetPortStateTest.cpp
910
fboss/cli/fboss2/test/CmdShowAclTest.cpp
1011
fboss/cli/fboss2/test/CmdShowAgentSslTest.cpp

fboss/cli/fboss2/BUCK

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -771,16 +771,34 @@ cpp_library(
771771
"CmdListConfig.cpp",
772772
"commands/config/CmdConfigAppliedInfo.cpp",
773773
"commands/config/CmdConfigReload.cpp",
774+
"commands/config/session/CmdConfigSessionCommit.cpp",
775+
"session/ConfigSession.cpp",
774776
],
775777
headers = [
776778
"commands/config/CmdConfigAppliedInfo.h",
777779
"commands/config/CmdConfigReload.h",
780+
"commands/config/session/CmdConfigSessionCommit.h",
781+
"session/ConfigSession.h",
778782
],
779783
exported_deps = [
784+
"fbsource//third-party/fmt:fmt",
785+
"fbsource//third-party/re2:re2",
786+
":cmd-common-utils",
780787
":cmd-handler",
781788
":fboss2-lib",
789+
"//fboss/agent:agent_config-cpp2-types",
790+
"//fboss/agent:agent_dir_util",
782791
"//fboss/agent/if:ctrl-cpp2-types",
783792
"//folly:conv",
793+
"//folly:file_util",
794+
"//folly:likely",
795+
"//folly:string",
796+
"//folly/json:dynamic",
797+
"//thrift/lib/cpp2/protocol:protocol",
798+
],
799+
exported_external_deps = [
800+
"glog",
801+
("boost", None, "boost_filesystem"),
784802
],
785803
)
786804

fboss/cli/fboss2/CmdHandlerImplConfig.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,14 @@
1212

1313
#include "fboss/cli/fboss2/commands/config/CmdConfigAppliedInfo.h"
1414
#include "fboss/cli/fboss2/commands/config/CmdConfigReload.h"
15+
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionCommit.h"
1516

1617
namespace facebook::fboss {
1718

1819
template void
1920
CmdHandler<CmdConfigAppliedInfo, CmdConfigAppliedInfoTraits>::run();
2021
template void CmdHandler<CmdConfigReload, CmdConfigReloadTraits>::run();
22+
template void
23+
CmdHandler<CmdConfigSessionCommit, CmdConfigSessionCommitTraits>::run();
2124

2225
} // namespace facebook::fboss

fboss/cli/fboss2/CmdListConfig.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "fboss/cli/fboss2/CmdHandler.h"
1414
#include "fboss/cli/fboss2/commands/config/CmdConfigAppliedInfo.h"
1515
#include "fboss/cli/fboss2/commands/config/CmdConfigReload.h"
16+
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionCommit.h"
1617

1718
namespace facebook::fboss {
1819

@@ -24,6 +25,18 @@ const CommandTree& kConfigCommandTree() {
2425
commandHandler<CmdConfigAppliedInfo>,
2526
argTypeHandler<CmdConfigAppliedInfoTraits>},
2627

28+
{
29+
"config",
30+
"session",
31+
"Manage config session",
32+
{{
33+
"commit",
34+
"Commit the current config session",
35+
commandHandler<CmdConfigSessionCommit>,
36+
argTypeHandler<CmdConfigSessionCommitTraits>,
37+
}},
38+
},
39+
2740
{"config",
2841
"reload",
2942
"Reload agent configuration",
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Copyright (c) 2004-present, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*
9+
*/
10+
11+
#include "fboss/cli/fboss2/commands/config/session/CmdConfigSessionCommit.h"
12+
#include "fboss/cli/fboss2/session/ConfigSession.h"
13+
14+
namespace facebook::fboss {
15+
16+
CmdConfigSessionCommitTraits::RetType CmdConfigSessionCommit::queryClient(
17+
const HostInfo& hostInfo) {
18+
auto& session = ConfigSession::getInstance();
19+
20+
if (!session.sessionExists()) {
21+
return "No config session exists. Make a config change first.";
22+
}
23+
24+
int revision = session.commit(hostInfo);
25+
return "Config session committed successfully as r" +
26+
std::to_string(revision) + " and config reloaded.";
27+
}
28+
29+
void CmdConfigSessionCommit::printOutput(const RetType& logMsg) {
30+
std::cout << logMsg << std::endl;
31+
}
32+
33+
} // namespace facebook::fboss
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright (c) 2004-present, Facebook, Inc.
3+
* All rights reserved.
4+
*
5+
* This source code is licensed under the BSD-style license found in the
6+
* LICENSE file in the root directory of this source tree. An additional grant
7+
* of patent rights can be found in the PATENTS file in the same directory.
8+
*
9+
*/
10+
11+
#pragma once
12+
13+
#include "fboss/cli/fboss2/CmdHandler.h"
14+
#include "fboss/cli/fboss2/utils/CmdClientUtils.h"
15+
#include "fboss/cli/fboss2/utils/CmdUtils.h"
16+
17+
namespace facebook::fboss {
18+
19+
struct CmdConfigSessionCommitTraits : public WriteCommandTraits {
20+
static constexpr utils::ObjectArgTypeId ObjectArgTypeId =
21+
utils::ObjectArgTypeId::OBJECT_ARG_TYPE_ID_NONE;
22+
using ObjectArgType = std::monostate;
23+
using RetType = std::string;
24+
};
25+
26+
class CmdConfigSessionCommit
27+
: public CmdHandler<CmdConfigSessionCommit, CmdConfigSessionCommitTraits> {
28+
public:
29+
using ObjectArgType = CmdConfigSessionCommitTraits::ObjectArgType;
30+
using RetType = CmdConfigSessionCommitTraits::RetType;
31+
32+
RetType queryClient(const HostInfo& hostInfo);
33+
34+
void printOutput(const RetType& logMsg);
35+
};
36+
37+
} // namespace facebook::fboss

0 commit comments

Comments
 (0)