Skip to content

Commit

Permalink
refactor(kubernetes): Move V1 code to clouddriver-kubernetes-v1 (#4028)
Browse files Browse the repository at this point in the history
* refactor(kubernetes): Remove V1 dependence from V2 test

The V2-only KubernetesAccountResolverSpec depends on the
V1 credentials object KubernetesV1Credentials.  It's not actually
using any properties specific to the V1 credentials; this class
exists only to ensure that the resolver only returns V2 credentials.
Replace a mock for the V1 credentials with a mock for the interface,
which equivalently exercises the test case that we don't return
KubernetesCredentials that aren't KubernetesV2Credentials.

* refactor(kubernetes): Split KubernetesV1Configuration into its own file

In preparation for moving all V1-specific code to its own class, split out
the V1-only beans into KubernetesV1Configuration.

* refactor(kubernetes): Move V1 code to clouddriver-kubernetes-v1

This leaves only shared V1+V2 code in clouddriver-kubernetes, and
removes the dependency of the V2 provider on the V1 provider.

* refactor(kubernetes): Compile clouddriver-kubernetes with java

Now that the V1 code has been moved out of clouddriver-kubernetes,
only Java code is left. Rename the source directory from groovy
to java, and start compiling the module with the java compiler.
  • Loading branch information
ezimanyi authored Sep 16, 2019
1 parent 515528e commit 198cd7a
Show file tree
Hide file tree
Showing 172 changed files with 93 additions and 31 deletions.
31 changes: 31 additions & 0 deletions clouddriver-kubernetes-v1/clouddriver-kubernetes-v1.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
dependencies {
implementation project(":clouddriver-kubernetes")
implementation project(":clouddriver-core")
implementation project(":cats:cats-core")
implementation project(":clouddriver-docker")
implementation project(":clouddriver-security")

compileOnly "org.projectlombok:lombok"
annotationProcessor "org.projectlombok:lombok"
testAnnotationProcessor "org.projectlombok:lombok"

implementation "org.codehaus.groovy:groovy-all"

implementation "com.github.fge:json-patch:1.9"
implementation "com.google.guava:guava"
implementation "com.netflix.frigga:frigga"
implementation "com.netflix.spectator:spectator-api"
implementation "com.netflix.spinnaker.fiat:fiat-core:$fiatVersion"
implementation "com.netflix.spinnaker.kork:kork-config"
implementation "com.netflix.spinnaker.moniker:moniker"
implementation "io.fabric8:kubernetes-client:4.1.1"
implementation "io.kubernetes:client-java:5.0.0"
implementation "org.springframework.boot:spring-boot-actuator"
implementation "org.springframework.boot:spring-boot-starter-web"

testImplementation "cglib:cglib-nodep"
testImplementation "org.objenesis:objenesis"
testImplementation "org.spockframework:spock-core"
testImplementation "org.spockframework:spock-spring"
testImplementation "org.springframework:spring-test"
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2015 Google, Inc.
* Copyright 2019 Google, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License")
* you may not use this file except in compliance with the License.
Expand All @@ -18,18 +18,15 @@
import com.netflix.spinnaker.cats.module.CatsModule;
import com.netflix.spinnaker.clouddriver.kubernetes.KubernetesCloudProvider;
import com.netflix.spinnaker.clouddriver.kubernetes.config.KubernetesConfigurationProperties;
import com.netflix.spinnaker.clouddriver.kubernetes.health.KubernetesHealthIndicator;
import com.netflix.spinnaker.clouddriver.kubernetes.v1.deploy.KubernetesUtil;
import com.netflix.spinnaker.clouddriver.kubernetes.v1.provider.KubernetesV1Provider;
import com.netflix.spinnaker.clouddriver.kubernetes.v1.provider.KubernetesV1ProviderSynchronizable;
import com.netflix.spinnaker.clouddriver.kubernetes.v1.provider.agent.KubernetesV1CachingAgentDispatcher;
import com.netflix.spinnaker.clouddriver.kubernetes.v1.security.KubernetesV1Credentials;
import com.netflix.spinnaker.clouddriver.security.AccountCredentialsProvider;
import com.netflix.spinnaker.clouddriver.security.AccountCredentialsRepository;
import java.util.Collections;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
Expand All @@ -41,19 +38,7 @@
@EnableScheduling
@ConditionalOnProperty("kubernetes.enabled")
@ComponentScan({"com.netflix.spinnaker.clouddriver.kubernetes"})
public class KubernetesConfiguration {
@Bean
@ConfigurationProperties("kubernetes")
public KubernetesConfigurationProperties kubernetesConfigurationProperties() {
return new KubernetesConfigurationProperties();
}

@Bean
public KubernetesHealthIndicator kubernetesHealthIndicator(
AccountCredentialsProvider accountCredentialsProvider) {
return new KubernetesHealthIndicator(accountCredentialsProvider);
}

public class KubernetesV1Configuration {
@Bean
public KubernetesUtil kubernetesUtil() {
return new KubernetesUtil();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@

package com.netflix.spinnaker.clouddriver.kubernetes.v2.description

import com.netflix.spinnaker.clouddriver.kubernetes.security.KubernetesCredentials
import com.netflix.spinnaker.clouddriver.kubernetes.security.KubernetesNamedAccountCredentials
import com.netflix.spinnaker.clouddriver.kubernetes.v1.security.KubernetesV1Credentials
import com.netflix.spinnaker.clouddriver.kubernetes.v2.description.manifest.KubernetesKindRegistry
import com.netflix.spinnaker.clouddriver.kubernetes.v2.security.KubernetesV2Credentials
import com.netflix.spinnaker.clouddriver.security.AccountCredentials
Expand Down Expand Up @@ -51,7 +51,7 @@ class KubernetesAccountResolverSpec extends Specification {

then:
1 * credentialsRepository.getOne(ACCOUNT_NAME) >> Mock(KubernetesNamedAccountCredentials) {
getCredentials() >> Mock(KubernetesV1Credentials)
getCredentials() >> Mock(KubernetesCredentials)
}
!credentials.isPresent()

Expand Down Expand Up @@ -92,7 +92,7 @@ class KubernetesAccountResolverSpec extends Specification {

then:
1 * credentialsRepository.getOne(ACCOUNT_NAME) >> Mock(KubernetesNamedAccountCredentials) {
getCredentials() >> Mock(KubernetesV1Credentials)
getCredentials() >> Mock(KubernetesCredentials)
}
registry == globalResourcePropertyRegistry

Expand All @@ -101,7 +101,7 @@ class KubernetesAccountResolverSpec extends Specification {

then:
1 * credentialsRepository.getOne(ACCOUNT_NAME) >> Mock(AccountCredentials) {
getCredentials() >> Mock(KubernetesV1Credentials)
getCredentials() >> Mock(KubernetesCredentials)
}
registry == globalResourcePropertyRegistry

Expand Down Expand Up @@ -136,7 +136,7 @@ class KubernetesAccountResolverSpec extends Specification {

then:
1 * credentialsRepository.getOne(ACCOUNT_NAME) >> Mock(KubernetesNamedAccountCredentials) {
getCredentials() >> Mock(KubernetesV1Credentials)
getCredentials() >> Mock(KubernetesCredentials)
}
1 * kindRegistryFactory.create() >> v2KindRegistry
registry == v2KindRegistry
Expand All @@ -146,7 +146,7 @@ class KubernetesAccountResolverSpec extends Specification {

then:
1 * credentialsRepository.getOne(ACCOUNT_NAME) >> Mock(AccountCredentials) {
getCredentials() >> Mock(KubernetesV1Credentials)
getCredentials() >> Mock(KubernetesCredentials)
}
1 * kindRegistryFactory.create() >> v2KindRegistry
registry == v2KindRegistry
Expand Down
14 changes: 7 additions & 7 deletions clouddriver-kubernetes/clouddriver-kubernetes.gradle
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
tasks.compileGroovy.enabled = false
sourceSets.main.java.srcDirs = ['src/main/java']

dependencies {
implementation project(":clouddriver-core")
implementation project(":cats:cats-core")
implementation project(":clouddriver-docker")
implementation project(":clouddriver-security")

compileOnly "org.projectlombok:lombok"
Expand All @@ -10,14 +12,12 @@ dependencies {

implementation "org.codehaus.groovy:groovy-all"

implementation "com.github.fge:json-patch:1.9"
implementation "com.netflix.frigga:frigga"
implementation "com.netflix.spinnaker.fiat:fiat-api:$fiatVersion"
implementation "com.google.code.findbugs:jsr305"
implementation "com.google.guava:guava"
implementation "com.netflix.spectator:spectator-api"
implementation "com.netflix.spinnaker.fiat:fiat-core:$fiatVersion"
implementation "com.netflix.spinnaker.kork:kork-config"
implementation "com.netflix.spinnaker.moniker:moniker"
implementation "io.fabric8:kubernetes-client:4.1.1"
implementation "io.kubernetes:client-java:5.0.0"
implementation "org.apache.commons:commons-lang3"
implementation "org.springframework.boot:spring-boot-actuator"
implementation "org.springframework.boot:spring-boot-starter-web"

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* Copyright 2015 Google, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License")
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.netflix.spinnaker.config;

import com.netflix.spinnaker.clouddriver.kubernetes.config.KubernetesConfigurationProperties;
import com.netflix.spinnaker.clouddriver.kubernetes.health.KubernetesHealthIndicator;
import com.netflix.spinnaker.clouddriver.security.AccountCredentialsProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;

@Configuration
@EnableConfigurationProperties
@EnableScheduling
@ConditionalOnProperty("kubernetes.enabled")
@ComponentScan({"com.netflix.spinnaker.clouddriver.kubernetes"})
public class KubernetesConfiguration {
@Bean
@ConfigurationProperties("kubernetes")
public KubernetesConfigurationProperties kubernetesConfigurationProperties() {
return new KubernetesConfigurationProperties();
}

@Bean
public KubernetesHealthIndicator kubernetesHealthIndicator(
AccountCredentialsProvider accountCredentialsProvider) {
return new KubernetesHealthIndicator(accountCredentialsProvider);
}
}
2 changes: 1 addition & 1 deletion settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ def cloudProviderProjects = [
'cloudfoundry': [':clouddriver-cloudfoundry'],
'dcos': [':clouddriver-dcos'],
'gce': [':clouddriver-consul', ':clouddriver-google', ':clouddriver-google-common'],
'kubernetes': [':clouddriver-kubernetes', ':clouddriver-kubernetes-v2', ':clouddriver-docker'],
'kubernetes': [':clouddriver-kubernetes', ':clouddriver-kubernetes-v1', ':clouddriver-kubernetes-v2', ':clouddriver-docker'],
'oracle': [':clouddriver-oracle']
]
cloudProviderProjects.put('gcp', cloudProviderProjects['appengine'] + cloudProviderProjects['gce'] + cloudProviderProjects['kubernetes'])
Expand Down

0 comments on commit 198cd7a

Please sign in to comment.