mirror of
				https://github.com/saltstack-formulas/letsencrypt-sh-formula.git
				synced 2025-10-31 09:21:32 +01:00 
			
		
		
		
	Initial commit
This commit is contained in:
		
						commit
						dcfdc638b9
					
				
							
								
								
									
										7
									
								
								CHANGELOG.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								CHANGELOG.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | letsencrypt-sh formula | ||||||
|  | ====================== | ||||||
|  | 
 | ||||||
|  | 0.1.0 (2016-06-21) | ||||||
|  | 
 | ||||||
|  | - Initial version, compatible with version 0.1.0 of the client | ||||||
|  |   (tested with version 0.1.0-3~bpo8+1 of the Debian package). | ||||||
							
								
								
									
										14
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								LICENSE
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | |||||||
|  |    Copyright (c) 2016 Salt Stack Formulas | ||||||
|  |    Copyright (c) 2016 Raphaël Hertzog | ||||||
|  | 
 | ||||||
|  |    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. | ||||||
							
								
								
									
										42
									
								
								README.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								README.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | ====================== | ||||||
|  | letsencrypt-sh-formula | ||||||
|  | ====================== | ||||||
|  | 
 | ||||||
|  | This formula allows you to use the | ||||||
|  | `letsencrypt.sh <https://github.com/lukas2511/letsencrypt.sh>` client | ||||||
|  | to automatically manage TLS certificates issued by the | ||||||
|  | `letsencrypt.org <https://letsencrypt.org>` service. | ||||||
|  | 
 | ||||||
|  | Available states | ||||||
|  | ================ | ||||||
|  | 
 | ||||||
|  | .. contents:: | ||||||
|  |     :local: | ||||||
|  | 
 | ||||||
|  | ``letsencrypt-sh`` | ||||||
|  | ------------------ | ||||||
|  | 
 | ||||||
|  | Installs the letsencrypt.sh client, its configuration file, the apache | ||||||
|  | integration and the cron job. | ||||||
|  | 
 | ||||||
|  | ``letsencrypt-sh.install`` | ||||||
|  | -------------------------- | ||||||
|  | 
 | ||||||
|  | Installs the letsencrypt.sh client. | ||||||
|  | 
 | ||||||
|  | ``letsencrypt-sh.config`` | ||||||
|  | ------------------------- | ||||||
|  | 
 | ||||||
|  | Installs the letsencrypt.sh configuration file. | ||||||
|  | 
 | ||||||
|  | ``letsencrypt-sh.apache`` | ||||||
|  | ------------------------- | ||||||
|  | 
 | ||||||
|  | Installs the Apache integration allowing letsencrypt.sh to validate HTTP | ||||||
|  | challenges required by letsencrypt.org to issue/renew TLS certificates. | ||||||
|  | 
 | ||||||
|  | ``letsencrypt-sh.cron`` | ||||||
|  | ----------------------- | ||||||
|  | 
 | ||||||
|  | Enables a periodic task that renews managed TLS certificates that are | ||||||
|  | about to expire. | ||||||
							
								
								
									
										8
									
								
								letsencrypt-sh/apache.sls
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								letsencrypt-sh/apache.sls
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | |||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | # vim: ft=sls | ||||||
|  | 
 | ||||||
|  | {% from "letsencrypt-sh/map.jinja" import letsencrypt_sh with context %} | ||||||
|  | 
 | ||||||
|  | letsencrypt-sh-pkg-apache: | ||||||
|  |   pkg.installed: | ||||||
|  |     - name: {{ letsencrypt_sh.pkg_apache }} | ||||||
							
								
								
									
										22
									
								
								letsencrypt-sh/config.sls
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								letsencrypt-sh/config.sls
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | |||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | # vim: ft=sls | ||||||
|  | 
 | ||||||
|  | {% from "letsencrypt-sh/map.jinja" import letsencrypt_sh with context %} | ||||||
|  | 
 | ||||||
|  | letsencrypth-sh-config: | ||||||
|  |   file.managed: | ||||||
|  |     - name: {{ letsencrypt_sh.config_file }} | ||||||
|  |     - source: salt://letsencrypt-sh/files/config.sh | ||||||
|  |     - mode: 644 | ||||||
|  |     - user: root | ||||||
|  |     - group: root | ||||||
|  |     - template: jinja | ||||||
|  | 
 | ||||||
|  | letsencrypt-sh-domains: | ||||||
|  |   file.managed: | ||||||
|  |     - name: {{ letsencrypt_sh.domains_txt }} | ||||||
|  |     - source: salt://letsencrypt-sh/files/domains.txt | ||||||
|  |     - mode: 644 | ||||||
|  |     - user: root | ||||||
|  |     - group: root | ||||||
|  |     - template: jinja | ||||||
							
								
								
									
										21
									
								
								letsencrypt-sh/cron.sls
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								letsencrypt-sh/cron.sls
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | |||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | # vim: ft=sls | ||||||
|  | 
 | ||||||
|  | {% from "letsencrypt-sh/map.jinja" import letsencrypt_sh with context %} | ||||||
|  | 
 | ||||||
|  | {% if letsencrypt_sh.cron_enabled %} | ||||||
|  | letsencrypt-sh-cron: | ||||||
|  |   cron.present: | ||||||
|  |     - name: {{ letsencrypt_sh.cron_command }} | ||||||
|  |     - user: root | ||||||
|  |     - identifier: letsencrypt-sh-cron | ||||||
|  |     - minute: {{ letsencrypt_sh.cron_minute }} | ||||||
|  |     - hour: {{ letsencrypt_sh.cron_hour }} | ||||||
|  |     - dayweek: {{ letsencrypt_sh.cron_dayweek }} | ||||||
|  |     - comment: Renew TLS certificates with letsencrypt.org | ||||||
|  | {% else %} | ||||||
|  | disable-letsencrypt-sh-cron: | ||||||
|  |   cron.absent: | ||||||
|  |     - user: root | ||||||
|  |     - identifier: letsencrypt-sh-cron | ||||||
|  | {% endif %} | ||||||
							
								
								
									
										13
									
								
								letsencrypt-sh/defaults.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								letsencrypt-sh/defaults.yaml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,13 @@ | |||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | # vim: ft=yaml | ||||||
|  | letsencrypt_sh: | ||||||
|  |   pkg: 'letsencrypt.sh' | ||||||
|  |   pkg_apache: 'letsencrypt.sh-apache2' | ||||||
|  |   config_file: '/etc/letsencrypt.sh/conf.d/defaults.sh' | ||||||
|  |   basedir: '/var/lib/letsencrypt.sh' | ||||||
|  |   domains_txt: '/var/lib/letsencrypt.sh/domains.txt' | ||||||
|  |   cron_command: 'letsencrypt.sh --cron >/var/log/letsencrypt.sh.log 2>&1; res=$?; [ $res -eq 0 ] || cat /var/log/letsencrypt.sh.log; exit $res' | ||||||
|  |   cron_minute: random | ||||||
|  |   cron_hour: random | ||||||
|  |   cron_dayweek: random | ||||||
|  |   cron_enabled: True | ||||||
							
								
								
									
										74
									
								
								letsencrypt-sh/files/config.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								letsencrypt-sh/files/config.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,74 @@ | |||||||
|  | {% set cfg_client = salt['pillar.get']('letsencrypt-sh:config', {}) -%} | ||||||
|  | {%- macro get_config(configname, default_value) -%} | ||||||
|  | {%- set varname = configname.replace("-", "_") -%} | ||||||
|  | {%- if configname in cfg_client -%} | ||||||
|  | {{ varname|upper }}="{{ cfg_client[configname] }}" | ||||||
|  | {%- else -%} | ||||||
|  | #{{ varname|upper }}="{{ default_value }}" | ||||||
|  | {%- endif -%} | ||||||
|  | {%- endmacro -%} | ||||||
|  | # This file is managed by Salt, do not edit by hand! | ||||||
|  | # Based on letsencrypt.sh version 0.1.0 default config | ||||||
|  | 
 | ||||||
|  | ######################################################## | ||||||
|  | # This is the main config file for letsencrypt.sh      # | ||||||
|  | #                                                      # | ||||||
|  | # Default values of this config are in comments        # | ||||||
|  | ######################################################## | ||||||
|  | 
 | ||||||
|  | # Path to certificate authority (default: https://acme-v01.api.letsencrypt.org/directory) | ||||||
|  | {{ get_config('ca', 'https://acme-v01.api.letsencrypt.org/directory') }} | ||||||
|  | 
 | ||||||
|  | # Path to license agreement (default: https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf) | ||||||
|  | {{ get_config('license', 'https://letsencrypt.org/documents/LE-SA-v1.0.1-July-27-2015.pdf') }} | ||||||
|  | 
 | ||||||
|  | # Which challenge should be used? Currently http-01 and dns-01 are supported | ||||||
|  | {{ get_config('challengetype', 'http-01') }} | ||||||
|  | 
 | ||||||
|  | # Base directory for account key, generated certificates and list of domains (default: $SCRIPTDIR -- uses config directory if undefined) | ||||||
|  | {{ get_config('basedir', '/var/lib/letsencrypt.sh') }} | ||||||
|  | 
 | ||||||
|  | # Output directory for challenge-tokens to be served by webserver or deployed in HOOK (default: $BASEDIR/.acme-challenges) | ||||||
|  | {{ get_config('wellknown', '/var/lib/letsencrypt.sh/acme-challenges') }} | ||||||
|  | 
 | ||||||
|  | # Location of private account key (default: $BASEDIR/private_key.pem) | ||||||
|  | {{ get_config('private-key', '${BASEDIR}/private_key.pem') }} | ||||||
|  | 
 | ||||||
|  | # Location of private account registration information (default: $BASEDIR/private_key.json) | ||||||
|  | {{ get_config('private-key-json', '${BASEDIR}/private_key.json') }} | ||||||
|  | 
 | ||||||
|  | # Default keysize for private keys (default: 4096) | ||||||
|  | {{ get_config('keysize', '4096') }} | ||||||
|  | 
 | ||||||
|  | # Path to openssl config file (default: <unset> - tries to figure out system default) | ||||||
|  | {{ get_config('openssl_cnf', '') }} | ||||||
|  | 
 | ||||||
|  | # Program or function called in certain situations | ||||||
|  | # | ||||||
|  | # After generating the challenge-response, or after failed challenge (in this case altname is empty) | ||||||
|  | # Given arguments: clean_challenge|deploy_challenge altname token-filename token-content | ||||||
|  | # | ||||||
|  | # After successfully signing certificate | ||||||
|  | # Given arguments: deploy_cert domain path/to/privkey.pem path/to/cert.pem path/to/fullchain.pem | ||||||
|  | # | ||||||
|  | # BASEDIR and WELLKNOWN variables are exported and can be used in an external program | ||||||
|  | # default: <unset> | ||||||
|  | {{ get_config('hook', '') }} | ||||||
|  | 
 | ||||||
|  | # Chain clean_challenge|deploy_challenge arguments together into one hook call per certificate (default: no) | ||||||
|  | {{ get_config('hook-chain', 'no') }} | ||||||
|  | 
 | ||||||
|  | # Minimum days before expiration to automatically renew certificate (default: 30) | ||||||
|  | {{ get_config('renew-days', '30') }} | ||||||
|  | 
 | ||||||
|  | # Regenerate private keys instead of just signing new certificates on renewal (default: no) | ||||||
|  | {{ get_config('private-key-renew', 'no') }} | ||||||
|  | 
 | ||||||
|  | # Which public key algorithm should be used? Supported: rsa, prime256v1 and secp384r1 | ||||||
|  | {{ get_config('key-algo', 'rsa') }} | ||||||
|  | 
 | ||||||
|  | # E-mail to use during the registration (default: <unset>) | ||||||
|  | {{ get_config('contact-email', '') }} | ||||||
|  | 
 | ||||||
|  | # Lockfile location, to prevent concurrent access (default: $BASEDIR/lock) | ||||||
|  | {{ get_config('lockfile', '${BASEDIR}/lock') }} | ||||||
							
								
								
									
										5
									
								
								letsencrypt-sh/files/domains.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								letsencrypt-sh/files/domains.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | {%- from "letsencrypt-sh/map.jinja" import letsencrypt_sh with context -%} | ||||||
|  | # This file is managed by Salt, do not edit by hand! | ||||||
|  | {% for domain in letsencrypt_sh.domains -%} | ||||||
|  | {{ domain }} | ||||||
|  | {% endfor -%} | ||||||
							
								
								
									
										8
									
								
								letsencrypt-sh/init.sls
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								letsencrypt-sh/init.sls
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | |||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | # vim: ft=sls | ||||||
|  | 
 | ||||||
|  | include: | ||||||
|  |   - letsencrypt-sh.install | ||||||
|  |   - letsencrypt-sh.config | ||||||
|  |   - letsencrypt-sh.apache | ||||||
|  |   - letsencrypt-sh.cron | ||||||
							
								
								
									
										8
									
								
								letsencrypt-sh/install.sls
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								letsencrypt-sh/install.sls
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | |||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | # vim: ft=sls | ||||||
|  | 
 | ||||||
|  | {% from "letsencrypt-sh/map.jinja" import letsencrypt_sh with context %} | ||||||
|  | 
 | ||||||
|  | letsencrypt-sh-pkg: | ||||||
|  |   pkg.installed: | ||||||
|  |     - name: {{ letsencrypt_sh.pkg }} | ||||||
							
								
								
									
										29
									
								
								letsencrypt-sh/map.jinja
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								letsencrypt-sh/map.jinja
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | |||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  | # vim: ft=jinja | ||||||
|  | 
 | ||||||
|  | {## Start with defaults from defaults.sls ##} | ||||||
|  | {% import_yaml 'letsencrypt-sh/defaults.yaml' as default_settings %} | ||||||
|  | 
 | ||||||
|  | {## | ||||||
|  | Setup variable using grains['os_family'] based logic, only add key:values here | ||||||
|  | that differ from whats in defaults.yaml | ||||||
|  | ##} | ||||||
|  | {% set os_family_map = salt['grains.filter_by']({ | ||||||
|  |         'Debian': {}, | ||||||
|  |         'Suse': {}, | ||||||
|  |         'Arch': {}, | ||||||
|  |         'RedHat': {}, | ||||||
|  |   } | ||||||
|  |   , grain="os_family" | ||||||
|  |   , merge=salt['pillar.get']('letsencrypt-sh:lookup')) | ||||||
|  | %} | ||||||
|  | {## Merge the os_family_map to the default settings ##} | ||||||
|  | {% do default_settings.letsencrypt_sh.update(os_family_map) %} | ||||||
|  | 
 | ||||||
|  | {## Merge in letsencrypt-sh pillar ##} | ||||||
|  | {% set letsencrypt_sh = salt['pillar.get']( | ||||||
|  |         'letsencrypt-sh', | ||||||
|  |         default=default_settings.letsencrypt_sh, | ||||||
|  |         merge=True | ||||||
|  |     ) | ||||||
|  | %} | ||||||
							
								
								
									
										22
									
								
								pillar.example
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pillar.example
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | |||||||
|  | letsencrypt-sh: | ||||||
|  |   # Recommended parameters | ||||||
|  |   # List of domains that need a TLS certificate | ||||||
|  |   domains: | ||||||
|  |     - example.com www.example.com | ||||||
|  |     - example.net | ||||||
|  |   # Parameters of configuration file | ||||||
|  |   config: | ||||||
|  |     # Email contact to register to letsencrypt.org | ||||||
|  |     contact-email: admin@example.com | ||||||
|  |     # Optional parameters | ||||||
|  |     renew-days: 30 | ||||||
|  |     keysize: 4096 | ||||||
|  |     ca: https://acme-v01.api.letsencrypt.org/directory | ||||||
|  |     openssl-cnf: /usr/lib/ssl/openssl.cnf | ||||||
|  |     # see letsencrypt-sh/files/config.sh for more | ||||||
|  |   # Override formula parameters | ||||||
|  |   lookup: | ||||||
|  |     pkg: letsencrypt.sh | ||||||
|  |     pkg_apache: letsencrypt.sh-apache2 | ||||||
|  |     cron_command: cronic letsencrypt.sh --cron | ||||||
|  |     # see defaults.yaml for full list | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user