#![allow(clippy::large_enum_variant)]
use clap::{AppSettings, Parser};
use reqwest::Url;
mod console;
#[cfg(feature = "docgen")]
mod doc;
mod install;
mod serializer;
mod types;
pub use self::console::*;
#[cfg(feature = "docgen")]
pub use self::doc::*;
pub use self::install::InstallConfig;
pub use self::types::*;
#[derive(Debug, Parser)]
#[clap(version)]
#[clap(global_setting(AppSettings::DeriveDisplayOrder))]
#[clap(args_conflicts_with_subcommands = true)]
#[clap(disable_help_subcommand = true)]
#[clap(help_expected = true)]
pub enum Cmd {
Install(InstallConfig),
Download(DownloadConfig),
ListStream(ListStreamConfig),
#[clap(subcommand)]
Iso(IsoCmd),
#[clap(subcommand)]
Pxe(PxeCmd),
#[clap(subcommand)]
Pack(PackCmd),
#[clap(subcommand)]
Dev(DevCmd),
}
#[derive(Debug, Parser)]
pub enum IsoCmd {
#[clap(hide = true)]
Embed(IsoEmbedConfig),
#[clap(hide = true)]
Show(IsoShowConfig),
#[clap(hide = true)]
Remove(IsoRemoveConfig),
Customize(IsoCustomizeConfig),
#[clap(subcommand)]
Ignition(IsoIgnitionCmd),
#[clap(subcommand)]
Network(IsoNetworkCmd),
#[clap(subcommand)]
Kargs(IsoKargsCmd),
#[clap(subcommand)]
Extract(IsoExtractCmd),
Reset(IsoResetConfig),
}
#[derive(Debug, Parser)]
pub enum IsoIgnitionCmd {
Embed(IsoIgnitionEmbedConfig),
Show(IsoIgnitionShowConfig),
Remove(IsoIgnitionRemoveConfig),
}
#[derive(Debug, Parser)]
pub enum IsoNetworkCmd {
Embed(IsoNetworkEmbedConfig),
Extract(IsoNetworkExtractConfig),
Remove(IsoNetworkRemoveConfig),
}
#[derive(Debug, Parser)]
pub enum IsoKargsCmd {
Modify(IsoKargsModifyConfig),
Reset(IsoKargsResetConfig),
Show(IsoKargsShowConfig),
}
#[derive(Debug, Parser)]
pub enum IsoExtractCmd {
Pxe(IsoExtractPxeConfig),
MinimalIso(IsoExtractMinimalIsoConfig),
}
#[derive(Debug, Parser)]
pub enum PxeCmd {
Customize(PxeCustomizeConfig),
#[clap(subcommand)]
Ignition(PxeIgnitionCmd),
#[clap(subcommand)]
Network(PxeNetworkCmd),
}
#[derive(Debug, Parser)]
pub enum PxeIgnitionCmd {
Wrap(PxeIgnitionWrapConfig),
Unwrap(PxeIgnitionUnwrapConfig),
}
#[derive(Debug, Parser)]
pub enum PxeNetworkCmd {
Wrap(PxeNetworkWrapConfig),
Unwrap(PxeNetworkUnwrapConfig),
}
#[derive(Debug, Parser)]
#[clap(hide = true)]
pub enum PackCmd {
Osmet(PackOsmetConfig),
MinimalIso(PackMinimalIsoConfig),
#[cfg(feature = "docgen")]
Man(PackManConfig),
#[cfg(feature = "docgen")]
ExampleConfig(PackExampleConfigConfig),
}
#[derive(Debug, Parser)]
#[clap(hide = true)]
pub enum DevCmd {
#[clap(subcommand)]
Show(DevShowCmd),
#[clap(subcommand)]
Extract(DevExtractCmd),
}
#[derive(Debug, Parser)]
pub enum DevShowCmd {
Iso(DevShowIsoConfig),
Initrd(DevShowInitrdConfig),
Fiemap(DevShowFiemapConfig),
}
#[derive(Debug, Parser)]
pub enum DevExtractCmd {
Osmet(DevExtractOsmetConfig),
Initrd(DevExtractInitrdConfig),
}
#[derive(Debug, Parser)]
pub struct DownloadConfig {
#[clap(short, long, value_name = "name", default_value = "stable")]
pub stream: String,
#[clap(short, long, value_name = "name", default_value_t)]
pub architecture: DefaultedString<Architecture>,
#[clap(short, long, value_name = "name", default_value = "metal")]
pub platform: String,
#[clap(short, long, value_name = "name", default_value = "raw.xz")]
pub format: String,
#[clap(short = 'u', long, value_name = "URL")]
pub image_url: Option<Url>,
#[clap(short = 'C', long, value_name = "path", default_value = ".")]
pub directory: String,
#[clap(short, long)]
pub decompress: bool,
#[clap(long)]
pub insecure: bool,
#[clap(long, value_name = "URL")]
pub stream_base_url: Option<Url>,
#[clap(long, value_name = "N", default_value_t)]
pub fetch_retries: FetchRetries,
}
#[derive(Debug, Parser)]
pub struct ListStreamConfig {
#[clap(short, long, value_name = "name", default_value = "stable")]
pub stream: String,
#[clap(long, value_name = "URL")]
pub stream_base_url: Option<Url>,
}
#[derive(Debug, Parser)]
pub struct CommonCustomizeConfig {
#[clap(long, value_name = "path")]
pub dest_ignition: Vec<String>,
#[clap(long, value_name = "path")]
pub dest_device: Option<String>,
#[clap(long, value_name = "spec")]
pub dest_console: Vec<Console>,
#[clap(long, value_name = "arg")]
pub dest_karg_append: Vec<String>,
#[clap(long, value_name = "arg")]
pub dest_karg_delete: Vec<String>,
#[clap(long, value_name = "path")]
pub network_keyfile: Vec<String>,
#[clap(long, value_name = "path")]
pub network_nmstate: Vec<String>,
#[clap(long, value_name = "path")]
pub ignition_ca: Vec<String>,
#[clap(long, value_name = "path")]
pub pre_install: Vec<String>,
#[clap(long, value_name = "path")]
pub post_install: Vec<String>,
#[clap(long, value_name = "path")]
pub installer_config: Vec<String>,
#[clap(long, value_name = "path")]
pub live_ignition: Vec<String>,
}
#[derive(Debug, Parser)]
pub struct IsoCustomizeConfig {
#[clap(flatten)]
pub common: CommonCustomizeConfig,
#[clap(long, value_name = "arg")]
pub live_karg_append: Vec<String>,
#[clap(long, value_name = "arg")]
pub live_karg_delete: Vec<String>,
#[clap(long, value_name = "k=o=n")]
pub live_karg_replace: Vec<String>,
#[clap(short, long)]
pub force: bool,
#[clap(short, long, value_name = "path")]
pub output: Option<String>,
#[clap(value_name = "ISO")]
pub input: String,
}
#[derive(Debug, Parser)]
pub struct IsoEmbedConfig {
#[clap(short, long, value_name = "path")]
pub config: Option<String>,
#[clap(short, long)]
pub force: bool,
#[clap(short, long, value_name = "path")]
pub output: Option<String>,
#[clap(value_name = "ISO")]
pub input: String,
}
#[derive(Debug, Parser)]
pub struct IsoShowConfig {
#[clap(value_name = "ISO")]
pub input: String,
}
#[derive(Debug, Parser)]
pub struct IsoRemoveConfig {
#[clap(short, long, value_name = "path")]
pub output: Option<String>,
#[clap(value_name = "ISO")]
pub input: String,
}
#[derive(Debug, Parser)]
pub struct IsoIgnitionEmbedConfig {
#[clap(short, long)]
pub force: bool,
#[clap(short, long, value_name = "path")]
pub ignition_file: Option<String>,
#[clap(short, long, value_name = "path")]
pub output: Option<String>,
#[clap(value_name = "ISO")]
pub input: String,
}
#[derive(Debug, Parser)]
pub struct IsoIgnitionShowConfig {
#[clap(value_name = "ISO")]
pub input: String,
}
#[derive(Debug, Parser)]
pub struct IsoIgnitionRemoveConfig {
#[clap(short, long, value_name = "path")]
pub output: Option<String>,
#[clap(value_name = "ISO")]
pub input: String,
}
#[derive(Debug, Parser)]
pub struct IsoNetworkEmbedConfig {
#[clap(short, long, required = true, value_name = "path")]
pub keyfile: Vec<String>,
#[clap(short, long)]
pub force: bool,
#[clap(short, long, value_name = "path")]
pub output: Option<String>,
#[clap(value_name = "ISO")]
pub input: String,
}
#[derive(Debug, Parser)]
pub struct IsoNetworkExtractConfig {
#[clap(short = 'C', long, value_name = "path")]
pub directory: Option<String>,
#[clap(value_name = "ISO")]
pub input: String,
}
#[derive(Debug, Parser)]
pub struct IsoNetworkRemoveConfig {
#[clap(short, long, value_name = "path")]
pub output: Option<String>,
#[clap(value_name = "ISO")]
pub input: String,
}
#[derive(Debug, Parser)]
pub struct IsoKargsModifyConfig {
#[clap(short, long, value_name = "KARG")]
pub append: Vec<String>,
#[clap(short, long, value_name = "KARG")]
pub delete: Vec<String>,
#[clap(short, long, value_name = "KARG=OLDVAL=NEWVAL")]
pub replace: Vec<String>,
#[clap(short, long, value_name = "PATH")]
pub output: Option<String>,
#[clap(value_name = "ISO")]
pub input: String,
}
#[derive(Debug, Parser)]
pub struct IsoKargsResetConfig {
#[clap(short, long, value_name = "PATH")]
pub output: Option<String>,
#[clap(value_name = "ISO")]
pub input: String,
}
#[derive(Debug, Parser)]
pub struct IsoKargsShowConfig {
#[clap(short, long)]
pub default: bool,
#[clap(value_name = "ISO")]
pub input: String,
}
#[derive(Debug, Parser)]
pub struct DevShowIsoConfig {
#[clap(long, conflicts_with = "kargs")]
pub ignition: bool,
#[clap(long, conflicts_with = "ignition")]
pub kargs: bool,
#[clap(value_name = "ISO")]
pub input: String,
}
#[derive(Debug, Parser)]
pub struct IsoExtractPxeConfig {
#[clap(value_name = "ISO")]
pub input: String,
#[clap(short, long, value_name = "PATH", default_value = ".")]
pub output_dir: String,
}
#[derive(Debug, Parser)]
pub struct IsoExtractMinimalIsoConfig {
#[clap(value_name = "ISO")]
pub input: String,
#[clap(long, value_name = "PATH")]
pub output_rootfs: Option<String>,
#[clap(value_name = "OUTPUT_ISO", default_value = "-")]
pub output: String,
#[clap(long, value_name = "URL")]
pub rootfs_url: Option<String>,
}
#[derive(Debug, Parser)]
pub struct PackMinimalIsoConfig {
#[clap(value_name = "FULL_ISO")]
pub full: String,
#[clap(value_name = "MINIMAL_ISO")]
pub minimal: String,
#[clap(long)]
pub consume: bool,
}
#[derive(Debug, Parser)]
pub struct IsoResetConfig {
#[clap(short, long, value_name = "path")]
pub output: Option<String>,
#[clap(value_name = "ISO")]
pub input: String,
}
#[derive(Debug, Parser)]
#[clap(override_usage = "coreos-installer pack osmet [OPTIONS]")]
pub struct PackOsmetConfig {
#[clap(long, required = true, value_name = "FILE")]
pub output: String,
#[clap(long, required = true, value_name = "SHA256")]
pub checksum: String,
#[clap(long, required = true, value_name = "TEXT")]
pub description: String,
#[clap(long)]
pub fast: bool,
#[clap(value_name = "DEV")]
pub device: String,
}
#[derive(Debug, Parser)]
pub struct DevExtractOsmetConfig {
#[clap(long, required = true, value_name = "PATH")]
pub osmet: String,
#[clap(value_name = "PATH")]
pub repo: String,
#[clap(value_name = "DEV")]
pub device: String,
}
#[derive(Debug, Parser)]
pub struct DevShowFiemapConfig {
#[clap(value_name = "PATH")]
pub file: String,
}
#[derive(Debug, Parser)]
pub struct PxeCustomizeConfig {
#[clap(flatten)]
pub common: CommonCustomizeConfig,
#[clap(short, long, value_name = "path")]
pub output: String,
#[clap(value_name = "path")]
pub input: String,
}
#[derive(Debug, Parser)]
pub struct PxeIgnitionWrapConfig {
#[clap(short, long, value_name = "path")]
pub ignition_file: Option<String>,
#[clap(short, long, value_name = "path")]
pub output: Option<String>,
}
#[derive(Debug, Parser)]
pub struct PxeIgnitionUnwrapConfig {
#[clap(value_name = "initrd")]
pub input: Option<String>,
}
#[derive(Debug, Parser)]
pub struct PxeNetworkWrapConfig {
#[clap(short, long, required = true, value_name = "path")]
pub keyfile: Vec<String>,
#[clap(short, long, value_name = "path")]
pub output: Option<String>,
}
#[derive(Debug, Parser)]
pub struct PxeNetworkUnwrapConfig {
#[clap(short = 'C', long, value_name = "path")]
pub directory: Option<String>,
#[clap(value_name = "initrd")]
pub input: Option<String>,
}
#[derive(Debug, Parser)]
pub struct DevShowInitrdConfig {
#[clap(value_name = "initrd")]
pub input: String,
#[clap(value_name = "glob")]
pub filter: Vec<String>,
}
#[derive(Debug, Parser)]
pub struct DevExtractInitrdConfig {
#[clap(short = 'C', long, value_name = "path", default_value = ".")]
pub directory: String,
#[clap(short, long)]
pub verbose: bool,
#[clap(value_name = "initrd")]
pub input: String,
#[clap(value_name = "glob")]
pub filter: Vec<String>,
}
#[cfg(feature = "docgen")]
#[derive(Debug, Parser)]
pub struct PackManConfig {
#[clap(short = 'C', long, value_name = "path", default_value = ".")]
pub directory: String,
}
#[cfg(feature = "docgen")]
#[derive(Debug, Parser)]
pub struct PackExampleConfigConfig {}
#[cfg(test)]
mod test {
use super::*;
use clap::IntoApp;
#[test]
fn clap_app() {
Cmd::command().debug_assert()
}
}