Add more upgrade tasks according to phases
Update README
Introduce:
* keystone.upgrade.upgrade.pre
* keystone.upgrade.upgrade.post
* keystone.upgrade.verify
Change-Id: I048e6cdf332abc5b85ccd4c8b03bf0790b96eea1
diff --git a/README.rst b/README.rst
index 0239d03..4ef4bbe 100644
--- a/README.rst
+++ b/README.rst
@@ -868,6 +868,66 @@
You can read more about it here:
https://docs.openstack.org/security-guide/databases/database-access-control.html
+Upgrades
+========
+
+Each openstack formula provide set of phases (logical bloks) that will help to
+build flexible upgrade orchestration logic for particular components. The list
+of phases and theirs descriptions are listed in table below:
+
++-------------------------------+------------------------------------------------------+
+| State | Description |
++===============================+======================================================+
+| <app>.upgrade.service_running | Ensure that all services for particular application |
+| | are enabled for autostart and running |
++-------------------------------+------------------------------------------------------+
+| <app>.upgrade.service_stopped | Ensure that all services for particular application |
+| | disabled for autostart and dead |
++-------------------------------+------------------------------------------------------+
+| <app>.upgrade.pkgs_latest | Ensure that packages used by particular application |
+| | are installed to latest available version. |
+| | This will not upgrade data plane packages like qemu |
+| | and openvswitch as usually minimal required version |
+| | in openstack services is really old. The data plane |
+| | packages should be upgraded separately by `apt-get |
+| | upgrade` or `apt-get dist-upgrade` |
+| | Applying this state will not autostart service. |
++-------------------------------+------------------------------------------------------+
+| <app>.upgrade.render_config | Ensure configuration is rendered actual version. +
++-------------------------------+------------------------------------------------------+
+| <app>.upgrade.pre | We assume this state is applied on all nodes in the |
+| | cloud before running upgrade. |
+| | Only non destructive actions will be applied during |
+| | this phase. Perform service built in service check |
+| | like (keystone-manage doctor and nova-status upgrade)|
++-------------------------------+------------------------------------------------------+
+| <app>.upgrade.upgrade.pre | Mostly applicable for data plane nodes. During this |
+| | phase resources will be gracefully removed from |
+| | current node if it is allowed. Services for upgraded |
+| | application will be set to admin disabled state to |
+| | make sure node will not participate in resources |
+| | scheduling. For example on gtw nodes this will set |
+| | all agents to admin disable state and will move all |
+| | routers to other agents. |
++-------------------------------+------------------------------------------------------+
+| <app>.upgrade.upgrade | This state will basically upgrade application on |
+| | particular target. Stop services, render |
+| | configuration, install new packages, run offline |
+| | dbsync (for ctl), start services. Data plane should |
+| | not be affected, only OpenStack python services. |
++-------------------------------+------------------------------------------------------+
+| <app>.upgrade.upgrade.post | Add services back to scheduling. |
++-------------------------------+------------------------------------------------------+
+| <app>.upgrade.post | This phase should be launched only when upgrade of |
+| | the cloud is completed. Cleanup temporary files, |
+| | perform other post upgrade tasks. |
++-------------------------------+------------------------------------------------------+
+| <app>.upgrade.verify | Here we will do basic health checks (API CRUD |
+| | operations, verify do not have dead network |
+| | agents/compute services) |
++-------------------------------+------------------------------------------------------+
+
+
Documentation and Bugs
======================
diff --git a/keystone/upgrade/post/init.sls b/keystone/upgrade/post/init.sls
index 04352cb..70f9bf1 100644
--- a/keystone/upgrade/post/init.sls
+++ b/keystone/upgrade/post/init.sls
@@ -19,4 +19,8 @@
module.run:
- name: mine.delete
- m_fun: keystone_os_client_config
+{%- else %}
+keystone_os_client_config_absent:
+ file.absent:
+ - name: /etc/openstack/clouds.yml
{%- endif %}
diff --git a/keystone/upgrade/pre/init.sls b/keystone/upgrade/pre/init.sls
index 57947d1..b9c09c3 100644
--- a/keystone/upgrade/pre/init.sls
+++ b/keystone/upgrade/pre/init.sls
@@ -4,9 +4,6 @@
test.show_notification:
- text: "Running keystone.upgrade.pre"
-include:
- - keystone.upgrade.verify.api
-
{%- if server.enabled %}
keystone_doctor:
@@ -26,4 +23,15 @@
mine_function: pillar.get
- args:
- 'keystone:client:os_client_config:cfgs:root:content'
+{%- else %}
+ {%- set os_content = salt['mine.get']('I@keystone:client:os_client_config:enabled:true', 'keystone_os_client_config', 'compound').values()[0] %}
+keystone_os_client_config:
+ file.managed:
+ - name: /etc/openstack/clouds.yml
+ - contents: |
+ {{ os_content |yaml(False)|indent(8) }}
+ - user: 'root'
+ - group: 'root'
+ - makedirs: True
+ - unless: /etc/openstack/clouds.yml
{%- endif %}
diff --git a/keystone/upgrade/upgrade/post.sls b/keystone/upgrade/upgrade/post.sls
new file mode 100644
index 0000000..84258c7
--- /dev/null
+++ b/keystone/upgrade/upgrade/post.sls
@@ -0,0 +1,3 @@
+keystone_upgrade_uprade_post:
+ test.show_notification:
+ - text: "Running keystone.upgrade.upgrade.post"
diff --git a/keystone/upgrade/upgrade/pre.sls b/keystone/upgrade/upgrade/pre.sls
new file mode 100644
index 0000000..64796cb
--- /dev/null
+++ b/keystone/upgrade/upgrade/pre.sls
@@ -0,0 +1,3 @@
+keystone_upgrade_upgrade_pre:
+ test.show_notification:
+ - text: "Running keystone.upgrade.upgrade.pre"
diff --git a/keystone/upgrade/verify/api.sls b/keystone/upgrade/verify/_api.sls
similarity index 100%
rename from keystone/upgrade/verify/api.sls
rename to keystone/upgrade/verify/_api.sls
diff --git a/keystone/upgrade/verify/init.sls b/keystone/upgrade/verify/init.sls
new file mode 100644
index 0000000..ebdb0b2
--- /dev/null
+++ b/keystone/upgrade/verify/init.sls
@@ -0,0 +1,2 @@
+include:
+ - keystone.upgrade.verify._api