From b3a3fa4d720f30d852c0ce9f539707841e743fa5 Mon Sep 17 00:00:00 2001 From: Brad Thurber Date: Fri, 6 May 2016 14:45:41 -0400 Subject: [PATCH] Ability to create non-templated cloud config files (maps/providers/profiles). --- pillar.example | 31 +++++++++++++++++++++++++++++++ salt/cloud.sls | 25 +++++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/pillar.example b/pillar.example index db8fc55..8392bc0 100644 --- a/pillar.example +++ b/pillar.example @@ -83,6 +83,37 @@ salt: # salt cloud config cloud: master: salt + + # For non-templated custom cloud provider/profile/map files + providers: + provider-filename1.conf: + vmware-prod: + driver: vmware + user: myusernameprod + password: mypassword + vmware-nonprod: + driver: vmware + user: myusernamenonprod + password: mypassword + profiles: + profile-filename1.conf: + server-non-prod: + clonefrom: rhel6xtemplatenp + grains: + platform: + name: salt + realm: lab + subscription_level: standard + memory: 8GB + num_cpus: 4 + password: sUpErsecretey + provider: vmware-nonprod + maps: + map-filename1.map: + server-non-prod: + - host.mycompany.com: + grains: + environment: dev1 # You can take profile and map templates from an alternate location # if you want to write your own. diff --git a/salt/cloud.sls b/salt/cloud.sls index fec735e..3c80080 100644 --- a/salt/cloud.sls +++ b/salt/cloud.sls @@ -1,5 +1,9 @@ {% from "salt/map.jinja" import salt_settings with context %} +{% set cloudmaps = salt['pillar.get']('salt:cloud:maps', {}) -%} +{% set cloudprofiles = salt['pillar.get']('salt:cloud:profiles', {}) -%} +{% set cloudproviders = salt['pillar.get']('salt:cloud:providers', {}) -%} + python-pip: pkg.installed @@ -58,6 +62,27 @@ salt-cloud-{{ dir }}: - makedirs: True {%- endfor %} +{% for key, value in cloudmaps.items() %} +/etc/salt/cloud.maps.d/{{ key }}: + file.managed: + - contents: | + {{ value|yaml(False) | indent(8) }} +{% endfor %} + +{% for key, value in cloudprofiles.items() %} +/etc/salt/cloud.profiles.d/{{ key }}: + file.managed: + - contents: | + {{ value|yaml(False) | indent(8) }} +{% endfor %} + +{% for key, value in cloudproviders.items() %} +/etc/salt/cloud.providers.d/{{ key }}: + file.managed: + - contents: | + {{ value|yaml(False) | indent(8) }} +{% endfor %} + salt-cloud-providers-permissions: file.directory: - name: {{ salt_settings.config_path }}/cloud.providers.d