diff --git a/LICENSE b/LICENSE index 52ec1c1..43e82e1 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,5 @@ Copyright (c) 2013 Salt Stack Formulas + Copyright (c) 2014 Hewlett-Packard Development Company, L.P. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/memcached/init.sls b/memcached/init.sls index ad4af5b..cbefb44 100644 --- a/memcached/init.sls +++ b/memcached/init.sls @@ -6,3 +6,16 @@ memcached: - enable: True - require: - pkg: memcached + - watch: + - file: /etc/memcached.conf + +/etc/memcached.conf: + file: + - managed + - template: jinja + - user: root + - group: root + - mode: 644 + - source: salt://memcached/templates/memcached.conf + - require: + - pkg: memcached \ No newline at end of file diff --git a/memcached/macros.sls b/memcached/macros.sls new file mode 100644 index 0000000..079f993 --- /dev/null +++ b/memcached/macros.sls @@ -0,0 +1,26 @@ +{% from "memcached/map.jinja" import defaults with context -%} + +# Macro: +# +# get_config_item(item_name) +# item_name = parameter in the config to get +# +{%- macro get_config_item(item_name) -%} +{%- set default = defaults['config'].get(item_name, None) -%} +{%- set value = salt['pillar.get']('memcached:%s' % (item_name), default) -%} +{%- if value is string or value is number -%} +{{ value }} +{%- elif value is iterable -%} +{%- if not value -%} +None +{%- else -%} +{{ value | join(', ') }} +{%- endif -%} +{%- elif value is none -%} +None +{%- elif value -%} +True +{%- elif not value -%} +False +{%- endif -%} +{%- endmacro -%} \ No newline at end of file diff --git a/memcached/map.jinja b/memcached/map.jinja new file mode 100644 index 0000000..208d350 --- /dev/null +++ b/memcached/map.jinja @@ -0,0 +1,15 @@ +{% set defaults = { + 'config':{ + 'deamonize': True, + 'verbose_level': 0, + 'log_file': '/var/log/memcached.log' + 'memory_cap': 64, + 'port': 11211, + 'user':' memcache', + 'listen_address': '127.0.0.1', + 'max_connections': 1024, + 'lock_paged_memory': False, + 'error_on_mem_full': False, + 'max_core_file_limit': False, + } +} %} diff --git a/memcached/templates/memcached.conf b/memcached/templates/memcached.conf new file mode 100644 index 0000000..15416d2 --- /dev/null +++ b/memcached/templates/memcached.conf @@ -0,0 +1,49 @@ +{% from 'memcached/macros.sls' import get_config_item with context -%} +# memcached default config file +# 2003 - Jay Bonci +# 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' if get_config_item('deamonize') == 'True' else ''}} + +# Log memcached's output to /var/log/memcached +logfile {{ get_config_item('log_file') }} + +# Be verbose +{{ '-v' if get_config_item('verbose_level') == '1' else '' -}} +{{ '-vv' if get_config_item('verbose_level') == '2' else '' -}} + +# 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 {{ get_config_item('memory_cap') }} + +# Default connection port is 11211 +-p {{ get_config_item('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 {{ get_config_item('user') }} + +# 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 {{ get_config_item('listen_address') }} + +# Limit the number of simultaneous incoming connections. The daemon default is 1024 +-c {{ get_config_item('max_connections') }} + +# Lock down all paged memory. Consult with the README and homepage before you do this +# -k +{{ '-k' if get_config_item('lock_paged_memory') == 'True' else '' }} + +# Return error when memory is exhausted (rather than removing items) +# -M +{{ '-M' if get_config_item('error_on_mem_full') == 'True' else '' }} + +# Maximize core file limit +# -r +{{ '-r' if get_config_item('max_core_file_limit') == 'True' else '' }} diff --git a/pillar.example b/pillar.example index cee1aaf..ae65b5e 100644 --- a/pillar.example +++ b/pillar.example @@ -1,3 +1,11 @@ -# Collect the IPs of the memcached instances for use in application config -mine_functions: - network.interfaces: [eth0] +memcached: + deamonize: True, + verbose_level: 0, + memory_cap: 64, + port: 11211, + user: 'memcached', + listen_address: '127.0.0.1', + max_connections:1024, + lock_paged_memory: False, + error_on_mem_full: False, + max_core_file_limit: False \ No newline at end of file