Adding states to perform horizon upgrade
The patch adds new states to perform service upgrade
along with service configuration and states to perform
small sanity test.
Related-PROD: PROD-21932
Change-Id: Ic3691686ea3d2fb8c785c3f45be8d813cc2be0c5
diff --git a/horizon/map.jinja b/horizon/map.jinja
index 7fec03e..a0176af 100644
--- a/horizon/map.jinja
+++ b/horizon/map.jinja
@@ -45,3 +45,4 @@
},
}, merge=salt['pillar.get']('horizon:server')) %}
+{% set upgrade = pillar.get('horizon', {}).get('upgrade', {}) %}
diff --git a/horizon/meta/salt.yml b/horizon/meta/salt.yml
index 1c0e954..104e09e 100644
--- a/horizon/meta/salt.yml
+++ b/horizon/meta/salt.yml
@@ -4,3 +4,8 @@
require:
- salt: keystone.server
+orchestration:
+ upgrade:
+ applications:
+ horizon:
+ priority: 1800
diff --git a/horizon/upgrade/pkgs_latest.sls b/horizon/upgrade/pkgs_latest.sls
new file mode 100644
index 0000000..812d9cd
--- /dev/null
+++ b/horizon/upgrade/pkgs_latest.sls
@@ -0,0 +1,65 @@
+{%- from "horizon/map.jinja" import server with context %}
+
+horizon_task_pkgs_latest:
+ test.show_notification:
+ - name: "dump_message_pkgs_latest_horizon"
+ - text: "Running horizon.upgrade.pkgs_latest"
+
+policy-rc.d_present:
+ file.managed:
+ - name: /usr/sbin/policy-rc.d
+ - mode: 755
+ - contents: |
+ #!/bin/sh
+ exit 101
+
+{%- if server.get('enabled', False) %}
+
+horizon_packages:
+ pkg.latest:
+ - names: {{ server.pkgs|unique }}
+ - require:
+ - file: policy-rc.d_present
+ - require_in:
+ - file: policy-rc.d_absent
+
+horizon_apache_package_absent:
+ pkg.purged:
+ - name: openstack-dashboard-apache
+ - require:
+ - pkg: horizon_packages
+
+{%- endif %}
+
+{%- if server.plugin is defined %}
+
+{%- if server.plugin.horizon_theme is defined %}
+
+horizon_horizon_theme_package:
+ pkg.latest:
+ - name: {{ server.plugin.horizon_theme.source.name }}
+
+{%- endif %}
+
+{%- for plugin_name, plugin in server.get('plugin', {}).iteritems() %}
+
+{%- if plugin_name != "horizon_theme" %}
+
+horizon_{{ plugin_name }}_package:
+ pkg.latest:
+ - name: {{ plugin.source.name }}
+ {%- if server.get('plugin', {}).horizon_theme is defined %}
+ - require:
+ - pkg: horizon_horizon_theme_package
+ {%- endif %}
+
+{%- endif %}
+
+{%- endfor %}
+
+{%- endif %}
+
+policy-rc.d_absent:
+ file.absent:
+ - name: /usr/sbin/policy-rc.d
+
diff --git a/horizon/upgrade/post/init.sls b/horizon/upgrade/post/init.sls
new file mode 100644
index 0000000..38629fc
--- /dev/null
+++ b/horizon/upgrade/post/init.sls
@@ -0,0 +1,4 @@
+horizon_post:
+ test.show_notification:
+ - name: "dump_post-upgrade_message_horizon"
+ - text: "Running horizon.upgrade.post"
diff --git a/horizon/upgrade/pre/init.sls b/horizon/upgrade/pre/init.sls
new file mode 100644
index 0000000..fca7de7
--- /dev/null
+++ b/horizon/upgrade/pre/init.sls
@@ -0,0 +1,4 @@
+horizon_pre:
+ test.show_notification:
+ - name: "dump_pre-upgrade_message_horizon"
+ - text: "Running horizon.upgrade.pre"
diff --git a/horizon/upgrade/render_config.sls b/horizon/upgrade/render_config.sls
new file mode 100644
index 0000000..2379a91
--- /dev/null
+++ b/horizon/upgrade/render_config.sls
@@ -0,0 +1,62 @@
+{%- from "horizon/map.jinja" import server, upgrade with context %}
+
+horizon_render_config:
+ test.show_notification:
+ - name: "dump_message_render_config_horizon"
+ - text: "Running horizon.upgrade.render_config"
+
+{%- if server.get('enabled', false) %}
+
+horizon_config:
+ file.managed:
+ - name: {{ server.config }}
+ - source: salt://horizon/files/local_settings/{{ server.version }}_settings.py
+ - template: jinja
+ - mode: 640
+ - user: root
+ - group: horizon
+
+{%- for policy_name, policy in server.get('policy', {}).iteritems() %}
+
+{%- if policy.get('enabled', True) %}
+{%- if policy.get('source', 'file') == 'mine' %}
+
+{%- set service_grains = salt['mine.get'](policy['host'], 'grains.items') %}
+{%- set service_policy = service_grains.get(policy['host'], {}).get(policy['grain_name'], {}) %}
+
+{%- if service_policy %}
+
+horizon_policy_{{ policy_name }}_mine:
+ file.serialize:
+ - name: {{ policy.get('path', server.get('policy_files_path')) }}/{{ policy.get('name') }}
+ - dataset: {{ service_policy }}
+ - formatter: JSON
+ - require:
+ - file: horizon_config
+
+{%- endif %}
+
+{%- elif policy.get('source', 'file') == 'file' %}
+
+horizon_policy_{{ policy_name }}_file:
+ file.managed:
+ - name: {{ policy.get('path', server.get('policy_files_path')) }}/{{ policy.get('name') }}
+ - source: salt://horizon/files/policy/{{ server.version }}/{{ policy.get('name') }}
+ - require:
+ - file: horizon_config
+
+{%- endif %}
+{%- endif %}
+
+{%- endfor %}
+
+horizon_apache_config:
+ file.managed:
+ - name: {{ server.apache_config }}
+ - source: salt://horizon/files/openstack-dashboard.conf.{{ grains.os_family }}
+ - template: jinja
+ - mode: 644
+ - user: root
+ - group: root
+
+{%- endif %}
diff --git a/horizon/upgrade/service_running.sls b/horizon/upgrade/service_running.sls
new file mode 100644
index 0000000..7424175
--- /dev/null
+++ b/horizon/upgrade/service_running.sls
@@ -0,0 +1,15 @@
+{%- from "horizon/map.jinja" import server with context %}
+
+horizon_task_service_running:
+ test.show_notification:
+ - name: "dump_message_service_running_horizon"
+ - text: "Running horizon.upgrade.service_running"
+
+{%- if server.get('enabled', false) %}
+
+horizon_server_services:
+ service.running:
+ - name: {{ server.service }}
+ - enable: true
+
+{%- endif %}
diff --git a/horizon/upgrade/service_stopped.sls b/horizon/upgrade/service_stopped.sls
new file mode 100644
index 0000000..8cbc278
--- /dev/null
+++ b/horizon/upgrade/service_stopped.sls
@@ -0,0 +1,15 @@
+{%- from "horizon/map.jinja" import server with context %}
+
+dump_notification_service_stopped_horizon:
+ test.show_notification:
+ - name: "dump_message_service_stopped_horizon"
+ - text: "Running horizon.upgrade.service_stopped"
+
+{%- if server.get('enabled', false) %}
+
+horizon_server_services_stopped:
+ service.dead:
+ - name: {{ server.service }}
+ - enable: false
+
+{%- endif %}
diff --git a/horizon/upgrade/upgrade/init.sls b/horizon/upgrade/upgrade/init.sls
new file mode 100644
index 0000000..203fb8b
--- /dev/null
+++ b/horizon/upgrade/upgrade/init.sls
@@ -0,0 +1,12 @@
+{%- from "horizon/map.jinja" import server with context %}
+
+horizon_upgrade:
+ test.show_notification:
+ - name: "dump_message_upgrade_horizon"
+ - text: "Running horizon.upgrade.upgrade"
+
+include:
+ - horizon.upgrade.service_stopped
+ - horizon.upgrade.pkgs_latest
+ - horizon.upgrade.render_config
+ - horizon.upgrade.service_running
diff --git a/horizon/upgrade/verify/api.sls b/horizon/upgrade/verify/api.sls
new file mode 100644
index 0000000..72d5096
--- /dev/null
+++ b/horizon/upgrade/verify/api.sls
@@ -0,0 +1,16 @@
+{%- from "horizon/map.jinja" import server with context %}
+
+horizon_upgrade_verify_api:
+ test.show_notification:
+ - name: "dump_message_verify_api_horizon"
+ - text: "Running horizon.upgrade.verify.api"
+
+{%- if server.get('enabled', false) %}
+{%- set horizon_server = '127.0.0.1' if server.get('bind', {}).get('address') == '0.0.0.0' else server.get('bind', {}).get('address') %}
+
+horizon_http_listen:
+ http.query:
+ - name: http://{{ horizon_server }}:{{ server.get('bind', {}).get('port', 80) }}
+ - status: 200
+
+{%- endif %}