Skip to content

Commit

Permalink
feat(build): add halyard-integration module to exercise the just-buil…
Browse files Browse the repository at this point in the history
…t docker image (#2144)

* fix(core): move @Bean methods from GoogleProfileReader so separate config class

to remove circular dependency error on startup

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   versionsController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/VersionsController.class]
      ↓
   versionsService (field com.netflix.spinnaker.halyard.core.registry.v1.ProfileRegistry com.netflix.spinnaker.halyard.config.services.v1.VersionsService.profileRegistry)
      ↓
   profileRegistry (field com.netflix.spinnaker.halyard.core.registry.v1.GoogleProfileReader com.netflix.spinnaker.halyard.core.registry.v1.ProfileRegistry.googleProfileReader)
┌─────┐
|  googleProfileReader (field com.google.api.services.storage.Storage com.netflix.spinnaker.halyard.core.registry.v1.GoogleProfileReader.applicationDefaultGoogleStorage)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(config): remove unused ProviderService variable from EcsAccountValidator

to prevent circular dependency startup error:

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   haServiceController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/HaServiceController.class]
      ↓
   haServiceService (field private com.netflix.spinnaker.halyard.config.services.v1.ValidateService com.netflix.spinnaker.halyard.config.services.v1.HaServiceService.validateService)
┌─────┐
|  validateService (field com.netflix.spinnaker.halyard.config.validate.v1.ValidatorCollection com.netflix.spinnaker.halyard.config.services.v1.ValidateService.validatorCollection)
↑     ↓
|  validatorCollection (field private java.util.List com.netflix.spinnaker.halyard.config.validate.v1.ValidatorCollection.validators)
↑     ↓
|  ecsAccountValidator (field com.netflix.spinnaker.halyard.config.services.v1.ProviderService com.netflix.spinnaker.halyard.config.validate.v1.providers.ecs.EcsAccountValidator.providerService)
↑     ↓
|  providerService (field private com.netflix.spinnaker.halyard.config.services.v1.ValidateService com.netflix.spinnaker.halyard.config.services.v1.ProviderService.validateService)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(config): Use @Lazy with ValidatorCollection.validators

to remove circular dependency startup error

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   haServiceController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/HaServiceController.class]
      ↓
   haServiceService (field private com.netflix.spinnaker.halyard.config.services.v1.ValidateService com.netflix.spinnaker.halyard.config.services.v1.HaServiceService.validateService)
┌─────┐
|  validateService (field com.netflix.spinnaker.halyard.config.validate.v1.ValidatorCollection com.netflix.spinnaker.halyard.config.services.v1.ValidateService.validatorCollection)
↑     ↓
|  validatorCollection (field private java.util.List com.netflix.spinnaker.halyard.config.validate.v1.ValidatorCollection.validators)
↑     ↓
|  ecsAccountValidator (field com.netflix.spinnaker.halyard.config.services.v1.AccountService com.netflix.spinnaker.halyard.config.validate.v1.providers.ecs.EcsAccountValidator.accountService)
↑     ↓
|  accountService (field private com.netflix.spinnaker.halyard.config.services.v1.ProviderService com.netflix.spinnaker.halyard.config.services.v1.AccountService.providerService)
↑     ↓
|  providerService (field private com.netflix.spinnaker.halyard.config.services.v1.ValidateService com.netflix.spinnaker.halyard.config.services.v1.ProviderService.validateService)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(config): add @Lazy to DeploymentService.storageService

to fix circular dependency startup error:

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   haServiceController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/HaServiceController.class]
      ↓
   haServiceService (field private com.netflix.spinnaker.halyard.config.services.v1.DeploymentService com.netflix.spinnaker.halyard.config.services.v1.HaServiceService.deploymentService)
┌─────┐
|  deploymentService (field private com.netflix.spinnaker.halyard.config.services.v1.PersistentStorageService com.netflix.spinnaker.halyard.config.services.v1.DeploymentService.storageService)
↑     ↓
|  persistentStorageService (field private com.netflix.spinnaker.halyard.config.services.v1.DeploymentService com.netflix.spinnaker.halyard.config.services.v1.PersistentStorageService.deploymentService)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(dpeloy): add @Lazy annotation to GoogleIgorService.googleDistributedServiceDelegate

to fix circular dependency startup error:

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.clouddriverService)
      ↓
   kubernetesV2ClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService.serviceDelegate)
      ↓
   kubernetesV2ServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate.monitoringDaemonService)
      ↓
   kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
┌─────┐
|  googleIgorService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleIgorService.googleDistributedServiceDelegate)
↑     ↓
|  googleDistributedServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleMonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate.monitoringDaemonService)
↑     ↓
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(deploy): add @Lazy annotation to GoogleRedisBootstrapService.googleDistributedServiceDelegate

to fix circular dependency error on startup:

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.clouddriverService)
      ↓
   kubernetesV2ClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService.serviceDelegate)
      ↓
   kubernetesV2ServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate.monitoringDaemonService)
      ↓
   kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
┌─────┐
|  googleRedisBootstrapService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleRedisBootstrapService.googleDistributedServiceDelegate)
↑     ↓
|  googleDistributedServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleMonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate.monitoringDaemonService)
↑     ↓
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(deploy): add @Lazy annotation to GoogleDeckService.googleDistributedServiceDelegate

to fix circular dependency error on startup

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.clouddriverService)
      ↓
   kubernetesV2ClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService.serviceDelegate)
      ↓
   kubernetesV2ServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate.monitoringDaemonService)
      ↓
   kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
┌─────┐
|  googleDeckService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDeckService.googleDistributedServiceDelegate)
↑     ↓
|  googleDistributedServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleMonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate.monitoringDaemonService)
↑     ↓
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(deploy): add @Lazy annotation to GoogleEchoService.googleDistributedServiceDelegate

to fix circular dependency error on startup:

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.clouddriverService)
      ↓
   kubernetesV2ClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService.serviceDelegate)
      ↓
   kubernetesV2ServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate.monitoringDaemonService)
      ↓
   kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
┌─────┐
|  googleEchoService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleEchoService.googleDistributedServiceDelegate)
↑     ↓
|  googleDistributedServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleMonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate.monitoringDaemonService)
↑     ↓
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(deploy): add @Lazy annotation to GoogleConsulServerService.googleDistributedServiceDelegate

to fix circular dependency error on startup:

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.clouddriverService)
      ↓
   kubernetesV2ClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService.serviceDelegate)
      ↓
   kubernetesV2ServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate.monitoringDaemonService)
      ↓
   kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
┌─────┐
|  googleConsulServerService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleConsulServerService.googleDistributedServiceDelegate)
↑     ↓
|  googleDistributedServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleMonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate.monitoringDaemonService)
↑     ↓
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(deploy): add @Lazy annotation to GoogleFront50Service.googleDistributedServiceDelegate

to fix circular dependency error on startup:

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.clouddriverService)
      ↓
   kubernetesV2ClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService.serviceDelegate)
      ↓
   kubernetesV2ServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate.monitoringDaemonService)
      ↓
   kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
┌─────┐
|  googleFront50Service (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleFront50Service.googleDistributedServiceDelegate)
↑     ↓
|  googleDistributedServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleMonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate.monitoringDaemonService)
↑     ↓
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(deploy): add @Lazy annotation to GoogleClouddriverService.googleDistributedServiceDelegate

to fix circular dependency error on startup:

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.clouddriverService)
      ↓
   kubernetesV2ClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService.serviceDelegate)
      ↓
   kubernetesV2ServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate.monitoringDaemonService)
      ↓
   kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
┌─────┐
|  googleClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleClouddriverService.googleDistributedServiceDelegate)
↑     ↓
|  googleDistributedServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleMonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate.monitoringDaemonService)
↑     ↓
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(deploy): add @Lazy annotation to GoogleOrcaBootstrapService.googleDistributedServiceDelegate

to fix circular dependency error on startup:

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.clouddriverService)
      ↓
   kubernetesV2ClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService.serviceDelegate)
      ↓
   kubernetesV2ServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate.monitoringDaemonService)
      ↓
   kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
┌─────┐
|  googleOrcaService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleOrcaService.googleDistributedServiceDelegate)
↑     ↓
|  googleDistributedServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleMonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate.monitoringDaemonService)
↑     ↓
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(deploy): add @Lazy annotation to GoogleOrcaService.googleDistributedServiceDelegate

to fix circular dependency issue on startup

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.clouddriverService)
      ↓
   kubernetesV2ClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService.serviceDelegate)
      ↓
   kubernetesV2ServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate.monitoringDaemonService)
      ↓
   kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
┌─────┐
|  googleOrcaService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleOrcaService.googleDistributedServiceDelegate)
↑     ↓
|  googleDistributedServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleMonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate.monitoringDaemonService)
↑     ↓
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(deploy): add @Lazy annotation to GoogleRoscoService.googleDistributedServiceDelegate

to fix circular dependency error on startup

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.clouddriverService)
      ↓
   kubernetesV2ClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService.serviceDelegate)
      ↓
   kubernetesV2ServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate.monitoringDaemonService)
      ↓
   kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
┌─────┐
|  googleRoscoService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleRoscoService.googleDistributedServiceDelegate)
↑     ↓
|  googleDistributedServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleMonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate.monitoringDaemonService)
↑     ↓
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(deploy): add @Lazy annotation to GoogleFiatService.googleDistributedServiceDelegate

to fix circular dependency error on startup

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.clouddriverService)
      ↓
   kubernetesV2ClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService.serviceDelegate)
      ↓
   kubernetesV2ServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate.monitoringDaemonService)
      ↓
   kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
┌─────┐
|  googleFiatService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleFiatService.googleDistributedServiceDelegate)
↑     ↓
|  googleDistributedServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleMonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate.monitoringDaemonService)
↑     ↓
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(deploy): add @Lazy annotation to GoogleClouddriverBootstrapService.googleDistributedServiceDelegate

to fix circular dependency startup error

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.clouddriverService)
      ↓
   kubernetesV2ClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService.serviceDelegate)
      ↓
   kubernetesV2ServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate.monitoringDaemonService)
      ↓
   kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
┌─────┐
|  googleClouddriverBootstrapService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleClouddriverBootstrapService.googleDistributedServiceDelegate)
↑     ↓
|  googleDistributedServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleMonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate.monitoringDaemonService)
↑     ↓
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(deploy): add @Lazy annotation to GoogleRedisService.googleDistributedServiceDelegate

to fix circular dependency error on startup:

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.clouddriverService)
      ↓
   kubernetesV2ClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService.serviceDelegate)
      ↓
   kubernetesV2ServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate.monitoringDaemonService)
      ↓
   kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
┌─────┐
|  googleRedisService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleRedisService.googleDistributedServiceDelegate)
↑     ↓
|  googleDistributedServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleMonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate.monitoringDaemonService)
↑     ↓
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(deploy): add @Lazy annotation to GoogleGateService.googleDistributedServiceDelegate

to fix circular dependency error at startup

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.clouddriverService)
      ↓
   kubernetesV2ClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService.serviceDelegate)
      ↓
   kubernetesV2ServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate.monitoringDaemonService)
      ↓
   kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
┌─────┐
|  googleGateService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleGateService.googleDistributedServiceDelegate)
↑     ↓
|  googleDistributedServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleMonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate.monitoringDaemonService)
↑     ↓
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(deploy): add @Lazy annotation to GoogleKayentaService.googleDistributedServiceDelegate

to fix circular dependency error on startup

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.clouddriverService)
      ↓
   kubernetesV2ClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService.serviceDelegate)
      ↓
   kubernetesV2ServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate.monitoringDaemonService)
      ↓
   kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
┌─────┐
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
↑     ↓
|  googleKayentaService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleKayentaService.googleDistributedServiceDelegate)
↑     ↓
|  googleDistributedServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleMonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate.monitoringDaemonService)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(deploy): add @Lazy annotation to GoogleVaultServerService.googleDistributedServiceDelegate

to fix circular dependency error on startup:

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.clouddriverService)
      ↓
   kubernetesV2ClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService.serviceDelegate)
      ↓
   kubernetesV2ServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate.monitoringDaemonService)
      ↓
   kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
┌─────┐
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
↑     ↓
|  googleVaultServerService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleVaultServerService.googleDistributedServiceDelegate)
↑     ↓
|  googleDistributedServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleMonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.google.GoogleDistributedServiceDelegate.monitoringDaemonService)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(deploy): add @Lazy annotation to KubernetesV2ServiceDelegate.monitoringDaemonService

to fix circular dependency error on startup

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.clouddriverService)
┌─────┐
|  kubernetesV2ClouddriverService (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ClouddriverService.serviceDelegate)
↑     ↓
|  kubernetesV2ServiceDelegate (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2ServiceDelegate.monitoringDaemonService)
↑     ↓
|  kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
↑     ↓
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* fix(deploy): remove unused SpinnakerMonitoringDaemonService.service property

to fix circular dependency error on startup:

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

   deploymentController defined in URL [jar:file:/opt/halyard/lib/halyard-web.jar!/com/netflix/spinnaker/halyard/controllers/v1/DeploymentController.class]
      ↓
   generateService (field private com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory com.netflix.spinnaker.halyard.deploy.services.v1.GenerateService.serviceProviderFactory)
      ↓
   serviceProviderFactory (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider com.netflix.spinnaker.halyard.deploy.deployment.v1.ServiceProviderFactory.kubectlServiceProvider)
      ↓
   kubectlServiceProvider (field com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubernetesV2MonitoringDaemonService com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.distributed.kubernetes.v2.KubectlServiceProvider.monitoringDaemonService)
┌─────┐
|  kubernetesV2MonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
↑     ↓
|  googleMonitoringDaemonService (field java.util.List com.netflix.spinnaker.halyard.deploy.spinnaker.v1.service.SpinnakerMonitoringDaemonService.services)
└─────┘

Action:

Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

* feat(docker): add HEALTHCHECK

to facilitate testing container startup

* feat(build): add halyard-integration module to exercise the just-built docker image

* feat(gha): run integration test in pr builds

multi-arch with --load doesn't work, so add a separate step using the local platform to
make an image available for testing.

see docker/buildx#59

* feat(gha): run integration test in branch builds

* refactor(core): remove unused GoogleProfileReader.createGoogleStorage method
  • Loading branch information
dbyron-sf authored Apr 9, 2024
1 parent 1c69e99 commit a4c0696
Show file tree
Hide file tree
Showing 31 changed files with 317 additions and 72 deletions.
13 changes: 13 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,19 @@ jobs:
env:
ORG_GRADLE_PROJECT_version: ${{ steps.build_variables.outputs.VERSION }}
run: ./gradlew build --stacktrace ${{ steps.build_variables.outputs.REPO }}-web:installDist
- name: Build local slim container image for testing
uses: docker/build-push-action@v5
with:
context: .
file: Dockerfile.slim
load: true
platforms: local
tags: |
"${{ steps.build_variables.outputs.REPO }}:${{ steps.build_variables.outputs.VERSION }}-unvalidated"
- name: Test local slim container image
env:
FULL_DOCKER_IMAGE_NAME: "${{ steps.build_variables.outputs.REPO }}:${{ steps.build_variables.outputs.VERSION }}-unvalidated"
run: ./gradlew ${{ steps.build_variables.outputs.REPO }}-integration:test
- name: Login to GAR
# Only run this on repositories in the 'spinnaker' org, not on forks.
if: startsWith(github.repository, 'spinnaker/')
Expand Down
13 changes: 13 additions & 0 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,16 @@ jobs:
tags: |
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:latest-ubuntu"
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:${{ steps.build_variables.outputs.VERSION }}-ubuntu"
- name: Build local slim container image for testing
uses: docker/build-push-action@v5
with:
context: .
file: Dockerfile.slim
load: true
platforms: local
tags: |
"${{ steps.build_variables.outputs.REPO }}:${{ steps.build_variables.outputs.VERSION }}"
- name: Test local slim container image
env:
FULL_DOCKER_IMAGE_NAME: "${{ steps.build_variables.outputs.REPO }}:${{ steps.build_variables.outputs.VERSION }}"
run: ./gradlew ${{ steps.build_variables.outputs.REPO }}-integration:test
2 changes: 2 additions & 0 deletions Dockerfile.slim
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,6 @@ RUN adduser -S -G spinnaker -u 1000 spinnaker
COPY halyard-web/build/install/halyard /opt/halyard
USER spinnaker

HEALTHCHECK CMD curl http://localhost:8064/health | grep UP || exit 1

CMD ["/opt/halyard/bin/halyard"]
2 changes: 2 additions & 0 deletions Dockerfile.ubuntu
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,6 @@ RUN adduser --system --uid 1000 --group spinnaker
COPY halyard-web/build/install/halyard /opt/halyard
USER spinnaker

HEALTHCHECK CMD curl http://localhost:8064/health | grep UP || exit 1

CMD ["/opt/halyard/bin/halyard"]
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import com.netflix.spinnaker.halyard.core.problem.v1.ProblemSet;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

/**
Expand All @@ -43,7 +44,7 @@ public class DeploymentService {

@Autowired private HalconfigParser halconfigParser;

@Autowired private PersistentStorageService storageService;
@Lazy @Autowired private PersistentStorageService storageService;

public void setDeploymentConfiguration(
String deploymentName, DeploymentConfiguration deploymentConfiguration) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import java.util.List;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

/**
Expand All @@ -35,6 +36,7 @@
@Slf4j
@Component
public class ValidatorCollection {
@Lazy
@Autowired(required = false)
private List<Validator> validators = new ArrayList<>();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import com.netflix.spinnaker.halyard.config.problem.v1.ConfigProblemSetBuilder;
import com.netflix.spinnaker.halyard.config.services.v1.AccountService;
import com.netflix.spinnaker.halyard.config.services.v1.ConfigService;
import com.netflix.spinnaker.halyard.config.services.v1.ProviderService;
import com.netflix.spinnaker.halyard.core.problem.v1.Problem.Severity;
import java.util.List;
import java.util.Optional;
Expand All @@ -15,8 +14,6 @@

@Component
public class EcsAccountValidator extends Validator<EcsAccount> {
@Autowired ProviderService providerService;

@Autowired AccountService accountService;

@Autowired ConfigService configService;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,15 @@
package com.netflix.spinnaker.halyard.core.registry.v1;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.storage.Storage;
import com.google.api.services.storage.StorageScopes;
import com.netflix.spinnaker.halyard.core.provider.v1.google.GoogleCredentials;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.yaml.snakeyaml.Yaml;

Expand All @@ -56,16 +49,6 @@ private Yaml getYamlParser() {
return applicationContext.getBean(Yaml.class);
}

@Bean
public Storage applicationDefaultGoogleStorage() {
return createGoogleStorage(true);
}

@Bean
public Storage unauthenticatedGoogleStorage() {
return createGoogleStorage(false);
}

public InputStream readProfile(String artifactName, String version, String profileName)
throws IOException {
String path = profilePath(artifactName, version, profileName);
Expand Down Expand Up @@ -118,36 +101,4 @@ private InputStream getContents(String objectName) throws IOException {

return new ByteArrayInputStream(output.toByteArray());
}

private Storage createGoogleStorage(boolean useApplicationDefaultCreds) {
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
String applicationName = "Spinnaker/Halyard";
HttpRequestInitializer requestInitializer = null;

if (useApplicationDefaultCreds) {
try {
com.google.auth.oauth2.GoogleCredentials credentials =
com.google.auth.oauth2.GoogleCredentials.getApplicationDefault();
if (credentials.createScopedRequired()) {
credentials =
credentials.createScoped(
Collections.singleton(StorageScopes.DEVSTORAGE_FULL_CONTROL));
}
requestInitializer = GoogleCredentials.setHttpTimeout(credentials);
log.info("Loaded application default credential for reading BOMs & profiles.");
} catch (Exception e) {
log.debug(
"No application default credential could be loaded for reading BOMs & profiles. Continuing unauthenticated: {}",
e.getMessage());
}
}
if (requestInitializer == null) {
requestInitializer = GoogleCredentials.retryRequestInitializer();
}

return new Storage.Builder(
GoogleCredentials.buildHttpTransport(), jsonFactory, requestInitializer)
.setApplicationName(applicationName)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/*
* Copyright 2017 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.halyard.core.registry.v1;

import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.storage.Storage;
import com.google.api.services.storage.StorageScopes;
import com.netflix.spinnaker.halyard.core.provider.v1.google.GoogleCredentials;
import java.util.Collections;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConditionalOnProperty("spinnaker.config.input.gcs.enabled")
@Slf4j
public class GoogleProfileReaderConfig {
@Bean
public Storage applicationDefaultGoogleStorage() {
return createGoogleStorage(true);
}

@Bean
public Storage unauthenticatedGoogleStorage() {
return createGoogleStorage(false);
}

private Storage createGoogleStorage(boolean useApplicationDefaultCreds) {
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
String applicationName = "Spinnaker/Halyard";
HttpRequestInitializer requestInitializer = null;

if (useApplicationDefaultCreds) {
try {
com.google.auth.oauth2.GoogleCredentials credentials =
com.google.auth.oauth2.GoogleCredentials.getApplicationDefault();
if (credentials.createScopedRequired()) {
credentials =
credentials.createScoped(
Collections.singleton(StorageScopes.DEVSTORAGE_FULL_CONTROL));
}
requestInitializer = GoogleCredentials.setHttpTimeout(credentials);
log.info("Loaded application default credential for reading BOMs & profiles.");
} catch (Exception e) {
log.debug(
"No application default credential could be loaded for reading BOMs & profiles. Continuing unauthenticated: {}",
e.getMessage());
}
}
if (requestInitializer == null) {
requestInitializer = GoogleCredentials.retryRequestInitializer();
}

return new Storage.Builder(
GoogleCredentials.buildHttpTransport(), jsonFactory, requestInitializer)
.setApplicationName(applicationName)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,6 @@ public abstract class SpinnakerMonitoringDaemonService

@Autowired MetricRegistryProfileFactoryBuilder metricRegistryProfileFactoryBuilder;

@Autowired List<SpinnakerService> services;

@Override
public SpinnakerArtifact getArtifact() {
return SpinnakerArtifact.SPINNAKER_MONITORING_DAEMON;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import lombok.EqualsAndHashCode;
import lombok.experimental.Delegate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

@EqualsAndHashCode(callSuper = true)
Expand All @@ -37,7 +38,7 @@ public class GoogleClouddriverBootstrapService extends ClouddriverBootstrapServi
final DeployPriority deployPriority = new DeployPriority(6);
final boolean requiredToBootstrap = true;

@Delegate @Autowired GoogleDistributedServiceDelegate googleDistributedServiceDelegate;
@Lazy @Delegate @Autowired GoogleDistributedServiceDelegate googleDistributedServiceDelegate;

@Override
public List<SidecarService> getSidecars(SpinnakerRuntimeSettings runtimeSettings) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import lombok.EqualsAndHashCode;
import lombok.experimental.Delegate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

@EqualsAndHashCode(callSuper = true)
Expand All @@ -38,7 +39,7 @@ public class GoogleClouddriverService extends ClouddriverService
final DeployPriority deployPriority = new DeployPriority(4);
final boolean requiredToBootstrap = false;

@Delegate @Autowired GoogleDistributedServiceDelegate googleDistributedServiceDelegate;
@Lazy @Delegate @Autowired GoogleDistributedServiceDelegate googleDistributedServiceDelegate;

@Override
public List<Profile> getProfiles(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,15 @@
import lombok.EqualsAndHashCode;
import lombok.experimental.Delegate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

@EqualsAndHashCode(callSuper = true)
@Component
@Data
public class GoogleConsulServerService extends ConsulServerService
implements GoogleDistributedService<ConsulApi> {
@Delegate @Autowired GoogleDistributedServiceDelegate googleDistributedServiceDelegate;
@Lazy @Delegate @Autowired GoogleDistributedServiceDelegate googleDistributedServiceDelegate;

@Override
public String getDefaultInstanceType() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import lombok.EqualsAndHashCode;
import lombok.experimental.Delegate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

@EqualsAndHashCode(callSuper = true)
Expand All @@ -37,7 +38,7 @@ public class GoogleDeckService extends DeckService
final DeployPriority deployPriority = new DeployPriority(4);
final boolean requiredToBootstrap = false;

@Delegate @Autowired GoogleDistributedServiceDelegate googleDistributedServiceDelegate;
@Lazy @Delegate @Autowired GoogleDistributedServiceDelegate googleDistributedServiceDelegate;

@Override
public List<SidecarService> getSidecars(SpinnakerRuntimeSettings runtimeSettings) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import lombok.EqualsAndHashCode;
import lombok.experimental.Delegate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

@EqualsAndHashCode(callSuper = true)
Expand All @@ -37,7 +38,7 @@ public class GoogleEchoService extends EchoService
final DeployPriority deployPriority = new DeployPriority(4);
final boolean requiredToBootstrap = false;

@Delegate @Autowired GoogleDistributedServiceDelegate googleDistributedServiceDelegate;
@Lazy @Delegate @Autowired GoogleDistributedServiceDelegate googleDistributedServiceDelegate;

@Override
public List<SidecarService> getSidecars(SpinnakerRuntimeSettings runtimeSettings) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import lombok.EqualsAndHashCode;
import lombok.experimental.Delegate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

@EqualsAndHashCode(callSuper = true)
Expand All @@ -37,7 +38,7 @@ public class GoogleFiatService extends FiatService
final DeployPriority deployPriority = new DeployPriority(4);
final boolean requiredToBootstrap = false;

@Delegate @Autowired GoogleDistributedServiceDelegate googleDistributedServiceDelegate;
@Lazy @Delegate @Autowired GoogleDistributedServiceDelegate googleDistributedServiceDelegate;

@Override
public List<SidecarService> getSidecars(SpinnakerRuntimeSettings runtimeSettings) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import lombok.EqualsAndHashCode;
import lombok.experimental.Delegate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

@EqualsAndHashCode(callSuper = true)
Expand All @@ -38,7 +39,7 @@ public class GoogleFront50Service extends Front50Service
final DeployPriority deployPriority = new DeployPriority(4);
final boolean requiredToBootstrap = false;

@Delegate @Autowired GoogleDistributedServiceDelegate googleDistributedServiceDelegate;
@Lazy @Delegate @Autowired GoogleDistributedServiceDelegate googleDistributedServiceDelegate;

@Override
public List<Profile> getProfiles(
Expand Down
Loading

0 comments on commit a4c0696

Please sign in to comment.