The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.swsoft.com/webservices/vzl/4.0.0/resourcem" elementFormDefault="qualified" xmlns:vzlt="http://www.swsoft.com/webservices/vzl/4.0.0/types" xmlns="http://www.swsoft.com/webservices/vzl/4.0.0/resourcem" xmlns:vzlp="http://www.swsoft.com/webservices/vzl/4.0.0/protocol" xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:import namespace="http://www.swsoft.com/webservices/vzl/4.0.0/types" schemaLocation="VZLCommonTypes.xsd"/>
	<xs:import namespace="http://www.swsoft.com/webservices/vzl/4.0.0/protocol" schemaLocation="VZLProtocol.xsd"/>
	<xs:element name="resourcem" type="resourcemType" substitutionGroup="vzlp:operator">
		<xs:annotation>
			<xs:documentation>Global agent configuration operator.</xs:documentation>
			<xs:appinfo>
				<states>
					<nonexistent/>
					<down/>
					<mounted/>
					<running/>
					<repairing/>
				</states>
			</xs:appinfo>
		</xs:annotation>
	</xs:element>
	<xs:complexType name="resourcemType" mixed="false">
		<xs:complexContent mixed="false">
			<xs:extension base="vzlp:operator_functionalType">
				<xs:choice minOccurs="0">
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:annotation>
							<xs:documentation>Input</xs:documentation>
						</xs:annotation>
						<xs:element ref="add_resource"/>
						<xs:element ref="remove_resource"/>
						<xs:element ref="set_pool"/>
						<xs:element ref="get_pool"/>
						<xs:element ref="allocate"/>
						<xs:element ref="release"/>
					</xs:choice>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:annotation>
							<xs:documentation>Output</xs:documentation>
						</xs:annotation>
						<xs:element ref="resource"/>
						<xs:element ref="resource_pool"/>
					</xs:choice>
				</xs:choice>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name="allocate">
		<xs:annotation>
			<xs:documentation>Allocate resource from given pool</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="resource_pool" minOccurs="0"/>
				<xs:element ref="resource" minOccurs="0"/>
				<xs:element name="count" type="xs:int" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Number of allocated resource items. If not specified - allocate 1 item.</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="release">
		<xs:annotation>
			<xs:documentation>Release resource</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="resource" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="set_pool">
		<xs:annotation>
			<xs:documentation>Replace resource pool configuration. Replacment may be with empty resource configuration.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="resource_pool" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="get_pool">
		<xs:annotation>
			<xs:documentation>Get resource pool configuration of given pool(s) . If type not specified - returns list of all pools ids.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="resource_pool" minOccurs="0" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="add_resource">
		<xs:annotation>
			<xs:documentation>Add resource configuration to the given pool(s)</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="resource_pool" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="remove_resource">
		<xs:annotation>
			<xs:documentation>Remove resource definition from the given pool. </xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="resource_pool" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="resourceType">
		<xs:annotation>
			<xs:documentation>Generic resource type</xs:documentation>
		</xs:annotation>
	</xs:complexType>
	<xs:element name="resource" type="resourceType" abstract="true">
		<xs:annotation>
			<xs:documentation>Abstract resource element</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:complexType name="resource_poolType">
		<xs:annotation>
			<xs:documentation>Generic resource pool configuration type</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="type" type="xs:string">
				<xs:annotation>
					<xs:documentation>Type of resource pool. Avaliable types: resource_ip</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="resource_pool" type="resource_poolType" abstract="true">
		<xs:annotation>
			<xs:documentation>Abstract resource pool configuration element</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:complexType name="resource_ip_poolType" mixed="false">
		<xs:annotation>
			<xs:documentation>IP pool resource configuration</xs:documentation>
		</xs:annotation>
		<xs:complexContent mixed="false">
			<xs:extension base="resource_poolType">
				<xs:choice minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>Either of</xs:documentation>
					</xs:annotation>
					<xs:element name="ip_range">
						<xs:annotation>
							<xs:documentation>Range of IPs.</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:sequence>
								<xs:element name="start_ip" type="vzlt:ip_type">
									<xs:annotation>
										<xs:documentation>First IP.</xs:documentation>
									</xs:annotation>
								</xs:element>
								<xs:element name="end_ip" type="vzlt:ip_type">
									<xs:annotation>
										<xs:documentation>Last IP.</xs:documentation>
									</xs:annotation>
								</xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="ip" type="vzlt:ip_type">
						<xs:annotation>
							<xs:documentation>IP address.</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:choice>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="resource_ipType" mixed="false">
		<xs:annotation>
			<xs:documentation>IP resource type</xs:documentation>
		</xs:annotation>
		<xs:complexContent mixed="false">
			<xs:extension base="resourceType">
				<xs:sequence>
					<xs:element name="ip" type="vzlt:ip_type" minOccurs="0">
						<xs:annotation>
							<xs:documentation>IP address</xs:documentation>
						</xs:annotation>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name="allocateResponse">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="resource" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="releaseResponse">
		<xs:complexType>
			<xs:sequence/>
		</xs:complexType>
	</xs:element>
	<xs:element name="set_poolResponse">
		<xs:complexType>
			<xs:sequence/>
		</xs:complexType>
	</xs:element>
	<xs:element name="get_poolResponse">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="resource_pool" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="add_resourceResponse">
		<xs:complexType>
			<xs:sequence/>
		</xs:complexType>
	</xs:element>
	<xs:element name="remove_resourceResponse">
		<xs:complexType>
			<xs:sequence/>
		</xs:complexType>
	</xs:element>
</xs:schema>