Merge pull request #2 from tcpcloud/fixes

Fixes for docs generation
diff --git a/sphinx/files/salt/source/index.rst b/sphinx/files/salt/source/index.rst
index 7c0b984..1d6e69e 100644
--- a/sphinx/files/salt/source/index.rst
+++ b/sphinx/files/salt/source/index.rst
@@ -11,7 +11,7 @@
 {%- endif %}
 
 .. toctree::
-   :maxdepth: 2
+   :maxdepth: 3
 
    services/index
    nodes/index
diff --git a/sphinx/files/salt/source/nodes/index.rst b/sphinx/files/salt/source/nodes/index.rst
index bdb0e8f..c483b30 100644
--- a/sphinx/files/salt/source/nodes/index.rst
+++ b/sphinx/files/salt/source/nodes/index.rst
@@ -14,7 +14,7 @@
    *  - **Node FQDN**
       - **IP Addresses**
       - **Assigned Services**
-{%- for node_name, node_grains in mine_nodes.iteritems() %}
+{%- for node_name, node_grains in mine_nodes|dictsort %}
    *  - :ref:`{{ node_name }}`
 {%- if node_grains.sphinx is defined %}
       - {% for ip in node_grains.ipv4 %}
@@ -22,7 +22,7 @@
         * {{ ip }}
         {%- endif %}
         {%- endfor %}
-      - {% for service_name, service in node_grains.get('sphinx', {}).get('doc', {}).iteritems() %}{% if service.role is mapping %}{% for role_name, role in service.role.iteritems() %}{{ service_name }}-{{ role_name }} {% endfor %}{% endif %}{% endfor %}
+      - {% for service_name, service in node_grains.get('sphinx', {}).get('doc', {})|dictsort %}{% if service.role is mapping %}{% for role_name, role in service.role|dictsort %}{{ service_name }}-{{ role_name }} {% endfor %}{% endif %}{% endfor %}
 {%- else %}
       - N/A
       - N/A
@@ -30,9 +30,9 @@
 {%- endfor %}
 
 .. toctree::
-   :maxdepth: 2
+   :maxdepth: 3
 
-{% for node_name, node_grains in mine_nodes.iteritems() %}
+{% for node_name, node_grains in mine_nodes|dictsort %}
 {%- if node_grains.get('sphinx_doc', {}) != None %}
    {{ node_name }}
 {%- endif %}
diff --git a/sphinx/files/salt/source/nodes/node.rst b/sphinx/files/salt/source/nodes/node.rst
index e08358b..c3b37bd 100644
--- a/sphinx/files/salt/source/nodes/node.rst
+++ b/sphinx/files/salt/source/nodes/node.rst
@@ -1,5 +1,15 @@
 {% macro render_list(param) %}
-{{ param }} 
+{%- if param is mapping %}
+{%- for key, value in param.iteritems() %}
+- {{ key }}: {{ value }}
+{%- endfor %}
+{%- elif param is string or param is number %}
+{{ param }}
+{%- else %}
+{%- for p in param %}
+- {{ p }}
+{%- endfor %}
+{%- endif %}
 {% endmacro %}
 
 .. _{{ node_name }}:
@@ -10,7 +20,7 @@
 
 {%- if node_grains.get('sphinx_doc', {}) is not none %}
 
-{%- for service_name, service in node_grains.get('sphinx', {}).get('doc', {}).iteritems() %}
+{%- for service_name, service in node_grains.get('sphinx', {}).get('doc', {})|dictsort %}
 
 Service {{ service_name }}
 ===============================================
@@ -23,13 +33,15 @@
       - **Parameter**
       - **Value**
 {%- if service.role is mapping %}
-{%- for role_name, role in service.role.iteritems() %}
-{%- for param_name, param in role.get('param', {}).iteritems() %}
+{%- for role_name, role in service.role|dictsort %}
+{%- if role.get('param', {}) %}
+{%- for param_name, param in role.get('param', {})|dictsort %}
    *  - {{ service_name }}-{{ role_name }}
       - {{ param.get('name', param_name) }}
       -
-{{ render_list(param.value)|indent(8, True) }} 
+{{ render_list(param.value)|indent(8, True) }}
 {%- endfor %}
+{%- endif %}
 {%- endfor %}
 {%- endif %}
 
diff --git a/sphinx/files/salt/source/services/catalog.rst b/sphinx/files/salt/source/services/catalog.rst
index 1424996..f633a83 100644
--- a/sphinx/files/salt/source/services/catalog.rst
+++ b/sphinx/files/salt/source/services/catalog.rst
@@ -6,7 +6,7 @@
 All used services within configured infrastructure.
 
 {%- set services = {} %}
-{%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() %}
+{%- for node_name, node_grains in salt['mine.get']('*', 'grains.items')|dictsort %}
 {%- if node_grains.get('sphinx_doc', {}) != None %}
 {%- set _dummy = services.update(node_grains.get('sphinx', {}).get('doc', {})) %}
 {%- endif %}
@@ -18,7 +18,7 @@
 
    *  - **Service**
       - **Description**
-{%- for service_name, service in services.iteritems() %}
+{%- for service_name, service in services|dictsort %}
    *  - {{ service.name }}
       - {{ service.get('description', '') }}
 {%- endfor %}
diff --git a/sphinx/files/salt/source/services/endpoints.rst b/sphinx/files/salt/source/services/endpoints.rst
index 871432c..0d50dee 100644
--- a/sphinx/files/salt/source/services/endpoints.rst
+++ b/sphinx/files/salt/source/services/endpoints.rst
@@ -8,21 +8,23 @@
 .. list-table::
    :header-rows: 1
 
-   *  - **Type**
+   *  - **Name**
+      - **Type**
       - **Address**
       - **Protocol**
       - **Service**
       - **Server**
-{%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() %}
+{%- for node_name, node_grains in salt['mine.get']('*', 'grains.items')|dictsort %}
 {%- if node_grains.get('sphinx_doc', {}) != None %}
-{%- for service_name, service in node_grains.get('sphinx', {}).get('doc', {}).iteritems() %}
+{%- for service_name, service in node_grains.get('sphinx', {}).get('doc', {})|dictsort %}
 {%- if service.get('role', {}) != None %}
-{%- for role_name, role in service.get('role', {}).iteritems() %}
+{%- for role_name, role in service.get('role', {})|dictsort %}
 {%- if role.get('endpoint', {}) != None %}
-{%- for endpoint_name, endpoint in role.get('endpoint', {}).iteritems() %}
-   *  - {{ endpoint.type }}
-      - {{ endpoint.address }}
-      - {{ endpoint.protocol }}
+{%- for endpoint_name, endpoint in role.get('endpoint', {})|dictsort %}
+   *  - {{ endpoint.name|default('n/a') }}
+      - {{ endpoint.type|default('n/a') }}
+      - {{ endpoint.address|default('n/a') }}
+      - {{ endpoint.protocol|default('n/a') }}
       - {{ service_name }}
       - :ref:`{{ node_name }}`
 {%- endfor %}
diff --git a/sphinx/files/salt/source/services/index.rst b/sphinx/files/salt/source/services/index.rst
index 47435c8..0fea8fc 100644
--- a/sphinx/files/salt/source/services/index.rst
+++ b/sphinx/files/salt/source/services/index.rst
@@ -6,8 +6,8 @@
 Definition of all services used within defined infrastructure.
 
 .. toctree::
-   :maxdepth: 2
+   :maxdepth: 3
 
    endpoints
    catalog
-   monitoring
\ No newline at end of file
+   monitoring
diff --git a/sphinx/files/salt/source/services/monitoring.rst b/sphinx/files/salt/source/services/monitoring.rst
index 8187e6c..f52a974 100644
--- a/sphinx/files/salt/source/services/monitoring.rst
+++ b/sphinx/files/salt/source/services/monitoring.rst
@@ -29,9 +29,9 @@
       - **Threshold**
       - **Function**
       - **Window**
-{%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() %}
+{%- for node_name, node_grains in salt['mine.get']('*', 'grains.items')|dictsort %}
 {%- if node_grains.get('heka', {}).get('metric_collector', {}).get('alarm', {}) is mapping %}
-{%- for alarm_name, alarm in node_grains.get('heka', {}).get('metric_collector', {}).get('alarm', {}).iteritems() %}
+{%- for alarm_name, alarm in node_grains.get('heka', {}).get('metric_collector', {}).get('alarm', {})|dictsort %}
 {%- for trigger_name in alarm.triggers %}
 {%- set trigger = node_grains.get('heka', {}).get('metric_collector', {}).get('trigger', {}).get(trigger_name, {  }) %}
 {%- for rule in trigger.get('rules', []) %}
diff --git a/sphinx/orch/generate_doc.sls b/sphinx/orch/generate_doc.sls
index 7bad6f1..0dd4f79 100644
--- a/sphinx/orch/generate_doc.sls
+++ b/sphinx/orch/generate_doc.sls
@@ -8,19 +8,23 @@
   salt.state:
     - tgt: '*'
     - sls: salt.minion.grains
+    - require:
+      - salt: linux_system_doc_state
 
-mine_flush:
-  salt.function:
-    - name: mine.flush
-    - tgt: '*'
-
+{# Mine flush/update works only when executed via salt-call #}
 mine_update:
   salt.function:
-    - name: mine.update
+    - name: cmd.run
     - tgt: '*'
+    - arg:
+      - salt-call mine.flush; salt-call mine.update
+    - require:
+      - salt: salt_minion_grains
 
 sphinx_state:
   salt.state:
     - tgt: 'I@sphinx:server'
     - tgt_type: compound
     - sls: sphinx
+    - require:
+      - salt: mine_update