Repository: kubermatic/machine-controller
Pull request #1290 (2022-05-17 07:39:46)

Split prowjobs; move them to .prow directory
Signed-off-by: Waleed Malik <ahmedwaleedmalik@gmail.com>

**What this PR does / why we need it**:
🤷‍♂️ 

**Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>` format, will close the issue(s) when PR gets merged)*:
Fixes #

**Special notes for your reviewer**:

**Optional Release Note**:
<!--
Write your release note:
1. Enter your extended release note in the below block. If the PR requires additional action from users switching to the new release, include the string "action required".
2. If no release note is required, just write "NONE".
-->
```release-note
NONE
```


kubermatic-bot: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/kubermatic/machine-controller/pull/1290#" title="Author self-approved">ahmedwaleedmalik</a>*

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=kubermatic%2Fmachine-controller).

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

<details >
Needs approval from an approver in each of these files:

- ~~[OWNERS](https://github.com/kubermatic/machine-controller/blob/master/OWNERS)~~ [ahmedwaleedmalik]

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->
kubermatic-bot: @ahmedwaleedmalik: The following test **failed**, say `/retest` to rerun all failed tests or `/retest-required` to rerun all mandatory failed tests:

Test name | Commit | Details | Required | Rerun command
--- | --- | --- | --- | ---
pull-machine-controller-e2e-azure-custom-image-reference | 77680163f44083f45b37e4a6847e12c6ad6ae285 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/1290/pull-machine-controller-e2e-azure-custom-image-reference/1526467511342600192) | true | `/test pull-machine-controller-e2e-azure-custom-image-reference`

[Full PR test history](https://public-prow.loodse.com/pr-history?org=kubermatic&repo=machine-controller&pr=1290)

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
ahmedwaleedmalik: /retest

Patch:
diff --git a/.prow.yaml b/.prow.yaml
deleted file mode 100644
index f9ea92b6..00000000
--- a/.prow.yaml
+++ /dev/null
@@ -1,929 +0,0 @@
----
-presubmits:
-  - name: pull-machine-controller-build
-    always_run: true
-    decorate: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - make
-          args:
-            - download-gocache
-            - all
-          resources:
-            requests:
-              cpu: 1
-
-  - name: pull-machine-controller-dependencies
-    always_run: true
-    decorate: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - make
-          args:
-            - check-dependencies
-          resources:
-            requests:
-              cpu: 800m
-
-  - name: pull-machine-controller-lint
-    always_run: true
-    decorate: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golangci/golangci-lint:v1.42.1
-          command:
-            - make
-          args:
-            - lint
-          resources:
-            requests:
-              cpu: 800m
-              memory: 6Gi
-
-  - name: pull-machine-controller-yamllint
-    always_run: true
-    decorate: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: quay.io/kubermatic/yamllint:0.1
-          command:
-            - "sh"
-            - "-c"
-            - "yamllint -c .yamllint.conf ."
-          resources:
-            requests:
-              cpu: 200m
-
-  - name: pre-machine-controller-verify-shfmt
-    run_if_changed: "^hack/"
-    decorate: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    spec:
-      containers:
-      - image: docker.io/mvdan/shfmt:v3.3.1
-        command:
-        - "/bin/shfmt"
-        args:
-        #   -l        list files whose formatting differs from shfmt's
-        #   -d        error with a diff when the formatting differs
-        #   -i uint   indent: 0 for tabs (default), >0 for number of spaces
-        #   -sr       redirect operators will be followed by a space
-        - "-l"
-        - "-sr"
-        - "-i"
-        - "2"
-        - "-d"
-        - "hack"
-        resources:
-          requests:
-            memory: 32Mi
-            cpu: 50m
-          limits:
-            memory: 256Mi
-            cpu: 250m
-
-  - name: pull-machine-controller-verify-boilerplate
-    always_run: true
-    decorate: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    spec:
-      containers:
-        - image: quay.io/kubermatic-labs/boilerplate:v0.2.0
-          command:
-            - "./hack/verify-boilerplate.sh"
-          resources:
-            requests:
-              memory: 64Mi
-              cpu: 100m
-
-  - name: pull-machine-controller-license-validation
-    run_if_changed: "^go.(mod|sum)$"
-    decorate: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-goproxy: "true"
-    spec:
-      containers:
-      - image: quay.io/kubermatic/wwhrd:0.4.0-1
-        command:
-        - ./hack/verify-licenses.sh
-        resources:
-          requests:
-            memory: 512Mi
-            cpu: 1
-
-  - name: pull-machine-controller-test
-    always_run: true
-    decorate: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - make
-          args:
-            - download-gocache
-            - test-unit
-          resources:
-            requests:
-              cpu: 800m
-
-  - name: pull-machine-controller-e2e-invalid-objects-get-rejected
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-aws: "true"
-      preset-azure: "true"
-      preset-digitalocean: "true"
-      preset-gce: "true"
-      preset-e2e-ssh: "true"
-      preset-hetzner: "true"
-      preset-openstack: "true"
-      preset-vsphere: "true"
-      preset-kubevirt: "true"
-      preset-alibaba: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestInvalidObjectsGetRejected"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-kubevirt
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    max_concurrency: 1
-    labels:
-      preset-kubevirt: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-rhel: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestKubevirtProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-alibaba
-    optional: true
-    always_run: false
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    max_concurrency: 1
-    labels:
-      preset-alibaba: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestAlibabaProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-custom-ca
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-openstack: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-rhel: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestCustomCAsAreApplied"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-openstack
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-openstack: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-rhel: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestOpenstackProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-openstack-project-auth
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-openstack: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-rhel: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestOpenstackProjectAuthProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-aws
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-aws: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-rhel: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestAWSProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-aws-arm
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-aws: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestAWSARMProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-digitalocean
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-digitalocean: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestDigitalOceanProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-azure
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-azure: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-rhel: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestAzureProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-azure-custom-image-reference
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-azure: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-rhel: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestAzureCustomImageReferenceProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-azure-redhat-satellite
-    optional: true
-    always_run: false
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-azure: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-rhel: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestAzureProvisioningE2ERedhatSatellite"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-gce
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-gce: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-rhel: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestGCEProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-hetzner
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestHetznerProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-linode
-    always_run: false
-    optional: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-linode: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestLinodeProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-equinix-metal
-    optional: true
-    run_if_changed: pkg\/cloudprovider\/provider\/equinixmetal\/.*
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-equinix-metal: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestEquinixMetalProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-cherryservers
-    optional: true
-    run_if_changed: pkg\/cloudprovider\/provider\/cherryservers\/.*
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-cherryservers: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestCherryServersProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-vsphere
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-vsphere: "true"
-      preset-rhel: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestVsphereProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-nutanix
-    optional: true
-    always_run: false
-    run_if_changed: "(pkg/cloudprovider/provider/nutanix/)"
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-nutanix: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestNutanixProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-anexia
-    always_run: false
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-anexia: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-      - image: golang:1.18.1
-        command:
-        - "./hack/ci-e2e-test.sh"
-        args:
-        - "TestAnexiaProvisioningE2E"
-        resources:
-          requests:
-            memory: 1Gi
-            cpu: 500m
-
-  - name: pull-machine-controller-e2e-ubuntu-upgrade
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-openstack: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestUbuntuProvisioningWithUpgradeE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-deployment-upgrade
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestDeploymentControllerUpgradesMachineE2E"
-          env:
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-aws-ebs-encryption-enabled
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-aws: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestAWSEbsEncryptionEnabledProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-aws-flatcar-containerd
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-aws: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestAWSFlatcarContainerdProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-aws-spot-instance
-    always_run: true
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-aws: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-goproxy: "true"
-      preset-rhel: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestAWSSpotInstanceProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-aws-sles
-    always_run: false
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-aws: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestAWSSLESProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-aws-flatcar-coreos-cloud-init
-    always_run: false
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-aws: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestAWSFlatcarCoreOSCloudInit8ProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-aws-centos8
-    always_run: false
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-aws: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestAWSCentOS8ProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-vsphere-datastore-cluster
-    always_run: false
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-vsphere: "true"
-      preset-rhel: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestVsphereDatastoreClusterProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-vsphere-resource-pool
-    always_run: false
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-vsphere: "true"
-      preset-rhel: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestVsphereResourcePoolProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-scaleway
-    always_run: false
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-scaleway: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestScalewayProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-  - name: pull-machine-controller-e2e-aws-assume-role
-    always_run: false
-    decorate: true
-    error_on_eviction: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    labels:
-      preset-aws-assume-role: "true"
-      preset-hetzner: "true"
-      preset-e2e-ssh: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: golang:1.18.1
-          command:
-            - "./hack/ci-e2e-test.sh"
-          args:
-            - "TestAWSAssumeRoleProvisioningE2E"
-          resources:
-            requests:
-              memory: 1Gi
-              cpu: 500m
-
-postsubmits:
-  - name: ci-push-machine-controller-image
-    always_run: true
-    decorate: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    branches:
-      - ^master$
-      # Match on tags
-      - ^v\d+\.\d+\.\d+.*
-    labels:
-      preset-docker-push: "true"
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: quay.io/kubermatic/build:go-1.18-node-16-kind-0.12-1
-          command:
-            - /bin/bash
-            - -c
-            - |
-              set -euo pipefail
-              start-docker.sh
-              docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_PASSWORD
-              docker login -u $QUAY_IO_USERNAME -p $QUAY_IO_PASSWORD quay.io
-              make download-gocache docker-image-publish
-          # docker-in-docker needs privileged mode
-          securityContext:
-            privileged: true
-          resources:
-            requests:
-              cpu: 2
-              memory: 1Gi
-
-  - name: ci-push-machine-controller-upload-gocache
-    always_run: true
-    decorate: true
-    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
-    branches:
-      - ^master$
-    labels:
-      preset-goproxy: "true"
-    spec:
-      containers:
-        - image: quay.io/kubermatic/build:go-1.18-node-16-kind-0.12-1
-          command:
-            - "./hack/ci-upload-gocache.sh"
-          resources:
-            requests:
-              cpu: 2
-              memory: 1Gi
diff --git a/.prow/postsubmits.yaml b/.prow/postsubmits.yaml
new file mode 100644
index 00000000..e76fef47
--- /dev/null
+++ b/.prow/postsubmits.yaml
@@ -0,0 +1,63 @@
+# Copyright 2022 The Machine Controller Authors.
+#
+# 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.
+
+postsubmits:
+  - name: ci-push-machine-controller-image
+    always_run: true
+    decorate: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    branches:
+      - ^master$
+      # Match on tags
+      - ^v\d+\.\d+\.\d+.*
+    labels:
+      preset-docker-push: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: quay.io/kubermatic/build:go-1.18-node-16-kind-0.12-1
+          command:
+            - /bin/bash
+            - -c
+            - |
+              set -euo pipefail
+              start-docker.sh
+              docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_PASSWORD
+              docker login -u $QUAY_IO_USERNAME -p $QUAY_IO_PASSWORD quay.io
+              make download-gocache docker-image-publish
+          # docker-in-docker needs privileged mode
+          securityContext:
+            privileged: true
+          resources:
+            requests:
+              cpu: 2
+              memory: 1Gi
+
+  - name: ci-push-machine-controller-upload-gocache
+    always_run: true
+    decorate: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    branches:
+      - ^master$
+    labels:
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: quay.io/kubermatic/build:go-1.18-node-16-kind-0.12-1
+          command:
+            - "./hack/ci-upload-gocache.sh"
+          resources:
+            requests:
+              cpu: 2
+              memory: 1Gi
diff --git a/.prow/provider-alibaba.yaml b/.prow/provider-alibaba.yaml
new file mode 100644
index 00000000..e1dfd9eb
--- /dev/null
+++ b/.prow/provider-alibaba.yaml
@@ -0,0 +1,38 @@
+# Copyright 2022 The Machine Controller Authors.
+#
+# 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.
+
+presubmits:
+  - name: pull-machine-controller-e2e-alibaba
+    optional: true
+    always_run: false
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    max_concurrency: 1
+    labels:
+      preset-alibaba: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestAlibabaProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
diff --git a/.prow/provider-anexia.yaml b/.prow/provider-anexia.yaml
new file mode 100644
index 00000000..de9a4b92
--- /dev/null
+++ b/.prow/provider-anexia.yaml
@@ -0,0 +1,36 @@
+# Copyright 2022 The Machine Controller Authors.
+#
+# 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.
+
+presubmits:
+  - name: pull-machine-controller-e2e-anexia
+    always_run: false
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-anexia: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestAnexiaProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
diff --git a/.prow/provider-aws.yaml b/.prow/provider-aws.yaml
new file mode 100644
index 00000000..4fc458e8
--- /dev/null
+++ b/.prow/provider-aws.yaml
@@ -0,0 +1,214 @@
+# Copyright 2022 The Machine Controller Authors.
+#
+# 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.
+
+presubmits:
+  - name: pull-machine-controller-e2e-aws
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-aws: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-rhel: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestAWSProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
+
+  - name: pull-machine-controller-e2e-aws-arm
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-aws: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestAWSARMProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
+
+  - name: pull-machine-controller-e2e-aws-ebs-encryption-enabled
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-aws: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestAWSEbsEncryptionEnabledProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
+
+  - name: pull-machine-controller-e2e-aws-flatcar-containerd
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-aws: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestAWSFlatcarContainerdProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
+
+  - name: pull-machine-controller-e2e-aws-spot-instance
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-aws: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-goproxy: "true"
+      preset-rhel: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestAWSSpotInstanceProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
+
+  - name: pull-machine-controller-e2e-aws-sles
+    always_run: false
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-aws: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestAWSSLESProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
+
+  - name: pull-machine-controller-e2e-aws-flatcar-coreos-cloud-init
+    always_run: false
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-aws: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestAWSFlatcarCoreOSCloudInit8ProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
+
+  - name: pull-machine-controller-e2e-aws-centos8
+    always_run: false
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-aws: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestAWSCentOS8ProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
+
+  - name: pull-machine-controller-e2e-aws-assume-role
+    always_run: false
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-aws-assume-role: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestAWSAssumeRoleProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
diff --git a/.prow/provider-azure.yaml b/.prow/provider-azure.yaml
new file mode 100644
index 00000000..ee0999f3
--- /dev/null
+++ b/.prow/provider-azure.yaml
@@ -0,0 +1,84 @@
+# Copyright 2022 The Machine Controller Authors.
+#
+# 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.
+
+presubmits:
+  - name: pull-machine-controller-e2e-azure
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-azure: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-rhel: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestAzureProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
+
+  - name: pull-machine-controller-e2e-azure-custom-image-reference
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-azure: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-rhel: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestAzureCustomImageReferenceProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
+
+  - name: pull-machine-controller-e2e-azure-redhat-satellite
+    optional: true
+    always_run: false
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-azure: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-rhel: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestAzureProvisioningE2ERedhatSatellite"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
diff --git a/.prow/provider-digitalocean.yaml b/.prow/provider-digitalocean.yaml
new file mode 100644
index 00000000..e2a869dd
--- /dev/null
+++ b/.prow/provider-digitalocean.yaml
@@ -0,0 +1,36 @@
+# Copyright 2022 The Machine Controller Authors.
+#
+# 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.
+
+presubmits:
+  - name: pull-machine-controller-e2e-digitalocean
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-digitalocean: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestDigitalOceanProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
diff --git a/.prow/provider-equinix-metal.yaml b/.prow/provider-equinix-metal.yaml
new file mode 100644
index 00000000..f18630ea
--- /dev/null
+++ b/.prow/provider-equinix-metal.yaml
@@ -0,0 +1,37 @@
+# Copyright 2022 The Machine Controller Authors.
+#
+# 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.
+
+presubmits:
+  - name: pull-machine-controller-e2e-equinix-metal
+    optional: true
+    run_if_changed: pkg\/cloudprovider\/provider\/equinixmetal\/.*
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-equinix-metal: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestEquinixMetalProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
diff --git a/.prow/provider-gcp.yaml b/.prow/provider-gcp.yaml
new file mode 100644
index 00000000..09a4bacc
--- /dev/null
+++ b/.prow/provider-gcp.yaml
@@ -0,0 +1,37 @@
+# Copyright 2022 The Machine Controller Authors.
+#
+# 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.
+
+presubmits:
+  - name: pull-machine-controller-e2e-gce
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-gce: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-rhel: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestGCEProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
diff --git a/.prow/provider-hetzner.yaml b/.prow/provider-hetzner.yaml
new file mode 100644
index 00000000..ffd7b61b
--- /dev/null
+++ b/.prow/provider-hetzner.yaml
@@ -0,0 +1,35 @@
+# Copyright 2022 The Machine Controller Authors.
+#
+# 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.
+
+presubmits:
+  - name: pull-machine-controller-e2e-hetzner
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestHetznerProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
diff --git a/.prow/provider-kubevirt.yaml b/.prow/provider-kubevirt.yaml
new file mode 100644
index 00000000..6a044a7e
--- /dev/null
+++ b/.prow/provider-kubevirt.yaml
@@ -0,0 +1,38 @@
+# Copyright 2022 The Machine Controller Authors.
+#
+# 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.
+
+presubmits:
+  - name: pull-machine-controller-e2e-kubevirt
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    max_concurrency: 1
+    labels:
+      preset-kubevirt: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-rhel: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestKubevirtProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
diff --git a/.prow/provider-linode.yaml b/.prow/provider-linode.yaml
new file mode 100644
index 00000000..0c330dc5
--- /dev/null
+++ b/.prow/provider-linode.yaml
@@ -0,0 +1,37 @@
+# Copyright 2022 The Machine Controller Authors.
+#
+# 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.
+
+presubmits:
+  - name: pull-machine-controller-e2e-linode
+    always_run: false
+    optional: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-linode: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestLinodeProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
diff --git a/.prow/provider-nutanix.yaml b/.prow/provider-nutanix.yaml
new file mode 100644
index 00000000..7853dee2
--- /dev/null
+++ b/.prow/provider-nutanix.yaml
@@ -0,0 +1,38 @@
+# Copyright 2022 The Machine Controller Authors.
+#
+# 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.
+
+presubmits:
+  - name: pull-machine-controller-e2e-nutanix
+    optional: true
+    always_run: false
+    run_if_changed: "(pkg/cloudprovider/provider/nutanix/)"
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-nutanix: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestNutanixProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
diff --git a/.prow/provider-openstack.yaml b/.prow/provider-openstack.yaml
new file mode 100644
index 00000000..49dfd4bd
--- /dev/null
+++ b/.prow/provider-openstack.yaml
@@ -0,0 +1,60 @@
+# Copyright 2022 The Machine Controller Authors.
+#
+# 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.
+
+presubmits:
+  - name: pull-machine-controller-e2e-openstack
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-openstack: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-rhel: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestOpenstackProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
+
+  - name: pull-machine-controller-e2e-openstack-project-auth
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-openstack: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-rhel: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestOpenstackProjectAuthProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
diff --git a/.prow/provider-scaleway.yaml b/.prow/provider-scaleway.yaml
new file mode 100644
index 00000000..34f732fd
--- /dev/null
+++ b/.prow/provider-scaleway.yaml
@@ -0,0 +1,36 @@
+# Copyright 2022 The Machine Controller Authors.
+#
+# 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.
+
+presubmits:
+  - name: pull-machine-controller-e2e-scaleway
+    always_run: false
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-scaleway: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestScalewayProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
diff --git a/.prow/provider-vsphere.yaml b/.prow/provider-vsphere.yaml
new file mode 100644
index 00000000..a9357ccd
--- /dev/null
+++ b/.prow/provider-vsphere.yaml
@@ -0,0 +1,83 @@
+# Copyright 2022 The Machine Controller Authors.
+#
+# 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.
+
+presubmits:
+  - name: pull-machine-controller-e2e-vsphere
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-vsphere: "true"
+      preset-rhel: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestVsphereProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
+
+  - name: pull-machine-controller-e2e-vsphere-datastore-cluster
+    always_run: false
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-vsphere: "true"
+      preset-rhel: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestVsphereDatastoreClusterProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
+
+  - name: pull-machine-controller-e2e-vsphere-resource-pool
+    always_run: false
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-vsphere: "true"
+      preset-rhel: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestVsphereResourcePoolProvisioningE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
diff --git a/.prow/verify.yaml b/.prow/verify.yaml
new file mode 100644
index 00000000..ca05ea61
--- /dev/null
+++ b/.prow/verify.yaml
@@ -0,0 +1,160 @@
+# Copyright 2022 The Machine Controller Authors.
+#
+# 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.
+
+presubmits:
+  - name: pull-machine-controller-build
+    always_run: true
+    decorate: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - make
+          args:
+            - download-gocache
+            - all
+          resources:
+            requests:
+              cpu: 1
+
+  - name: pull-machine-controller-dependencies
+    always_run: true
+    decorate: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - make
+          args:
+            - check-dependencies
+          resources:
+            requests:
+              cpu: 800m
+
+  - name: pull-machine-controller-lint
+    always_run: true
+    decorate: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golangci/golangci-lint:v1.42.1
+          command:
+            - make
+          args:
+            - lint
+          resources:
+            requests:
+              cpu: 800m
+              memory: 6Gi
+
+  - name: pull-machine-controller-yamllint
+    always_run: true
+    decorate: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: quay.io/kubermatic/yamllint:0.1
+          command:
+            - "sh"
+            - "-c"
+            - "yamllint -c .yamllint.conf ."
+          resources:
+            requests:
+              cpu: 200m
+
+  - name: pre-machine-controller-verify-shfmt
+    run_if_changed: "^hack/"
+    decorate: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    spec:
+      containers:
+        - image: docker.io/mvdan/shfmt:v3.3.1
+          command:
+            - "/bin/shfmt"
+          args:
+            #   -l        list files whose formatting differs from shfmt's
+            #   -d        error with a diff when the formatting differs
+            #   -i uint   indent: 0 for tabs (default), >0 for number of spaces
+            #   -sr       redirect operators will be followed by a space
+            - "-l"
+            - "-sr"
+            - "-i"
+            - "2"
+            - "-d"
+            - "hack"
+          resources:
+            requests:
+              memory: 32Mi
+              cpu: 50m
+            limits:
+              memory: 256Mi
+              cpu: 250m
+
+  - name: pull-machine-controller-verify-boilerplate
+    always_run: true
+    decorate: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    spec:
+      containers:
+        - image: quay.io/kubermatic-labs/boilerplate:v0.2.0
+          command:
+            - "./hack/verify-boilerplate.sh"
+          resources:
+            requests:
+              memory: 64Mi
+              cpu: 100m
+
+  - name: pull-machine-controller-license-validation
+    run_if_changed: "^go.(mod|sum)$"
+    decorate: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: quay.io/kubermatic/wwhrd:0.4.0-1
+          command:
+            - ./hack/verify-licenses.sh
+          resources:
+            requests:
+              memory: 512Mi
+              cpu: 1
+
+  - name: pull-machine-controller-test
+    always_run: true
+    decorate: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - make
+          args:
+            - download-gocache
+            - test-unit
+          resources:
+            requests:
+              cpu: 800m
diff --git a/docs/anexia.md b/docs/anexia.md
index 4d186831..5a224f53 100644
--- a/docs/anexia.md
+++ b/docs/anexia.md
@@ -6,4 +6,14 @@ This provider implementation is currently in **alpha** state.
 
 Only flatcar linux is currently supported and you explicitly have to set the provisioning mechanism to cloud-init by setting `machine.spec.providerSpec.value.operatingSystemSpec.provisioningUtility` to "cloud-init".
 
-An example machine deployment can be found here: [examples/anexia-machinedeployment.yaml](../examples/anexia-machinedeployment.yaml)
\ No newline at end of file
+An example machine deployment can be found here: [examples/anexia-machinedeployment.yaml](../examples/anexia-machinedeployment.yaml)
+
+## Templates
+
+To retrieve all available templates against a given location:
+
+```
+https://engine.anexia-it.com/api/vsphere/v1/provisioning/templates.json/<location identifier>/templates?page=1&limit=50&api_key=<API Key>
+```
+
+Templates are rotated pretty often, to include updates and latest security patches. Outdated versions of templates are not retained as a result and they get removed after some time.
diff --git a/pkg/cloudprovider/provider/azure/provider.go b/pkg/cloudprovider/provider/azure/provider.go
index 5cde5322..c002224b 100644
--- a/pkg/cloudprovider/provider/azure/provider.go
+++ b/pkg/cloudprovider/provider/azure/provider.go
@@ -142,8 +142,8 @@ var imageReferences = map[providerconfigtypes.OperatingSystem]compute.ImageRefer
 	providerconfigtypes.OperatingSystemRHEL: {
 		Publisher: to.StringPtr("RedHat"),
 		Offer:     to.StringPtr("rhel-byos"),
-		Sku:       to.StringPtr("rhel-lvm83"),
-		Version:   to.StringPtr("8.3.20201109"),
+		Sku:       to.StringPtr("rhel-lvm85"),
+		Version:   to.StringPtr("8.5.20220316"),
 	},
 	providerconfigtypes.OperatingSystemFlatcar: {
 		Publisher: to.StringPtr("kinvolk"),
@@ -166,7 +166,7 @@ var osPlans = map[providerconfigtypes.OperatingSystem]*compute.Plan{
 		Product:   pointer.StringPtr("flatcar-container-linux"),
 	},
 	providerconfigtypes.OperatingSystemRHEL: {
-		Name:      pointer.StringPtr("rhel-lvm83"),
+		Name:      pointer.StringPtr("rhel-lvm85"),
 		Publisher: pointer.StringPtr("redhat"),
 		Product:   pointer.StringPtr("rhel-byos"),
 	},
@@ -221,7 +221,7 @@ func getOSImageReference(c *config, os providerconfigtypes.OperatingSystem) (*co
 	return &ref, nil
 }
 
-// New returns a digitalocean provider
+// New returns a new azure provider
 func New(configVarResolver *providerconfig.ConfigVarResolver) cloudprovidertypes.Provider {
 	return &provider{configVarResolver: configVarResolver}
 }
diff --git a/pkg/controller/machine/bootstrap.go b/pkg/controller/machine/bootstrap.go
index d6870558..92916f4a 100644
--- a/pkg/controller/machine/bootstrap.go
+++ b/pkg/controller/machine/bootstrap.go
@@ -31,6 +31,7 @@ import (
 	providerconfigtypes "github.com/kubermatic/machine-controller/pkg/providerconfig/types"
 	"github.com/kubermatic/machine-controller/pkg/userdata/convert"
 	"github.com/kubermatic/machine-controller/pkg/userdata/helper"
+	"github.com/kubermatic/machine-controller/pkg/userdata/rhel"
 
 	ctrlruntimeclient "sigs.k8s.io/controller-runtime/pkg/client"
 )
@@ -123,6 +124,7 @@ func getOSMBootstrapUserDataForCloudInit(req plugin.UserDataRequest, pconfig *pr
 		MachineName     string
 		EnterpriseLinux bool
 		ProviderSpec    *providerconfigtypes.Config
+		RHELConfig      rhel.Config
 	}{
 		Token:        token,
 		SecretName:   secretName,
@@ -132,8 +134,9 @@ func getOSMBootstrapUserDataForCloudInit(req plugin.UserDataRequest, pconfig *pr
 	}
 
 	var (
-		bsScript *template.Template
-		err      error
+		rhelConfig *rhel.Config
+		bsScript   *template.Template
+		err        error
 	)
 
 	switch pconfig.OperatingSystem {
@@ -159,6 +162,10 @@ func getOSMBootstrapUserDataForCloudInit(req plugin.UserDataRequest, pconfig *pr
 			return "", fmt.Errorf("failed to parse bootstrapZypperBinContentTemplate template: %v", err)
 		}
 	case providerconfigtypes.OperatingSystemRHEL:
+		rhelConfig, err = rhel.LoadConfig(pconfig.OperatingSystemSpec)
+		if err != nil {
+			return "", fmt.Errorf("failed to parse OperatingSystemSpec: %w", err)
+		}
 		bsScript, err = template.New("bootstrap-cloud-init").Parse(bootstrapYumBinContentTemplate)
 		if err != nil {
 			return "", fmt.Errorf("failed to parse bootstrapYumBinContentTemplate template: %v", err)
@@ -182,12 +189,14 @@ func getOSMBootstrapUserDataForCloudInit(req plugin.UserDataRequest, pconfig *pr
 		plugin.UserDataRequest
 		ProviderSpec        *providerconfigtypes.Config
 		BootstrapKubeconfig string
+		RHELConfig          *rhel.Config
 	}{
 		Script:              base64.StdEncoding.EncodeToString(script.Bytes()),
 		Service:             base64.StdEncoding.EncodeToString([]byte(bootstrapServiceContentTemplate)),
 		UserDataRequest:     req,
 		ProviderSpec:        pconfig,
 		BootstrapKubeconfig: base64.StdEncoding.EncodeToString([]byte(bootstrapKfg)),
+		RHELConfig:          rhelConfig,
 	})
 	if err != nil {
 		return "", fmt.Errorf("failed to execute cloudInitTemplate template: %v", err)
@@ -238,7 +247,9 @@ fi
 {{- if .EnterpriseLinux }}
 yum install epel-release -y
 {{- end }}
+
 yum install -y curl jq
+
 curl -s -k -v --header 'Authorization: Bearer {{ .Token }}' {{ .ServerURL }}/api/v1/namespaces/cloud-init-settings/secrets/{{ .SecretName }} | jq '.data["cloud-config"]' -r| base64 -d > /etc/cloud/cloud.cfg.d/{{ .SecretName }}.cfg
 cloud-init clean
 cloud-init --file /etc/cloud/cloud.cfg.d/{{ .SecretName }}.cfg init
@@ -305,7 +316,7 @@ write_files:
   encoding: b64
   content: |
     {{ .BootstrapKubeconfig }}
-{{- if and (eq .ProviderSpec.CloudProvider "openstack") (eq .ProviderSpec.OperatingSystem "centos") }}
+{{- if and (eq .ProviderSpec.CloudProvider "openstack") (or (eq .ProviderSpec.OperatingSystem "centos") (eq .ProviderSpec.OperatingSystem "rhel")) }}
 {{- /*  The normal way of setting it via cloud-init is broken, see */}}
 {{- /*  https://bugs.launchpad.net/cloud-init/+bug/1662542 */}}
 - path: /etc/hostname
@@ -328,6 +339,19 @@ write_files:
 runcmd:
 - systemctl restart bootstrap.service
 - systemctl daemon-reload
+{{- if .RHELConfig }}
+rh_subscription:
+{{- if .RHELConfig.RHELUseSatelliteServer }}
+  org: "{{.RHELConfig.RHELOrganizationName}}"
+  activation-key: "{{.RHELConfig.RHELActivationKey}}"
+  server-hostname: {{ .RHELConfig.RHELSatelliteServer }}
+  rhsm-baseurl: https://{{ .RHELConfig.RHELSatelliteServer }}/pulp/repos
+{{- else }}
+  username: "{{.RHELConfig.RHELSubscriptionManagerUser}}"
+  password: "{{.RHELConfig.RHELSubscriptionManagerPassword}}"
+  auto-attach: {{.RHELConfig.AttachSubscription}}
+{{- end }}
+{{- end }}
 `
 
 	ignitionBootstrapBinContentTemplate = `#!/bin/bash
diff --git a/pkg/userdata/rhel/provider.go b/pkg/userdata/rhel/provider.go
index 41aa68e4..1d382137 100644
--- a/pkg/userdata/rhel/provider.go
+++ b/pkg/userdata/rhel/provider.go
@@ -204,9 +204,6 @@ write_files:
 {{- /*  https://bugs.launchpad.net/cloud-init/+bug/1662542 */}}
     hostnamectl set-hostname {{ .MachineSpec.Name }}
     {{ end }}
-    {{ if eq .CloudProviderName "azure" }}
-    yum update -y --disablerepo='*' --enablerepo='*microsoft*'
-    {{ end }}
     yum install -y \
       device-mapper-persistent-data \
       lvm2 \


Test patch:
diff --git a/.prow/e2e-features.yaml b/.prow/e2e-features.yaml
new file mode 100644
index 00000000..ed4bb04f
--- /dev/null
+++ b/.prow/e2e-features.yaml
@@ -0,0 +1,110 @@
+# Copyright 2022 The Machine Controller Authors.
+#
+# 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.
+
+presubmits:
+  - name: pull-machine-controller-e2e-invalid-objects-get-rejected
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-aws: "true"
+      preset-azure: "true"
+      preset-digitalocean: "true"
+      preset-gce: "true"
+      preset-e2e-ssh: "true"
+      preset-hetzner: "true"
+      preset-openstack: "true"
+      preset-vsphere: "true"
+      preset-kubevirt: "true"
+      preset-alibaba: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestInvalidObjectsGetRejected"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
+
+  - name: pull-machine-controller-e2e-custom-ca
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-openstack: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-rhel: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestCustomCAsAreApplied"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
+
+  - name: pull-machine-controller-e2e-ubuntu-upgrade
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-openstack: "true"
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestUbuntuProvisioningWithUpgradeE2E"
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
+
+  - name: pull-machine-controller-e2e-deployment-upgrade
+    always_run: true
+    decorate: true
+    error_on_eviction: true
+    clone_uri: "ssh://git@github.com/kubermatic/machine-controller.git"
+    labels:
+      preset-hetzner: "true"
+      preset-e2e-ssh: "true"
+      preset-goproxy: "true"
+    spec:
+      containers:
+        - image: golang:1.18.1
+          command:
+            - "./hack/ci-e2e-test.sh"
+          args:
+            - "TestDeploymentControllerUpgradesMachineE2E"
+          env:
+          resources:
+            requests:
+              memory: 1Gi
+              cpu: 500m
diff --git a/pkg/userdata/rhel/testdata/kubelet-v1.21-aws.yaml b/pkg/userdata/rhel/testdata/kubelet-v1.21-aws.yaml
index 5c1466da..db6c4a38 100644
--- a/pkg/userdata/rhel/testdata/kubelet-v1.21-aws.yaml
+++ b/pkg/userdata/rhel/testdata/kubelet-v1.21-aws.yaml
@@ -67,7 +67,6 @@ write_files:
     systemctl restart systemd-modules-load.service
     sysctl --system
 
-
     yum install -y \
       device-mapper-persistent-data \
       lvm2 \
diff --git a/pkg/userdata/rhel/testdata/kubelet-v1.22-aws.yaml b/pkg/userdata/rhel/testdata/kubelet-v1.22-aws.yaml
index e6fdfe08..7f25ec49 100644
--- a/pkg/userdata/rhel/testdata/kubelet-v1.22-aws.yaml
+++ b/pkg/userdata/rhel/testdata/kubelet-v1.22-aws.yaml
@@ -67,7 +67,6 @@ write_files:
     systemctl restart systemd-modules-load.service
     sysctl --system
 
-
     yum install -y \
       device-mapper-persistent-data \
       lvm2 \
diff --git a/pkg/userdata/rhel/testdata/kubelet-v1.22-nutanix.yaml b/pkg/userdata/rhel/testdata/kubelet-v1.22-nutanix.yaml
index 669402bb..6ba2ce6e 100644
--- a/pkg/userdata/rhel/testdata/kubelet-v1.22-nutanix.yaml
+++ b/pkg/userdata/rhel/testdata/kubelet-v1.22-nutanix.yaml
@@ -72,7 +72,6 @@ write_files:
 
     hostnamectl set-hostname node1
 
-
     yum install -y \
       device-mapper-persistent-data \
       lvm2 \
diff --git a/pkg/userdata/rhel/testdata/kubelet-v1.23-aws-external.yaml b/pkg/userdata/rhel/testdata/kubelet-v1.23-aws-external.yaml
index 6a5b4afb..2ab3000d 100644
--- a/pkg/userdata/rhel/testdata/kubelet-v1.23-aws-external.yaml
+++ b/pkg/userdata/rhel/testdata/kubelet-v1.23-aws-external.yaml
@@ -67,7 +67,6 @@ write_files:
     systemctl restart systemd-modules-load.service
     sysctl --system
 
-
     yum install -y \
       device-mapper-persistent-data \
       lvm2 \
diff --git a/pkg/userdata/rhel/testdata/kubelet-v1.23-aws.yaml b/pkg/userdata/rhel/testdata/kubelet-v1.23-aws.yaml
index ed0a5ebf..c43fa270 100644
--- a/pkg/userdata/rhel/testdata/kubelet-v1.23-aws.yaml
+++ b/pkg/userdata/rhel/testdata/kubelet-v1.23-aws.yaml
@@ -67,7 +67,6 @@ write_files:
     systemctl restart systemd-modules-load.service
     sysctl --system
 
-
     yum install -y \
       device-mapper-persistent-data \
       lvm2 \
diff --git a/pkg/userdata/rhel/testdata/kubelet-v1.23-vsphere-mirrors.yaml b/pkg/userdata/rhel/testdata/kubelet-v1.23-vsphere-mirrors.yaml
index faf4f953..01e0d1df 100644
--- a/pkg/userdata/rhel/testdata/kubelet-v1.23-vsphere-mirrors.yaml
+++ b/pkg/userdata/rhel/testdata/kubelet-v1.23-vsphere-mirrors.yaml
@@ -80,7 +80,6 @@ write_files:
 
     hostnamectl set-hostname node1
 
-
     yum install -y \
       device-mapper-persistent-data \
       lvm2 \
diff --git a/pkg/userdata/rhel/testdata/kubelet-v1.23-vsphere-proxy.yaml b/pkg/userdata/rhel/testdata/kubelet-v1.23-vsphere-proxy.yaml
index 7d390cc9..38e98cb9 100644
--- a/pkg/userdata/rhel/testdata/kubelet-v1.23-vsphere-proxy.yaml
+++ b/pkg/userdata/rhel/testdata/kubelet-v1.23-vsphere-proxy.yaml
@@ -80,7 +80,6 @@ write_files:
 
     hostnamectl set-hostname node1
 
-
     yum install -y \
       device-mapper-persistent-data \
       lvm2 \
diff --git a/pkg/userdata/rhel/testdata/kubelet-v1.23-vsphere.yaml b/pkg/userdata/rhel/testdata/kubelet-v1.23-vsphere.yaml
index 8c978904..693e29a4 100644
--- a/pkg/userdata/rhel/testdata/kubelet-v1.23-vsphere.yaml
+++ b/pkg/userdata/rhel/testdata/kubelet-v1.23-vsphere.yaml
@@ -72,7 +72,6 @@ write_files:
 
     hostnamectl set-hostname node1
 
-
     yum install -y \
       device-mapper-persistent-data \
       lvm2 \
diff --git a/pkg/userdata/rhel/testdata/kubelet-v1.24-aws-external.yaml b/pkg/userdata/rhel/testdata/kubelet-v1.24-aws-external.yaml
index 89a7a747..b1e1e884 100644
--- a/pkg/userdata/rhel/testdata/kubelet-v1.24-aws-external.yaml
+++ b/pkg/userdata/rhel/testdata/kubelet-v1.24-aws-external.yaml
@@ -67,7 +67,6 @@ write_files:
     systemctl restart systemd-modules-load.service
     sysctl --system
 
-
     yum install -y \
       device-mapper-persistent-data \
       lvm2 \
diff --git a/pkg/userdata/rhel/testdata/kubelet-v1.24-aws.yaml b/pkg/userdata/rhel/testdata/kubelet-v1.24-aws.yaml
index 8dc58fd1..b91e171b 100644
--- a/pkg/userdata/rhel/testdata/kubelet-v1.24-aws.yaml
+++ b/pkg/userdata/rhel/testdata/kubelet-v1.24-aws.yaml
@@ -67,7 +67,6 @@ write_files:
     systemctl restart systemd-modules-load.service
     sysctl --system
 
-
     yum install -y \
       device-mapper-persistent-data \
       lvm2 \
diff --git a/pkg/userdata/rhel/testdata/pod-cidr-azure-rhel.yaml b/pkg/userdata/rhel/testdata/pod-cidr-azure-rhel.yaml
index 6cb508a5..f804908c 100644
--- a/pkg/userdata/rhel/testdata/pod-cidr-azure-rhel.yaml
+++ b/pkg/userdata/rhel/testdata/pod-cidr-azure-rhel.yaml
@@ -72,9 +72,6 @@ write_files:
 
     hostnamectl set-hostname node1
 
-
-    yum update -y --disablerepo='*' --enablerepo='*microsoft*'
-
     yum install -y \
       device-mapper-persistent-data \
       lvm2 \