From b3a3fa4d720f30d852c0ce9f539707841e743fa5 Mon Sep 17 00:00:00 2001
From: Brad Thurber <brad.thurber@gmail.com>
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 db8fc557f..8392bc01e 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 fec735eac..3c8008009 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