Repository: openstack-charmers/zaza

Issue:
models need to be in test mode and have hook retries disabled
Models which are created by Zaza should enable test mode, to prevent artificially ticking metrics in the charm store for charm usage.

The Zaza models should also disable retrying failed hooks, as we expect all charms to never enter a hook error state.  The retry failed hooks feature is useful for users, but we do want to bail and fail if a charm ever enters an error state in a hook.

```
test-mode: true
transmit-vendor-metrics: false
automatically-retry-hooks: false
```

These, and other useful tuning from OSCI are here for example:

https://github.com/openstack-charmers/charm-test-infra/blob/master/juju-configs/model-default-serverstack.yaml

https://github.com/openstack-charmers/charm-test-infra/blob/master/juju-configs/controller-default.yaml


Comments:

Patch:
diff --git a/zaza/charm_lifecycle/prepare.py b/zaza/charm_lifecycle/prepare.py
index 0f0e436..00e6002 100644
--- a/zaza/charm_lifecycle/prepare.py
+++ b/zaza/charm_lifecycle/prepare.py
@@ -4,6 +4,22 @@ import subprocess
 import sys
 
 
+MODEL_DEFAULTS = [
+    # Model defaults from charm-test-infra
+    #   https://jujucharms.com/docs/2.1/models-config
+    '--config', 'agent-stream=proposed',
+    '--config', 'default-series=xenial',
+    '--config', 'image-stream=daily',
+    '--config', 'test-mode=true',
+    '--config', 'transmit-vendor-metrics=false',
+    # https://bugs.launchpad.net/juju/+bug/1685351
+    # enable-os-refresh-update: false
+    '--config', 'enable-os-upgrade=false',
+    '--config', 'automatically-retry-hooks=false',
+    '--config', 'use-default-secgroup=true',
+]
+
+
 def add_model(model_name):
     """Add a model with the given name
 
@@ -11,7 +27,7 @@ def add_model(model_name):
     :type bundle: str
     """
     logging.info("Adding model {}".format(model_name))
-    subprocess.check_call(['juju', 'add-model', model_name])
+    subprocess.check_call(['juju', 'add-model', model_name] + MODEL_DEFAULTS)
 
 
 def prepare(model_name):


Test patch:
diff --git a/unit_tests/test_zaza_charm_lifecycle_prepare.py b/unit_tests/test_zaza_charm_lifecycle_prepare.py
index 92ea511..510588b 100644
--- a/unit_tests/test_zaza_charm_lifecycle_prepare.py
+++ b/unit_tests/test_zaza_charm_lifecycle_prepare.py
@@ -8,7 +8,17 @@ class TestCharmLifecyclePrepare(ut_utils.BaseTestCase):
         self.patch_object(lc_prepare.subprocess, 'check_call')
         lc_prepare.add_model('newmodel')
         self.check_call.assert_called_once_with(
-            ['juju', 'add-model', 'newmodel'])
+            [
+                'juju', 'add-model', 'newmodel',
+                '--config', 'agent-stream=proposed',
+                '--config', 'default-series=xenial',
+                '--config', 'image-stream=daily',
+                '--config', 'test-mode=true',
+                '--config', 'transmit-vendor-metrics=false',
+                '--config', 'enable-os-upgrade=false',
+                '--config', 'automatically-retry-hooks=false',
+                '--config', 'use-default-secgroup=true'
+            ])
 
     def test_prepare(self):
         self.patch_object(lc_prepare, 'add_model')