5
5
import com .devshawn .kafka .gitops .config .KafkaGitopsConfigLoader ;
6
6
import com .devshawn .kafka .gitops .config .ManagerConfig ;
7
7
import com .devshawn .kafka .gitops .domain .confluent .ServiceAccount ;
8
+ import com .devshawn .kafka .gitops .domain .options .GetAclOptions ;
8
9
import com .devshawn .kafka .gitops .domain .plan .DesiredPlan ;
9
10
import com .devshawn .kafka .gitops .domain .state .AclDetails ;
10
11
import com .devshawn .kafka .gitops .domain .state .CustomAclDetails ;
@@ -53,6 +54,8 @@ public class StateManager {
53
54
private PlanManager planManager ;
54
55
private ApplyManager applyManager ;
55
56
57
+ private boolean describeAclEnabled = false ;
58
+
56
59
public StateManager (ManagerConfig managerConfig , ParserService parserService ) {
57
60
initializeLogger (managerConfig .isVerboseRequested ());
58
61
this .managerConfig = managerConfig ;
@@ -69,6 +72,7 @@ public DesiredStateFile getAndValidateStateFile() {
69
72
DesiredStateFile desiredStateFile = parserService .parseStateFile ();
70
73
validateTopics (desiredStateFile );
71
74
validateCustomAcls (desiredStateFile );
75
+ this .describeAclEnabled = StateUtil .isDescribeTopicAclEnabled (desiredStateFile );
72
76
return desiredStateFile ;
73
77
}
74
78
@@ -107,12 +111,11 @@ public void createServiceAccounts() {
107
111
AtomicInteger count = new AtomicInteger ();
108
112
if (isConfluentCloudEnabled (desiredStateFile )) {
109
113
desiredStateFile .getServices ().forEach ((name , service ) -> {
110
- createServiceAccount (name , serviceAccounts , count );
114
+ createServiceAccount (name , serviceAccounts , count , false );
111
115
});
112
116
113
117
desiredStateFile .getUsers ().forEach ((name , user ) -> {
114
- String serviceAccountName = String .format ("user-%s" , name );
115
- createServiceAccount (serviceAccountName , serviceAccounts , count );
118
+ createServiceAccount (name , serviceAccounts , count , true );
116
119
});
117
120
} else {
118
121
throw new ConfluentCloudException ("Confluent Cloud must be enabled in the state file to use this command." );
@@ -123,9 +126,9 @@ public void createServiceAccounts() {
123
126
}
124
127
}
125
128
126
- private void createServiceAccount (String name , List <ServiceAccount > serviceAccounts , AtomicInteger count ) {
129
+ private void createServiceAccount (String name , List <ServiceAccount > serviceAccounts , AtomicInteger count , boolean isUser ) {
127
130
if (serviceAccounts .stream ().noneMatch (it -> it .getName ().equals (name ))) {
128
- confluentCloudService .createServiceAccount (name );
131
+ confluentCloudService .createServiceAccount (name , isUser );
129
132
LogUtil .printSimpleSuccess (String .format ("Successfully created service account: %s" , name ));
130
133
count .getAndIncrement ();
131
134
}
@@ -169,7 +172,7 @@ private void generateConfluentCloudServiceAcls(DesiredState.Builder desiredState
169
172
Optional <ServiceAccount > serviceAccount = serviceAccounts .stream ().filter (it -> it .getName ().equals (name )).findFirst ();
170
173
String serviceAccountId = serviceAccount .orElseThrow (() -> new ServiceAccountNotFoundException (name )).getId ();
171
174
172
- service .getAcls (name ).forEach (aclDetails -> {
175
+ service .getAcls (buildGetAclOptions ( name ) ).forEach (aclDetails -> {
173
176
aclDetails .setPrincipal (String .format ("User:%s" , serviceAccountId ));
174
177
desiredState .putAcls (String .format ("%s-%s" , name , index .getAndSet (index .get () + 1 )), aclDetails .build ());
175
178
});
@@ -213,7 +216,7 @@ private void generateConfluentCloudUserAcls(DesiredState.Builder desiredState, D
213
216
private void generateServiceAcls (DesiredState .Builder desiredState , DesiredStateFile desiredStateFile ) {
214
217
desiredStateFile .getServices ().forEach ((name , service ) -> {
215
218
AtomicReference <Integer > index = new AtomicReference <>(0 );
216
- service .getAcls (name ).forEach (aclDetails -> {
219
+ service .getAcls (buildGetAclOptions ( name ) ).forEach (aclDetails -> {
217
220
desiredState .putAcls (String .format ("%s-%s" , name , index .getAndSet (index .get () + 1 )), buildAclDetails (name , aclDetails ));
218
221
});
219
222
@@ -274,6 +277,10 @@ private List<String> getPrefixedTopicsToIgnore(DesiredStateFile desiredStateFile
274
277
return topics ;
275
278
}
276
279
280
+ private GetAclOptions buildGetAclOptions (String serviceName ) {
281
+ return new GetAclOptions .Builder ().setServiceName (serviceName ).setDescribeAclEnabled (describeAclEnabled ).build ();
282
+ }
283
+
277
284
private void validateCustomAcls (DesiredStateFile desiredStateFile ) {
278
285
desiredStateFile .getCustomServiceAcls ().forEach ((service , details ) -> {
279
286
try {
@@ -307,7 +314,6 @@ private void validateTopics(DesiredStateFile desiredStateFile) {
307
314
throw new ValidationException ("The default replication factor must be a positive integer." );
308
315
}
309
316
}
310
-
311
317
}
312
318
313
319
private boolean isConfluentCloudEnabled (DesiredStateFile desiredStateFile ) {
0 commit comments