Repository: kubermatic/machine-controller
Pull request #789 (2020-06-27 08:20:46)

Add rhel satellite subscription
**What this PR does / why we need it**:
Support Redhat Satellite Server Subscription in the machine controller while using rhel os, in addition to support Azure marketplace image plans. 

**Which issue(s) this PR fixes**:
Fixes kubermatic/machine-controller#780
Fixes kubermatic/machine-controller#788

**Special notes for your reviewer**:
At the moment there is no available redhat satellite server support in our testing infrastructure thus the e2e test is disabled. The code has been tested in a different staging env. For more details about the testing please refer to @chrkl. 

**Optional Release Note**:
```release-note
Adding the support for Redhat satellite server hosts registering/subscription on machine creation and unregistering/unsubscribing on machine cleanup. 
```


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

This pull-request has been approved by: *<a href="https://github.com/kubermatic/machine-controller/pull/789#" title="Author self-approved">moadqassem</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)~~ [moadqassem]

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: @moadqassem: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-verify-boilerplate | ed2e4f0160ed1b6c85bfe8cd8b1c3a6d80447e01 | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-verify-boilerplate/1276792710618943491) | `/test pull-machine-controller-verify-boilerplate`

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

<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 -->
kubermatic-bot: @moadqassem: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-verify-boilerplate | ed2e4f0160ed1b6c85bfe8cd8b1c3a6d80447e01 | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-verify-boilerplate/1276792710618943491) | `/test pull-machine-controller-verify-boilerplate`
pull-machine-controller-yamllint | ed2e4f0160ed1b6c85bfe8cd8b1c3a6d80447e01 | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-yamllint/1276792710597971970) | `/test pull-machine-controller-yamllint`

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

<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 -->
kubermatic-bot: @moadqassem: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-verify-boilerplate | ed2e4f0160ed1b6c85bfe8cd8b1c3a6d80447e01 | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-verify-boilerplate/1276792710618943491) | `/test pull-machine-controller-verify-boilerplate`
pull-machine-controller-yamllint | ed2e4f0160ed1b6c85bfe8cd8b1c3a6d80447e01 | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-yamllint/1276792710597971970) | `/test pull-machine-controller-yamllint`
pull-machine-controller-lint | ed2e4f0160ed1b6c85bfe8cd8b1c3a6d80447e01 | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-lint/1276792710618943488) | `/test pull-machine-controller-lint`

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

<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 -->
moadqassem: cc @chrkl 
kubermatic-bot: @moadqassem: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-e2e-vsphere-resource-pool | a5c58f23b103f9d06a4852896151215b0e0a373e | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-vsphere-resource-pool/1277566183750504448) | `/test pull-machine-controller-e2e-vsphere-resource-pool`

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

<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 -->
kubermatic-bot: @moadqassem: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-e2e-vsphere-resource-pool | a5c58f23b103f9d06a4852896151215b0e0a373e | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-vsphere-resource-pool/1277566183750504448) | `/test pull-machine-controller-e2e-vsphere-resource-pool`
pull-machine-controller-e2e-vsphere | a5c58f23b103f9d06a4852896151215b0e0a373e | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-vsphere/1277566183704367104) | `/test pull-machine-controller-e2e-vsphere`

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

<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 -->
kubermatic-bot: @moadqassem: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-e2e-vsphere | a5c58f23b103f9d06a4852896151215b0e0a373e | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-vsphere/1277566183704367104) | `/test pull-machine-controller-e2e-vsphere`
pull-machine-controller-e2e-vsphere-resource-pool | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-vsphere-resource-pool/1277602298075287552) | `/test pull-machine-controller-e2e-vsphere-resource-pool`

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

<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 -->
kubermatic-bot: @moadqassem: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-e2e-vsphere | a5c58f23b103f9d06a4852896151215b0e0a373e | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-vsphere/1277566183704367104) | `/test pull-machine-controller-e2e-vsphere`
pull-machine-controller-e2e-vsphere-resource-pool | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-vsphere-resource-pool/1277602298075287552) | `/test pull-machine-controller-e2e-vsphere-resource-pool`
pull-machine-controller-e2e-kubevirt-dns-config | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-kubevirt-dns-config/1277602297710383104) | `/test pull-machine-controller-e2e-kubevirt-dns-config`

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

<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 -->
kubermatic-bot: @moadqassem: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-e2e-vsphere | a5c58f23b103f9d06a4852896151215b0e0a373e | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-vsphere/1277566183704367104) | `/test pull-machine-controller-e2e-vsphere`
pull-machine-controller-e2e-vsphere-resource-pool | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-vsphere-resource-pool/1277602298075287552) | `/test pull-machine-controller-e2e-vsphere-resource-pool`
pull-machine-controller-e2e-kubevirt-dns-config | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-kubevirt-dns-config/1277602297710383104) | `/test pull-machine-controller-e2e-kubevirt-dns-config`
pull-machine-controller-e2e-kubevirt | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-kubevirt/1277602297722966016) | `/test pull-machine-controller-e2e-kubevirt`

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

<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 -->
kubermatic-bot: @moadqassem: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-e2e-vsphere-resource-pool | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-vsphere-resource-pool/1277602298075287552) | `/test pull-machine-controller-e2e-vsphere-resource-pool`
pull-machine-controller-e2e-kubevirt-dns-config | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-kubevirt-dns-config/1277602297710383104) | `/test pull-machine-controller-e2e-kubevirt-dns-config`
pull-machine-controller-e2e-kubevirt | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-kubevirt/1277602297722966016) | `/test pull-machine-controller-e2e-kubevirt`
pull-machine-controller-e2e-vsphere | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-vsphere/1277602297743937536) | `/test pull-machine-controller-e2e-vsphere`

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

<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 -->
kubermatic-bot: LGTM label has been added.  <details>Git tree hash: 1b6b78fa181df4dbeeeb40ba0ed61d8615746119</details>
kubermatic-triage-bot: /retest
This bot automatically retries jobs that failed/flaked on approved PRs

Review the [full test history](https://prow.loodse.com/pr-history/?org=kubermatic&repo=machine-controller&pr=789)

Silence the bot with an `/lgtm cancel` or `/hold` comment for consistent failures.

Also, here is a cat.
/meow
kubermatic-bot: @kubermatic-triage-bot: ![cat image](https://cdn2.thecatapi.com/images/4tm.jpg)

<details>

In response to [this](https://github.com/kubermatic/machine-controller/pull/789#issuecomment-651215342):

>/retest
>This bot automatically retries jobs that failed/flaked on approved PRs
>
>Review the [full test history](https://prow.loodse.com/pr-history/?org=kubermatic&repo=machine-controller&pr=789)
>
>Silence the bot with an `/lgtm cancel` or `/hold` comment for consistent failures.
>
>Also, here is a cat.
>/meow


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.
</details>
kubermatic-bot: @moadqassem: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-e2e-vsphere-resource-pool | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-vsphere-resource-pool/1277602298075287552) | `/test pull-machine-controller-e2e-vsphere-resource-pool`
pull-machine-controller-e2e-kubevirt | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-kubevirt/1277602297722966016) | `/test pull-machine-controller-e2e-kubevirt`
pull-machine-controller-e2e-vsphere | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-vsphere/1277602297743937536) | `/test pull-machine-controller-e2e-vsphere`
pull-machine-controller-e2e-kubevirt-dns-config | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-kubevirt-dns-config/1277634506676768768) | `/test pull-machine-controller-e2e-kubevirt-dns-config`

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

<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 -->
kubermatic-bot: @moadqassem: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-e2e-vsphere-resource-pool | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-vsphere-resource-pool/1277602298075287552) | `/test pull-machine-controller-e2e-vsphere-resource-pool`
pull-machine-controller-e2e-vsphere | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-vsphere/1277602297743937536) | `/test pull-machine-controller-e2e-vsphere`
pull-machine-controller-e2e-kubevirt-dns-config | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-kubevirt-dns-config/1277634506676768768) | `/test pull-machine-controller-e2e-kubevirt-dns-config`
pull-machine-controller-e2e-kubevirt | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-kubevirt/1277634506685157376) | `/test pull-machine-controller-e2e-kubevirt`

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

<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 -->
kubermatic-triage-bot: /retest
This bot automatically retries jobs that failed/flaked on approved PRs

Review the [full test history](https://prow.loodse.com/pr-history/?org=kubermatic&repo=machine-controller&pr=789)

Silence the bot with an `/lgtm cancel` or `/hold` comment for consistent failures.

Also, here is a cat.
/meow
kubermatic-bot: @kubermatic-triage-bot: ![cat image](https://cdn2.thecatapi.com/images/9k4.jpg)

<details>

In response to [this](https://github.com/kubermatic/machine-controller/pull/789#issuecomment-651316306):

>/retest
>This bot automatically retries jobs that failed/flaked on approved PRs
>
>Review the [full test history](https://prow.loodse.com/pr-history/?org=kubermatic&repo=machine-controller&pr=789)
>
>Silence the bot with an `/lgtm cancel` or `/hold` comment for consistent failures.
>
>Also, here is a cat.
>/meow


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.
</details>
kubermatic-bot: @moadqassem: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-e2e-kubevirt | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-kubevirt/1277634506685157376) | `/test pull-machine-controller-e2e-kubevirt`
pull-machine-controller-e2e-kubevirt-dns-config | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-kubevirt-dns-config/1277686602734243840) | `/test pull-machine-controller-e2e-kubevirt-dns-config`

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

<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 -->
kubermatic-bot: @moadqassem: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-e2e-kubevirt-dns-config | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-kubevirt-dns-config/1277686602734243840) | `/test pull-machine-controller-e2e-kubevirt-dns-config`
pull-machine-controller-e2e-kubevirt | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-kubevirt/1277686602746826752) | `/test pull-machine-controller-e2e-kubevirt`

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

<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 -->
kubermatic-triage-bot: /retest
This bot automatically retries jobs that failed/flaked on approved PRs

Review the [full test history](https://prow.loodse.com/pr-history/?org=kubermatic&repo=machine-controller&pr=789)

Silence the bot with an `/lgtm cancel` or `/hold` comment for consistent failures.

Also, here is a cat.
/meow
kubermatic-bot: @kubermatic-triage-bot: ![cat image](https://cdn2.thecatapi.com/images/7rv.gif)

<details>

In response to [this](https://github.com/kubermatic/machine-controller/pull/789#issuecomment-651361028):

>/retest
>This bot automatically retries jobs that failed/flaked on approved PRs
>
>Review the [full test history](https://prow.loodse.com/pr-history/?org=kubermatic&repo=machine-controller&pr=789)
>
>Silence the bot with an `/lgtm cancel` or `/hold` comment for consistent failures.
>
>Also, here is a cat.
>/meow


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.
</details>
kubermatic-bot: @moadqassem: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-e2e-kubevirt | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-kubevirt/1277686602746826752) | `/test pull-machine-controller-e2e-kubevirt`
pull-machine-controller-e2e-kubevirt-dns-config | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-kubevirt-dns-config/1277707740159938560) | `/test pull-machine-controller-e2e-kubevirt-dns-config`

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

<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 -->
kubermatic-bot: @moadqassem: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-e2e-kubevirt-dns-config | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-kubevirt-dns-config/1277707740159938560) | `/test pull-machine-controller-e2e-kubevirt-dns-config`
pull-machine-controller-e2e-kubevirt | ca580d42b105cd8796de081abeaab01910fee24f | [link](https://public-prow.loodse.com/view/gcs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/789/pull-machine-controller-e2e-kubevirt/1277707740147355648) | `/test pull-machine-controller-e2e-kubevirt`

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

<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 -->
moadqassem: /hold
xrstf: /override pull-machine-controller-e2e-kubevirt-dns-config
/override pull-machine-controller-e2e-kubevirt
kubermatic-bot: @xrstf: Overrode contexts on behalf of xrstf: pull-machine-controller-e2e-kubevirt, pull-machine-controller-e2e-kubevirt-dns-config

<details>

In response to [this](https://github.com/kubermatic/machine-controller/pull/789#issuecomment-651605174):

>/override pull-machine-controller-e2e-kubevirt-dns-config
>/override pull-machine-controller-e2e-kubevirt


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.
</details>
moadqassem: /unhold

Patch:
diff --git a/.prow.yaml b/.prow.yaml
index cc51eca9..a416d5e7 100644
--- a/.prow.yaml
+++ b/.prow.yaml
@@ -260,6 +260,29 @@ presubmits:
               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"
+    spec:
+      containers:
+        - image: golang:1.13.8
+          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
diff --git a/pkg/cloudprovider/provider/azure/provider.go b/pkg/cloudprovider/provider/azure/provider.go
index 598e5efd..90aa2b40 100644
--- a/pkg/cloudprovider/provider/azure/provider.go
+++ b/pkg/cloudprovider/provider/azure/provider.go
@@ -82,6 +82,7 @@ type config struct {
 	SecurityGroupName string
 	ImageID           string
 	Zones             []string
+	ImagePlan         *compute.Plan
 
 	OSDiskSize   int32
 	DataDiskSize int32
@@ -262,6 +263,14 @@ func (p *provider) getConfig(s v1alpha1.ProviderSpec) (*config, *providerconfigt
 	c.OSDiskSize = rawCfg.OSDiskSize
 	c.DataDiskSize = rawCfg.DataDiskSize
 
+	if rawCfg.ImagePlan != nil {
+		c.ImagePlan = &compute.Plan{
+			Name:      pointer.StringPtr(rawCfg.ImagePlan.Name),
+			Publisher: pointer.StringPtr(rawCfg.ImagePlan.Publisher),
+			Product:   pointer.StringPtr(rawCfg.ImagePlan.Product),
+		}
+	}
+
 	c.ImageID, err = p.configVarResolver.GetConfigVarStringValue(rawCfg.ImageID)
 	if err != nil {
 		return nil, nil, fmt.Errorf("failed to get image id: %v", err)
@@ -489,6 +498,11 @@ func (p *provider) Create(machine *v1alpha1.Machine, data *cloudprovidertypes.Pr
 	}
 	tags[machineUIDTag] = to.StringPtr(string(machine.UID))
 
+	osPlane := osPlans[providerCfg.OperatingSystem]
+	if config.ImagePlan != nil {
+		osPlane = config.ImagePlan
+	}
+
 	adminUserName := getOSUsername(providerCfg.OperatingSystem)
 	storageProfile, err := getStorageProfile(config, providerCfg)
 	if err != nil {
@@ -496,7 +510,7 @@ func (p *provider) Create(machine *v1alpha1.Machine, data *cloudprovidertypes.Pr
 	}
 	vmSpec := compute.VirtualMachine{
 		Location: &config.Location,
-		Plan:     osPlans[providerCfg.OperatingSystem],
+		Plan:     osPlane,
 		VirtualMachineProperties: &compute.VirtualMachineProperties{
 			HardwareProfile: &compute.HardwareProfile{VMSize: compute.VirtualMachineSizeTypes(config.VMSize)},
 			NetworkProfile: &compute.NetworkProfile{
diff --git a/pkg/cloudprovider/provider/azure/types/types.go b/pkg/cloudprovider/provider/azure/types/types.go
index 226d5fbe..9ef8dd30 100644
--- a/pkg/cloudprovider/provider/azure/types/types.go
+++ b/pkg/cloudprovider/provider/azure/types/types.go
@@ -36,6 +36,7 @@ type RawConfig struct {
 	AvailabilitySet   providerconfigtypes.ConfigVarString `json:"availabilitySet"`
 	SecurityGroupName providerconfigtypes.ConfigVarString `json:"securityGroupName"`
 	Zones             []string                            `json:"zones"`
+	ImagePlan         *ImagePlan                          `json:"ImagePlan"`
 
 	ImageID        providerconfigtypes.ConfigVarString `json:"imageID"`
 	OSDiskSize     int32                               `json:"osDiskSize"`
@@ -43,3 +44,10 @@ type RawConfig struct {
 	AssignPublicIP providerconfigtypes.ConfigVarBool   `json:"assignPublicIP"`
 	Tags           map[string]string                   `json:"tags,omitempty"`
 }
+
+// ImagePlan contains azure OS Plan fields for the marketplace images
+type ImagePlan struct {
+	Name      string `json:"name,omitempty"`
+	Publisher string `json:"publisher,omitempty"`
+	Product   string `json:"product,omitempty"`
+}
diff --git a/pkg/controller/machine/machine.go b/pkg/controller/machine/machine.go
index a8516294..12620d19 100644
--- a/pkg/controller/machine/machine.go
+++ b/pkg/controller/machine/machine.go
@@ -108,6 +108,7 @@ type Reconciler struct {
 	skipEvictionAfter                time.Duration
 	nodeSettings                     NodeSettings
 	redhatSubscriptionManager        rhsm.RedHatSubscriptionManager
+	satelliteSubscriptionManager     rhsm.SatelliteSubscriptionManager
 }
 
 type NodeSettings struct {
@@ -171,6 +172,7 @@ func Add(
 		skipEvictionAfter:                skipEvictionAfter,
 		nodeSettings:                     nodeSettings,
 		redhatSubscriptionManager:        rhsm.NewRedHatSubscriptionManager(),
+		satelliteSubscriptionManager:     rhsm.NewSatelliteSubscriptionManager(),
 	}
 	m, err := userdatamanager.New()
 	if err != nil {
@@ -569,21 +571,28 @@ func (r *Reconciler) deleteCloudProviderInstance(prov cloudprovidertypes.Provide
 			return nil, fmt.Errorf("failed to get rhel os specs: %v", err)
 		}
 
-		if rhelConfig.RHSMOfflineToken != "" {
-			machineName := machine.Name
-			if machineConfig.CloudProvider == providerconfigtypes.CloudProviderAWS {
-				for _, address := range machine.Status.Addresses {
-					if address.Type == corev1.NodeInternalDNS {
-						machineName = address.Address
-					}
+		machineName := machine.Name
+		if machineConfig.CloudProvider == providerconfigtypes.CloudProviderAWS {
+			for _, address := range machine.Status.Addresses {
+				if address.Type == corev1.NodeInternalDNS {
+					machineName = address.Address
 				}
 			}
+		}
 
+		if rhelConfig.RHSMOfflineToken != "" {
 			if err := r.redhatSubscriptionManager.UnregisterInstance(rhelConfig.RHSMOfflineToken, machineName); err != nil {
 				return nil, fmt.Errorf("failed to delete subscription for machine name %s: %v", machine.Name, err)
 			}
 		}
 
+		if rhelConfig.RHELUseSatelliteServer {
+			if err := r.satelliteSubscriptionManager.DeleteSatelliteHost(machineName, rhelConfig.RHELSubscriptionManagerUser,
+				rhelConfig.RHELSubscriptionManagerPassword, rhelConfig.RHELSatelliteServer); err != nil {
+				return nil, fmt.Errorf("failed to delete redhat satellite host for machine name %s: %v", machine.Name, err)
+			}
+		}
+
 		if err := rhsm.RemoveRHELSubscriptionFinalizer(machine, r.updateMachine); err != nil {
 			return nil, fmt.Errorf("failed to remove redhat subscription finalizer: %v", err)
 		}
diff --git a/pkg/rhsm/satellite_subscription_manager.go b/pkg/rhsm/satellite_subscription_manager.go
new file mode 100644
index 00000000..d8130350
--- /dev/null
+++ b/pkg/rhsm/satellite_subscription_manager.go
@@ -0,0 +1,113 @@
+/*
+Copyright 2020 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.
+*/
+
+package rhsm
+
+import (
+	"crypto/tls"
+	"errors"
+	"fmt"
+	"net/http"
+	"net/url"
+	"path"
+	"time"
+
+	"k8s.io/klog"
+)
+
+// SatelliteSubscriptionManager manages the communications between machine-controller and redhat satellite server
+type SatelliteSubscriptionManager interface {
+	DeleteSatelliteHost(machineName, username, password, serverURL string) error
+}
+
+// DefaultSatelliteSubscriptionManager default manager for redhat satellite server.
+type DefaultSatelliteSubscriptionManager struct {
+	client *http.Client
+
+	useHTTP bool
+}
+
+// NewSatelliteSubscriptionManager creates a new Redhat satellite manager.
+func NewSatelliteSubscriptionManager() SatelliteSubscriptionManager {
+	client := &http.Client{
+		Transport: &http.Transport{
+			TLSClientConfig: &tls.Config{
+				InsecureSkipVerify: true,
+			},
+			TLSHandshakeTimeout: defaultTimeout,
+		},
+		Timeout: defaultTimeout,
+	}
+
+	return &DefaultSatelliteSubscriptionManager{
+		client: client,
+	}
+}
+
+func (s *DefaultSatelliteSubscriptionManager) DeleteSatelliteHost(machineName, username, password, serverURL string) error {
+	if machineName == "" || username == "" || password == "" || serverURL == "" {
+		return errors.New("satellite server url, username or password cannot be empty")
+	}
+
+	var (
+		retries    = 0
+		maxRetries = 15
+	)
+
+	for retries < maxRetries {
+		if err := s.executeDeleteRequest(machineName, username, password, serverURL); err != nil {
+			klog.Errorf("failed to execute satellite subscription deletion: %v", err)
+			retries++
+			time.Sleep(500 * time.Second)
+			continue
+		}
+
+		klog.Infof("subscription for machine %s deleted successfully", machineName)
+		return nil
+	}
+
+	return errors.New("failed to delete system profile after max retires number has been reached")
+}
+
+func (s *DefaultSatelliteSubscriptionManager) executeDeleteRequest(machineName, username, password, serverURL string) error {
+	var requestURL url.URL
+	requestURL.Scheme = "http"
+	if !s.useHTTP {
+		requestURL.Scheme = "https"
+	}
+	requestURL.Host = serverURL
+	requestURL.Path = path.Join("api", "v2", "hosts", machineName)
+
+	deleteHostRequest, err := http.NewRequest(http.MethodDelete, requestURL.String(), nil)
+	if err != nil {
+		return fmt.Errorf("failed to create a delete host request: %v", err)
+	}
+
+	deleteHostRequest.SetBasicAuth(username, password)
+
+	response, err := s.client.Do(deleteHostRequest)
+	if err != nil {
+		return fmt.Errorf("failed executing delete host request: %v", err)
+	}
+	defer response.Body.Close()
+
+	if response.StatusCode != http.StatusOK {
+		return fmt.Errorf("error while executing request with status code: %v", response.StatusCode)
+	}
+
+	klog.Infof("host %v has been deleted successfully", machineName)
+	return nil
+}
diff --git a/pkg/userdata/rhel/provider.go b/pkg/userdata/rhel/provider.go
index 38633510..712c0e4f 100644
--- a/pkg/userdata/rhel/provider.go
+++ b/pkg/userdata/rhel/provider.go
@@ -312,9 +312,16 @@ write_files:
     EnvironmentFile=-/etc/environment
 
 rh_subscription:
+{{- if .OSConfig.RHELUseSatelliteServer }}
+    org: "{{.OSConfig.RHELOrganizationName}}"
+    activation-key: "{{.OSConfig.RHELActivationKey}}"
+    server-hostname: {{ .OSConfig.RHELSatelliteServer }}
+    rhsm-baseurl: https://{{ .OSConfig.RHELSatelliteServer }}/pulp/repos
+{{- else }}
     username: "{{.OSConfig.RHELSubscriptionManagerUser}}"
     password: "{{.OSConfig.RHELSubscriptionManagerPassword}}"
     auto-attach: true
+{{- end }}
 
 runcmd:
 - systemctl enable --now setup.service
diff --git a/pkg/userdata/rhel/rhel.go b/pkg/userdata/rhel/rhel.go
index 1043554a..9cfe912b 100644
--- a/pkg/userdata/rhel/rhel.go
+++ b/pkg/userdata/rhel/rhel.go
@@ -28,6 +28,10 @@ type Config struct {
 	RHELSubscriptionManagerUser     string `json:"rhelSubscriptionManagerUser,omitempty"`
 	RHELSubscriptionManagerPassword string `json:"rhelSubscriptionManagerPassword,omitempty"`
 	RHSMOfflineToken                string `json:"rhsmOfflineToken,omitempty"`
+	RHELUseSatelliteServer          bool   `json:"rhelUseSatelliteServer"`
+	RHELSatelliteServer             string `json:"rhelSatelliteServer"`
+	RHELOrganizationName            string `json:"rhelOrganizationName"`
+	RHELActivationKey               string `json:"rhelActivationKey"`
 }
 
 // LoadConfig retrieves the RHEL configuration from raw data.


Test patch:
diff --git a/pkg/rhsm/satellite_subscription_manager_test.go b/pkg/rhsm/satellite_subscription_manager_test.go
new file mode 100644
index 00000000..f9b74dd1
--- /dev/null
+++ b/pkg/rhsm/satellite_subscription_manager_test.go
@@ -0,0 +1,82 @@
+/*
+Copyright 2020 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.
+*/
+
+package rhsm
+
+import (
+	"fmt"
+	"net/http"
+	"net/http/httptest"
+	"net/url"
+	"testing"
+)
+
+func TestDefaultRedHatSatelliteManager_DeleteSatelliteHost(t *testing.T) {
+	var (
+		satelliteUsername = "satellite-user"
+		satellitePassword = "satellite-password"
+	)
+	testCases := []struct {
+		name            string
+		satelliteServer string
+		testingServer   *httptest.Server
+	}{
+		{
+			name:            "execute redhat satellite unregister instance",
+			satelliteServer: "satellite-test-server",
+			testingServer:   createSatelliteTestingServer(satelliteUsername, satellitePassword),
+		},
+	}
+
+	for _, tt := range testCases {
+		t.Run(tt.name, func(t *testing.T) {
+			defer func() {
+				tt.testingServer.Close()
+			}()
+
+			manager := NewSatelliteSubscriptionManager()
+			manager.(*DefaultSatelliteSubscriptionManager).useHTTP = true
+
+			parsedURL, err := url.Parse(tt.testingServer.URL)
+			if err != nil {
+				t.Fatalf("failed to parse testing server url: %v", err)
+			}
+
+			err = manager.DeleteSatelliteHost("satellite-vm", satelliteUsername, satellitePassword, parsedURL.Host)
+			if err != nil {
+				t.Fatalf("failed to execute redhat host deletion")
+			}
+		})
+	}
+}
+
+func createSatelliteTestingServer(username, password string) *httptest.Server {
+	return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+		uname, pass, _ := r.BasicAuth()
+		if uname != username || pass != password {
+			w.WriteHeader(http.StatusUnauthorized)
+			fmt.Fprint(w, "fail")
+		}
+
+		if r.URL.Path != "/api/v2/hosts/satellite-vm" {
+			w.WriteHeader(http.StatusNotFound)
+			fmt.Fprint(w, "failed")
+		}
+
+		w.WriteHeader(http.StatusOK)
+		fmt.Fprint(w, "success")
+	}))
+}
diff --git a/test/e2e/provisioning/all_e2e_test.go b/test/e2e/provisioning/all_e2e_test.go
index f4a0aa69..21c7ca42 100644
--- a/test/e2e/provisioning/all_e2e_test.go
+++ b/test/e2e/provisioning/all_e2e_test.go
@@ -37,23 +37,24 @@ func init() {
 }
 
 const (
-	DOManifest                  = "./testdata/machinedeployment-digitalocean.yaml"
-	AWSManifest                 = "./testdata/machinedeployment-aws.yaml"
-	AWSEBSEncryptedManifest     = "./testdata/machinedeployment-aws-ebs-encryption-enabled.yaml"
-	AzureManifest               = "./testdata/machinedeployment-azure.yaml"
-	GCEManifest                 = "./testdata/machinedeployment-gce.yaml"
-	HZManifest                  = "./testdata/machinedeployment-hetzner.yaml"
-	PacketManifest              = "./testdata/machinedeployment-packet.yaml"
-	LinodeManifest              = "./testdata/machinedeployment-linode.yaml"
-	VSPhereManifest             = "./testdata/machinedeployment-vsphere.yaml"
-	VSPhereDSCManifest          = "./testdata/machinedeployment-vsphere-datastore-cluster.yaml"
-	VSPhereResourcePoolManifest = "./testdata/machinedeployment-vsphere-resource-pool.yaml"
-	OSManifest                  = "./testdata/machinedeployment-openstack.yaml"
-	OSUpgradeManifest           = "./testdata/machinedeployment-openstack-upgrade.yml"
-	invalidMachineManifest      = "./testdata/machine-invalid.yaml"
-	kubevirtManifest            = "./testdata/machinedeployment-kubevirt.yaml"
-	kubevirtManifestDNSConfig   = "./testdata/machinedeployment-kubevirt-dns-config.yaml"
-	alibabaManifest             = "./testdata/machinedeployment-alibaba.yaml"
+	DOManifest                   = "./testdata/machinedeployment-digitalocean.yaml"
+	AWSManifest                  = "./testdata/machinedeployment-aws.yaml"
+	AWSEBSEncryptedManifest      = "./testdata/machinedeployment-aws-ebs-encryption-enabled.yaml"
+	AzureManifest                = "./testdata/machinedeployment-azure.yaml"
+	AzureRedhatSatelliteManifest = "./testdata/machinedeployment-azure.yaml"
+	GCEManifest                  = "./testdata/machinedeployment-gce.yaml"
+	HZManifest                   = "./testdata/machinedeployment-hetzner.yaml"
+	PacketManifest               = "./testdata/machinedeployment-packet.yaml"
+	LinodeManifest               = "./testdata/machinedeployment-linode.yaml"
+	VSPhereManifest              = "./testdata/machinedeployment-vsphere.yaml"
+	VSPhereDSCManifest           = "./testdata/machinedeployment-vsphere-datastore-cluster.yaml"
+	VSPhereResourcePoolManifest  = "./testdata/machinedeployment-vsphere-resource-pool.yaml"
+	OSManifest                   = "./testdata/machinedeployment-openstack.yaml"
+	OSUpgradeManifest            = "./testdata/machinedeployment-openstack-upgrade.yml"
+	invalidMachineManifest       = "./testdata/machine-invalid.yaml"
+	kubevirtManifest             = "./testdata/machinedeployment-kubevirt.yaml"
+	kubevirtManifestDNSConfig    = "./testdata/machinedeployment-kubevirt-dns-config.yaml"
+	alibabaManifest              = "./testdata/machinedeployment-alibaba.yaml"
 )
 
 var testRunIdentifier = flag.String("identifier", "local", "The unique identifier for this test run")
@@ -258,6 +259,40 @@ func TestAzureProvisioningE2E(t *testing.T) {
 	runScenarios(t, selector, params, AzureManifest, fmt.Sprintf("azure-%s", *testRunIdentifier))
 }
 
+// TestAzureRedhatSatelliteProvisioningE2E - a test suite that exercises Azure provider
+// by requesting rhel node and subscribe to redhat satellite server.
+func TestAzureRedhatSatelliteProvisioningE2E(t *testing.T) {
+	t.Parallel()
+	t.Skip()
+
+	// test data
+	azureTenantID := os.Getenv("AZURE_E2E_TESTS_TENANT_ID")
+	azureSubscriptionID := os.Getenv("AZURE_E2E_TESTS_SUBSCRIPTION_ID")
+	azureClientID := os.Getenv("AZURE_E2E_TESTS_CLIENT_ID")
+	azureClientSecret := os.Getenv("AZURE_E2E_TESTS_CLIENT_SECRET")
+	if len(azureTenantID) == 0 || len(azureSubscriptionID) == 0 || len(azureClientID) == 0 || len(azureClientSecret) == 0 {
+		t.Fatal("unable to run the test suite, AZURE_TENANT_ID, AZURE_SUBSCRIPTION_ID, AZURE_CLIENT_ID and AZURE_CLIENT_SECRET environment variables cannot be empty")
+	}
+
+	// act
+	params := []string{
+		fmt.Sprintf("<< AZURE_TENANT_ID >>=%s", azureTenantID),
+		fmt.Sprintf("<< AZURE_SUBSCRIPTION_ID >>=%s", azureSubscriptionID),
+		fmt.Sprintf("<< AZURE_CLIENT_ID >>=%s", azureClientID),
+		fmt.Sprintf("<< AZURE_CLIENT_SECRET >>=%s", azureClientSecret),
+	}
+
+	scenario := scenario{
+		name:              "Azure redhat satellite server subscription",
+		osName:            "rhel",
+		containerRuntime:  "docker",
+		kubernetesVersion: "v1.17.0",
+		executor:          verifyCreateAndDelete,
+	}
+
+	testScenario(t, scenario, *testRunIdentifier, params, AzureRedhatSatelliteManifest, false)
+}
+
 // TestGCEProvisioningE2E - a test suite that exercises Google Cloud provider
 // by requesting nodes with different combination of container runtime type,
 // container runtime version and the OS flavour.
diff --git a/test/e2e/provisioning/testdata/machinedeployment-azure-redhat-satellite.yaml b/test/e2e/provisioning/testdata/machinedeployment-azure-redhat-satellite.yaml
new file mode 100644
index 00000000..9ab547f1
--- /dev/null
+++ b/test/e2e/provisioning/testdata/machinedeployment-azure-redhat-satellite.yaml
@@ -0,0 +1,59 @@
+apiVersion: "cluster.k8s.io/v1alpha1"
+kind: MachineDeployment
+metadata:
+  name: << MACHINE_NAME >>
+  namespace: kube-system
+spec:
+  replicas: 1
+  strategy:
+    type: RollingUpdate
+    rollingUpdate:
+      maxSurge: 1
+      maxUnavailable: 0
+  selector:
+    matchLabels:
+      name: << MACHINE_NAME >>
+  template:
+    metadata:
+      labels:
+        name: << MACHINE_NAME >>
+    spec:
+      providerSpec:
+        value:
+          sshPublicKeys:
+            - "<< YOUR_PUBLIC_KEY >>"
+          cloudProvider: "azure"
+          cloudProviderSpec:
+            tenantID: "<< AZURE_TENANT_ID >>"
+            clientID: "<< AZURE_CLIENT_ID >>"
+            clientSecret: "<< AZURE_CLIENT_SECRET >>"
+            subscriptionID: "<< AZURE_SUBSCRIPTION_ID >>"
+            location: "westeurope"
+            resourceGroup: "machine-controller-e2e"
+            vmSize: "Standard_F2"
+            # optional disk size values in GB. If not set, the defaults for the vmSize will be used.
+            vnetName: "machine-controller-e2e"
+            subnetName: "machine-controller-e2e"
+            imageID: "<< IMAGE_ID >>"
+            assignPublicIP: true
+            zones:
+              - "1"
+            imagePlan:
+              name: ""
+              publisher: ""
+              product: ""
+          operatingSystem: "<< OS_NAME >>"
+          operatingSystemSpec:
+            distUpgradeOnBoot: false
+            disableAutoUpdate: true
+            # 'rhelSubscriptionManagerUser' is only used for rhel os and can be set via env var `RHEL_SUBSCRIPTION_MANAGER_USER`
+            rhelSubscriptionManagerUser: "<< RHEL_SUBSCRIPTION_MANAGER_USER >>"
+            # 'rhelSubscriptionManagerPassword' is only used for rhel os and can be set via env var `RHEL_SUBSCRIPTION_MANAGER_PASSWORD`
+            rhelSubscriptionManagerPassword: "<< RHEL_SUBSCRIPTION_MANAGER_PASSWORD >>"
+            rhsmOfflineToken: "<< REDHAT_SUBSCRIPTIONS_OFFLINE_TOKEN >>"
+            rhelSatelliteServer: ""
+            rhelUseSatelliteServer: false
+            rhelOrganizationName: ""
+            rhelActivationKey: ""
+      versions:
+        kubelet: "1.17.0"