Current File : //usr/share/zsh/5.0.7/functions/Completion/Solaris/_zoneadm
#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 "$@"