Skip to content

Commit fdb25fb

Browse files
authored
Merge pull request #72 from netboxlabs/develop
Release 🚚
2 parents 0cfad26 + 481b931 commit fdb25fb

34 files changed

+1305
-1211
lines changed

.github/workflows/develop.yaml

+8-3
Original file line numberDiff line numberDiff line change
@@ -24,25 +24,30 @@ jobs:
2424
uses: actions/checkout@v4
2525

2626
- name: Set up QEMU
27-
uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf #v3.2.0
27+
uses: docker/setup-qemu-action@4574d27a4764455b42196d70a065bc6853246a25 #v3.4.0
2828

2929
- name: Set up Docker Buildx
30-
uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 #v3.8.0
30+
uses: docker/setup-buildx-action@f7ce87c1d6bead3e36075b2ce75da1f6cc28aaca #v3.9.0
3131

3232
- name: Login to Docker Hub
3333
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 #v3.3.0
3434
with:
3535
username: ${{ secrets.DOCKERHUB_USERNAME }}
3636
password: ${{ secrets.DOCKERHUB_TOKEN }}
3737

38+
- name: Verify QEMU installation
39+
run: |
40+
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
41+
docker run --rm --platform linux/arm64 debian:latest uname -m
42+
3843
- name: Set build info
3944
run: |
4045
echo ${GITHUB_SHA::7} > ./agent/version/BUILD_COMMIT.txt
4146
LATEST_RELEASE=$(curl --silent "https://api.github.com/repos/${{ github.repository }}/releases/latest" | jq -r '.tag_name')
4247
echo $LATEST_RELEASE > ./agent/version/BUILD_VERSION.txt
4348
4449
- name: Build image and push
45-
uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 #v6.10.0
50+
uses: docker/build-push-action@0adf9959216b96bec444f325f1e493d4aa344497 #v6.14.0
4651
with:
4752
context: .
4853
file: agent/docker/Dockerfile

.github/workflows/release.yaml

+8-3
Original file line numberDiff line numberDiff line change
@@ -132,24 +132,29 @@ jobs:
132132
uses: actions/checkout@v4
133133

134134
- name: Set up QEMU
135-
uses: docker/setup-qemu-action@49b3bc8e6bdd4a60e6116a5414239cba5943d3cf #v3.2.0
135+
uses: docker/setup-qemu-action@4574d27a4764455b42196d70a065bc6853246a25 #v3.4.0
136136

137137
- name: Set up Docker Buildx
138-
uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 #v3.8.0
138+
uses: docker/setup-buildx-action@f7ce87c1d6bead3e36075b2ce75da1f6cc28aaca #v3.9.0
139139

140140
- name: Login to Docker Hub
141141
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 #v3.3.0
142142
with:
143143
username: ${{ secrets.DOCKERHUB_USERNAME }}
144144
password: ${{ secrets.DOCKERHUB_TOKEN }}
145145

146+
- name: Verify QEMU installation
147+
run: |
148+
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
149+
docker run --rm --platform linux/arm64 debian:latest uname -m
150+
146151
- name: Set build info
147152
run: |
148153
echo $BUILD_COMMIT > ./agent/version/BUILD_COMMIT.txt
149154
echo $BUILD_VERSION > ./agent/version/BUILD_VERSION.txt
150155
151156
- name: Build image and push
152-
uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 #v6.10.0
157+
uses: docker/build-push-action@0adf9959216b96bec444f325f1e493d4aa344497 #v6.14.0
153158
with:
154159
context: .
155160
file: agent/docker/Dockerfile

README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ orb:
2424
...
2525
```
2626

27-
Currently, only the `local` manager is supported, which retrieves policies from the local configuration file passed to the agent.
27+
Currently, only the `local` and `git` sources are supported for config manager.
28+
- [Local](./docs/configs/local.md)
29+
- [Git](./docs/configs/git.md)
2830

2931
### Backends
3032
The `backends` section specifies what Orb agent backends should be enabled. Each Orb agent backend offers specific discovery or observability capabilities and may require specific configuration information.

agent/agent.go

+8-55
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,14 @@ import (
77
"runtime"
88
"time"
99

10-
mqtt "github.com/eclipse/paho.mqtt.golang"
1110
"github.com/google/uuid"
1211
"github.com/mitchellh/mapstructure"
13-
"github.com/orb-community/orb/fleet"
1412
"go.uber.org/zap"
1513

1614
"github.com/netboxlabs/orb-agent/agent/backend"
1715
"github.com/netboxlabs/orb-agent/agent/config"
18-
manager "github.com/netboxlabs/orb-agent/agent/policyMgr"
16+
"github.com/netboxlabs/orb-agent/agent/configmgr"
17+
"github.com/netboxlabs/orb-agent/agent/policymgr"
1918
"github.com/netboxlabs/orb-agent/agent/version"
2019
)
2120

@@ -32,8 +31,6 @@ type Agent interface {
3231
type orbAgent struct {
3332
logger *zap.Logger
3433
config config.Config
35-
client mqtt.Client
36-
agentID string
3734
backends map[string]backend.Backend
3835
backendState map[string]*backend.State
3936
backendsCommon config.BackendCommons
@@ -42,24 +39,18 @@ type orbAgent struct {
4239

4340
asyncContext context.Context
4441

45-
hbTicker *time.Ticker
4642
heartbeatCtx context.Context
4743
heartbeatCancel context.CancelFunc
4844

49-
// Agent RPC channel, configured from command line
50-
baseTopic string
51-
rpcFromCoreTopic string
52-
heartbeatsTopic string
53-
5445
// Retry Mechanism to ensure the Request is received
5546
groupRequestSucceeded context.CancelFunc
5647
policyRequestSucceeded context.CancelFunc
5748

5849
// AgentGroup channels sent from core
5950
groupsInfos map[string]groupInfo
6051

61-
policyManager manager.PolicyManager
62-
configManager config.Manager
52+
policyManager policymgr.PolicyManager
53+
configManager configmgr.Manager
6354
}
6455

6556
type groupInfo struct {
@@ -71,7 +62,7 @@ var _ Agent = (*orbAgent)(nil)
7162

7263
// New creates a new agent
7364
func New(logger *zap.Logger, c config.Config) (Agent, error) {
74-
pm, err := manager.New(logger, c)
65+
pm, err := policymgr.New(logger, c)
7566
if err != nil {
7667
logger.Error("error during create policy manager, exiting", zap.Error(err))
7768
return nil, err
@@ -80,31 +71,11 @@ func New(logger *zap.Logger, c config.Config) (Agent, error) {
8071
logger.Error("policy manager failed to get repository", zap.Error(err))
8172
return nil, err
8273
}
83-
cm := config.New(logger, c.OrbAgent.ConfigManager)
74+
cm := configmgr.New(logger, pm, c.OrbAgent.ConfigManager)
8475

8576
return &orbAgent{logger: logger, config: c, policyManager: pm, configManager: cm, groupsInfos: make(map[string]groupInfo)}, nil
8677
}
8778

88-
func (a *orbAgent) managePolicies() error {
89-
if a.config.OrbAgent.Policies == nil {
90-
return errors.New("no policies specified")
91-
}
92-
93-
for beName, policy := range a.config.OrbAgent.Policies {
94-
_, ok := a.backends[beName]
95-
if !ok {
96-
return errors.New("backend not found: " + beName)
97-
}
98-
for pName, data := range policy {
99-
id := uuid.NewString()
100-
payload := fleet.AgentPolicyRPCPayload{Action: "manage", Name: pName, DatasetID: id, Backend: beName, Version: 1, Data: data}
101-
a.policyManager.ManagePolicy(payload)
102-
}
103-
104-
}
105-
return nil
106-
}
107-
10879
func (a *orbAgent) startBackends(agentCtx context.Context) error {
10980
a.logger.Info("registered backends", zap.Strings("values", backend.GetList()))
11081
a.logger.Info("requested backends", zap.Any("values", a.config.OrbAgent.Backends))
@@ -120,7 +91,7 @@ func (a *orbAgent) startBackends(agentCtx context.Context) error {
12091
return fmt.Errorf("failed to decode common backend config: %w", err)
12192
}
12293
}
123-
commonConfig.Otel.AgentTags = a.config.OrbAgent.Tags
94+
commonConfig.Otel.AgentLabels = a.config.OrbAgent.Labels
12495
a.backendsCommon = commonConfig
12596
delete(a.config.OrbAgent.Backends, "common")
12697

@@ -171,19 +142,12 @@ func (a *orbAgent) Start(ctx context.Context, cancelFunc context.CancelFunc) err
171142
a.rpcFromCancelFunc = cancelAllAsync
172143
a.cancelFunction = cancelFunc
173144
a.logger.Info("agent started", zap.String("version", version.GetBuildVersion()), zap.Any("routine", agentCtx.Value(routineKey)))
174-
mqtt.CRITICAL = &agentLoggerCritical{a: a}
175-
mqtt.ERROR = &agentLoggerError{a: a}
176-
177-
if a.config.OrbAgent.Debug.Enable {
178-
a.logger.Info("debug logging enabled")
179-
mqtt.DEBUG = &agentLoggerDebug{a: a}
180-
}
181145

182146
if err := a.startBackends(ctx); err != nil {
183147
return err
184148
}
185149

186-
if err := a.managePolicies(); err != nil {
150+
if err := a.configManager.Start(a.config, a.backends); err != nil {
187151
return err
188152
}
189153

@@ -193,9 +157,7 @@ func (a *orbAgent) Start(ctx context.Context, cancelFunc context.CancelFunc) err
193157
}
194158

195159
func (a *orbAgent) logonWithHeartbeat() {
196-
a.hbTicker = time.NewTicker(HeartbeatFreq)
197160
a.heartbeatCtx, a.heartbeatCancel = a.extendContext("heartbeat")
198-
go a.sendHeartbeats(a.heartbeatCtx, a.heartbeatCancel)
199161
a.logger.Info("heartbeat routine started")
200162
}
201163

@@ -204,11 +166,6 @@ func (a *orbAgent) logoffWithHeartbeat(ctx context.Context) {
204166
if a.heartbeatCtx != nil {
205167
a.heartbeatCancel()
206168
}
207-
if a.client != nil && a.client.IsConnected() {
208-
if token := a.client.Unsubscribe(a.rpcFromCoreTopic); token.Wait() && token.Error() != nil {
209-
a.logger.Warn("failed to unsubscribe to RPC channel", zap.Error(token.Error()))
210-
}
211-
}
212169
}
213170

214171
func (a *orbAgent) Stop(ctx context.Context) {
@@ -225,9 +182,6 @@ func (a *orbAgent) Stop(ctx context.Context) {
225182
}
226183
}
227184
a.logoffWithHeartbeat(ctx)
228-
if a.client != nil && a.client.IsConnected() {
229-
a.client.Disconnect(0)
230-
}
231185
a.logger.Debug("stopping agent with number of go routines and go calls", zap.Int("goroutines", runtime.NumGoroutine()), zap.Int64("gocalls", runtime.NumCgoCall()))
232186
if a.policyRequestSucceeded != nil {
233187
a.policyRequestSucceeded()
@@ -261,7 +215,6 @@ func (a *orbAgent) RestartBackend(ctx context.Context, name string, reason strin
261215
a.backendState[name].LastError = fmt.Sprintf("failed to reset backend: %v", err)
262216
a.logger.Error("failed to reset backend", zap.String("backend", name), zap.Error(err))
263217
}
264-
be.SetCommsClient(a.agentID, &a.client, fmt.Sprintf("%s/?/%s", a.baseTopic, name))
265218

266219
return nil
267220
}

agent/backend/backend.go

-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"time"
66

7-
mqtt "github.com/eclipse/paho.mqtt.golang"
87
"go.uber.org/zap"
98

109
"github.com/netboxlabs/orb-agent/agent/config"
@@ -49,7 +48,6 @@ func (s RunningStatus) String() string {
4948
// Backend is the interface that all backends must implement
5049
type Backend interface {
5150
Configure(*zap.Logger, policies.PolicyRepo, map[string]interface{}, config.BackendCommons) error
52-
SetCommsClient(string, *mqtt.Client, string)
5351
Version() (string, error)
5452
Start(ctx context.Context, cancelFunc context.CancelFunc) error
5553
Stop(ctx context.Context) error

agent/backend/devicediscovery/device_discovery.go

-7
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"net/http"
99
"time"
1010

11-
mqtt "github.com/eclipse/paho.mqtt.golang"
1211
"github.com/go-cmd/cmd"
1312
"go.uber.org/zap"
1413
"gopkg.in/yaml.v3"
@@ -50,8 +49,6 @@ type deviceDiscoveryBackend struct {
5049
statusChan <-chan cmd.Status
5150
cancelFunc context.CancelFunc
5251
ctx context.Context
53-
54-
mqttClient *mqtt.Client
5552
}
5653

5754
type info struct {
@@ -87,10 +84,6 @@ func (d *deviceDiscoveryBackend) Configure(logger *zap.Logger, repo policies.Pol
8784
return nil
8885
}
8986

90-
func (d *deviceDiscoveryBackend) SetCommsClient(_ string, client *mqtt.Client, _ string) {
91-
d.mqttClient = client
92-
}
93-
9487
func (d *deviceDiscoveryBackend) Version() (string, error) {
9588
var info info
9689
err := d.request("status", &info, http.MethodGet, http.NoBody, "application/json", versionTimeout)

agent/backend/networkdiscovery/network_discovery.go

-7
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"net/http"
99
"time"
1010

11-
mqtt "github.com/eclipse/paho.mqtt.golang"
1211
"github.com/go-cmd/cmd"
1312
"go.uber.org/zap"
1413
"gopkg.in/yaml.v3"
@@ -50,8 +49,6 @@ type networkDiscoveryBackend struct {
5049
statusChan <-chan cmd.Status
5150
cancelFunc context.CancelFunc
5251
ctx context.Context
53-
54-
mqttClient *mqtt.Client
5552
}
5653

5754
type info struct {
@@ -87,10 +84,6 @@ func (d *networkDiscoveryBackend) Configure(logger *zap.Logger, repo policies.Po
8784
return nil
8885
}
8986

90-
func (d *networkDiscoveryBackend) SetCommsClient(_ string, client *mqtt.Client, _ string) {
91-
d.mqttClient = client
92-
}
93-
9487
func (d *networkDiscoveryBackend) Version() (string, error) {
9588
var info info
9689
err := d.request("status", &info, http.MethodGet, http.NoBody, "application/json", versionTimeout)

agent/backend/otel/comms.go

-16
This file was deleted.

0 commit comments

Comments
 (0)