Merge "Changes required for custom resolv conf file in contrail 4.x"
diff --git a/README.rst b/README.rst
index 829e827..44c9e7c 100644
--- a/README.rst
+++ b/README.rst
@@ -1533,6 +1533,26 @@
         nodemgr: 10
       ....
 
+Disable database writes of collector
+------------------------------------
+
+Sandesh messages aren't written to analytics database by changing following parameters to `true`.
+Default value all of these parametes is `false`. Is possible to change one or more parametes.
+
+.. code-block:: yaml
+
+    opencontrail:
+      ....
+      collector
+        ....
+        database:
+          ....
+          disable_all_writes: false
+          disable_statistics_writes: true
+          disable_message_writes: false
+          ....
+
+
 Define aging time for flow-records in seconds
 ---------------------------------------------
 
diff --git a/_modules/contrail.py b/_modules/contrail.py
index f36c4ce..34b8db7 100644
--- a/_modules/contrail.py
+++ b/_modules/contrail.py
@@ -1254,16 +1254,19 @@
 
 def _get_vrouter_config(vnc_client, gvc_name=None):
     try:
+        vrouter_conf_objs = vnc_client._objects_list('global-vrouter-config', detail=True)
+        if len(vrouter_conf_objs) == 0:
+            return None
         if not gvc_name:
-            gvc_list = global_vrouter_config_list()
-            gvc_name = gvc_list.values()[0]['name']
+            return vrouter_conf_objs[0]
+        for gvc in vrouter_conf_objs:
+            if gvc.name == gvc_name:
+                return gvc
+    except Exception as e:
+       print("Error: {}".format(e))
+       pass
 
-        config = vnc_client.global_vrouter_config_read(
-            fq_name=['default-global-system-config', gvc_name])
-    except Exception:
-        config = None
-
-    return config
+    return None
 
 
 def linklocal_service_list(global_vrouter_config_name=None, **kwargs):
@@ -1334,6 +1337,11 @@
            'comment': ''}
     vnc_client = _auth(**kwargs)
     current_config = _get_vrouter_config(vnc_client, global_vrouter_config_name)
+    if current_config is None:
+        ret['result'] = False
+        ret['comment'] = "Global Vrouter Config doesn't exist and is required for LinkLocalSevices"
+        return ret
+
     service_entry = LinklocalServiceEntryType(
         linklocal_service_name=name,
         linklocal_service_ip=lls_ip,
@@ -1345,45 +1353,32 @@
         service_entry.ip_fabric_service_ip = ipf_dns_or_ip
         service_entry.ip_fabric_DNS_service_name = ''
 
-    if current_config is None:
-        new_services = LinklocalServicesTypes([service_entry])
-        new_config = GlobalVrouterConfig(linklocal_services=new_services)
-        if __opts__['test']:
-            ret['result'] = None
-            ret['comment'] = "Link local service " + name + " will be created"
-        else:
-            ret['comment'] = "Link local service " + name + " has been created"
-            ret['changes'] = {'LinkLocalSevice': {'old': '', 'new': name}}
-            vnc_client.global_vrouter_config_create(new_config)
+    _current_service_list = current_config.get_linklocal_services()
+    if _current_service_list is None:
+        service_list = {'linklocal_service_entry': []}
     else:
-        _current_service_list = current_config.get_linklocal_services()
-        if _current_service_list is None:
-            service_list = {'linklocal_service_entry': []}
-        else:
-            service_list = _current_service_list.__dict__
-        new_services = [service_entry]
-        for key, value in service_list.iteritems():
-            if key != 'linklocal_service_entry':
-                continue
-            for _entry in value:
-                entry = _entry.__dict__
-                if 'linklocal_service_name' in entry:
-                    if entry['linklocal_service_name'] == name:
-                        ret['comment'] = 'Link local service ' + name + ' already exists'
-                        return ret
-                    new_services.append(_entry)
-            if __opts__['test']:
-                ret['result'] = None
-                ret['comment'] = "LinkLocalSevices " + name + " will be created"
-            service_list[key] = new_services
-        new_config = GlobalVrouterConfig(linklocal_services=service_list)
-        if __opts__['test']:
-            ret['result'] = None
-            ret['comment'] = "LinkLocalSevices " + name + " will be updated"
-        else:
-            vnc_client.global_vrouter_config_update(new_config)
-            ret['comment'] = "LinkLocalSevices " + name + " has been created"
-            ret['changes'] = {'LinkLocalSevices': {'old': '', 'new': name}}
+        service_list = _current_service_list.__dict__
+    new_services = [service_entry]
+    value = service_list.get('linklocal_service_entry')
+    for _entry in value:
+        entry = _entry.__dict__
+        if 'linklocal_service_name' in entry:
+            if entry['linklocal_service_name'] == name:
+                ret['comment'] = 'Link local service ' + name + ' already exists'
+                return ret
+            new_services.append(_entry)
+    if __opts__['test']:
+        ret['result'] = None
+        ret['comment'] = "LinkLocalSevices " + name + " will be created"
+    service_list['linklocal_service_entry'] = new_services
+    new_config = GlobalVrouterConfig(linklocal_services=service_list)
+    if __opts__['test']:
+        ret['result'] = None
+        ret['comment'] = "LinkLocalSevices " + name + " will be updated"
+    else:
+        vnc_client.global_vrouter_config_update(new_config)
+        ret['comment'] = "LinkLocalSevices " + name + " has been created"
+        ret['changes'] = {'LinkLocalSevices': {'old': '', 'new': name}}
     return ret
 
 
@@ -1402,10 +1397,8 @@
            'result': True,
            'comment': ''}
     lls = linklocal_service_get(name)
-    print (lls)
     if name in lls:
         if __opts__['test']:
-            print " ------------ Test only  ------------"
             ret['result'] = None
             ret['comment'] = "Link local service " + name + " will be deleted"
             return ret
@@ -1433,7 +1426,10 @@
         new_config = GlobalVrouterConfig(linklocal_services=service_list)
         vnc_client.global_vrouter_config_update(new_config)
         ret['comment'] = "Link local service " + name + " will be deleted"
-        ret['changes'] = {'LinkLocalService': {'old': '', 'new': name}}
+        ret['changes'] = {'LinkLocalService': {'old': name, 'new': ''}}
+    else:
+        ret['result'] = False
+        ret['comment'] = "Global Vrouter Config doesn't exist and is required for LinkLocalSevices"
     return ret
 
 
diff --git a/metadata/service/compute/cluster.yml b/metadata/service/compute/cluster.yml
index 50542d1..a3729e8 100644
--- a/metadata/service/compute/cluster.yml
+++ b/metadata/service/compute/cluster.yml
@@ -5,4 +5,15 @@
 parameters:
   opencontrail:
     compute:
-      enabled: true
+      enabled: True
+      version: ${_param:opencontrail_version}
+      disable_flow_collection: False
+      bind:
+        address: ${_param:single_address}
+      interface:
+        address: ${_param:opencontrail_compute_address}
+        dev: ${_param:opencontrail_compute_iface}
+        gateway: ${_param:opencontrail_compute_gateway}
+        mask: ${_param:opencontrail_compute_iface_mask}
+        dns: ${_param:opencontrail_compute_dns}
+        mtu: 9000
\ No newline at end of file
diff --git a/metadata/service/compute/single.yml b/metadata/service/compute/single.yml
index 05ca1bc..115ef4c 100644
--- a/metadata/service/compute/single.yml
+++ b/metadata/service/compute/single.yml
@@ -3,12 +3,17 @@
 classes:
 - service.opencontrail.support
 parameters:
-  _param:
-    opencontrail_version: 2.2
   opencontrail:
     compute:
-      version: ${_param:opencontrail_version}
       enabled: true
+      version: ${_param:opencontrail_version}
+      interface:
+        address: ${_param:opencontrail_compute_address}
+        dev: ${_param:opencontrail_compute_iface}
+        gateway: ${_param:opencontrail_compute_gateway}
+        mask: ${_param:opencontrail_compute_iface_mask}
+        dns: ${_param:opencontrail_compute_dns}
+        mtu: 9000
   nova:
     compute:
       networking: contrail
diff --git a/metadata/service/control/analytics.yml b/metadata/service/control/analytics.yml
index 936e5f7..e3fb303 100644
--- a/metadata/service/control/analytics.yml
+++ b/metadata/service/control/analytics.yml
@@ -3,16 +3,6 @@
 classes:
 - service.opencontrail.support
 parameters:
-  _param:
-    opencontrail_version: 2.2
-    opencontrail_identity_protocol: http
-    opencontrail_identity_port: 35357
-    opencontrail_identity_version: '2.0'
-    opencontrail_admin_password: 'none'
-    opencontrail_admin_user: 'contrail'
-    keystone_service_token: 'none'
-    opencontrail_redis_password: 'none'
-    openstack_region: RegionOne
   opencontrail:
     common:
       version: ${_param:opencontrail_version}
diff --git a/metadata/service/control/cluster.yml b/metadata/service/control/cluster.yml
index 2450352..48d048c 100644
--- a/metadata/service/control/cluster.yml
+++ b/metadata/service/control/cluster.yml
@@ -3,16 +3,6 @@
 classes:
 - service.opencontrail.support
 parameters:
-  _param:
-    opencontrail_version: 2.2
-    opencontrail_identity_protocol: http
-    opencontrail_identity_port: 35357
-    opencontrail_identity_version: '2.0'
-    opencontrail_admin_password: 'none'
-    opencontrail_admin_user: 'contrail'
-    keystone_service_token: 'none'
-    opencontrail_redis_password: 'none'
-    openstack_region: RegionOne
   opencontrail:
     common:
       version: ${_param:opencontrail_version}
diff --git a/metadata/service/control/control.yml b/metadata/service/control/control.yml
index 3d618f2..7ea5014 100644
--- a/metadata/service/control/control.yml
+++ b/metadata/service/control/control.yml
@@ -3,16 +3,6 @@
 classes:
 - service.opencontrail.support
 parameters:
-  _param:
-    opencontrail_version: 2.2
-    opencontrail_identity_protocol: http
-    opencontrail_identity_port: 35357
-    opencontrail_identity_version: '2.0'
-    opencontrail_admin_password: 'none'
-    opencontrail_admin_user: 'contrail'
-    keystone_service_token: 'none'
-    openstack_region: RegionOne
-    opencontrail_redis_password: 'none'
   opencontrail:
     common:
       version: ${_param:opencontrail_version}
diff --git a/metadata/service/control/single.yml b/metadata/service/control/single.yml
index 5478d5c..7012569 100644
--- a/metadata/service/control/single.yml
+++ b/metadata/service/control/single.yml
@@ -3,16 +3,6 @@
 classes:
 - service.opencontrail.support
 parameters:
-  _param:
-    opencontrail_version: 2.2
-    opencontrail_identity_protocol: http
-    opencontrail_identity_port: 35357
-    opencontrail_identity_version: '2.0'
-    opencontrail_admin_password: 'none'
-    opencontrail_admin_user: 'contrail'
-    keystone_service_token: 'none'
-    openstack_region: RegionOne
-    opencontrail_redis_password: 'none'
   opencontrail:
     common:
       version: ${_param:opencontrail_version}
diff --git a/opencontrail/client.sls b/opencontrail/client.sls
index 0768fd8..a74d607 100644
--- a/opencontrail/client.sls
+++ b/opencontrail/client.sls
@@ -153,6 +153,8 @@
   - api_server_ip: {{ client.api.host }}
   - api_server_port: {{ client.api.port }}
   - api_base_url: '/'
+  - require:
+    - contrail: global_vrouter_config_create
 
 {%- endfor %}
 
diff --git a/opencontrail/files/4.0/contrail-collector.conf b/opencontrail/files/4.0/contrail-collector.conf
index 505ad1d..b2ade38 100644
--- a/opencontrail/files/4.0/contrail-collector.conf
+++ b/opencontrail/files/4.0/contrail-collector.conf
@@ -133,6 +133,12 @@
 #high_watermark2.message_severity_level=SYS_DEBUG
 #low_watermark2.message_severity_level=INVALID
 
+{%- if collector.database is defined %}
+disable_all_writes={{ collector.database.get('disable_all_writes','false')|lower }}
+disable_statistics_writes={{ collector.database.get('disable_statistics_writes','false')|lower }}
+disable_message_writes={{ collector.database.get('disable_message_writes','false')|lower }}
+{%- endif %}
+
 [REDIS]
 port=6379
 server=127.0.0.1
diff --git a/opencontrail/meta/salt.yml b/opencontrail/meta/salt.yml
index 21080ce..968da5d 100644
--- a/opencontrail/meta/salt.yml
+++ b/opencontrail/meta/salt.yml
@@ -40,4 +40,10 @@
     require:
     - salt: opencontrail.config
     - salt: opencontrail.collector
+dependency:
+  {% from "opencontrail/map.jinja" import client with context %}
+  {%- if client.get('enabled', False)  %}
+  engine: pkg
+  pkgs: {{ client.pkgs }}
+  {%- endif %}