Skip to content

Commit 77c1e8c

Browse files
committed
ScmManager Setup
1 parent b3873a5 commit 77c1e8c

File tree

9 files changed

+119
-18
lines changed

9 files changed

+119
-18
lines changed

src/main/groovy/com/cloudogu/gitops/config/Config.groovy

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -705,7 +705,6 @@ class Config {
705705
INIT, RESET, UPGRADE
706706
}
707707

708-
709708
private static final ObjectMapper objectMapper = new ObjectMapper()
710709
.registerModule(new SimpleModule().addSerializer(GString, new JsonSerializer<GString>() {
711710
@Override

src/main/groovy/com/cloudogu/gitops/git/providers/scmmanager/ScmManager.groovy

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ import com.cloudogu.gitops.git.providers.RepoUrlScope
1010
import com.cloudogu.gitops.git.providers.Scope
1111
import com.cloudogu.gitops.git.providers.scmmanager.api.Repository
1212
import com.cloudogu.gitops.git.providers.scmmanager.api.ScmManagerApiClient
13-
import com.cloudogu.gitops.utils.*
13+
import com.cloudogu.gitops.utils.K8sClient
14+
import com.cloudogu.gitops.utils.NetworkingUtils
1415
import groovy.util.logging.Slf4j
1516
import retrofit2.Response
1617

@@ -33,12 +34,22 @@ class ScmManager implements GitProvider {
3334
this.helmStrategy = helmStrategy
3435
this.k8sClient = k8sClient
3536
this.networkingUtils = networkingUtils
36-
this.scmManagerSetup = new ScmManagerSetup(this)
37-
this.scmManagerSetup.setupHelm()
38-
this.urls = new ScmManagerUrlResolver(this.config, this.scmmConfig, this.k8sClient, this.networkingUtils)
39-
this.apiClient = new ScmManagerApiClient(this.urls.clientApiBase().toString(), this.scmmConfig.credentials, this.config.application.insecure)
40-
this.scmManagerSetup.waitForScmmAvailable()
41-
this.scmManagerSetup.setup()
37+
init()
38+
}
39+
40+
void init() {
41+
//Setup for ScmManager
42+
if (this.scmmConfig.internal) {
43+
this.scmManagerSetup = new ScmManagerSetup(this)
44+
this.scmManagerSetup.setupHelm()
45+
this.urls = new ScmManagerUrlResolver(this.config, this.scmmConfig, this.k8sClient, this.networkingUtils)
46+
this.apiClient = new ScmManagerApiClient(this.urls.clientApiBase().toString(), this.scmmConfig.credentials, this.config.application.insecure)
47+
this.scmManagerSetup.waitForScmmAvailable()
48+
this.scmManagerSetup.configure()
49+
} else {
50+
this.urls = new ScmManagerUrlResolver(this.config, this.scmmConfig, this.k8sClient, this.networkingUtils)
51+
this.apiClient = new ScmManagerApiClient(this.urls.clientApiBase().toString(), this.scmmConfig.credentials, this.config.application.insecure)
52+
}
4253
}
4354

4455
// --- Git operations ---

src/main/groovy/com/cloudogu/gitops/git/providers/scmmanager/ScmManagerSetup.groovy

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,12 @@ class ScmManagerSetup {
4242
throw new RuntimeException("Timeout: SCM-Manager did not respond with 200 OK within ${timeoutSeconds} seconds")
4343
}
4444

45-
void setup() {
45+
void configure() {
4646
installScmmPlugins()
4747
setSetupConfigs()
4848
configureJenkinsPlugin()
4949
addDefaultUsers()
50+
log.info("ScmManager Setup finished!")
5051
}
5152

5253
void setupHelm() {
@@ -158,9 +159,9 @@ class ScmManagerSetup {
158159
disableGitTrigger : false,
159160
disableEventTrigger : false,
160161
url : this.scmManager.url
161-
]
162+
] as Map<String, String>
162163

163-
ScmManagerApiClient.handleApiResponse(scmManager.apiClient.pluginApi().configureJenkinsPlugin(jenkinsPluginConfig))
164+
ScmManagerApiClient.handleApiResponse(this.scmManager.apiClient.pluginApi().configureJenkinsPlugin(jenkinsPluginConfig))
164165
log.debug("Successfully configured JenkinsPlugin in SCM-Manager.")
165166
}
166167

src/main/groovy/com/cloudogu/gitops/git/providers/scmmanager/ScmManagerUrlResolver.groovy

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ class ScmManagerUrlResolver {
2424
this.net = net
2525
}
2626

27-
2827
// ---------- Public API used by ScmManager ----------
2928

3029
/** Client base …/scm (no trailing slash) */
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.cloudogu.gitops.git.providers.scmmanager.api
22

3-
import okhttp3.ResponseBody
43
import retrofit2.Call
54
import retrofit2.http.Body
65
import retrofit2.http.Headers
@@ -11,9 +10,9 @@ import retrofit2.http.Query
1110

1211
interface PluginApi {
1312
@POST("v2/plugins/available/{name}/install")
14-
Call<ResponseBody> install(@Path("name") String name, @Query("restart") Boolean restart)
13+
Call<Void> install(@Path("name") String name, @Query("restart") Boolean restart)
1514

1615
@PUT("v2/config/jenkins/")
1716
@Headers("Content-Type: application/json")
18-
Call<Void> configureJenkinsPlugin(@Body Map<String, Object> config)
17+
Call<Void> configureJenkinsPlugin(@Body Map<String, String> config)
1918
}

src/main/groovy/com/cloudogu/gitops/git/providers/scmmanager/api/RepositoryApi.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import retrofit2.http.*
77

88
interface RepositoryApi {
99
@DELETE("v2/repositories/{namespace}/{name}")
10-
Call<ResponseBody> delete(@Path("namespace") String namespace, @Path("name") String name)
10+
Call<Void> delete(@Path("namespace") String namespace, @Path("name") String name)
1111

1212
@POST("v2/repositories/")
1313
@Headers("Content-Type: application/vnd.scmm-repository+json;v=2")

src/main/groovy/com/cloudogu/gitops/git/providers/scmmanager/api/ScmManagerApiClient.groovy

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.cloudogu.gitops.config.Credentials
55
import com.cloudogu.gitops.dependencyinjection.HttpClientFactory
66
import groovy.util.logging.Slf4j
77
import okhttp3.OkHttpClient
8+
import retrofit2.Call
89
import retrofit2.Response
910
import retrofit2.Retrofit
1011
import retrofit2.converter.jackson.JacksonConverterFactory
@@ -40,7 +41,7 @@ class ScmManagerApiClient {
4041
return retrofit().create(PluginApi)
4142
}
4243

43-
static handleApiResponse(apiCall, String additionalMessage = "") {
44+
static handleApiResponse(Call<Void> apiCall, String additionalMessage = "") {
4445
try {
4546
Response<Void> response = apiCall.execute()
4647

src/main/groovy/com/cloudogu/gitops/git/providers/scmmanager/api/UsersApi.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import retrofit2.http.Path
1111

1212
interface UsersApi {
1313
@DELETE("v2/users/{id}")
14-
Call<ResponseBody> delete(@Path("id") String id)
14+
Call<Void> delete(@Path("id") String id)
1515

1616
@Headers(["Content-Type: application/vnd.scmm-user+json;v=2"])
1717
@POST("v2/users")
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package com.cloudogu.gitops.git.providers.scmmanager
2+
3+
import com.cloudogu.gitops.config.Config
4+
import com.cloudogu.gitops.features.deployment.HelmStrategy
5+
import com.cloudogu.gitops.git.providers.scmmanager.api.PluginApi
6+
import com.cloudogu.gitops.git.providers.scmmanager.api.ScmManagerApi
7+
import com.cloudogu.gitops.git.providers.scmmanager.api.ScmManagerApiClient
8+
import org.junit.jupiter.api.Test
9+
import retrofit2.Call
10+
import retrofit2.Response
11+
12+
import static org.mockito.ArgumentMatchers.any
13+
import static org.mockito.ArgumentMatchers.eq
14+
import static org.mockito.Mockito.*
15+
16+
class ScmManagerSetupTest {
17+
18+
ScmManager scmManager = mock(ScmManager.class)
19+
20+
HelmStrategy helmStrategy = mock(HelmStrategy.class)
21+
ScmManagerApiClient apiClient = mock(ScmManagerApiClient.class)
22+
23+
PluginApi pluginApi = mock(PluginApi.class)
24+
ScmManagerApi generalApi = mock(ScmManagerApi.class)
25+
26+
Config config = Config.fromMap([
27+
application: [
28+
namePrefix: 'test',
29+
],
30+
scm : [
31+
scmManager: [
32+
internal : true,
33+
url : "",
34+
namespace : "scm-manager",
35+
username : "admin",
36+
password : "admin",
37+
helm : [
38+
chart : "scm-manager",
39+
repoURL: "https://packages.scm-manager.org/repository/helm-v2-releases/",
40+
version: "3.11.0",
41+
values : [:]
42+
],
43+
rootPath : "repo",
44+
urlForJenkins : "http://scmm.scm-manager.svc.cluster.local/scm",
45+
ingress : "scmm.master.localhost",
46+
skipRestart : false,
47+
skipPlugins : false,
48+
gitOpsUsername: ""
49+
]
50+
]
51+
])
52+
53+
@Test
54+
void 'Helm chart is installed correctly'() {
55+
when(scmManager.getConfig()).thenReturn(config)
56+
when(scmManager.getHelmStrategy()).thenReturn(helmStrategy)
57+
when(scmManager.getScmmConfig()).thenReturn(config.scm.scmManager)
58+
ScmManagerSetup scmManagerSetup = new ScmManagerSetup(scmManager)
59+
scmManagerSetup.setupHelm()
60+
verify(helmStrategy).deployFeature(
61+
eq( "https://packages.scm-manager.org/repository/helm-v2-releases/"),
62+
eq("scm-manager"),
63+
any(),
64+
eq("3.11.0"),
65+
eq("scm-manager"),
66+
eq("scmm"),
67+
any()
68+
)
69+
}
70+
71+
@Test
72+
void 'ScmManager Plugins are installed correctly'() {
73+
when(scmManager.getConfig()).thenReturn(config)
74+
when(scmManager.getHelmStrategy()).thenReturn(helmStrategy)
75+
when(scmManager.getScmmConfig()).thenReturn(config.scm.scmManager)
76+
when(scmManager.getApiClient()).thenReturn(apiClient)
77+
78+
Call<Void> apiCall = mock(Call.class)
79+
80+
when(pluginApi.install(any(),any())).thenReturn(apiCall)
81+
when(generalApi.checkScmmAvailable()).thenReturn(apiCall)
82+
when(apiClient.pluginApi()).thenReturn(pluginApi)
83+
when(apiClient.generalApi()).thenReturn(generalApi)
84+
when(apiCall.execute()).thenReturn(Response.success(null))
85+
ScmManagerSetup scmManagerSetup = new ScmManagerSetup(scmManager)
86+
scmManagerSetup.installScmmPlugins()
87+
verify(pluginApi,atLeast(10)).install(any(),any())
88+
89+
}
90+
91+
}

0 commit comments

Comments
 (0)