X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=service-exposure%2Frapps-helm-installer.go;h=4a5d4649e8aa9a2b53ee455c7d0c5b0792413655;hb=df61b02070956cac9ec7429281dc78ba853b46ed;hp=dc92fc79af7577a8edd6db6ab1df3f39a4d61307;hpb=073269a87bdbe3ef450d933d0e7e6a5f730c8b67;p=nonrtric.git diff --git a/service-exposure/rapps-helm-installer.go b/service-exposure/rapps-helm-installer.go index dc92fc79..4a5d4649 100644 --- a/service-exposure/rapps-helm-installer.go +++ b/service-exposure/rapps-helm-installer.go @@ -2,7 +2,7 @@ // ========================LICENSE_START================================= // O-RAN-SC // %% -// Copyright (C) 2022: Nordix Foundation +// Copyright (C) 2022-2023: Nordix Foundation // %% // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,7 +17,6 @@ // limitations under the License. // ========================LICENSE_END=================================== // - package main import ( @@ -70,6 +69,7 @@ type Rapp struct { SecurityEnabled bool Realm string Client string + Authenticator string Roles []struct { Role string Grants []string @@ -113,30 +113,10 @@ func runInstall(res http.ResponseWriter, req *http.Request) { if err != nil { msg = err.Error() } else { - if rapp.SecurityEnabled && rapp.Type == "provider" { - // keycloak client setup - fmt.Println("Setting up keycloak") - _, err = http.Get("http://rapps-keycloak-mgr.default/create?realm=" + rapp.Realm + "&name=" + rapp.Client + "&role=" + rapp.Roles[0].Role) - if err != nil { - msg = err.Error() - } else { - fmt.Println("Setting up istio") - _, err := http.Get("http://rapps-istio-mgr.default/create?name=" + chartName + "&realm=" + rapp.Realm + "&role=" + rapp.Roles[0].Role + "&method=" + rapp.Roles[0].Grants[0]) - if err != nil { - msg = err.Error() - } else { - // Install chart - fmt.Printf("Installing chart %s to %s namespace\n", chartName, namespace) - chart, err = installHelmChart(install) - if err != nil { - msg = "Error occurred during installation " + err.Error() - } else { - msg = "Successfully installed release: " + chart - } - } - } + err := installSecurity(rapp) + if err != nil { + msg = err.Error() } else { - // Install chart fmt.Printf("Installing chart %s to %s namespace\n", chartName, namespace) chart, err = installHelmChart(install) if err != nil { @@ -144,8 +124,8 @@ func runInstall(res http.ResponseWriter, req *http.Request) { } else { msg = "Successfully installed release: " + chart } - } + } } } registrerRapp(chartName, rapp.Type) @@ -159,6 +139,54 @@ func runInstall(res http.ResponseWriter, req *http.Request) { res.Write(data) } +func installSecurity(rapp Rapp) error { + var url string + var params string + role := rapp.Roles[0].Role + grants := rapp.Roles[0].Grants[0] + realm := rapp.Realm + client := rapp.Client + authenticator := rapp.Authenticator + + if !rapp.SecurityEnabled { + return nil + } + // Different security requirements depending on the rapp type + if rapp.Type == "provider" { + // keycloak client setup + fmt.Println("Setting up keycloak") + url = "http://rapps-keycloak-mgr.default/create?" + params = "realm=" + realm + "&name=" + client + "&role=" + role + "&authType=" + authenticator + url += params + _, err := http.Get(url) + if err != nil { + return err + } else { + fmt.Println("Setting up istio") + url = "http://rapps-istio-mgr.default/create-policy?" + params = "name=" + chartName + "&realm=" + realm + "&role=" + role + "&method=" + grants + url += params + + _, err := http.Get(url) + if err != nil { + return err + } + } + } else { + fmt.Println("Setting up istio") + url = "http://rapps-istio-mgr.default/create-filter?" + params = "name=" + chartName + "&realm=" + realm + "&client=" + client + "&authType=" + authenticator + url += params + _, err := http.Get(url) + if err != nil { + return err + } + } + + return nil + +} + func runUninstall(res http.ResponseWriter, req *http.Request) { query := req.URL.Query() chartName = query.Get("chart") @@ -178,19 +206,9 @@ func runUninstall(res http.ResponseWriter, req *http.Request) { } else { msg = "Successfully uninstalled release: " + chart } - if rapp.SecurityEnabled && rapp.Type == "provider" { - // Remove istio objects for rapp - fmt.Println("Removing istio services") - _, err := http.Get("http://rapps-istio-mgr.default/remove?name=" + chartName) - if err != nil { - msg = err.Error() - } - // remove keycloak client - fmt.Println("Removing keycloak client") - _, err = http.Get("http://rapps-keycloak-mgr.default/remove?realm=" + rapp.Realm + "&name=" + rapp.Client + "&role=" + rapp.Roles[0].Role) - if err != nil { - msg = err.Error() - } + err := uninstallSecurity(rapp, chartName) + if err != nil { + msg = err.Error() } } unregistrerRapp(chartName, rapp.Type) @@ -204,6 +222,44 @@ func runUninstall(res http.ResponseWriter, req *http.Request) { res.Write(data) } +func uninstallSecurity(rapp Rapp, chartName string) error { + var url string + var params string + realm := rapp.Realm + client := rapp.Client + authenticator := rapp.Authenticator + + if !rapp.SecurityEnabled { + return nil + } + if rapp.Type == "provider" { + // Remove istio objects for rapp + fmt.Println("Removing istio services") + _, err := http.Get("http://rapps-istio-mgr.default/remove-policy?name=" + chartName) + if err != nil { + return err + } + // remove keycloak client + fmt.Println("Removing keycloak client") + url = "http://rapps-keycloak-mgr.default/remove?" + params = "name=" + client + "&realm=" + realm + "&authType=" + authenticator + url += params + _, err = http.Get(url) + if err != nil { + return err + } + } + if rapp.Type == "invoker" { + // Remove istio objects for rapp + fmt.Println("Removing istio services") + _, err := http.Get("http://rapps-istio-mgr.default/remove-filter?name=" + chartName) + if err != nil { + return err + } + } + return nil +} + func runList(res http.ResponseWriter, req *http.Request) { chartInfo := list() // create response binary data @@ -233,6 +289,7 @@ func main() { func addToRepo(url string) (string, error) { repoFile := settings.RepositoryConfig + fmt.Printf("Repo File %s\n", repoFile) //Ensure the file directory exists as it is required for file locking err := os.MkdirAll(filepath.Dir(repoFile), os.ModePerm) @@ -284,7 +341,10 @@ func dryRun() (*action.Install, error) { install := action.NewInstall(actionConfig) + fmt.Printf("Repo Name: %s\n",repoName) + fmt.Printf("Chart Name: %s\n",chartName) cp, err := install.ChartPathOptions.LocateChart(fmt.Sprintf("%s/%s", repoName, chartName), settings) + fmt.Printf("Chart location: %s\n",cp) chartRequested, err = loader.Load(cp)