Helm Chart deployment failing: "Unable to merge service settings: null"


#1

Hi,
I am trying to deploy Spinnaker 1.11.10 with Helm chart 1.7.2 on GKE with a custom values.yaml.

I have removed all the URLs because of this Forums’ rules and security.

It fails with very little information:

hal deploy apply

  • Get current deployment
    Success
  • Prep deployment
    Failure

Problems in Global:
! ERROR Unexpected exception: java.lang.RuntimeException: Unable to
merge service settings: null

  • Failed to prep Spinnaker deployment

Any insight into what is meant by “Merge Service settings” would be helpful. Or how to get more verbose logs of what Halyard is trying to do that failed.

Here is my values.yaml:

> halyard:
>   spinnakerVersion: 1.11.10
>   image:
>     repository: gcr
>     tag: 1.16.0
>   # Provide a config map with Hal commands that will be run the core config (storage)
>   # The config map should contain a script in the config.sh key
>   additionalScripts:
>     enabled: false
>     #configMapName: my-halyard-config
>     #configMapKey: config.sh
>     # If you'd rather do an inline script, set create to true and put the content in the data dict like you would a configmap
>     create: false
>     data: 
>       enable_gcs_artifacts.sh: |-
>           # json path is automatically created as Secret and predefined
>           # following bucket is automatically set as this account
>           $HAL_COMMAND config artifact gcs enable
>           $HAL_COMMAND config artifact gcs account add gcs-__PROJECT__ --json-path /opt/gcs/key.json
>       enable_pubsub.sh: |-
>           # normally subscription is named like
>           # projects/<project name>/subscriptions/<subscription name>
>           # but here, we just need the last part.
>           $HAL_COMMAND config pubsub google enable
>           $HAL_COMMAND config pubsub google subscription add gcr-__PROJECT__ \
>                             --subscription-name SUBSCRIPTION \
>                             --json-path /opt/gcs/key.json \
>                             --project __PROJECT__ \
>                             --message-format GCR
>       enable_slack.sh: |-
>           $HAL_COMMAND config notification slack enable
>           echo TOKEN | $HAL_COMMAND config notification slack edit --bot-name spinnaker --token
>       override_baseurls.sh: |-
>           # Slack notification message includes links to GUI endpoint, but it is `localhost/bla-bla-bla` by default.  To change them, modify with these commands.
>           $HAL_COMMAND config security api edit --override-base-url URL:8084/
>           $HAL_COMMAND config security ui edit --override-base-url URL:9000/
>     # to enable github push trigger or IAP or gsuite oauth, set here.
>   additionalSecrets:
>     create: false
>     data: {}
>     ## Uncomment if you want to use a pre-created secret rather than feeding data in via helm.
>     # name:
>   additionalConfigMaps:
>     create: false
>     data: {}
>   additionalProfileConfigMaps:
>     create: false
>     data:
>     ## if you're running spinnaker behind a reverse proxy such as a GCE ingress
>     ## you may need the following profile settings for the gate profile.
>     ## otherwise its harmless and will likely become default behavior in the future
>     ## According to the linked github issue.
>       gate-local.yml: |-
>         server:
>           tomcat:
>             protocolHeader: X-Forwarded-Proto
>             remoteIpHeader: X-Forwarded-For
>             internalProxies: .*
>             httpsServerPort: X-Forwarded-Port
> 
>   ## Uncomment if you want to add extra commands to the init script
>   ## run by the init container before halyard is started.
>   # additionalInitScript: |-
> 
> # Define which registries and repositories you want available in your
> # Spinnaker pipeline definitions
> # For more info visit:
> 
> # Configure your Docker registries here
> dockerRegistries:
> # - name: dockerhub
> #  repositories:
> #    - library/alpine
> #    - library/ubuntu
> #    - library/centos
> #    - library/nginx
> - name: gcr
>   address: gcr
>   username: _json_key
>   email: EMAIL
> 
> # If you don't want to put your passwords into a values file
> # you can use a pre-created secret instead of putting passwords
> # (specify secret name in below `dockerRegistryAccountSecret`)
> # per account above with data in the format:
> # <name>: <password>
> 
> dockerRegistryAccountSecret: serviceaccount
> 
> kubeConfig:
>   # Use this when you want to register arbitrary clusters with Spinnaker
>   # Upload your ~/kube/.config to a secret
>   enabled: false
>   secretName: my-kubeconfig
>   secretKey: config
>   # List of contexts from the kubeconfig to make available to Spinnaker
>   contexts:
>   - default
>   deploymentContext: default
>   omittedNameSpaces:
>   - kube-system
>   - kube-public
> 
> # Change this if youd like to expose Spinnaker outside the cluster
> ingress:
>   enabled: false
>   # host: spinnaker.example.org
>   # annotations:
>   # tls:
>   #  - secretName: -tls
>   #    hosts:
> 
> ingressGate:
>   enabled: false
>   # host: gate.spinnaker.example.org
>   # annotations:
> 
>   # tls:
>   #  - secretName: -tls
>   #    hosts:
>   
> 
> # spinnakerFeatureFlags is a list of Spinnaker feature flags to enable
> # spinnakerFeatureFlags:
> #   - artifacts
> #   - pipeline-templates
> spinnakerFeatureFlags:
>   - artifacts
>   - jobs
> 
> # Node labels for pod assignment
> # nodeSelector to provide to each of the Spinnaker components
> nodeSelector: {}
> 
> # Redis pas
> 
> sword to use for the in-cluster redis service
> # Enable redis to use in-cluster redis
> redis:
>   enabled: false
>   # External Redis option will be enabled if in-cluster redis is disabled
>   external:
>     host: "<EXTERNAL-REDIS-HOST-NAME>"
>     port: 6379
>     # password: ""
>   password: password
>   nodeSelector: {}
>   cluster:
>     enabled: false
> # Uncomment if you don't want to create a PVC for redis
> #  master:
> #    persistence:
> #      enabled: false
> 
> # Minio access/secret keys for the in-cluster S3 usage
> # Minio is not exposed publically
> minio:
>   enabled: false
>   imageTag: RELEASE.2018-06-09T02-18-09Z
>   serviceType: ClusterIP
>   accessKey: spinnakeradmin
>   secretKey: spinnakeradmin
>   bucket: "spinnaker"
>   nodeSelector: {}
> # Uncomment if you don't want to create a PVC for minio
> #  persistence:
> #    enabled: false
> 
> # Google Cloud Storage
> gcs:
>   enabled: true
>   project: PROJECT
>   bucket: "spinnaker-pvc"
>   ## if jsonKey is set, will create a secret containing it
>   #jsonKey:
>   ## override the name of the secret to use for jsonKey, if `jsonKey`
>   ## is empty, it will not create a secret assuming you are creating one
>   ## external to the chart. the key for that secret should be `key.json`.
>   secretName: spinnaker-serviceaccount
> 
> # AWS Simple Storage Service
> s3:
>   enabled: false
>   bucket: "<S3-BUCKET-NAME>"
>   # rootFolder: "front50"
>   # region: "us-east-1"
>   # endpoint: ""
>   # accessKey: ""
>   # secretKey: ""
> 
> # Azure Storage Account
> azs:
>   enabled: false
> #   storageAccountName: ""
> #   accessKey: ""
> #   containerName: "spinnaker"
> 
> rbac:
>   # Specifies whether RBAC resources should be created
>   create: true
> 
> serviceAccount:
>   # Specifies whether a ServiceAccount should be created
>   create: true
>   # The name of the ServiceAccounts to use.
>   # If left blank it is auto-generated from the fullname of the release
>   halyardName:
>   spinnakerName:

#2

Hi

Any update on this? I have also got this error today. Exact same installation process worked successfully before.


#3

Yes, I tailed the logs of the spinnaker-spi statefulset with kubectl logs -f when it was deploying and found that it was failing at a syntax error.


#4

Thanks. For me I did’t have syntax error. It is failing while starting spinnaker halyard:

  Running validation: Validating security with HalconfigValidator 

 

  Running validation: Validating security with HalconfigValidator 

 

  Running validation: Validating security with HalconfigValidator 

 

  Running validation: Validating security with HalconfigValidator 

 

  Running validation: Validating security with HalconfigValidator 

 

  Running validation: Validating security with HalconfigValidator 

 

  Running validation: Validating security with HalconfigValidator 

 

  Failure 

Problems in : 
Unexpected exception: java.lang.RuntimeException: Unable to 
  merge service settings: null 
Failed to prep Spinnaker deployment 

Was this the same error you received, right? may I ask what syntax error did you have?


#5

If I am not mistaken that looks like output from haylard and not the statefulSet pod.


#6

Yes, this is halyard logs while starting.


#7

I’m saying you need to tail the statefulsets’ logs.


#8

I have just run again the same Helm installation with no changes. No errors this time!