about summary refs log tree commit diff
path: root/Completion/Solaris/Command/_zoneadm
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Solaris/Command/_zoneadm')
-rw-r--r--Completion/Solaris/Command/_zoneadm147
1 files changed, 147 insertions, 0 deletions
diff --git a/Completion/Solaris/Command/_zoneadm b/Completion/Solaris/Command/_zoneadm
new file mode 100644
index 000000000..f0a45a1b8
--- /dev/null
+++ b/Completion/Solaris/Command/_zoneadm
@@ -0,0 +1,147 @@
+#compdef zoneadm
+# Synced with the Solaris 11 build 168 man page
+
+_zoneadm_bootargs() {
+	# This is a subset of the arguments to kernel(1M)
+	_arguments -A "-*" \
+		'-i[Alternate init]:path:_path_files' \
+		'-m[SMF options]:option:_values "SMF option" debug milestone= quiet verbose' \
+		'-s[Boot single user]'
+}
+
+_zoneadm() {
+	local context state line expl
+	typeset -A opt_args
+	local -a subcmds fields
+	local -a solaris_attach solaris_install
+	local -a solaris10_attach solaris10_install
+	local brand brand_args
+
+	subcmds=(
+		attach boot clone detach halt help install list mark move
+		ready reboot uninstall verify
+	)
+
+	solaris_attach=(
+		'(-d)-a[Path to archive]:path:_path_files'
+		'(-a)-d[Path to zonepath]:directory:_path_files -/'
+	)
+	solaris_install=(
+		- set1
+		'-c[Path to certificate]:path:_path_files'
+		'*-e[Additional package]:package:'
+		'-k[Path to key]:path:_path_files'
+		'-P[Publisher/URI mapping]:publisher:'
+		- set2
+		'(-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]'
+	)
+
+	solaris10_attach=(
+		'(-d)-a[Path to archive]:path:_path_files'
+		'(-a)-d[Path to zonepath]:directory:_path_files -/'
+	)
+	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' \
+			'*::command:->subcmd' && return 0
+
+		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 "-*" \
+			'-w[Force writable root]' \
+			'-W[Boot in transient r/w mode]' \
+			'*:boot options:_zoneadm_bootargs'
+		;;
+
+	("clone")
+		_arguments -A "-*" \
+			'-m[Clone mode]:mode:_values "mode" copy' \
+			'-s[Source snapshot]:snapshot:_zfs_dataset -t snap' \
+			':source zone:_zones'
+		;;
+
+	("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]' \
+			${(P)brand_args}
+		;;
+
+	("detach")
+		_arguments -A "-*" \
+			'-n[Dry run]'
+		;;
+
+	("halt"|"ready"|"reboot"|"verify")
+		;;
+
+
+	("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 "-*" \
+			${(P)brand_args}
+		;;
+
+	("list")
+		_arguments -A "-*" \
+			'-c[Configured zones]' \
+			'-i[Installed zones]' \
+			'(-v)-p[Parsable output]' \
+			'(-p)-v[Verbose mode]'
+		;;
+
+	("mark")
+		_arguments -A "-*" \
+			':"incomplete":_values \"incomplete\" incomplete'
+		;;
+
+	("move")
+		_arguments -A "-*" \
+			':new zone path:_path_files -/'
+		;;
+
+	("uninstall")
+		_arguments -A "-*" \
+			'-F[Force]'
+		;;
+	esac
+}
+
+_zoneadm "$@"