xokdinst --- Wraps [openshift-installer](https://github.com/openshift/installer/) with a few added features. Installation --- You'll need `cargo`; you can get it from `yum -y install cargo` or [rustup](https://rustup.rs/). Operating under the theory that you're a developer/tester/etc of OpenShift itself, we'll clone this git repository so you can help contribute a bit more easily to the wrapper, then install from that clone: ``` $ git clone https://github.com/cgwalters/xokdinst $ cd xokdinst $ cargo install --path . ``` Quick start --- Launch a cluster named `mycluster` (you may be more creative with names): ``` $ xokdinst launch mycluster ``` For more commands, just run `xokdinst --help`. Features/differences over openshift-installer --- The primary feature is that `xokdinst` by default has an opinionated place to store configuration, in platform-specific "appdirs" as defined by the Rust [directories crate](https://crates.io/crates/directories) - e.g. on Linux/Unix this is `~/.config/xokdinst`. This builds on the upstream installer support for [multiple invocations](https://github.com/openshift/installer/blob/3d904d3364e68251cc067782344b72b626e65573/docs/user/overview.md#multiple-invocations). We're always using the `--dir` option of the upstream installer and naming that directory after the cluster name. This makes it more convenient to manage multiple clusters. Auto-injection of pull secrets --- If you omit the `pullSecret` from your install-config, `xokdinst` will [automatically inject `~/.docker/config.json`](https://github.com/cgwalters/xokdinst/commit/8c2308d4bf0b02cd38f20323d551d4c5bcc0b40f). Nicer flow for injecting manifests --- It's [easier to inject manifests](https://github.com/cgwalters/xokdinst/commit/0bef3d726af5fa76fbc19f35735757494808ee43). Platform configuration inheritance --- `xokdinst` also has the concept of a "default config" for a given platform. And if you only have used one platform, it becomes the default config. When you run `launch` the first time, we introspect the platform chosen and save the config as `config-.yaml`. For example, running this: ``` $ xokdinst launch mycluster2 ``` Will create a second cluster that inherits everything except the name from the base. If for example the first cluster you created is for the AWS platform, the `mycluster2` will launch using `config-aws.yaml`. If you want to use multiple platforms (e.g. `aws` and `libvirt`), then you'll want to make a new config: ``` $ xokdinst gen-config ``` This time choose `libvirt` as a platform, and the config generated will be `config-libvirt.yaml`. From now on, you will need to specify the platform any time you launch a cluster, e.g. ``` $ xokdinst launch -p aws mycluster2 $ xokdinst launch -p libvirt mycluster3 ``` Why not add this to the installer upstream? --- It'd be a notable UX change; I'd like to do so of course. Why is this implemented in Rust --- Originally it was in Python but I really feel the lack of static types there. Go is annoying for "scripts" for a few reasons, mainly how verbose error handling is versus Rust's simple and elegant `?` operator. Also, I feel at home writing Rust.