Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 57 additions & 57 deletions .github/workflows/build-and-deploy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -81,60 +81,60 @@ jobs:
namespace: operators
action: deploy

## API cluster ##
- name: Bake api manifests with Kustomize
uses: azure/k8s-bake@v2
with:
renderEngine: 'kustomize'
kustomizationPath: 'kustomize/overlays/api'
id: bake-api

- uses: azure/login@v1
with:
creds: '${{ secrets.AKS_API_FINT_GITHUB }}'

- name: Set the target Api cluster.
uses: azure/aks-set-context@v3
with:
cluster-name: ${{ env.API_CLUSTER_NAME }}
resource-group: ${{ env.API_CLUSTER_RESOURCE_GROUP }}
admin: 'true'
use-kubelogin: 'true'

- name: Deploy to Api
uses: azure/k8s-deploy@v4.9
with:
manifests: ${{ steps.bake-api.outputs.manifestsBundle }}
images: |
${{ steps.meta.outputs.tags }}
namespace: operators
action: deploy

## Beta cluster ##
- name: Bake beta manifests with Kustomize
uses: azure/k8s-bake@v2
with:
renderEngine: 'kustomize'
kustomizationPath: 'kustomize/overlays/beta'
id: bake-beta

- uses: azure/login@v1
with:
creds: '${{ secrets.AKS_BETA_FINT_GITHUB }}'

- name: Set the target Beta cluster.
uses: azure/aks-set-context@v3
with:
cluster-name: ${{ env.BETA_CLUSTER_NAME }}
resource-group: ${{ env.BETA_CLUSTER_RESOURCE_GROUP }}
admin: 'true'
use-kubelogin: 'true'

- name: Deploy to Beta
uses: azure/k8s-deploy@v4.9
with:
manifests: ${{ steps.bake-beta.outputs.manifestsBundle }}
images: |
${{ steps.meta.outputs.tags }}
namespace: operators
action: deploy
# ## API cluster ##
# - name: Bake api manifests with Kustomize
# uses: azure/k8s-bake@v2
# with:
# renderEngine: 'kustomize'
# kustomizationPath: 'kustomize/overlays/api'
# id: bake-api
#
# - uses: azure/login@v1
# with:
# creds: '${{ secrets.AKS_API_FINT_GITHUB }}'
#
# - name: Set the target Api cluster.
# uses: azure/aks-set-context@v3
# with:
# cluster-name: ${{ env.API_CLUSTER_NAME }}
# resource-group: ${{ env.API_CLUSTER_RESOURCE_GROUP }}
# admin: 'true'
# use-kubelogin: 'true'
#
# - name: Deploy to Api
# uses: azure/k8s-deploy@v4.9
# with:
# manifests: ${{ steps.bake-api.outputs.manifestsBundle }}
# images: |
# ${{ steps.meta.outputs.tags }}
# namespace: operators
# action: deploy
#
# ## Beta cluster ##
# - name: Bake beta manifests with Kustomize
# uses: azure/k8s-bake@v2
# with:
# renderEngine: 'kustomize'
# kustomizationPath: 'kustomize/overlays/beta'
# id: bake-beta
#
# - uses: azure/login@v1
# with:
# creds: '${{ secrets.AKS_BETA_FINT_GITHUB }}'
#
# - name: Set the target Beta cluster.
# uses: azure/aks-set-context@v3
# with:
# cluster-name: ${{ env.BETA_CLUSTER_NAME }}
# resource-group: ${{ env.BETA_CLUSTER_RESOURCE_GROUP }}
# admin: 'true'
# use-kubelogin: 'true'
#
# - name: Deploy to Beta
# uses: azure/k8s-deploy@v4.9
# with:
# manifests: ${{ steps.bake-beta.outputs.manifestsBundle }}
# images: |
# ${{ steps.meta.outputs.tags }}
# namespace: operators
# action: deploy
34 changes: 31 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,44 @@ openssl genpkey -algorithm rsa
```



### Client
.yaml example file:
```yaml
apiVersion: fintlabs.no/v1alpha1
kind: FintClient
metadata:
name: frodes-test-client
name: flais-test-client
namespace: fintlabs-no
labels:
app.kubernetes.io/name: test-client
app.kubernetes.io/instance: test-service-backend-client_rogfk_no
app.kubernetes.io/version: latest
app.kubernetes.io/component: backend
app.kubernetes.io/part-of: arkiv
fintlabs.no/team: flais
fintlabs.no/org-id: fintlabs.no

spec:
orgId: fintlabs.no
note: Dette er en test. Nu kjør vi!!
components:
- administrasjon_personal
- utdanning_elev
```

### Adapter
.yaml example file:
```yaml
apiVersion: fintlabs.no/v1alpha1
kind: FintAdapter
metadata:
name: flais-test-adapter
namespace: fintlabs-no
labels:
app.kubernetes.io/name: test-adapter
app.kubernetes.io/instance: test-adapter_rogfk_no
app.kubernetes.io/version: latest
app.kubernetes.io/component: adapter
app.kubernetes.io/component: arkiv-adapter
app.kubernetes.io/part-of: arkiv
fintlabs.no/team: flais
fintlabs.no/org-id: fintlabs.no
Expand All @@ -33,4 +58,7 @@ spec:
components:
- administrasjon_personal
- utdanning_elev
assetIds:
- test.fylke.no
- test.annet_fylke.no
```
5 changes: 4 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,10 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'

implementation 'no.fintlabs:flais-operator-starter:1.0.0'
annotationProcessor 'io.fabric8:crd-generator-apt:6.2.0'
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'
testImplementation 'org.testng:testng:7.1.0'
testImplementation 'junit:junit:4.13.1'
annotationProcessor 'io.fabric8:crd-generator-apt:6.2.0'

implementation 'org.springframework.kafka:spring-kafka'
implementation 'no.fintlabs:fint-kafka:4.0.1'
Expand Down
6 changes: 5 additions & 1 deletion examples/fint-adapter.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: fintlabs.no/v1alpha1
kind: FintAdapter
metadata:
name: sondres-test-adapter
name: test-adapter
namespace: fintlabs-no
labels:
app.kubernetes.io/name: test-adapter
Expand All @@ -18,4 +18,8 @@ spec:
components:
- administrasjon_personal
- utdanning_elev
assetIds:
- fylkesting_viken_no
- fylkesting_rogfk_no
- fylkesting_flais_no

9 changes: 5 additions & 4 deletions examples/fint-adapter2.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: fintlabs.no/v1alpha1
kind: FintAdapter
metadata:
name: test-adapter
name: testadapter
namespace: fintlabs-no
labels:
app.kubernetes.io/name: test-adapter
Expand All @@ -18,9 +18,10 @@ spec:
components:
- administrasjon_personal
- utdanning_elev
assets:
- fylkesting.fintlabs.no
assetIds:
- fylkesting.viken.no
- fylkesting.telemark.no
# - frad.fintlabs.no

# assetIds: "org,asset,asset"
# fintAdapterIDs: "ou=viken_no,ou=assets,ou=viken_no,ou=organisations,o=fint"
# fintAdapterIDs: "ou=viken_no,ou=assets,ou=viken_no,ou=organisations,o=fint"
2 changes: 1 addition & 1 deletion examples/fint-client.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
apiVersion: fintlabs.no/v1alpha1
kind: FintClient
metadata:
name: frodes-test-client
name: flais-test-client
namespace: fintlabs-no
labels:
app.kubernetes.io/name: test-adapter
Expand Down
4 changes: 4 additions & 0 deletions kustomize/base/fintadapters.fintlabs.no-v1.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ spec:
items:
type: string
type: array
assetIds:
items:
type: string
type: array
type: object
status:
properties:
Expand Down
9 changes: 9 additions & 0 deletions kustomize/overlays/alpha/exclude-kafka.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
$patch: delete
apiVersion: "fintlabs.no/v1alpha1"
kind: KafkaUserAndAcl
metadata:
name: finterator
spec:
acls:
- permission: admin
topic: 'flais-io.fint-customer-objects.*'
11 changes: 11 additions & 0 deletions kustomize/overlays/alpha/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,22 @@ apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
patchesStrategicMerge:
- exclude-kafka.yaml
patches:
- patch: |-
- op: replace
path: "/spec/itemPath"
value: "vaults/aks-alpha-vault/items/finterator"
target:
kind: OnePasswordItem
name: finterator
- patch: |-
- op: add
path: "/spec/template/spec/containers/0/env/-"
value:
name: fint.application-id
value: finterator-alpha
target:
kind: Deployment
name: finterator
4 changes: 3 additions & 1 deletion src/main/java/no/fintlabs/CrdUtilities.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
package no.fintlabs;

import io.fabric8.kubernetes.api.model.HasMetadata;
import org.springframework.util.StringUtils;

import java.util.Optional;

public class CrdUtilities {

public static Optional<String> getValueFromAnnotationByKey(HasMetadata crd, String key) {
return Optional.ofNullable(crd.getMetadata().getAnnotations().get(key));
return Optional.ofNullable(crd.getMetadata().getAnnotations().get(key))
.filter(StringUtils::hasText);
}
}
70 changes: 70 additions & 0 deletions src/main/java/no/fintlabs/LdapNameGeneratorUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
package no.fintlabs;

import org.apache.commons.lang3.RandomStringUtils;

public class LdapNameGeneratorUtil {

public static final int RANDOM_CHARS = 5;
public static final int MAX_LDAP_CHARS = 64;

public static String generate(String crdName, String orgId, String type) {

// drosjeloyve-beta-trondelagfylke-no-wayzk@client.trondelagfylke.no
// drosjeloyve-beta-trondelagfylke-wayzk@client.trondelagfylke.no
// drosjeloyve-wayzk@client.trondelagfylke.no

String randomString = RandomStringUtils.randomAlphabetic(RANDOM_CHARS).toLowerCase();

// Remove if too long and contains -no-
if (getFullNameLength(crdName, randomString, orgId, type) > MAX_LDAP_CHARS && crdName.contains("-no-")) {
crdName = crdName.replace("-no-", "-");
}

// remove if too long and ends with -no
if (getFullNameLength(crdName, randomString, orgId, type) > MAX_LDAP_CHARS && crdName.endsWith("-no")) {
crdName = crdName.substring(0, crdName.length() - 3);
}

// remove if too long and contains fylke
if (getFullNameLength(crdName, randomString, orgId, type) > MAX_LDAP_CHARS && crdName.contains("fylke")) {
crdName = crdName.replace("fylke", "");
}

while (getFullNameLength(crdName, randomString, orgId, type) > MAX_LDAP_CHARS) {
crdName = removeCharacterFromLongestPart(crdName);
}

return String.format("%s-%s", crdName, randomString);
}

private static String removeCharacterFromLongestPart(String crdName) {
String[] parts = crdName.split("-");
int longestPartIndex = -1;
int longestPartLength = 0;

// Finn indeksen til den lengste delen, sortert fra høyre
for (int i = 0; i < parts.length; i++) {
if (parts[i].length() >= longestPartLength) {
longestPartLength = parts[i].length();
longestPartIndex = i;
}
}

// Fjern siste tegn fra den lengste delen
if (longestPartIndex != -1 && parts[longestPartIndex].length() > 0) {
parts[longestPartIndex] = parts[longestPartIndex].substring(0, parts[longestPartIndex].length() - 1);
}

// Sett sammen strengen igjen
return String.join("-", parts);
}

public static int getFullNameLength(String crdName, String randomString, String orgId, String type) {
return generateFullName(crdName, randomString, orgId, type).length();
}

public static String generateFullName(String crdName, String randomString, String orgId, String type) {
return String.format("%s-%s@%s.%s", crdName, randomString, type, orgId);
}

}
20 changes: 20 additions & 0 deletions src/main/java/no/fintlabs/adapter/Adapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,26 @@ public final class Adapter implements Serializable {
@Builder.Default
private List<String> accessPackages = new ArrayList<>();

public void addAssets(String assetDn) {
if (assets.stream().noneMatch(assetDn::equalsIgnoreCase)) {
assets.add(assetDn);
}
}

public void removeAssets(String assetDn) {
assets.removeIf(assetId -> assetId.equalsIgnoreCase(assetDn));
}

public void addAssetId(String assetIdDn) {
if (assetIds.stream().noneMatch(assetIdDn::equalsIgnoreCase)) {
assetIds.add(assetIdDn);
}
}

public void removeAssetId(String assetIdDn) {
assetIds.removeIf(assetId -> assetId.equalsIgnoreCase(assetIdDn));
}

public void addComponent(String componentDn) {
if (components.stream().noneMatch(componentDn::equalsIgnoreCase)) {
components.add(componentDn);
Expand Down
Loading