type Application (
	static str ArgList[] = { User, StartProgram, StopProgram, CleanProgram, MonitorProgram, PidFiles, MonitorProcesses }
	NameRule = ""
	str User
	str StartProgram
	str StopProgram
	str CleanProgram
	str MonitorProgram
	str PidFiles[]
	str MonitorProcesses[]
)

type Disk (
	static str ArgList[] = { Partition }
	NameRule = resource.Partition
	static str Operations = None
	str Partition
)

type DiskGroup (
	static int NumThreads = 1
	static int OnlineRetryLimit = 1
	static str ArgList[] = { DiskGroup, StartVolumes, StopVolumes, MonitorOnly }
	NameRule = resource.DiskGroup
	str DiskGroup
	str StartVolumes = 1
	str StopVolumes = 1
)

type DiskReservation (
	static str ArgList[] = { Disks, FailFast, ConfigPercentage, ProbeInterval }
	NameRule = ""
	str Disks[]
	boolean FailFast = 0
	int ConfigPercentage = 80
	int ProbeInterval = 6
)

type ElifNone (
	static str ArgList[] = { PathName }
	NameRule = resource.PathName
	static str Operations = None
	str PathName
)

type FileNone (
	static str ArgList[] = { PathName }
	NameRule = resource.PathName
	static str Operations = None
	str PathName
)

type FileOnOff (
	static str ArgList[] = { PathName }
	NameRule = resource.PathName
	str PathName
)

type FileOnOnly (
	static str ArgList[] = { PathName }
	NameRule = resource.PathName
	static str Operations = OnOnly
	str PathName
)

type IP (
	static str ArgList[] = { Device, Address, NetMask, Options, ArpDelay, IfconfigTwice }
	NameRule = IP_ + resource.Address
	str Device
	str Address
	str NetMask
	str Options
	int ArpDelay = 1
	int IfconfigTwice
)

type IPMultiNIC (
	static int MonitorTimeout = 120
	static str ArgList[] = { "MultiNICResName:Device", Address, NetMask, "MultiNICResName:ArpDelay", Options, "MultiNICResName:Probed", MultiNICResName, IfconfigTwice }
	NameRule = IPMultiNIC_ + resource.Address
	str Address
	str NetMask
	str Options
	str MultiNICResName
	int IfconfigTwice
)

type Mount (
	static str ArgList[] = { MountPoint, BlockDevice, FSType, MountOpt, FsckOpt, SnapUmount }
	NameRule = resource.MountPoint
	str MountPoint
	str BlockDevice
	str FSType
	str MountOpt
	str FsckOpt
	int SnapUmount
)

type MultiNICA (
	static int MonitorTimeout = 300
	static str ArgList[] = { Device, NetMask, ArpDelay, Options, RouteOptions, PingOptimize, MonitorOnly, IfconfigTwice, HandshakeInterval, NetworkHosts }
	NameRule = MultiNICA_ + group.Name
	static str Operations = None
	str Device{}
	str NetMask
	int ArpDelay = 1
	str Options
	str RouteOptions
	int PingOptimize = 1
	int IfconfigTwice
	int HandshakeInterval = 90
	str NetworkHosts[]
)

type NFS (
	static int RestartLimit = 1
	static str ArgList[] = { Nservers }
	NameRule = NFS_ + group.Name + "_" + resource.Nservers
	static str Operations = OnOnly
	int Nservers = 16
)

type NIC (
	static str ArgList[] = { Device, NetworkType, PingOptimize, NetworkHosts }
	NameRule = group.Name + "_" + resource.Device
	static str Operations = None
	str Device
	str NetworkType
	int PingOptimize = 1
	str NetworkHosts[]
)

type Phantom (
	static str ArgList[] = { Dummy }
	NameRule = Phantom_ + group.Name
	str Dummy
)

type Process (
	static str ArgList[] = { PathName, Arguments }
	NameRule = resource.PathName
	str PathName
	str Arguments
)

type Proxy (
	static str ArgList[] = { TargetResName, TargetSysName, "TargetResName:Probed", "TargetResName:State" }
	NameRule = Proxy_ + resource.TargetResName
	static str Operations = None
	str TargetResName
	str TargetSysName
)

type ServiceGroupHB (
	static str ArgList[] = { Disks, AllOrNone }
	NameRule = ""
	str Disks[]
	boolean AllOrNone = 0
)

type Share (
	static str ArgList[] = { PathName, Options }
	NameRule = nfs + resource.PathName
	str PathName
	str Options
)

type Volume (
	static int NumThreads = 1
	static str ArgList[] = { Volume, DiskGroup }
	NameRule = resource.DiskGroup + "_" + resource.Volume
	str Volume
	str DiskGroup
)