Initial commit
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
new file mode 100644
index 0000000..adaacb1
--- /dev/null
+++ b/CHANGELOG.rst
@@ -0,0 +1,6 @@
+memcached formula
+=================
+
+0.0.1 (2015-08-03)
+
+- Initial formula setup
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..33fc124
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,13 @@
+Copyright (c) 2014-2015 tcp cloud
+
+Licensed 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.
diff --git a/README.rst b/README.rst
new file mode 100644
index 0000000..b6a07f4
--- /dev/null
+++ b/README.rst
@@ -0,0 +1,70 @@
+======================
+Memcached cache server
+======================
+
+Install and configure Memcached server
+
+Available states
+================
+
+.. contents::
+    :local:
+
+``memcached.server``
+--------------------
+
+Setup Memcached server
+
+Available metadata
+==================
+
+.. contents::
+    :local:
+
+``metadata.memcached.server.single``
+------------------------------------
+
+Single memcached server
+
+``metadata.memcached.server.local``
+-----------------------------------
+
+Memcached server listening on localhost only
+
+Configuration parameters
+========================
+
+
+Example reclass
+===============
+
+Single node memcached service, default parameters but modified cache size.
+
+.. code-block:: yaml
+
+   classes:
+   - service.memcached.server.single
+
+   parameters:
+    memcached:
+      server:
+        cache_size: 64
+
+Sample pillar
+=============
+
+.. code-block:: yaml
+
+    memcached:
+      server:
+        enabled: true
+        cache_size: 64
+        bind:
+          address: 0.0.0.0
+          port: 11211
+          protocol: tcp
+
+Read more
+=========
+
+* http://memcached.org/
diff --git a/VERSION b/VERSION
new file mode 100644
index 0000000..3b04cfb
--- /dev/null
+++ b/VERSION
@@ -0,0 +1 @@
+0.2
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..e4ef4c9
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,11 @@
+salt-formula-memcached (0.2) trusty; urgency=medium
+
+  * First public release
+
+ -- Filip Pytloun <filip.pytloun@tcpcloud.eu>  Tue, 06 Oct 2015 16:38:46 +0200
+
+salt-formula-memcached (0.1) trusty; urgency=medium
+
+  * Initial release
+
+ -- Filip Pytloun <filip.pytloun@tcpcloud.eu>  Thu, 13 Aug 2015 23:23:41 +0200
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..ec63514
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+9
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..dda9cca
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,15 @@
+Source: salt-formula-memcached
+Maintainer: Filip Pytloun <filip.pytloun@tcpcloud.eu>
+Section: admin
+Priority: optional
+Build-Depends: debhelper (>= 9)
+Standards-Version: 3.9.6
+Homepage: http://www.tcpcloud.eu
+Vcs-Browser: https://github.com/tcpcloud/salt-formula-memcached
+Vcs-Git: https://github.com/tcpcloud/salt-formula-memcached.git
+
+Package: salt-formula-memcached
+Architecture: all
+Depends: ${misc:Depends}, salt-master, reclass
+Description: Memcached Salt formula
+ Install and configure Memcached server.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..69d7c2f
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,15 @@
+Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Upstream-Name: salt-formula-memcached
+Upstream-Contact: Filip Pytloun <filip.pytloun@tcpcloud.eu>
+Source: https://github.com/tcpcloud/salt-formula-memcached
+
+Files: *
+Copyright: 2014-2015 tcp cloud
+License: Apache-2.0
+  Copyright (C) 2014-2015 tcp cloud
+  .
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  .
+  On a Debian system you can find a copy of this license in
+  /usr/share/common-licenses/Apache-2.0.
diff --git a/debian/docs b/debian/docs
new file mode 100644
index 0000000..d585829
--- /dev/null
+++ b/debian/docs
@@ -0,0 +1,3 @@
+README.rst
+CHANGELOG.rst
+VERSION
diff --git a/debian/install b/debian/install
new file mode 100644
index 0000000..29e7442
--- /dev/null
+++ b/debian/install
@@ -0,0 +1,2 @@
+memcached/*             /usr/share/salt-formulas/env/memcached/
+metadata/service/*      /usr/share/salt-formulas/reclass/service/memcached/
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..abde6ef
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,5 @@
+#!/usr/bin/make -f
+
+%:
+	dh $@
+
diff --git a/debian/source/format b/debian/source/format
new file mode 100644
index 0000000..89ae9db
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (native)
diff --git a/memcached/files/collectd.conf b/memcached/files/collectd.conf
new file mode 100644
index 0000000..ae2fe16
--- /dev/null
+++ b/memcached/files/collectd.conf
@@ -0,0 +1,8 @@
+{%- from "linux/map.jinja" import system with context %}
+{%- from "memcached/map.jinja" import server with context %}
+LoadPlugin memcached
+
+<Plugin "memcached">
+  Host "localhost"
+  Port "11211"
+</Plugin>
diff --git a/memcached/files/memcached b/memcached/files/memcached
new file mode 100644
index 0000000..ca292db
--- /dev/null
+++ b/memcached/files/memcached
@@ -0,0 +1,6 @@
+{%- from "memcached/map.jinja" import server with context %}
+PORT="{{ server.bind.port }}"
+USER="memcached"
+MAXCONN="{{ server.maxconn }}"
+CACHESIZE="{{ server.cache_size }}"
+OPTIONS="-l {{ server.bind.address }}"
diff --git a/memcached/files/memcached.conf b/memcached/files/memcached.conf
new file mode 100644
index 0000000..89dc35a
--- /dev/null
+++ b/memcached/files/memcached.conf
@@ -0,0 +1,51 @@
+{%- from "memcached/map.jinja" import server with context %}
+# memcached default config file
+# 2003 - Jay Bonci <jaybonci@debian.org>
+# This configuration file is read by the start-memcached script provided as part of the Debian GNU/Linux distribution. 
+
+# Run memcached as a daemon. This command is implied, and is not needed for the
+# daemon to run. See the README.Debian that comes with this package for more information.
+-d
+
+# Log memcached's output to /var/log/memcached
+logfile /var/log/memcached.log
+
+# Be verbose
+# -v
+
+# Be even more verbose (print client commands as well)
+# -vv
+
+# Start with a cap of 64 megs of memory. It's reasonable, and the daemon default
+# Note that the daemon will grow to this size, but does not start out holding this much memory
+-m {{ server.cache_size }}
+
+# Default connection port is 11211
+-p {{ server.bind.port }}
+
+-U {{ server.bind.port }}
+# Run the daemon as root. The start-memcached will default to running as root if no
+# -u command is present in this config file
+-u memcache
+
+# Specify which IP address to listen on. The default is to listen on all IP addresses
+# This parameter is one of the only security measures that memcached has, so make sure
+# it's listening on a firewalled interface.
+-l {{ server.bind.address }}
+
+# Limit the number of simultaneous incoming connections. The daemon default is 1024
+# -c 1024
+# Mirantis
+-c {{ server.incomming_connections }}
+
+# Lock down all paged memory. Consult with the README and homepage before you do this
+# -k
+
+# Return error when memory is exhausted (rather than removing items)
+# -M
+
+# Maximize core file limit
+# -r
+
+# Number of threads to use to process incoming requests.
+-t {{ server.threads }}
\ No newline at end of file
diff --git a/memcached/files/sensu.conf b/memcached/files/sensu.conf
new file mode 100644
index 0000000..6f8ea20
--- /dev/null
+++ b/memcached/files/sensu.conf
@@ -0,0 +1,7 @@
+{%- from "memcached/map.jinja" import server with context -%}
+local_memcached_server_proc:
+  command: "PATH=$PATH:/usr/lib64/nagios/plugins:/usr/lib/nagios/plugins check_procs -C memcached -u memcache -c 1:1"
+  interval: 60
+  occurrences: 1
+  subscribers:
+  - local-memcached-server
\ No newline at end of file
diff --git a/memcached/init.sls b/memcached/init.sls
new file mode 100644
index 0000000..8cadb64
--- /dev/null
+++ b/memcached/init.sls
@@ -0,0 +1,5 @@
+
+include:
+{% if pillar.memcached.server is defined %}
+- memcached.server
+{% endif %}
diff --git a/memcached/map.jinja b/memcached/map.jinja
new file mode 100644
index 0000000..ddd7da0
--- /dev/null
+++ b/memcached/map.jinja
@@ -0,0 +1,20 @@
+{% set server = salt['grains.filter_by']({
+    'Debian': {
+        'pkgs': ['memcached', 'python-memcache'],
+        'service': 'memcached',
+        'config': '/etc/memcached.conf',
+        'config_template': 'salt://memcached/files/memcached.conf',
+        'cache_size': 64,
+        'incomming_connections': 8192,
+        'threads': 1,
+    },
+    'RedHat': {
+        'pkgs': ['memcached'],
+        'service': 'memcached',
+        'config': '/etc/sysconfig/memcached',
+        'config_template': 'salt://memcached/files/memcached',
+        'cache_size': 64,
+        'incomming_connections': 8192,
+        'threads': 1,
+    },
+}, merge=salt['pillar.get']('memcached:server')) %}
diff --git a/memcached/server.sls b/memcached/server.sls
new file mode 100644
index 0000000..87f88e3
--- /dev/null
+++ b/memcached/server.sls
@@ -0,0 +1,25 @@
+{% from "memcached/map.jinja" import server with context %}
+
+{%- if server.enabled %}
+
+memcached_packages:
+  pkg.installed:
+  - names: {{ server.pkgs }}
+
+memcached_config:
+  file.managed:
+  - name: {{ server.config }}
+  - template: jinja
+  - source: {{ server.config_template }}
+  - mode: 644
+  - require:
+    - pkg: memcached_packages
+
+memcached_service:
+  service.running:
+  - enable: True
+  - name: {{ server.service }}
+  - watch:
+    - file: memcached_config
+
+{%- endif %}
diff --git a/metadata/service/server/local.yml b/metadata/service/server/local.yml
new file mode 100644
index 0000000..48513a9
--- /dev/null
+++ b/metadata/service/server/local.yml
@@ -0,0 +1,11 @@
+applications:
+- memcached
+parameters:
+  memcached:
+    server:
+      enabled: true
+      maxconn: 8192
+      bind:
+        address: 127.0.0.1
+        port: 11211
+        protocol: tcp
diff --git a/metadata/service/server/single.yml b/metadata/service/server/single.yml
new file mode 100644
index 0000000..009827a
--- /dev/null
+++ b/metadata/service/server/single.yml
@@ -0,0 +1,11 @@
+applications:
+- memcached
+parameters:
+  memcached:
+    server:
+      enabled: true
+      maxconn: 8192
+      bind:
+        address: 0.0.0.0
+        port: 11211
+        protocol: tcp