Repository: kubermatic/machine-controller
Pull request #999 (2021-06-13 11:49:27)

Add support for volume type openstack
Signed-off-by: Happy2C0de <46957159+Happy2C0de@users.noreply.github.com>

**What this PR does / why we need it**:
Adds support to add a volume type to the machine deployments. This goes along with the setting `rootDiskSizeGB` and I added it such that it's only applied if and only if the `rootDiskSizeGB` is specified. I think that makes sense.
Exposes the VolumeType option in the underlying library, see:
https://pkg.go.dev/github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/bootfromvolume#BlockDevice

**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
Add support to specify the root disk volume type in Openstack if booted from volume.
```


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

This pull-request has been approved by: *<a href="https://github.com/kubermatic/machine-controller/pull/999#" title="Author self-approved">Happy2C0de</a>*
To complete the [pull request process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process), please assign **mfranczy**
You can assign the PR to them by writing `/assign @mfranczy` in a comment when ready.

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

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

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

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":["mfranczy"]} -->
kubermatic-bot: Hi @Happy2C0de. Thanks for your PR.

I'm waiting for a [kubermatic](https://github.com/orgs/kubermatic/people) member to verify that this patch is reasonable to test. If it is, they should reply with `/ok-to-test` on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should [join the org](https://github.com/orgs/kubermatic/people) to skip this step.

Once the patch is verified, the new status will be reflected by the `ok-to-test` label.

I understand the commands that are listed [here](https://go.k8s.io/bot-commands?repo=kubermatic%2Fmachine-controller).

<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.
</details>

kron4eg: /test all
kubermatic-bot: @Happy2C0de: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-yamllint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-yamllint/1404050842188779521) | `/test pull-machine-controller-yamllint`

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

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

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-yamllint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-yamllint/1404050842188779521) | `/test pull-machine-controller-yamllint`
pull-machine-controller-lint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-lint/1404050842172002305) | `/test pull-machine-controller-lint`

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

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

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-yamllint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-yamllint/1404050842188779521) | `/test pull-machine-controller-yamllint`
pull-machine-controller-lint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-lint/1404050842172002305) | `/test pull-machine-controller-lint`
pull-kubermatic-machine-controller-validate-prow-yaml | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-kubermatic-machine-controller-validate-prow-yaml/1404050842188779520) | `/test pull-kubermatic-machine-controller-validate-prow-yaml`

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

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

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-yamllint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-yamllint/1404050842188779521) | `/test pull-machine-controller-yamllint`
pull-machine-controller-lint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-lint/1404050842172002305) | `/test pull-machine-controller-lint`
pull-kubermatic-machine-controller-validate-prow-yaml | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-kubermatic-machine-controller-validate-prow-yaml/1404050842188779520) | `/test pull-kubermatic-machine-controller-validate-prow-yaml`
pull-machine-controller-test | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-test/1404050842184585216) | `/test pull-machine-controller-test`

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

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

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-yamllint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-yamllint/1404050842188779521) | `/test pull-machine-controller-yamllint`
pull-machine-controller-lint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-lint/1404050842172002305) | `/test pull-machine-controller-lint`
pull-kubermatic-machine-controller-validate-prow-yaml | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-kubermatic-machine-controller-validate-prow-yaml/1404050842188779520) | `/test pull-kubermatic-machine-controller-validate-prow-yaml`
pull-machine-controller-test | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-test/1404050842184585216) | `/test pull-machine-controller-test`
pull-machine-controller-dependencies | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-dependencies/1404050842172002304) | `/test pull-machine-controller-dependencies`

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

<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 -->
kron4eg: /test pull-machine-controller-e2e-openstack
kron4eg: /retest
kubermatic-bot: @Happy2C0de: The following tests **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-lint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-lint/1404050842172002305) | `/test pull-machine-controller-lint`
pull-kubermatic-machine-controller-validate-prow-yaml | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-kubermatic-machine-controller-validate-prow-yaml/1404050842188779520) | `/test pull-kubermatic-machine-controller-validate-prow-yaml`
pull-machine-controller-test | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-test/1404050842184585216) | `/test pull-machine-controller-test`
pull-machine-controller-yamllint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-yamllint/1404059018518859778) | `/test pull-machine-controller-yamllint`

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

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

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-yamllint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-yamllint/1404059018518859778) | `/test pull-machine-controller-yamllint`
pull-machine-controller-test | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-test/1404059018518859776) | `/test pull-machine-controller-test`

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

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

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-test | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-test/1404059018518859776) | `/test pull-machine-controller-test`
pull-machine-controller-yamllint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-yamllint/1404062418010640384) | `/test pull-machine-controller-yamllint`

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

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

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-yamllint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-yamllint/1404062418010640384) | `/test pull-machine-controller-yamllint`
pull-machine-controller-test | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-test/1404062418010640385) | `/test pull-machine-controller-test`

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

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

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-test | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-test/1404062418010640385) | `/test pull-machine-controller-test`
pull-machine-controller-yamllint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-yamllint/1404063928773775360) | `/test pull-machine-controller-yamllint`

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

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

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-yamllint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-yamllint/1404063928773775360) | `/test pull-machine-controller-yamllint`
pull-machine-controller-test | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-test/1404063928769581056) | `/test pull-machine-controller-test`

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

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

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-test | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-test/1404063928769581056) | `/test pull-machine-controller-test`
pull-machine-controller-yamllint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-yamllint/1404065310067134464) | `/test pull-machine-controller-yamllint`

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

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

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-yamllint | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-yamllint/1404065310067134464) | `/test pull-machine-controller-yamllint`
pull-machine-controller-test | 6be4e205fbfdbf1f8a9f47f9895876dda07b0da1 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-test/1404065310067134465) | `/test pull-machine-controller-test`

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

<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 -->
kron4eg: /test
kubermatic-bot: @kron4eg: The `/test` command needs one or more targets.
The following commands are available to trigger jobs:
* `/test pull-kubermatic-machine-controller-validate-prow-yaml`
* `/test pull-machine-controller-e2e-hetzner-new-worker`
* `/test pull-machine-controller-build`
* `/test pull-machine-controller-dependencies`
* `/test pull-machine-controller-lint`
* `/test pull-machine-controller-yamllint`
* `/test pre-machine-controller-verify-shfmt`
* `/test pull-machine-controller-verify-boilerplate`
* `/test pull-machine-controller-license-validation`
* `/test pull-machine-controller-test`
* `/test pull-machine-controller-e2e-invalid-objects-get-rejected`
* `/test pull-machine-controller-e2e-kubevirt`
* `/test pull-machine-controller-e2e-kubevirt-dns-config`
* `/test pull-machine-controller-e2e-alibaba`
* `/test pull-machine-controller-e2e-custom-ca`
* `/test pull-machine-controller-e2e-openstack`
* `/test pull-machine-controller-e2e-aws`
* `/test pull-machine-controller-e2e-aws-arm`
* `/test pull-machine-controller-e2e-digitalocean`
* `/test pull-machine-controller-e2e-azure`
* `/test pull-machine-controller-e2e-azure-custom-image-reference`
* `/test pull-machine-controller-e2e-azure-redhat-satellite`
* `/test pull-machine-controller-e2e-gce`
* `/test pull-machine-controller-e2e-hetzner`
* `/test pull-machine-controller-e2e-linode`
* `/test pull-machine-controller-e2e-packet`
* `/test pull-machine-controller-e2e-cherryservers`
* `/test pull-machine-controller-e2e-vsphere`
* `/test pull-machine-controller-e2e-anexia`
* `/test pull-machine-controller-e2e-ubuntu-upgrade`
* `/test pull-machine-controller-e2e-deployment-upgrade`
* `/test pull-machine-controller-e2e-aws-ebs-encryption-enabled`
* `/test pull-machine-controller-e2e-aws-flatcar-containerd`
* `/test pull-machine-controller-e2e-aws-sles`
* `/test pull-machine-controller-e2e-aws-flatcar-coreos-cloud-init`
* `/test pull-machine-controller-e2e-aws-centos8`
* `/test pull-machine-controller-e2e-vsphere-datastore-cluster`
* `/test pull-machine-controller-e2e-vsphere-resource-pool`
* `/test pull-machine-controller-e2e-scaleway`

Use `/test all` to run the following jobs:
* `pull-kubermatic-machine-controller-validate-prow-yaml`
* `pull-machine-controller-build`
* `pull-machine-controller-dependencies`
* `pull-machine-controller-lint`
* `pull-machine-controller-yamllint`
* `pull-machine-controller-verify-boilerplate`
* `pull-machine-controller-test`
* `pull-machine-controller-e2e-invalid-objects-get-rejected`
* `pull-machine-controller-e2e-kubevirt`
* `pull-machine-controller-e2e-kubevirt-dns-config`
* `pull-machine-controller-e2e-custom-ca`
* `pull-machine-controller-e2e-openstack`
* `pull-machine-controller-e2e-aws`
* `pull-machine-controller-e2e-digitalocean`
* `pull-machine-controller-e2e-azure`
* `pull-machine-controller-e2e-azure-custom-image-reference`
* `pull-machine-controller-e2e-gce`
* `pull-machine-controller-e2e-hetzner`
* `pull-machine-controller-e2e-vsphere`
* `pull-machine-controller-e2e-ubuntu-upgrade`
* `pull-machine-controller-e2e-deployment-upgrade`
* `pull-machine-controller-e2e-aws-ebs-encryption-enabled`
* `pull-machine-controller-e2e-aws-flatcar-containerd`
* `pull-machine-controller-e2e-vsphere-resource-pool`



<details>

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

>/test


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>
kron4eg: /test pull-machine-controller-e2e-openstack
kron4eg: /test all
kubermatic-bot: @Happy2C0de: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-test | 18801197df24e52229967fa8136165cd4c40f143 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-test/1404422539232415745) | `/test pull-machine-controller-test`

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

<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: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by: *<a href="https://github.com/kubermatic/machine-controller/pull/999#" title="Author self-approved">Happy2C0de</a>*
To complete the [pull request process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process), please assign **kron4eg**
You can assign the PR to them by writing `/assign @kron4eg` in a comment when ready.

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

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

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

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":["kron4eg"]} -->
kron4eg: /test all
kubermatic-bot: @Happy2C0de: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-machine-controller-test | a58c5daf5f813a3f0d71858090b3a5315c757bd4 | [link](https://public-prow.loodse.com/view/gs/prow-dev-public-data/pr-logs/pull/kubermatic_machine-controller/999/pull-machine-controller-test/1404428330903539715) | `/test pull-machine-controller-test`

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

<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 -->

Patch:
diff --git a/docs/cloud-provider.md b/docs/cloud-provider.md
index c06dca05..0514d738 100644
--- a/docs/cloud-provider.md
+++ b/docs/cloud-provider.md
@@ -125,6 +125,8 @@ network: ""
 trustDevicePath: false
 # set root disk size
 rootDiskSizeGB: 50
+# set root disk volume type
+rootDiskVolumeType: ""
 # set node-volume-attach-limit flag for cloud-config
 nodeVolumeAttachLimit: 20
 # the list of tags you would like to attach to the instance
diff --git a/examples/openstack-machinedeployment.yaml b/examples/openstack-machinedeployment.yaml
index d45382da..17256893 100644
--- a/examples/openstack-machinedeployment.yaml
+++ b/examples/openstack-machinedeployment.yaml
@@ -119,6 +119,9 @@ spec:
             # Optional, if set, the rootDisk will be a volume. If not, the rootDisk
             # will be on ephemeral storage and its size will be derived from the flavor
             rootDiskSizeGB: 20
+            # Optional, only applied if rootDiskSizeGB is set.
+            # Sets the volume type of the root disk.
+            rootDiskVolumeType: ""
             # the list of metadata you would like to attach to the instance
             tags:
               tagKey: tagValue
diff --git a/pkg/cloudprovider/provider/openstack/provider.go b/pkg/cloudprovider/provider/openstack/provider.go
index 7117e390..7f121efb 100644
--- a/pkg/cloudprovider/provider/openstack/provider.go
+++ b/pkg/cloudprovider/provider/openstack/provider.go
@@ -101,6 +101,7 @@ type Config struct {
 	AvailabilityZone      string
 	TrustDevicePath       bool
 	RootDiskSizeGB        *int
+	RootDiskVolumeType    string
 	NodeVolumeAttachLimit *uint
 
 	InstanceReadyCheckPeriod  time.Duration
@@ -264,6 +265,10 @@ func (p *provider) getConfig(s v1alpha1.ProviderSpec) (*Config, *providerconfigt
 		return nil, nil, nil, err
 	}
 	c.RootDiskSizeGB = rawConfig.RootDiskSizeGB
+	c.RootDiskVolumeType, err = p.configVarResolver.GetConfigVarStringValue(rawConfig.RootDiskVolumeType)
+	if err != nil {
+		return nil, nil, nil, err
+	}
 	c.NodeVolumeAttachLimit = rawConfig.NodeVolumeAttachLimit
 	c.Tags = rawConfig.Tags
 	if c.Tags == nil {
@@ -567,6 +572,7 @@ func (p *provider) Create(machine *v1alpha1.Machine, data *cloudprovidertypes.Pr
 				SourceType:          bootfromvolume.SourceImage,
 				UUID:                image.ID,
 				VolumeSize:          *c.RootDiskSizeGB,
+				VolumeType:          c.RootDiskVolumeType,
 			},
 		}
 		createOpts := bootfromvolume.CreateOptsExt{
diff --git a/pkg/cloudprovider/provider/openstack/types/types.go b/pkg/cloudprovider/provider/openstack/types/types.go
index ad35537a..bba08e5b 100644
--- a/pkg/cloudprovider/provider/openstack/types/types.go
+++ b/pkg/cloudprovider/provider/openstack/types/types.go
@@ -45,6 +45,7 @@ type RawConfig struct {
 	AvailabilityZone      providerconfigtypes.ConfigVarString   `json:"availabilityZone,omitempty"`
 	TrustDevicePath       providerconfigtypes.ConfigVarBool     `json:"trustDevicePath"`
 	RootDiskSizeGB        *int                                  `json:"rootDiskSizeGB"`
+	RootDiskVolumeType    providerconfigtypes.ConfigVarString   `json:"rootDiskVolumeType,omitempty"`
 	NodeVolumeAttachLimit *uint                                 `json:"nodeVolumeAttachLimit"`
 	// This tag is related to server metadata, not compute server's tag
 	Tags map[string]string `json:"tags,omitempty"`
diff --git a/pkg/controller/nodecsrapprover/node_csr_approver.go b/pkg/controller/nodecsrapprover/node_csr_approver.go
index f941ba64..d9f66005 100644
--- a/pkg/controller/nodecsrapprover/node_csr_approver.go
+++ b/pkg/controller/nodecsrapprover/node_csr_approver.go
@@ -26,6 +26,7 @@ import (
 	"github.com/kubermatic/machine-controller/pkg/apis/cluster/v1alpha1"
 
 	certificatesv1 "k8s.io/api/certificates/v1"
+	corev1 "k8s.io/api/core/v1"
 	kerrors "k8s.io/apimachinery/pkg/api/errors"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/util/sets"
@@ -141,6 +142,7 @@ func (r *reconciler) reconcile(ctx context.Context, request reconcile.Request) e
 	approvalCondition := certificatesv1.CertificateSigningRequestCondition{
 		Type:   certificatesv1.CertificateApproved,
 		Reason: "machine-controller NodeCSRApprover controller approved node serving cert",
+		Status: corev1.ConditionTrue,
 	}
 	csr.Status.Conditions = append(csr.Status.Conditions, approvalCondition)
 


Test patch:
diff --git a/pkg/cloudprovider/provider/openstack/provider_test.go b/pkg/cloudprovider/provider/openstack/provider_test.go
index 30ed9d36..21bcd98e 100644
--- a/pkg/cloudprovider/provider/openstack/provider_test.go
+++ b/pkg/cloudprovider/provider/openstack/provider_test.go
@@ -102,9 +102,47 @@ const expectedBlockDeviceBootRequest = `{
   }
 }`
 
+const expectedBlockDeviceBootVolumeTypeRequest = `{
+	"server": {
+	  "availability_zone": "eu-de-01",
+	  "block_device_mapping_v2": [
+		{
+		  "boot_index": 0,
+		  "delete_on_termination": true,
+		  "destination_type": "volume",
+		  "source_type": "image",
+		  "uuid": "f3e4a95d-1f4f-4989-97ce-f3a1fb8c04d7",
+		  "volume_size": 10,
+		  "volume_type": "ssd"
+		}
+	  ],
+	  "flavorRef": "1",
+	  "imageRef": "",
+	  "metadata": {
+		"kubernetes-cluster": "xyz",
+		"machine-uid": "",
+		"system-cluster": "zyx",
+		"system-project": "xxx"
+	  },
+	  "name": "test",
+	  "networks": [
+		{
+		  "uuid": "d32019d3-bc6e-4319-9c1d-6722fc136a22"
+		}
+	  ],
+	  "security_groups": [
+		{
+		  "name": "kubernetes-xyz"
+		}
+	  ],
+	  "user_data": "ZmFrZS11c2VyZGF0YQ=="
+	}
+  }`
+
 type openstackProviderSpecConf struct {
 	IdentityEndpointURL         string
 	RootDiskSizeGB              *int32
+	RootDiskVolumeType          string
 	ApplicationCredentialID     string
 	ApplicationCredentialSecret string
 }
@@ -127,6 +165,9 @@ func (o openstackProviderSpecConf) rawProviderSpec(t *testing.T) []byte {
 		{{- if .RootDiskSizeGB }}
 		"rootDiskSizeGB": {{ .RootDiskSizeGB }},
 		{{- end }}
+		{{- if .RootDiskVolumeType }}
+		"rootDiskVolumeType": "{{ .RootDiskVolumeType }}",
+		{{- end }}
 		"securityGroups": [
 			"kubernetes-xyz"
 		],
@@ -187,6 +228,12 @@ func TestCreateServer(t *testing.T) {
 			userdata:      "fake-userdata",
 			wantServerReq: expectedBlockDeviceBootRequest,
 		},
+		{
+			name:          "Custom disk type",
+			specConf:      openstackProviderSpecConf{RootDiskSizeGB: pointer.Int32Ptr(10), RootDiskVolumeType: "ssd"},
+			userdata:      "fake-userdata",
+			wantServerReq: expectedBlockDeviceBootVolumeTypeRequest,
+		},
 		{
 			name:          "Application Credentials",
 			specConf:      openstackProviderSpecConf{ApplicationCredentialID: "app-cred-id", ApplicationCredentialSecret: "app-cred-secret"},