AppAndObjects Konseptet
Motivasjonâ
NÄr du skal skrive mer komplekse manifester for applikasjoner med ekstra ressursser (som ConfigMap, ExternalSecret eller AzureAdApplication), mÄ du som regel legge til variabler, secrets, access policies eller annen konfigurasjon pÄ applikasjonsobjektet ditt. Dette kan vÊre vanskelig Ä koordinere, da ofte navn mÄ stemme pÄ tvers av flere ressursser, og du mÄ huske pÄ sette krevd koknfigurasjon. AppAndObjects lÞser dette ved at du kan legge til ekstra ressursser til din applikasjon og riktig konfigurasjon blir lagt til applikasjonsobjektet ditt automatisk.
Introduksjonâ
- AppAndObjects er et abstraksjonslag i ArgoKit over applikasjonsobjektet som lar deg legge til ekstra ressurser samtidig som du manipulerer applikasjonen.
- Samler applikasjon og relaterte ressurser i ett wrapper-objekt som renderes til en Kubernetes List.
- Denne siden forklarer hva AppAndObjects er, hvorfor det finnes, hvordan det fungerer pÄ et overordnet nivÄ, og nÄr du bÞr bruke det.
Innholdâ
I stedet for Ä jobbe direkte pÄ ett objekt, jobber vi nÄ pÄ et slags wrapper-objekt med to felter: application og objects. Derav navnet AppAndObjects.
// uten AppAndObjects
{
apiVersion: 'skiperator.kartverket.no/v1alpha1',
kind: 'Application',
metadata: {
name: 'test-app',
},
}
// med AppAndObjects
{
application: {
apiVersion: 'skiperator.kartverket.no/v1alpha1',
kind: 'Application',
metadata: {
name: 'test-app',
},
},
objects: [] // ekstra Kubernetes-ressurser legges her
}
NB! application-feltet kan ogsÄ inneholde et SKIPJob objekt.
Hovedtemaerâ
NĂ„r bĂžr du bruke AppAndObjectsâ
- NÄr du vil knytte applikasjonen din til én eller flere relaterte ressurser (for eksempel Azure AD, ConfigMap, ExternalSecret) uten Ä koordinere navn, secrets og policies manuelt.
- NÄr du Þnsker en konsistent mÄte Ä legge til og fjerne integrasjoner pÄ, slik at relevant konfigurasjon fÞlger med automatisk.
NĂ„r trenger du ikke Ă„ bruke AppAndObjectsâ
- NÄr du skal ha en enkel applikasjon uten tilleggsressurser (men AppAndObjects kan godt brukes her ogsÄ)
Konseptuell modellâ
Wrapper-objektet
- AppAndObjects representerer applikasjonen som et wrapper-objekt med to felter:
applicationogobjects. applicationer selve applikasjonsobjektet (Skiperator Application eller SKIPJob).objectser en liste med tilleggsressurser som hĂžrer til applikasjonen (for eksempel AzureAdApplication, ConfigMap, ExternalSecret).
Utvidelser med .with*
.with*-funksjoner utvider modellen ved Ă„ oppdatereapplicationog samtidig legge til matchende ressurser iobjectsder dette er relevant.- Referanser som f.eks. secrets og policies koordineres i samme operasjon for Ă„ redusere feil og duplisering.
Transformasjon ved rendering
- Ved rendering transformeres wrapper-objektet til en Kubernetes
Listmedapplicationog alle elementer iobjectssom separateitems - Dette gjĂžr at du kan âapplyeâ hele applikasjonen med tilhĂžrende ressurser i Ă©n operasjon.
AppAndObjects funksjoner bruker .with prefiks som betyr at du har en
applikasjon med noe ekstra. For eksempel .withAzureAdApplication.
Se eksempelet under for hvordan dette ser ut i praksis:
Eksempel med Azure AD Applicationâ
Si at du Þnsker Ä legge til Azure AD i applikasjonen din, da er det et par ting du mÄ gjÞre:
- Lage AzureAdApplication-ressursen
- Sette access policies i applikasjonen som skal bruke AD
- Sette secret
Uten AppAndObjects mÄ du koordinere navn/namespace/secret manuelt. Med AppAndObjects hÄndteres dette av
.withAzureAdApplication.
Uten App And Objectsâ
Her definerer vi fĂžrst en ny Skiperator Application med tilhĂžrende access policies for Microsoft, i tillegg til Ă„ legge inn env fra secret som matcher Azure AD Application. Deretter definerer vi en ny AzureAdApplication-ressurs med matchende name og secretPrefix som i steget over.
local argokit = import '../jsonnet/argokit.libsonnet';
local application = argokit.application;
[
application.new('foo-backend')
+ application.withOutboundHttp('login.microsoftonline.com')
+ application.withSecret('foosecrets-foo-ad'),
argokit.azureAdApplication.new(
name='foo-ad',
namespace='foo-team-main',
secretPrefix='foosecrets',
),
]
Med App And Objectsâ
NÄr vi har AppAndObjects-abstraksjonslaget kan vi fÞrst definere en applikasjon, deretter kalle
.withAzureAdApplication pÄ dette objektet.
Det vil gjĂžre to ting: opprette et AzureAdApplication-objekt, helt likt som i eksempelet over, og legge det til i objects-lista.
Deretter vil access policies og env fra secret bli satt med riktig navn.
Fordelen er at all konfigurasjon som trengs for Ă„ legge til Azure AD i applikasjonen din, er bakt inn i .withAzureAdApplication(),
sÄ du slipper Ä tenke pÄ det. Det vil ogsÄ fÞre til at dersom du bytter ut/fjerner Azure AD, kan du fjerne ett funksjonskall, sÄ vil annen sammenhengende konfigurasjon ogsÄ bli fjernet.
local argokit = import '../jsonnet/argokit.libsonnet';
local application = argokit.appAndObjects.application; // bruk appAndObjects
application.new('foo-backend')
+ application.withAzureAdApplication(
name='foo-ad',
namespace='foo-team-main',
secretPrefix='foosecrets',
)