spinnakerspinnaker-halyard

Spinnaker: How to bring custom boms into spinnaker pod to be able to deploy it with hal?


I would like to provide a custom BOM (Bill of Materials) to spinnaker so that I can configure the repos according to my needs. I am new to k8s, helm and spinnaker and altought reading the docu there are some things not entirely clear how to do that...

Problem

I do not have access to the gcs store nor do I have direct access to external repos. So I need to configure the artifactSources accordingly

According to the docu I guess I should provide a custom bom in a way that they be read from the filesystem - so inside the container spinnaker-spinnaker-halyard-0

My steps

Prepare kubernetes cluster

I do the initial deployment with helm something like

helm install stable/spinnaker --name=spinnaker --namespace=spinnaker -f values.yml

After I connect to the spinnaker-spinnaker-halyard-0 pod and run

$ kubectl.exe exec -it spinnaker-spinnaker-halyard-0 -n spinnaker bash

Deploy Spinnaker

According to the docu here and here I would do do something like

$ hal config version edit --version local:1.11.6
$ hal deploy apply

Which fails obviously cause there is no local bom file

Problems in Global:
! ERROR Unable to retrieve the Spinnaker bill of materials for
  version "local:1.11.6": /home/spinnaker/.hal/.boms/bom/1.11.6.yml (No such file
  or directory)

- Failed to prep Spinnaker deployment

Question: How to provide custom BOM?

According to the docu the boms are expected to be in a specific directory and structure ${HALCONFIG_DIR}/.boms/boms/${VERSION}.yml

So how to I get my custom POM there? When I look at the helm-chart I don't see (or understand) how I could do that e.g. via additional-config-maps


Solution

  • I found a way but it is manually done, working within the spinnaker-spinnaker-halyard container. I'm sure there is a better way...

    I add a custom bom as additionalConfigMap to the values.yml file

    ...
      additionalConfigMaps:
        create: true
        data:
          # https://storage.googleapis.com/halconfig/bom
          bom_1.12.4.yml: |
            version: 1.12.4
            timestamp: '2019-03-01 08:06:24'
            services:
              echo:
                version: 2.3.1-20190214121429
                commit: 5db9d437ca7f2fa374dcada17f77bbbb2965bd67
              clouddriver:
                version: 4.3.4-20190301030607
                commit: b5539c47aad309e24428abb8f8303aff45323b43
              deck:
                version: 2.7.4-20190228030607
                commit: dccdd730886a6beb0388e3622581d8da1ed8edbb
              fiat:
                version: 1.3.2-20190128153726
                commit: daf21b24330a5f22866601559aa0f7ac99590274
              front50:
                version: 0.15.2-20190222161456
                commit: 3105e86b8c084ad6ad78507e3a5e5a427f290b99
              gate:
                version: 1.5.2-20190301030607
                commit: b238ab993ab25381ce907260879548ed74a4953f
              igor:
                version: 1.1.1-20190213190226
                commit: 63d06a5c5d55f07443dd60a81035b35cf96238e7
              kayenta:
                version: 0.6.1-20190221030610
                commit: 81d906bf8307143f40fe88f8554baa318de25ef1
              orca:
                version: 2.3.1-20190220030610
                commit: bad45e78566449117b678a3317552cf53d0dd14e
              rosco:
                version: 0.9.0-20190123170846
                commit: 42f81a2501de6d40676d47661579a6106b5c3e8a
              defaultArtifact: {}
              monitoring-third-party:
                version: 0.11.2-20190222030609
                commit: 232c84a8a87cecbc17f157dd180643a8b2e6067a
              monitoring-daemon:
                version: 0.11.2-20190222030609
                commit: 232c84a8a87cecbc17f157dd180643a8b2e6067a
            dependencies:
              redis:
                version: 2:2.8.4-2
              consul:
                version: 0.7.5
              vault:
                version: 0.7.0
            artifactSources:
              debianRepository: https://nexus.intra/repository/spinnaker-releases/
              dockerRegistry: nexus.intra:5000/spinnaker-marketplace
              googleImageProject: marketplace-spinnaker-release
              gitPrefix: https://scm.intra/scm/SPIN/repos
    

    Then link the custom bom in the halyard container, configure the version and run the deployment

    mkdir -p ~/.hal/.boms/bom
    ln -s /opt/halyard/additionalConfigMaps/bom_1.12.4.yml ~/.hal/.boms/bom/1.12.4.yml
    hal config version edit --version local:1.12.4
    hal deploy apply