<?xml version="1.0"?>
<!--
   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.
-->

<metainfo>
  <schemaVersion>2.0</schemaVersion>
  <application>
    <name>MEMCACHED</name>
    <comment>Memcache is a network accessible key/value storage system, often used as a distributed cache.</comment>
    <version>1.0.0</version>
    <exportedConfigs>None</exportedConfigs>
    <exportGroups>
      <exportGroup>
        <name>Servers</name>
        <exports>
          <export>
            <name>host_port</name>
            <value>${MEMCACHED_HOST}:${site.global.listen_port}</value>
          </export>
        </exports>
      </exportGroup>
    </exportGroups>

    <components>
      <component>
        <name>MEMCACHED</name>
        <category>MASTER</category>
        <compExports>Servers-host_port</compExports>
        <commandScript>
          <script>scripts/memcached.py</script>
          <scriptType>PYTHON</scriptType>
        </commandScript>
      </component>
    </components>

    <osSpecifics>
      <osSpecific>
        <osType>any</osType>
        <packages>
          <package>
            <type>tarball</type>
            <name>files/jmemcached-1.0.0.tar</name>
          </package>
        </packages>
      </osSpecific>
    </osSpecifics>

  </application>
</metainfo>
