Add BooleanField for persistence and subnet visibility and dynimically create configuration with server and client addresses attempt 1
diff --git a/xos/observers/vpn/steps/sync_vpntenant.py b/xos/observers/vpn/steps/sync_vpntenant.py
index b12180c..bd8e9f9 100644
--- a/xos/observers/vpn/steps/sync_vpntenant.py
+++ b/xos/observers/vpn/steps/sync_vpntenant.py
@@ -29,10 +29,13 @@
         return objs
 
     def get_extra_attributes(self, o):
-        return {"server_key": o.server_key.splitlines()}
+        return {"server_key": o.server_key.splitlines(),
+                "is_persistent": o.is_persistent,
+                "can_view_subnet": o.can_view_subnet}
 
     def generate_client_conf(self, tenant):
-        conf = "remote " + tenant.nat_ip + "\n"
+        # tenant.nat_ip maybe None when the first line executes
+        conf = "remote " + str(tenant.nat_ip) + "\n"
         conf += "dev tun\n"
         conf += "ifconfig " + tenant.client_address + " " + tenant.server_address + "\n"
         conf += "secret static.key\n"
diff --git a/xos/observers/vpn/steps/sync_vpntenant.yaml b/xos/observers/vpn/steps/sync_vpntenant.yaml
index a8c3e71..da18ebd 100644
--- a/xos/observers/vpn/steps/sync_vpntenant.yaml
+++ b/xos/observers/vpn/steps/sync_vpntenant.yaml
@@ -22,7 +22,7 @@
     shell:
        |
        printf "dev tun
-       ifconfig 10.8.0.1 10.8.0.2
+       ifconfig {{ server_address }} {{ client_address }}
        secret static.key
        keepalive 10 60
        ping-timer-rem
diff --git a/xos/services/vpn/admin.py b/xos/services/vpn/admin.py
index 0c666f9..4b84299 100644
--- a/xos/services/vpn/admin.py
+++ b/xos/services/vpn/admin.py
@@ -44,6 +44,8 @@
     client_conf = forms.CharField(required=False, widget=forms.Textarea)
     server_address = forms.GenericIPAddressField(protocol='IPv4', required=True)
     client_address = forms.GenericIPAddressField(protocol='IPv4', required=True)
+    is_persistent = forms.BooleanField()
+    can_view_subnet = forms.BooleanField()
 
     def __init__(self, *args, **kwargs):
         super(VPNTenantForm, self).__init__(*args, **kwargs)
@@ -61,12 +63,16 @@
             self.fields['client_conf'].initial = self.instance.client_conf
             self.fields['server_address'].initial = self.instance.server_address
             self.fields['client_address'].initial = self.instance.client_address
+            self.fields['is_persistent'].initial = self.instance.is_persistent
+            self.fields['can_view_subnet'].initial = self.instance.can_view_subnet
 
         if (not self.instance) or (not self.instance.pk):
             self.fields['creator'].initial = get_request().user
             self.fields['server_key'].initial = self.generate_VPN_key()
             self.fields['server_address'].initial = "10.8.0.1"
             self.fields['client_address'].initial = "10.8.0.2"
+            self.fields['is_persistent'].initial = True
+            self.fields['can_view_subnet'].initial = False
             if VPNService.get_service_objects().exists():
                 self.fields["provider_service"].initial = VPNService.get_service_objects().all()[0]
 
@@ -75,6 +81,8 @@
         self.instance.server_key = self.cleaned_data.get("server_key")
         self.instance.server_address = self.cleaned_data.get("server_address")
         self.instance.client_address = self.cleaned_data.get("client_address")
+        self.instance.is_persistent = self.cleaned_data.get('is_persistent')
+        self.instance.can_view_subnet = self.cleaned_data.get('can_view_subnet')
         return super(VPNTenantForm, self).save(commit=commit)
 
     def generate_VPN_key(self):
@@ -92,7 +100,8 @@
     fieldsets = [(None, {'fields': ['backend_status_text', 'kind',
                                     'provider_service', 'instance', 'creator',
                                     'server_key', 'client_conf',
-                                    'server_address', 'client_address'],
+                                    'server_address', 'client_address',
+                                    'is_persistent', 'can_view_subnet'],
                          'classes': ['suit-tab suit-tab-general']})]
     readonly_fields = ('backend_status_text', 'instance')
     form = VPNTenantForm
diff --git a/xos/services/vpn/models.py b/xos/services/vpn/models.py
index befc586..edcae50 100644
--- a/xos/services/vpn/models.py
+++ b/xos/services/vpn/models.py
@@ -25,7 +25,9 @@
     default_attributes = {'server_key': 'Error key not found',
                           'client_conf': 'Configuration not found',
                           'server_address': '10.8.0.1',
-                          'client_address': '10.8.0.2'}
+                          'client_address': '10.8.0.2',
+                          'can_view_subnet': False,
+                          'is_persistent': True}
 
     def __init__(self, *args, **kwargs):
         vpn_services = VPNService.get_service_objects().all()
@@ -106,6 +108,26 @@
     def client_conf(self, value):
         self.set_attribute("client_conf", value)
 
+    @property
+    def is_persistent(self):
+        return self.get_attribute(
+            "is_persistent",
+            self.default_attributes['is_persistent'])
+
+    @is_persistent.setter
+    def is_persistent(self, value):
+        self.set_attribute("is_persistent", value)
+
+    @property
+    def can_view_subnet(self):
+        return self.get_attribute(
+            "can_view_subnet",
+            self.default_attributes['can_view_subnet'])
+
+    @can_view_subnet.setter
+    def can_view_subnet(self, value):
+        self.set_attribute("can_view_subnet", value)
+
 
 def model_policy_vpn_tenant(pk):
     # This section of code is atomic to prevent race conditions