<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor
  license agreements. See the NOTICE file distributed with this work for additional
  information regarding copyright ownership. The ASF licenses this file to you under
  the Apache License, Version 2.0 (the "License"); you may not use this file except
  in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
  Unless required by applicable law or agreed to in writing, software distributed under
  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
  OF ANY KIND, either express or implied. See the License for the specific language
  governing permissions and limitations under the License. -->
<!-- cloud -->
<dataset>
<configuration name="usage.stats.job.aggregation.range" value="600"/>

<vm_instance type="User" id="8" removed="0" />

<volumes id="16" removed="0"/>
<volumes id="17" removed="0"/>

<template_zone_ref template_id="14" zone_id="1" removed="0" />
<template_zone_ref template_id="15" zone_id="1" removed="0" />
<template_zone_ref template_id="16" zone_id="1" removed="0" />

<snapshots id="18" removed="0" />
</dataset>
