Uploaded image for project: 'Machine Config Operator'
  1. Machine Config Operator
  2. MCO-585

Land BuildController



    • Story
    • Resolution: Done
    • Normal
    • None
    • None
    • None
    • MCO Sprint 234, MCO Sprint 235, MCO Sprint 236, MCO Sprint 237, MCO Sprint 238, MCO Sprint 239
    • 0
    • 0.0


      The first phase of the layering effort involved creating a BuildController, whose job is to start and manage builds using the OpenShift Build API. We can use the work done to create the BuildController as the basis for our MVP. However, what we need from BuildController right now is less than BuildController currently provides. With that in mind, we need to remove certain parts of BuildController to create a more streamlined and simpler implementation ideal for an MVP.


      Done when a version of BuildController is landed which does the following things:

      • Listens for all MachineConfigPool events. If a MachineConfigPool with a specific label or annotation (e.g., machineconfiguration.openshift.io/layering-enabled), the BuildController should retrieve the latest rendered MachineConfig associated with the MachineConfigPool, generate a series of inputs to a builder backend (for now, the OpenShift Build API can be the first backend), then update the MachineConfigPool with the outcome of that action. In the case of a successful build, the MachineConfigPool should be updated with the image pullspec for the newly-built image. For now, this can come in the form of an annotation or a label (e.g., machineconfiguration.openshift.io/desired-os-image = "image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/coreos@sha256:abcdef1234567890...). But eventually, it should be a Status field on the MachineConfigPool object.
      • Reads from a ConfigMap which contains the following items (let's call it machine-os-builder-config for now):
        • Name of the base OS image pull secret.
        • Name of the final OS image push secret.
        • Target container registry and org / repo information for where to push the final OS image (e.g., image-registry.openshift-image-registry.svc:5000/openshift-machine-config-operator/coreos).
      • All functionality around managing ImageStreams and OpenShift Builds is removed or decoupled. In the case of the OpenShift Build functionality, it will be decoupled instead of completely removed. Additionally, it should not use BuildConfigs. It should instead create and manage image Build objects directly.
      • Use contexts for handling shutdowns and timeouts.
      • Unit tests are written for the major BuildController functionalities using either FakeClient or EnvTest.
      • The modified BuildController and its tests are merged into the master branch of the MCO. Note: This does not mean that it will be immediately active in the MCO's execution path. However, tests will be executed in CI.


        Issue Links



              zzlotnik@redhat.com Zack Zlotnik
              zzlotnik@redhat.com Zack Zlotnik
              0 Vote for this issue
              2 Start watching this issue