Adjust Manila formula granularity

Change-Id: I7169370e5af5a5ca3bfeb7bfb7db98f6a3cb8ca3
Related-PROD: PROD-21940
diff --git a/manila/_common.sls b/manila/_common.sls
index 35c9d1d..e17f472 100644
--- a/manila/_common.sls
+++ b/manila/_common.sls
@@ -22,3 +22,5 @@
     - pkg: manila_common.pkgs
     - sls: manila._ssl.mysql
     - sls: manila._ssl.rabbitmq
+  - require_in:
+    - sls: manila.db.offline_sync
diff --git a/manila/api.sls b/manila/api.sls
index ad72dd3..97a565d 100644
--- a/manila/api.sls
+++ b/manila/api.sls
@@ -3,10 +3,13 @@
 include:
   - apache
   - manila._common
+  - manila.db.offline_sync
 
 manila_api_packages:
   pkg.installed:
   - names: {{ api.pkgs }}
+  - require_in:
+    - sls: manila.db.offline_sync
 
 {% if not api.get('logging', {}).get('log_appender', False) %}
 {%- do api.update({'logging': cfg.logging})%}
@@ -18,6 +21,8 @@
 manila_api_fluentd_logger_package:
   pkg.installed:
     - name: python-fluent-logger
+    - require_in:
+      - sls: manila.db.offline_sync
 {%- endif %}
 
 manila_api_general_conf:
@@ -39,18 +44,10 @@
 {%- endif %}
     - watch_in:
       - service: {{ api.service }}
+    - require_in:
+      - sls: manila.db.offline_sync
 {% endif %}
 
-manila_install_apibase:
-  cmd.run:
-  - names:
-    - manila-manage --config-file /etc/manila/manila.conf db sync
-  - require:
-    - file: /etc/manila/manila.conf
-  {%- if grains.get('noservices') %}
-  - onlyif: /bin/false
-  {%- endif %}
-
 manila_api_service_dead:
   service.dead:
   - name: manila-api
@@ -82,6 +79,7 @@
     - require:
       - manila_api_service_dead
       - manila_site_enabled
+      - sls: manila.db.offline_sync
 
 /etc/manila/policy.json:
   file.managed:
diff --git a/manila/db/offline_sync.sls b/manila/db/offline_sync.sls
new file mode 100644
index 0000000..1a54d31
--- /dev/null
+++ b/manila/db/offline_sync.sls
@@ -0,0 +1,9 @@
+{%- from "manila/map.jinja" import api with context %}
+
+manila_install_apibase:
+  cmd.run:
+  - names:
+    - manila-manage --config-file /etc/manila/manila.conf db sync
+  {%- if grains.get('noservices') or api.get('role', 'primary') == 'secondary' %}
+  - onlyif: /bin/false
+  {%- endif %}
diff --git a/manila/meta/salt.yml b/manila/meta/salt.yml
new file mode 100644
index 0000000..f4ac891
--- /dev/null
+++ b/manila/meta/salt.yml
@@ -0,0 +1,5 @@
+orchestration:
+  upgrade:
+    applications:
+      manila:
+        priority: 1270
diff --git a/manila/upgrade/pkgs_latest.sls b/manila/upgrade/pkgs_latest.sls
new file mode 100644
index 0000000..4698063
--- /dev/null
+++ b/manila/upgrade/pkgs_latest.sls
@@ -0,0 +1,42 @@
+{%- from "manila/map.jinja" import cfg,api,scheduler,data,share,client,upgrade with context %}
+
+manila_task_pkg_latest:
+  test.show_notification:
+    - text: "Running manila.upgrade.pkg_latest"
+
+policy-rc.d_present:
+  file.managed:
+    - name: /usr/sbin/policy-rc.d
+    - mode: 755
+    - contents: |
+        #!/bin/sh
+        exit 101
+
+{%- set pkgs = [] %}
+{%- if api.get('enabled', False) %}
+  {%- do pkgs.extend(api.pkgs) %}
+{%- endif %}
+{%- if scheduler.get('enabled', False) %}
+  {%- do pkgs.extend(scheduler.pkgs) %}
+{%- endif %}
+{%- if data.get('enabled', False) %}
+  {%- do pkgs.extend(data.pkgs) %}
+{%- endif %}
+{%- if share.get('enabled', False) %}
+  {%- do pkgs.extend(share.pkgs) %}
+{%- endif %}
+{%- if client.get('enabled', False) %}
+  {%- do pkgs.extend(client.pkgs) %}
+{%- endif %}
+
+manila_pkg_latest:
+  pkg.latest:
+  - names: {{ pkgs|unique }}
+  - require:
+    - file: policy-rc.d_present
+  - require_in:
+    - file: policy-rc.d_absent
+
+policy-rc.d_absent:
+  file.absent:
+    - name: /usr/sbin/policy-rc.d
diff --git a/manila/upgrade/post/init.sls b/manila/upgrade/post/init.sls
new file mode 100644
index 0000000..cfe1f7f
--- /dev/null
+++ b/manila/upgrade/post/init.sls
@@ -0,0 +1,7 @@
+manila_post:
+  test.show_notification:
+    - text: "Running manila.upgrade.post"
+
+keystone_os_client_config_absent:
+  file.absent:
+    - name: /etc/openstack/clouds.yml
diff --git a/manila/upgrade/pre/init.sls b/manila/upgrade/pre/init.sls
new file mode 100644
index 0000000..cdab3bc
--- /dev/null
+++ b/manila/upgrade/pre/init.sls
@@ -0,0 +1,14 @@
+manila_pre:
+  test.show_notification:
+    - text: "Running manila.upgrade.pre"
+
+{%- 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: test -f /etc/openstack/clouds.yml
diff --git a/manila/upgrade/render_config.sls b/manila/upgrade/render_config.sls
new file mode 100644
index 0000000..88daeba
--- /dev/null
+++ b/manila/upgrade/render_config.sls
@@ -0,0 +1,14 @@
+{%- from "manila/map.jinja" import cfg,api,scheduler,data,share,client,upgrade with context %}
+
+manila_render_config:
+  test.show_notification:
+    - text: "Running manila.upgrade.render_config"
+
+{%- if ( api.get('enabled', False) or scheduler.get('enabled', False) or data.get('enabled', False) or share.get('enabled', False)) %}
+/etc/manila/manila.conf:
+  file.managed:
+  - source: salt://manila/files/{{ cfg.version }}/manila.conf
+  - template: jinja
+  - mode: 0640
+  - group: manila
+{%- endif %}
diff --git a/manila/upgrade/service_running.sls b/manila/upgrade/service_running.sls
new file mode 100644
index 0000000..7edf1ec
--- /dev/null
+++ b/manila/upgrade/service_running.sls
@@ -0,0 +1,33 @@
+{%- from "manila/map.jinja" import cfg,api,scheduler,data,share with context %}
+
+manila_task_service_running:
+  test.show_notification:
+    - text: "Running manila.upgrade.service_running"
+
+{%- if api.get('enabled', False) %}
+manila_start_{{ api.service }}:
+  service.running:
+    - name: {{ api.service }}
+    - enable: True
+{%- endif %}
+
+{%- if scheduler.get('enabled', False) %}
+manila_start_{{ scheduler.service }}:
+  service.running:
+    - name: {{ scheduler.service }}
+    - enable: True
+{%- endif %}
+
+{%- if data.get('enabled', False) %}
+manila_start_{{ data.service }}:
+  service.running:
+    - name: {{ data.service }}
+    - enable: True
+{%- endif %}
+
+{%- if share.get('enabled', False) %}
+manila_start_{{ share.service }}:
+  service.running:
+    - name: {{ share.service }}
+    - enable: True
+{%- endif %}
diff --git a/manila/upgrade/service_stopped.sls b/manila/upgrade/service_stopped.sls
new file mode 100644
index 0000000..d50edc1
--- /dev/null
+++ b/manila/upgrade/service_stopped.sls
@@ -0,0 +1,38 @@
+{%- from "manila/map.jinja" import cfg,api,scheduler,data,share with context %}
+
+manila_task_service_stopped:
+  test.show_notification:
+    - text: "Running manila.upgrade.service_stopped"
+
+{%- if api.get('enabled', False) %}
+manila_api_service_dead:
+  service.dead:
+  - name: manila-api
+  - enable: False
+
+manila_stop_{{ api.service }}:
+  service.dead:
+    - name: {{ api.service }}
+    - enable: False
+{%- endif %}
+
+{%- if scheduler.get('enabled', False) %}
+manila_stop_{{ scheduler.service }}:
+  service.dead:
+    - name: {{ scheduler.service }}
+    - enable: False
+{%- endif %}
+
+{%- if data.get('enabled', False) %}
+manila_stop_{{ data.service }}:
+  service.dead:
+    - name: {{ data.service }}
+    - enable: False
+{%- endif %}
+
+{%- if share.get('enabled', False) %}
+manila_stop_{{ share.service }}:
+  service.dead:
+    - name: {{ share.service }}
+    - enable: False
+{%- endif %}
diff --git a/manila/upgrade/upgrade/init.sls b/manila/upgrade/upgrade/init.sls
new file mode 100644
index 0000000..ae7c769
--- /dev/null
+++ b/manila/upgrade/upgrade/init.sls
@@ -0,0 +1,12 @@
+{%- from "manila/map.jinja" import api with context %}
+
+include:
+ - manila.upgrade.upgrade.pre
+ - manila.upgrade.service_stopped
+ - manila.upgrade.pkgs_latest
+ - manila.upgrade.render_config
+{%- if api.get('enabled', False) %}
+ - manila.db.offline_sync
+{%- endif %}
+ - manila.upgrade.service_running
+ - manila.upgrade.upgrade.post
diff --git a/manila/upgrade/upgrade/post.sls b/manila/upgrade/upgrade/post.sls
new file mode 100644
index 0000000..3a1c664
--- /dev/null
+++ b/manila/upgrade/upgrade/post.sls
@@ -0,0 +1,3 @@
+manila_upgrade_uprade_post:
+  test.show_notification:
+    - text: "Running manila.upgrade.upgrade.post"
diff --git a/manila/upgrade/upgrade/pre.sls b/manila/upgrade/upgrade/pre.sls
new file mode 100644
index 0000000..cc98242
--- /dev/null
+++ b/manila/upgrade/upgrade/pre.sls
@@ -0,0 +1,3 @@
+manila_upgrade_upgrade_pre:
+  test.show_notification:
+    - text: "Running manila.upgrade.upgrade.pre"
diff --git a/manila/upgrade/verify/_api.sls b/manila/upgrade/verify/_api.sls
new file mode 100644
index 0000000..e1a6252
--- /dev/null
+++ b/manila/upgrade/verify/_api.sls
@@ -0,0 +1,24 @@
+{%- from "manila/map.jinja" import api with context %}
+
+manila_upgrade_verify_api:
+  test.show_notification:
+    - text: "Running manila.upgrade.verify.api"
+
+{%- if api.get('role', 'secondary') == 'primary' %}
+  {%- set share_type_name = 'UpgradeTestShareType' %}
+  {%- set share_type_extra_specs = {'driver_handles_share_servers': False} %}
+manila_create_share_type_{{ share_type_name }}:
+  manilang.share_type_present:
+    - cloud_name: admin_identity
+    - name: {{ share_type_name }}
+    - extra_specs: {{ share_type_extra_specs }}
+    - microversion: '2.40'
+
+manila_delete_share_type_{{ share_type_name }}:
+  manilang.share_type_absent:
+    - cloud_name: admin_identity
+    - name: {{ share_type_name }}
+    - require:
+      - manilang: manila_create_share_type_{{ share_type_name }}
+
+{%- endif %}
diff --git a/manila/upgrade/verify/init.sls b/manila/upgrade/verify/init.sls
new file mode 100644
index 0000000..fe2e2d1
--- /dev/null
+++ b/manila/upgrade/verify/init.sls
@@ -0,0 +1,2 @@
+include:
+ - manila.upgrade.verify._api