README
¶
= Oxide Rancher Machine Driver
This repository contains the Oxide Rancher machine driver, also known as a node
driver in Rancher parlance. Rancher uses this node driver to provision virtual
machines on Oxide that can then be used to deploy Kubernetes clusters.
== Building
Build the binary using `make`.
[source,sh]
----
make
----
== Deploying
The binary name must match the format `docker-machine-driver-*` (e.g.,
`docker-machine-driver-oxide`) otherwise Rancher will error when trying to use
the node driver.
=== Rancher Kubernetes
IMPORTANT: You must deploy the Oxide node driver using
the Kubernetes API rather than the Rancher UI otherwise
Rancher will be unable to use the Oxide node driver. See
https://github.com/oxidecomputer/rancher-machine-driver-oxide/issues/11 for
more information.
. Upload the `docker-machine-driver-oxide` binary somewhere accessible from
Rancher Kubernetes.
. Ensure your `kubectl` context is configured to use your Rancher Kubernetes
cluster.
. Create the following `oxide-nodedriver.yaml` Kubernetes manifest.
+
[source,yaml]
----
---
apiVersion: management.cattle.io/v3
kind: NodeDriver
metadata:
name: oxide
annotations:
privateCredentialFields: token
publicCredentialFields: host
nodedriver.cattle.io/file-to-field-aliases: "userDataFile:userDataFile"
finalizers:
- controller.cattle.io/node-driver-controller
spec:
active: true
addCloudCredential: true
builtin: false
checksum: <SHA256SUM_OF_NODE_DRIVER_BINARY>
description: "Oxide Rancher node driver."
displayName: oxide
externalId: ""
uiUrl: ""
url: "https://example.com/docker-machine-driver-oxide"
----
. Apply the Kubernetes manifest to create the Oxide Rancher node driver.
+
[source,sh]
----
kubectl apply -f oxide-nodedriver.yaml
----
=== Rancher Machine CLI
. Install https://github.com/rancher/machine[`rancher-machine`].
. Place the `docker-machine-driver-oxide` binary somewhere on `PATH`.
. Use `rancher-machine` to create an Oxide instance.
+
[source,sh]
----
rancher-machine create \
--driver oxide \
--oxide-additional-ssh-public-key-ids 529885a0-2919-463a-a588-ac48f100a165 \
--oxide-boot-disk-image-id feb2c8ee-5a1d-4d66-beeb-289b860561bf \
--oxide-boot-disk-size "21474836480" \
--oxide-host https://silo01.oxide.example.com \
--oxide-memory "4294967296" \
--oxide-project exampleproject \
--oxide-ssh-user ubuntu \
--oxide-subnet "default" \
--oxide-token oxide-token-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX \
--oxide-vcpus "2" \
--oxide-vpc "default" \
example-oxide-machine
----
== Releasing
This project uses https://goreleaser.com/[GoReleaser] to build binaries and
create GitHub releases. The release process is as follows.
. Determine the version to be released. This could be a new major version or a
minor or patch version (e.g., `v1.0.0`).
. Determine the version control revision to be released (e.g., `1a0acaf`).
Usually this is the latest revision on the default branch for major version
releases but it could be another revision for minor or patch releases.
. Create a Git tag on the version control revision with a name that matches the
version to be released (e.g., `git tag -a v1.0.0 1a0acaf`).
. Push the newly created Git tag to GitHub (e.g., `git push origin v1.0.0`).
. Monitor the latest
https://github.com/oxidecomputer/rancher-machine-driver-oxide/actions/workflows/release.yaml[Release]
GitHub Actions job to ensure it runs successfully.
. Ensure the
https://github.com/oxidecomputer/rancher-machine-driver-oxide/releases[GitHub Releases]
page shows a new release for the desired version.
.. Update the description for the release as necessary.
.. Ensure the release is published, not a draft.
Click to show internal directories.
Click to hide internal directories.