#compdef zoneadm # Synced with the S11U2 build 34 man page _zoneadm_bootargs() { # This is a subset of the arguments to kernel(1M) _arguments -A "-*" \ '-m[SMF options]:option:_values "SMF option" debug milestone= quiet verbose' \ '-s[Boot single user]' \ '-L[List available boot environments]' \ '-Z[Boot a named environment]:boot environment: ' } _zoneadm() { local context state line expl typeset -A opt_args local -a subcmds subcmds_solariskz fields local -a solaris_attach solaris_clone solaris_install local -a solariskz_attach solariskz_clone solariskz_install local -a solaris10_attach solaris10_clone solaris10_install local -a extended_create_options extended_destroy_options local brand brand_args subcmds=( attach boot clone detach halt help install list mark move ready reboot uninstall verify ) subcmds_solariskz=( savecore suspend ) extended_create_options=( "cert:certificate:_path_files" "cacert:CA certificate:_path_files" "force-takeover" "force-zpool-import" "force-zpool-create:ZFS pool: " "force-zpool-create-all" "initialize-hostdata" "key:key:_path_files" ) extended_destroy_options=( "force-zpool-destroy:ZFS pool: " "force-zpool-destroy-all" ) solaris_attach=( '-c[Specify configuration profile]:path:_files -g \*.xml' '-U[Update all packages to latest versions]' '-z[Attach existing zone boot environment]:zone boot environment: ' ) solaris_clone=( '-c[Specify configuration profile]:path:_files -g \*.xml' ) solaris_install=( '-c[Specify configuration profile]:path:_files -g \*.xml' - set1 '-m[Specify install (AI) manifest]:path:_files -g \*.xml' - set2 '(-d)-a[Path to archive]:path:_path_files' '(-a -z)-d[Path to installed zone root]:directory:path_files -/' '-p[Preserve system configuration]' '-s[Install silently]' '-u[Unconfigure after installation]' '-v[Verbose]' '(-d)-z[Name of zone in unified archive]:zone: ' ) solariskz_attach=() solariskz_clone=( $solaris_clone ) solariskz_install=( '-a(-m)[Specify unified archive]:path:_path_files' '-b[Specify boot media]:path:_path_files' '-c[Specify configuration profile]:path:_path_files' '-m(-a)[Specify install (AI) manifest]:path:_path_files' '-S[Specify root filesystem size]:size: ' '-v[Verbose]' '-z[Name of zone in unified archive]:zone: ' ) solaris10_attach=( '(-d)-a[Path to archive]:path:_path_files' '(-a)-d[Path to zonepath]:directory:_path_files -/' ) solaris10_clone=() solaris10_install=( '(-d)-a[Path to archive]:path:_path_files' '(-a)-d[Path to installed zone root]:directory:path_files -/' '-p[Preserve system configuration]' '-s[Install silently]' '-u[Unconfigure after installation]' '-v[Verbose]' ) if [[ $service == "zoneadm" ]]; then _arguments -C -A "-*" \ '-R[Alternate root]:alternate root:_path_files -/' \ '-u[Zone UUID]:zone UUID: ' \ '-z[Zone name]:zone name:_zones -t c' \ '*::command:->subcmd' && return 0 if [[ -n $opt_args[-z] ]]; then brand=${${"${(@s,:,)$(zoneadm -z $opt_args[-z] list -p)}"[6]}//-/} brand_args=subcmds_${brand} subcmds=( ${(P)brand_args} $subcmds ) fi if (( CURRENT == 1 )); then _wanted commands expl "zoneadm subcommand" compadd -a subcmds return fi service="$words[1]" curcontext="${curcontext%:*}=$service:" fi case $service in ("boot") # Completion of boot arguments after -- is kinda hacky. _arguments -S -A "-*" \ '-R[Force new boot instead of resume]' \ '-w[Force writable root]' \ '-W[Boot in transient r/w mode]' \ '*:boot options:_zoneadm_bootargs' ;; ("clone") if [[ -n $opt_args[-z] ]]; then brand=${${"${(@s,:,)$(zoneadm -z $opt_args[-z] list -p)}"[6]}//-/} brand_args=${brand}_clone fi _arguments -A "-*" \ '-m[Clone mode]:mode:_values "mode" copy' \ '-s[Source snapshot]:snapshot:_zfs_dataset -t snap' \ '-x[Extended options]:extended option:_values -w "extended option" $extended_create_options' \ ${(P)brand_args} \ ':source zone:_zones -t i' ;; ("attach") if [[ -n $opt_args[-z] ]]; then brand=${${"${(@s,:,)$(zoneadm -z $opt_args[-z] list -p)}"[6]}//-/} brand_args=${brand}_attach fi _arguments -A "-*" \ '-F[Force attach]' \ '-n[Path to zone manifest]:path to zone manifest:_path_files' \ '-u[Update on attach]' \ '-x[Extended options]:extended option:_values -w "extended option" $extended_create_options' \ ${(P)brand_args} ;; ("detach") _arguments -A "-*" \ '-n[Dry run]' ;; ("halt"|"ready"|"reboot"|"verify"|"suspend") ;; ("help") _wanted commands expl "zoneadm subcommand" compadd -a subcmds ;; ("install") if [[ -n $opt_args[-z] ]]; then brand=${${"${(@s,:,)$(zoneadm -z $opt_args[-z] list -p)}"[6]}//-/} brand_args=${brand}_install fi _arguments -A "-*" \ '-x[Extended options]:extended option:_values -w "extended option" $extended_create_options' \ ${(P)brand_args} ;; ("list") _arguments -A "-*" \ '-c[Configured zones]' \ '-i[Installed zones]' \ '(-v)-p[Parsable output]' \ '(-p)-v[Verbose mode]' ;; ("mark") _arguments -A "-*" \ ':state:(incomplete unavailable)' ;; ("move") _arguments -A "-*" \ ':new zone path:_path_files -/' ;; ("savecore") _arguments -A "-*" \ "-L[Don't pause zone]" \ '-f[Path to dumpfile]:path:_path_files' ;; ("uninstall") _arguments -A "-*" \ '-F[Force]' \ '-x[Extended options]:extended option:_values -w "extended option" $extended_destroy_options' ;; esac } _zoneadm "$@"