Skip to content

Commit 8f493cf

Browse files
michel-latermanmergify[bot]
authored andcommitted
Add active filter for enrollment key queries. (#2044)
* Add active filter for enrollment key queries. Add an active: true filter to enrollment key queries. This allows fleet-server to handle cases where there may be 10+ inactive keys associated with a policy. * review feedback * fix linter * fix tests * Fix test cases (cherry picked from commit 3d15e24) # Conflicts: # CHANGELOG.next.asciidoc
1 parent 147f712 commit 8f493cf

File tree

5 files changed

+53
-55
lines changed

5 files changed

+53
-55
lines changed

CHANGELOG.next.asciidoc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
- Update apikey.cache_hit log field name to match convention. {pull}1900[1900]
1717
- Fix fleet.migration.total log key overlap {pull}1951[1951]
1818
- Remove POLICY_CHANGE actions from list retrieved from actions index before sending actions to agent on Checkin. {issue}1773[1773] {pull}1963[1963]
19+
- Add "active: true" filter to enrollemnent key queries. {issue}2029[2029] {pull}2044[2044]
1920

2021
==== New Features
2122

@@ -26,3 +27,8 @@
2627
- Fleet Server now allows setting global labels on APM instrumentation. {pull}1649[1649]
2728
- Fleet Server now allows setting transaction sample rate on APM instrumentation {pull}1681[1681]
2829
- Log redacted config when config updates. {issue}1626[1626] {pull}1668[1668]
30+
<<<<<<< HEAD
31+
=======
32+
- Storing checkin message in last_checkin_message {pull}1932[1932]
33+
- Allow upgrade actions to signal that they will be retried. {pull}1887[1887]
34+
>>>>>>> 3d15e24 (Add active filter for enrollment key queries. (#2044))

internal/pkg/dl/enrollment_api_key.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,29 @@ const (
1919
)
2020

2121
var (
22-
QueryEnrollmentAPIKeyByID = prepareFindEnrollmentAPIKeyByID()
23-
QueryEnrollmentAPIKeyByPolicyID = prepareFindEnrollmentAPIKeyByPolicyID()
22+
QueryEnrollmentAPIKeyByID = prepareFindActiveEnrollmentAPIKeyByID()
23+
QueryEnrollmentAPIKeyByPolicyID = prepareFindActiveEnrollmentAPIKeyByPolicyID()
2424
)
2525

26-
func prepareFindEnrollmentAPIKeyByID() *dsl.Tmpl {
26+
func prepareFindActiveEnrollmentAPIKeyByID() *dsl.Tmpl {
2727
tmpl := dsl.NewTmpl()
2828

2929
root := dsl.NewRoot()
30-
root.Query().Bool().Filter().Term(FieldAPIKeyID, tmpl.Bind(FieldAPIKeyID), nil)
30+
filter := root.Query().Bool().Filter()
31+
filter.Term(FieldAPIKeyID, tmpl.Bind(FieldAPIKeyID), nil)
32+
filter.Term(FieldActive, true, nil)
3133

3234
tmpl.MustResolve(root)
3335
return tmpl
3436
}
3537

36-
func prepareFindEnrollmentAPIKeyByPolicyID() *dsl.Tmpl {
38+
func prepareFindActiveEnrollmentAPIKeyByPolicyID() *dsl.Tmpl {
3739
tmpl := dsl.NewTmpl()
3840

3941
root := dsl.NewRoot()
40-
root.Query().Bool().Filter().Term(FieldPolicyID, tmpl.Bind(FieldPolicyID), nil)
42+
filter := root.Query().Bool().Filter()
43+
filter.Term(FieldPolicyID, tmpl.Bind(FieldPolicyID), nil)
44+
filter.Term(FieldActive, true, nil)
4145

4246
tmpl.MustResolve(root)
4347
return tmpl

internal/pkg/dl/enrollment_api_key_integration_test.go

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,13 @@ import (
2222
ftesting "github.com/elastic/fleet-server/v7/internal/pkg/testing"
2323
)
2424

25-
func createRandomEnrollmentAPIKey(policyID string) model.EnrollmentAPIKey {
25+
func createRandomEnrollmentAPIKey(policyID string, active bool) model.EnrollmentAPIKey {
2626
now := time.Now().UTC()
2727
return model.EnrollmentAPIKey{
2828
ESDocument: model.ESDocument{
2929
Id: xid.New().String(),
3030
},
31-
Active: true,
31+
Active: active,
3232
APIKey: "d2JndlFIWUJJUVVxWDVia2NJTV86X0d6ZmljZGNTc1d4R1otbklrZFFRZw==",
3333
APIKeyID: xid.New().String(),
3434
CreatedAt: now.Format(time.RFC3339),
@@ -38,8 +38,8 @@ func createRandomEnrollmentAPIKey(policyID string) model.EnrollmentAPIKey {
3838

3939
}
4040

41-
func storeRandomEnrollmentAPIKey(ctx context.Context, bulker bulk.Bulk, index string, policyID string) (rec model.EnrollmentAPIKey, err error) {
42-
rec = createRandomEnrollmentAPIKey(policyID)
41+
func storeRandomEnrollmentAPIKey(ctx context.Context, bulker bulk.Bulk, index string, policyID string, active bool) (rec model.EnrollmentAPIKey, err error) {
42+
rec = createRandomEnrollmentAPIKey(policyID, active)
4343

4444
body, err := json.Marshal(rec)
4545
if err != nil {
@@ -58,7 +58,7 @@ func TestSearchEnrollmentAPIKeyByID(t *testing.T) {
5858

5959
index, bulker := ftesting.SetupCleanIndex(ctx, t, FleetEnrollmentAPIKeys)
6060

61-
rec, err := storeRandomEnrollmentAPIKey(ctx, bulker, index, uuid.Must(uuid.NewV4()).String())
61+
rec, err := storeRandomEnrollmentAPIKey(ctx, bulker, index, uuid.Must(uuid.NewV4()).String(), true)
6262
if err != nil {
6363
t.Fatal(err)
6464
}
@@ -91,15 +91,15 @@ func TestSearchEnrollmentAPIKeyByPolicyID(t *testing.T) {
9191
index, bulker := ftesting.SetupCleanIndex(ctx, t, FleetEnrollmentAPIKeys)
9292

9393
policyID := uuid.Must(uuid.NewV4()).String()
94-
rec1, err := storeRandomEnrollmentAPIKey(ctx, bulker, index, policyID)
94+
rec1, err := storeRandomEnrollmentAPIKey(ctx, bulker, index, policyID, true)
9595
if err != nil {
9696
t.Fatal(err)
9797
}
98-
rec2, err := storeRandomEnrollmentAPIKey(ctx, bulker, index, policyID)
98+
rec2, err := storeRandomEnrollmentAPIKey(ctx, bulker, index, policyID, true)
9999
if err != nil {
100100
t.Fatal(err)
101101
}
102-
_, err = storeRandomEnrollmentAPIKey(ctx, bulker, index, uuid.Must(uuid.NewV4()).String())
102+
_, err = storeRandomEnrollmentAPIKey(ctx, bulker, index, uuid.Must(uuid.NewV4()).String(), true)
103103
if err != nil {
104104
t.Fatal(err)
105105
}
@@ -114,3 +114,32 @@ func TestSearchEnrollmentAPIKeyByPolicyID(t *testing.T) {
114114
t.Fatal(diff)
115115
}
116116
}
117+
118+
func TestSearchEnrollmentAPIKeyByPolicyIDWithInactiveIDs(t *testing.T) {
119+
ctx, cn := context.WithCancel(context.Background())
120+
defer cn()
121+
122+
index, bulker := ftesting.SetupCleanIndex(ctx, t, FleetEnrollmentAPIKeys)
123+
124+
policyID := uuid.Must(uuid.NewV4()).String()
125+
rec, err := storeRandomEnrollmentAPIKey(ctx, bulker, index, policyID, true)
126+
if err != nil {
127+
t.Fatalf("unable to store enrollment key: %v", err)
128+
}
129+
for i := 0; i < 10; i++ {
130+
_, err = storeRandomEnrollmentAPIKey(ctx, bulker, index, uuid.Must(uuid.NewV4()).String(), false)
131+
if err != nil {
132+
t.Fatalf("unable to store enrollment key: %v", err)
133+
}
134+
}
135+
136+
foundRecs, err := findEnrollmentAPIKeys(ctx, bulker, index, QueryEnrollmentAPIKeyByPolicyID, FieldPolicyID, policyID)
137+
if err != nil {
138+
t.Fatalf("unable to find enrollment key: %v", err)
139+
}
140+
141+
diff := cmp.Diff([]model.EnrollmentAPIKey{rec}, foundRecs)
142+
if diff != "" {
143+
t.Fatalf("expected content does not match: %v", diff)
144+
}
145+
}

internal/pkg/policy/self.go

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,6 @@ func (m *selfMonitorT) updateStatus(ctx context.Context) (proto.StateObserved_St
228228
if err != nil {
229229
return proto.StateObserved_FAILED, err
230230
}
231-
tokens = filterActiveTokens(tokens)
232231
if len(tokens) == 0 {
233232
// no tokens created for the policy, still starting
234233
if m.policyID == "" {
@@ -271,13 +270,3 @@ func (d *policyData) HasType(val string) bool {
271270
func findEnrollmentAPIKeys(ctx context.Context, bulker bulk.Bulk, policyID string) ([]model.EnrollmentAPIKey, error) {
272271
return dl.FindEnrollmentAPIKeys(ctx, bulker, dl.QueryEnrollmentAPIKeyByPolicyID, dl.FieldPolicyID, policyID)
273272
}
274-
275-
func filterActiveTokens(tokens []model.EnrollmentAPIKey) []model.EnrollmentAPIKey {
276-
active := make([]model.EnrollmentAPIKey, 0, len(tokens))
277-
for _, t := range tokens {
278-
if t.Active {
279-
active = append(active, t)
280-
}
281-
}
282-
return active
283-
}

internal/pkg/policy/self_test.go

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -262,21 +262,6 @@ func TestSelfMonitor_DefaultPolicy_Degraded(t *testing.T) {
262262
t.Fatal(err)
263263
}
264264

265-
// add inactive token that should be filtered out
266-
inactiveToken := model.EnrollmentAPIKey{
267-
ESDocument: model.ESDocument{
268-
Id: xid.New().String(),
269-
},
270-
Active: false,
271-
APIKey: "d2JndlFIWUJJUVVxWDVia2NJTV86X0d6ZmljZGNTc1d4R1otbklrZFFRZw==",
272-
APIKeyID: xid.New().String(),
273-
Name: "Inactive",
274-
PolicyID: policyID,
275-
}
276-
tokenLock.Lock()
277-
tokenResult = append(tokenResult, inactiveToken)
278-
tokenLock.Unlock()
279-
280265
go func() {
281266
chHitT <- []es.HitT{{
282267
ID: rId,
@@ -578,21 +563,6 @@ func TestSelfMonitor_SpecificPolicy_Degraded(t *testing.T) {
578563
t.Fatal(err)
579564
}
580565

581-
// add inactive token that should be filtered out
582-
inactiveToken := model.EnrollmentAPIKey{
583-
ESDocument: model.ESDocument{
584-
Id: xid.New().String(),
585-
},
586-
Active: false,
587-
APIKey: "d2JndlFIWUJJUVVxWDVia2NJTV86X0d6ZmljZGNTc1d4R1otbklrZFFRZw==",
588-
APIKeyID: xid.New().String(),
589-
Name: "Inactive",
590-
PolicyID: policyID,
591-
}
592-
tokenLock.Lock()
593-
tokenResult = append(tokenResult, inactiveToken)
594-
tokenLock.Unlock()
595-
596566
go func() {
597567
chHitT <- []es.HitT{{
598568
ID: rId,

0 commit comments

Comments
 (0)