• Rafael Fernández López's avatar
    kubeadm: improve resiliency when conflicts arise when updating the kubeadm-config ConfigMap · bc8bafd8
    Rafael Fernández López authored
    Add the functionality to support `CreateOrMutateConfigMap` and `MutateConfigMap`.
    
    * `CreateOrMutateConfigMap` will try to create a given ConfigMap object; if this ConfigMap
      already exists, a new version of the resource will be retrieved from the server and a
      mutator callback will be called on it. Then, an `Update` of the mutated object will be
      performed. If there's a conflict during this `Update` operation, retry until no conflict
      happens. On every retry the object is refreshed from the server to the latest version.
    
    * `MutateConfigMap` will try to get the latest version of the ConfigMap from the server,
      call the mutator callback and then try to `Update` the mutated object. If there's a
      conflict during this `Update` operation, retry until no conflict happens. On every retry
      the object is refreshed from the server to the latest version.
    
    Add unit tests for `MutateConfigMap`
    
    * One test checks that in case of no conflicts, the update of the
      given ConfigMap happens without any issues.
    
    * Another test mimics 5 consecutive CONFLICT responses when updating
      the given ConfigMap, whereas the sixth try it will work.
    bc8bafd8