Run dbsync on primary node only

Move dbsync to separate file.
Run only on primary node.
Do not run redundant versioned dbsyncs.
Run online dbsync when services are online.

Change-Id: Ie83cfe33943ac7a2ef10d569c60274f9cd003df2
Related-Prod: PROD-21267
diff --git a/ironic/api.sls b/ironic/api.sls
index dcf247d..da1c539 100644
--- a/ironic/api.sls
+++ b/ironic/api.sls
@@ -2,25 +2,21 @@
 {%- if api.enabled %}
 include:
   - ironic._common
+  - ironic.db.offline_sync
 
 ironic_api_packages:
   pkg.installed:
   - names: {{ api.pkgs }}
   - install_recommends: False
-
-{%- if api.api_type not in ["deploy"] %}
-ironic_install_database:
-  cmd.run:
-  - names:
-    - ironic-dbsync --config-file /etc/ironic/ironic.conf upgrade
-  - require:
-    - file: /etc/ironic/ironic.conf
-{%- endif %}
+  - require_in:
+    - sls: ironic.db.offline_sync
 
 {{ api.service }}:
   service.running:
     - enable: true
     - full_restart: true
+    - require:
+      - sls: ironic.db.offline_sync
     - watch:
       - file: /etc/ironic/ironic.conf
       - file: /etc/ironic/policy.json
diff --git a/ironic/db/offline_sync.sls b/ironic/db/offline_sync.sls
new file mode 100644
index 0000000..5008575
--- /dev/null
+++ b/ironic/db/offline_sync.sls
@@ -0,0 +1,8 @@
+{%- from "ironic/map.jinja" import api with context %}
+
+ironic_install_database:
+  cmd.run:
+  - name: ironic-dbsync --config-file /etc/ironic/ironic.conf upgrade
+    {%- if grains.get('noservices') or ( api.api_type in ["deploy"] and api.get('role', 'primary') == 'secondary' ) %}
+  - onlyif: /bin/false
+    {%- endif %}
diff --git a/ironic/db/online_sync.sls b/ironic/db/online_sync.sls
new file mode 100644
index 0000000..9008da9
--- /dev/null
+++ b/ironic/db/online_sync.sls
@@ -0,0 +1,8 @@
+{%- from "ironic/map.jinja" import api with context %}
+
+ironic_online_data_migrations:
+  cmd.run:
+  - name: ironic-dbsync online_data_migrations
+    {%- if grains.get('noservices') or ( api.api_type in ["deploy"] and api.get('role', 'primary') == 'secondary' ) %}
+  - onlyif: /bin/false
+    {%- endif %}