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 xmlns:vzlt="http://www.swsoft.com/webservices/vzl/4.0.0/types" xmlns:ns1="http://www.swsoft.com/webservices/vzl/4.0.0/system" xmlns="http://www.swsoft.com/webservices/vzl/4.0.0/server_group" xmlns:vzlp="http://www.swsoft.com/webservices/vzl/4.0.0/protocol" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.swsoft.com/webservices/vzl/4.0.0/server_group" elementFormDefault="qualified">
	<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="server_group" type="server_groupType" substitutionGroup="vzlp:operator">
		<xs:annotation>
			<xs:documentation>Parallels Agent Server Group Management operator.</xs:documentation>
			<xs:appinfo>
				<states>
					<nonexistent/>
					<down/>
					<mounted/>
					<running/>
					<repairing/>
				</states>
			</xs:appinfo>
		</xs:annotation>
	</xs:element>
	<xs:complexType name="server_groupType" 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"/>
						<xs:element ref="del"/>
						<xs:element ref="get_list"/>
						<xs:element ref="get_info"/>
						<xs:element ref="register_master"/>
						<xs:element ref="unregister_master"/>
						<xs:element ref="destroy"/>
						<xs:element ref="set_config"/>
						<xs:element ref="get_config"/>
						<xs:element ref="get_vocabulary"/>
						<xs:element ref="get_env_voc"/>
					</xs:choice>
					<xs:choice minOccurs="0" maxOccurs="unbounded">
						<xs:annotation>
							<xs:documentation>Output</xs:documentation>
						</xs:annotation>
						<xs:element ref="eid" minOccurs="0" maxOccurs="unbounded"/>
						<xs:element ref="env" minOccurs="0" maxOccurs="unbounded"/>
						<xs:element ref="config" minOccurs="0"/>
						<xs:element ref="env_voc" minOccurs="0" maxOccurs="unbounded"/>
						<xs:element ref="vocabulary" maxOccurs="unbounded"/>
					</xs:choice>
				</xs:choice>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:element name="add">
		<xs:annotation>
			<xs:documentation>Add environment to the list of clients. Returns Ok/Error.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="conn_info" type="vzlt:connection_infoType">
					<xs:annotation>
						<xs:documentation>Slave connection information, including address and login</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="master" type="vzlt:connectivity_infoType" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Master connection description, contains only network information. Helpful when master node has more that one address. When not set, master node will choose random IP address to set to slave as a master address.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="force" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Forcibly add node, when it already has a master.</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="del">
		<xs:annotation>
			<xs:documentation>Del environment from the list of server group clients. Returns Ok/Error. When command command sent on client node (address is empty) then node remove master id. </xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="eid" type="vzlt:eid_type"/>
				<xs:element name="force" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Forcibly remove node (even inaccessible one).</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="get_info">
		<xs:annotation>
			<xs:documentation>Returns information about Environment with specified ID's or about all of Environment's, when eid is absent. Returns list of "env"s  or Error. NOTE: no error returns if you specified unexistent Environment, its simply will not be included to returned list.</xs:documentation>
			<xs:appinfo>
				<states>
					<down/>
					<mounted/>
					<running/>
					<repairing/>
				</states>
				<creds>
					<user/>
				</creds>
			</xs:appinfo>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="eid" type="vzlt:eid_type" minOccurs="0" maxOccurs="unbounded"/>
				<xs:element name="status" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Returns current Environment status.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="config" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Returns Environment configuration file data. Returns only selected parts if filter_config with any childs is present.</xs:documentation>
					</xs:annotation>
					<xs:complexType/>
				</xs:element>
				<xs:element name="filter_config" minOccurs="0">
					<xs:complexType>
						<xs:sequence>
							<xs:any/>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="get_list">
		<xs:annotation>
			<xs:documentation>Gets list of existing Environments. Specified parameters allow narrowing of the selection. Returns "eid"s or Error.</xs:documentation>
			<xs:appinfo>
				<creds>
					<user/>
				</creds>
			</xs:appinfo>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="count" type="xs:int" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Number of Environments to list.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="type" type="xs:string" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Types of Environments to list.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="status" type="vzlt:env_statusType" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>If present the only the Environments with the specified status will be returned</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="options" minOccurs="0">
					<xs:annotation>
						<xs:documentation>Additional parameters for search.</xs:documentation>
					</xs:annotation>
					<xs:complexType>
						<xs:sequence>
							<xs:element name="hostname" type="xs:string" minOccurs="0"/>
							<xs:element name="ip" type="vzlt:ip_type" minOccurs="0"/>
						</xs:sequence>
					</xs:complexType>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="register_master">
		<xs:annotation>
			<xs:documentation>Invoked by master on slave node, registers master.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="conn_info" type="vzlt:connection_infoType"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="unregister_master">
		<xs:annotation>
			<xs:documentation>Invoked by master, removes master from slave node.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="destroy">
		<xs:annotation>
			<xs:documentation>Executed only on master node, destroys server group relations.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="env" type="vzlt:envType">
		<xs:annotation>
			<xs:documentation>Environment information</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="eid" type="vzlt:eid_type"/>
	<xs:element name="id" type="vzlt:eid_type">
		<xs:annotation>
			<xs:documentation>Parallels Agent environment id</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:complexType name="configType">
		<xs:sequence>
			<xs:element name="nameservers" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Set nameserver"s list.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:sequence>
						<xs:element name="nameserver" type="vzlt:ip_type" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="search_domains" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Set search_domain"s list.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:sequence>
						<xs:element name="search_domain" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
			<xs:element name="networks" minOccurs="0">
				<xs:annotation>
					<xs:documentation>Network list.</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:sequence>
						<xs:element name="network" type="networkType" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="config" type="configType"/>
	<xs:element name="set_config">
		<xs:annotation>
			<xs:documentation>Modify global config. Set nameservers and search domains. Return Ok/Error.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="config"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="get_config">
		<xs:annotation>
			<xs:documentation>Get nameservers and search domains. Return Ok/Error.</xs:documentation>
		</xs:annotation>
		<xs:complexType/>
	</xs:element>
	<xs:complexType name="networkType">
		<xs:sequence>
			<xs:element name="id" type="xs:base64Binary"/>
			<xs:element name="description" type="xs:base64Binary" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="voc_idType">
		<xs:annotation>
			<xs:documentation>Vocabulary identifier</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="name" type="xs:string">
				<xs:annotation>
					<xs:documentation>Vocabulary name.</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="version" type="xs:string">
				<xs:annotation>
					<xs:documentation>Vocabulary version.</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	<xs:element name="get_vocabulary">
		<xs:annotation>
			<xs:documentation>Gets specified vocabularies from cache.
Returns vocabularies.
If no vocabulary ids specified returns all vocabularies from cache.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="id" type="voc_idType" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>The list of vocabulary IDs to get.</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="vocabulary" type="vzlt:vocabularyType">
		<xs:annotation>
			<xs:documentation>The vocabulary list.</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="env_voc">
		<xs:annotation>
			<xs:documentation>EID to Voc ID list map.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="eid">
					<xs:annotation>
						<xs:documentation>The Environment EID.</xs:documentation>
					</xs:annotation>
				</xs:element>
				<xs:element name="id" type="voc_idType" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>The list of Vocabulary IDs on given environment.</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="get_env_voc">
		<xs:annotation>
			<xs:documentation>Gets slave's vocabularies IDs.
Returns either EID to VocID list mapping.</xs:documentation>
		</xs:annotation>
		<xs:complexType>
			<xs:sequence>
				<xs:element name="eid" type="vzlt:eid_type" minOccurs="0" maxOccurs="unbounded">
					<xs:annotation>
						<xs:documentation>The list of Environments' IDs for which to retrieve vocabulary. If empty list specified, gets all slaves' vocabularies.</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="addResponse">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="eid" type="vzlt:eid_type">
					<xs:annotation>
						<xs:documentation>New slave EID</xs:documentation>
					</xs:annotation>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="get_infoResponse">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="env" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="get_listResponse">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="eid" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="delResponse">
		<xs:complexType>
			<xs:sequence/>
		</xs:complexType>
	</xs:element>
	<xs:element name="destroyResponse">
		<xs:complexType>
			<xs:sequence/>
		</xs:complexType>
	</xs:element>
	<xs:element name="unregister_masterResponse">
		<xs:complexType>
			<xs:sequence/>
		</xs:complexType>
	</xs:element>
	<xs:element name="register_masterResponse">
		<xs:complexType>
			<xs:sequence/>
		</xs:complexType>
	</xs:element>
	<xs:element name="set_configResponse">
		<xs:complexType>
			<xs:sequence/>
		</xs:complexType>
	</xs:element>
	<xs:element name="get_configResponse">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="config"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="get_vocabularyResponse">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="vocabulary" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:element name="get_env_vocResponse">
		<xs:complexType>
			<xs:sequence>
				<xs:element ref="env_voc" maxOccurs="unbounded"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
	<xs:complexType name="server_group_configurationType">
		<xs:complexContent>
			<xs:extension base="vzlp:configurationType">
				<xs:sequence>
					<xs:element name="slaves" minOccurs="0">
						<xs:annotation>
							<xs:documentation>Master and slave nodes have this tag. Absence of children for "cluster" means that this is a local master, i.e. master only for himself.</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:sequence minOccurs="0">
								<xs:element name="node" minOccurs="0" maxOccurs="unbounded">
									<xs:annotation>
										<xs:documentation>Master node contains list of managed nodes. Master node itself is not present in the list.</xs:documentation>
									</xs:annotation>
									<xs:complexType>
										<xs:sequence>
											<xs:element ref="id">
												<xs:annotation>
													<xs:documentation>Parallels Agent node name</xs:documentation>
												</xs:annotation>
											</xs:element>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="master" minOccurs="0">
						<xs:annotation>
							<xs:documentation>Master and slaves locations are here</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:sequence>
								<xs:element ref="id">
									<xs:annotation>
										<xs:documentation>Parallels Agent node name</xs:documentation>
									</xs:annotation>
								</xs:element>
								<xs:element name="slaves" minOccurs="0" maxOccurs="unbounded">
									<xs:complexType>
										<xs:sequence>
											<xs:element ref="id">
												<xs:annotation>
													<xs:documentation>Parallels Agent node name</xs:documentation>
												</xs:annotation>
											</xs:element>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
					<xs:element name="pool" minOccurs="0">
						<xs:annotation>
							<xs:documentation>Pool configuration.</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:sequence/>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
</xs:schema>