Adding an ability to ensure keypairs and aggregates using novav21

Prod-Related: PROD-34111
Change-Id: I71432dc36796af53c4106da066699fb93b933708
diff --git a/README.rst b/README.rst
index 793f8cd..2075df7 100644
--- a/README.rst
+++ b/README.rst
@@ -593,22 +593,21 @@
   nova:
     client:
       enabled: true
-      server:
-        identity:
-          flavor:
-            flavor1:
-              flavor_id: 10
-              ram: 4096
-              disk: 10
-              vcpus: 1
-            flavor2:
-              flavor_id: auto
-              ram: 4096
-              disk: 20
-              vcpus: 2
-        identity1:
-          flavor:
-            ...
+      resources:
+        v21:
+          admin_identity:
+            endpoint_type: internalURL
+            flavor:
+              flavor1:
+                flavor_id: 10
+                ram: 4096
+                disk: 10
+                vcpus: 1
+              flavor2:
+                flavor_id: auto
+                ram: 4096
+                disk: 20
+                vcpus: 2
 
 Availability zones:
 
@@ -630,11 +629,13 @@
     nova:
       client:
         enabled: true
-        server:
-          identity:
-            aggregates:
-            - aggregate1
-            - aggregate2
+        resources:
+          v21:
+            admin_identity:
+              aggregates:
+                aggregate1: {}
+                aggregate2:
+                  metadata: "..."
 
 Upgrade levels:
 
diff --git a/nova/client/resources/v21.sls b/nova/client/resources/v21.sls
index 448a94c..256c8f4 100644
--- a/nova/client/resources/v21.sls
+++ b/nova/client/resources/v21.sls
@@ -29,5 +29,39 @@
   {%- endfor %}
   {%- endif %}
 
+  {%- if identity.keypair is defined %}
+  {%- for keypair_name, keypair in identity.keypair.iteritems() %}
+nova_keypair_{{ keypair_name }}:
+  novav21.keypair_present:
+    - name: {{ keypair_name }}
+    {%- if keypair.pub_file is defined %}
+    - public_key_file: {{ keypair.pub_file }}
+    {%- endif %}
+    {%- if keypair.pub_key is defined %}
+    - public_key: {{ keypair.pub_key }}
+    {%- endif %}
+    - cloud_name: {{ identity_name }}
+
+  {%- endfor %}
+  {%- endif %}
+
+  {%- if identity.aggregates is defined %}
+  {%- for aggregate_name, aggregate in identity.aggregates.iteritems() %}
+nova_aggregate_{{ aggregate_name }}:
+  novav21.aggregate_present:
+    - name: {{ aggregate_name }}
+    {%- if aggregate.availability_zone is defined %}
+    - availability_zone_name: {{ aggregate.availability_zone }}
+    {%- endif %}
+    {%- if aggregate.hosts is defined %}
+    - hosts: {{ aggregate.hosts }}
+    {%- endif %}
+    {%- if aggregate.metadata is defined %}
+    - metadata: {{ aggregate.metadata }}
+    {%- endif %}
+    - cloud_name: {{ identity_name }}
+  {%- endfor %}
+  {%- endif %}
+
 {%- endfor %}
 {%- endif %}