Initial attempt and renaming VPN to OpenVPN
diff --git a/views/ngXosViews/vpnDashboard/.bowerrc b/views/ngXosViews/openVPNDashboard/.bowerrc
similarity index 100%
rename from views/ngXosViews/vpnDashboard/.bowerrc
rename to views/ngXosViews/openVPNDashboard/.bowerrc
diff --git a/views/ngXosViews/vpnDashboard/.eslintrc b/views/ngXosViews/openVPNDashboard/.eslintrc
similarity index 100%
rename from views/ngXosViews/vpnDashboard/.eslintrc
rename to views/ngXosViews/openVPNDashboard/.eslintrc
diff --git a/views/ngXosViews/vpnDashboard/.gitignore b/views/ngXosViews/openVPNDashboard/.gitignore
similarity index 100%
rename from views/ngXosViews/vpnDashboard/.gitignore
rename to views/ngXosViews/openVPNDashboard/.gitignore
diff --git a/views/ngXosViews/vpnDashboard/bower.json b/views/ngXosViews/openVPNDashboard/bower.json
similarity index 87%
rename from views/ngXosViews/vpnDashboard/bower.json
rename to views/ngXosViews/openVPNDashboard/bower.json
index b7c354e..01b2715 100644
--- a/views/ngXosViews/vpnDashboard/bower.json
+++ b/views/ngXosViews/openVPNDashboard/bower.json
@@ -1,10 +1,10 @@
 {
-  "name": "xos-vpnDashboard",
+  "name": "xos-openVPNDashboard",
   "version": "0.0.0",
   "authors": [
     "Jeremy Mowery <jermowery@email.arizona.edu>"
   ],
-  "description": "The vpnDashboard view",
+  "description": "The OpenVPN Dashboard",
   "license": "MIT",
   "ignore": [
     "**/.*",
diff --git a/views/ngXosViews/vpnDashboard/env/default.js b/views/ngXosViews/openVPNDashboard/env/default.js
similarity index 100%
rename from views/ngXosViews/vpnDashboard/env/default.js
rename to views/ngXosViews/openVPNDashboard/env/default.js
diff --git a/views/ngXosViews/vpnDashboard/gulp/build.js b/views/ngXosViews/openVPNDashboard/gulp/build.js
similarity index 84%
rename from views/ngXosViews/vpnDashboard/gulp/build.js
rename to views/ngXosViews/openVPNDashboard/gulp/build.js
index b7de9e5..625e3ee 100644
--- a/views/ngXosViews/vpnDashboard/gulp/build.js
+++ b/views/ngXosViews/openVPNDashboard/gulp/build.js
@@ -28,15 +28,15 @@
 var csswring = require('csswring');
 
 var TEMPLATE_FOOTER = `}]);
-angular.module('xos.vpnDashboard').run(function($location){$location.path('/')});
-angular.bootstrap(angular.element('#xosVpnDashboard'), ['xos.vpnDashboard']);`;
+angular.module('xos.openVPNDashboard').run(function($location){$location.path('/')});
+angular.bootstrap(angular.element('#xosOpenVPNDashboard'), ['xos.openVPNDashboard']);`;
 
 module.exports = function(options){
 
   // delete previous builded file
   gulp.task('clean', function(){
     return del(
-      [options.dashboards + 'xosVpnDashboard.html'],
+      [options.dashboards + 'xosOpenVPNDashboard.html'],
       {force: true}
     );
   });
@@ -59,7 +59,7 @@
 
   gulp.task('copyCss', ['css'], function(){
     return gulp.src([`${options.tmp}/css/*.css`])
-    .pipe(concat('xosVpnDashboard.css'))
+    .pipe(concat('xosOpenVPNDashboard.css'))
     .pipe(gulp.dest(options.static + 'css/'))
   });
 
@@ -70,7 +70,7 @@
     ])
     .pipe(ngAnnotate())
     .pipe(angularFilesort())
-    .pipe(concat('xosVpnDashboard.js'))
+    .pipe(concat('xosOpenVPNDashboard.js'))
     .pipe(uglify())
     .pipe(gulp.dest(options.static + 'js/'));
   });
@@ -79,7 +79,7 @@
   gulp.task('templates', function(){
     return gulp.src('./src/templates/*.html')
       .pipe(templateCache({
-        module: 'xos.vpnDashboard',
+        module: 'xos.openVPNDashboard',
         root: 'templates/',
         templateFooter: TEMPLATE_FOOTER
       }))
@@ -99,14 +99,14 @@
       .pipe(
         inject(
           gulp.src([
-            options.static + 'js/vendor/xosVpnDashboardVendor.js',
-            options.static + 'js/xosVpnDashboard.js',
-            options.static + 'css/xosVpnDashboard.css'
+            options.static + 'js/vendor/xosOpenVPNDashboardVendor.js',
+            options.static + 'js/xosOpenVPNDashboard.js',
+            options.static + 'css/xosOpenVPNDashboard.css'
           ]),
           {ignorePath: '/../../../xos/core/xoslib'}
         )
       )
-      .pipe(rename('xosVpnDashboard.html'))
+      .pipe(rename('xosOpenVPNDashboard.html'))
       .pipe(gulp.dest(options.dashboards));
   });
 
@@ -123,7 +123,7 @@
     });
 
     return gulp.src(bowerDeps)
-      .pipe(concat('xosVpnDashboardVendor.js'))
+      .pipe(concat('xosOpenVPNDashboardVendor.js'))
       .pipe(uglify())
       .pipe(gulp.dest(options.static + 'js/vendor/'));
   });
diff --git a/views/ngXosViews/vpnDashboard/gulp/server.js b/views/ngXosViews/openVPNDashboard/gulp/server.js
similarity index 100%
rename from views/ngXosViews/vpnDashboard/gulp/server.js
rename to views/ngXosViews/openVPNDashboard/gulp/server.js
diff --git a/views/ngXosViews/vpnDashboard/gulpfile.js b/views/ngXosViews/openVPNDashboard/gulpfile.js
similarity index 100%
rename from views/ngXosViews/vpnDashboard/gulpfile.js
rename to views/ngXosViews/openVPNDashboard/gulpfile.js
diff --git a/views/ngXosViews/vpnDashboard/karma.conf.js b/views/ngXosViews/openVPNDashboard/karma.conf.js
similarity index 100%
rename from views/ngXosViews/vpnDashboard/karma.conf.js
rename to views/ngXosViews/openVPNDashboard/karma.conf.js
diff --git a/views/ngXosViews/vpnDashboard/package.json b/views/ngXosViews/openVPNDashboard/package.json
similarity index 96%
rename from views/ngXosViews/vpnDashboard/package.json
rename to views/ngXosViews/openVPNDashboard/package.json
index a4d9e6f..412afec 100644
--- a/views/ngXosViews/vpnDashboard/package.json
+++ b/views/ngXosViews/openVPNDashboard/package.json
@@ -1,5 +1,5 @@
 {
-  "name": "xos-vpnDashboard",
+  "name": "xos-openVPNDashboard",
   "version": "1.0.0",
   "description": "Angular Application for XOS, created with generator-xos",
   "scripts": {
diff --git a/views/ngXosViews/vpnDashboard/spec/sample.test.js b/views/ngXosViews/openVPNDashboard/spec/sample.test.js
similarity index 95%
rename from views/ngXosViews/vpnDashboard/spec/sample.test.js
rename to views/ngXosViews/openVPNDashboard/spec/sample.test.js
index ad20c13..822c114 100644
--- a/views/ngXosViews/vpnDashboard/spec/sample.test.js
+++ b/views/ngXosViews/openVPNDashboard/spec/sample.test.js
@@ -4,7 +4,7 @@
   
   var scope, element, isolatedScope, httpBackend;
 
-  beforeEach(module('xos.vpnDashboard'));
+  beforeEach(module('xos.openVPNDashboard'));
   beforeEach(module('templates'));
 
   beforeEach(inject(function($httpBackend, $compile, $rootScope){
diff --git a/views/ngXosViews/vpnDashboard/src/css/vpnDashboard.css b/views/ngXosViews/openVPNDashboard/src/css/openVPNDashboard.css
similarity index 87%
rename from views/ngXosViews/vpnDashboard/src/css/vpnDashboard.css
rename to views/ngXosViews/openVPNDashboard/src/css/openVPNDashboard.css
index 116051f..085d5d4 100644
--- a/views/ngXosViews/vpnDashboard/src/css/vpnDashboard.css
+++ b/views/ngXosViews/openVPNDashboard/src/css/openVPNDashboard.css
@@ -1,4 +1,4 @@
-#xosVpnDashboard{
+#xosOpenVPNDashboard{
   width: 70%;
   margin: auto;
 }
diff --git a/views/ngXosViews/vpnDashboard/src/index.html b/views/ngXosViews/openVPNDashboard/src/index.html
similarity index 91%
rename from views/ngXosViews/vpnDashboard/src/index.html
rename to views/ngXosViews/openVPNDashboard/src/index.html
index 07f1017..83048df 100644
--- a/views/ngXosViews/vpnDashboard/src/index.html
+++ b/views/ngXosViews/openVPNDashboard/src/index.html
@@ -3,10 +3,10 @@
 <link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.css" />
 <!-- endbower --><!-- endcss -->
 <!-- inject:css -->
-<link rel="stylesheet" href="/css/vpnDashboard.css">
+<link rel="stylesheet" href="/css/openVPNDashboard.css">
 <!-- endinject -->
 
-<div ng-app="xos.vpnDashboard" id="xosVpnDashboard">
+<div ng-app="xos.openVPNDashboard" id="xosOpenVPNDashboard">
     <div ui-view></div>
 </div>
 
diff --git a/views/ngXosViews/vpnDashboard/src/js/main.js b/views/ngXosViews/openVPNDashboard/src/js/main.js
similarity index 78%
rename from views/ngXosViews/vpnDashboard/src/js/main.js
rename to views/ngXosViews/openVPNDashboard/src/js/main.js
index 233051a..b59a701 100644
--- a/views/ngXosViews/vpnDashboard/src/js/main.js
+++ b/views/ngXosViews/openVPNDashboard/src/js/main.js
@@ -1,6 +1,6 @@
 'use strict';
 
-angular.module('xos.vpnDashboard', [
+angular.module('xos.openVPNDashboard', [
   'ngResource',
   'ngCookies',
   'ngLodash',
@@ -9,9 +9,9 @@
 ])
 .config(($stateProvider) => {
   $stateProvider
-  .state('vpnList', {
+  .state('openVPNList', {
     url: '/',
-    template: '<vpn-list></vpn-list>'
+    template: '<openvpn-list></openvpn-list>'
   });
 })
 .config(($compileProvider) => {
@@ -20,10 +20,10 @@
 })
 .service('Vpn', function($http, $q){
 
-  this.getVpnTenants = () => {
+  this.getOpenVPNTenants = () => {
     let deferred = $q.defer();
 
-    $http.get('/xoslib/vpntenant/')
+    $http.get('/xoslib/openvpntenant/')
     .then((res) => {
       deferred.resolve(res.data)
     })
@@ -37,15 +37,15 @@
 .config(function($httpProvider){
   $httpProvider.interceptors.push('NoHyperlinks');
 })
-.directive('vpnList', function(){
+.directive('openVPNList', function(){
   return {
     restrict: 'E',
     scope: {},
     bindToController: true,
     controllerAs: 'vm',
-    templateUrl: 'templates/vpn-list.tpl.html',
+    templateUrl: 'templates/openvpn-list.tpl.html',
     controller: function(Vpn){
-      Vpn.getVpnTenants()
+      Vpn.getOpenVPNTenants()
       .then((vpns) => {
         this.vpns = vpns;
         for (var i = 0; i < this.vpns.length; i++) {
diff --git a/views/ngXosViews/vpnDashboard/src/templates/vpn-list.tpl.html b/views/ngXosViews/openVPNDashboard/src/templates/openvpn-list.tpl.html
similarity index 100%
rename from views/ngXosViews/vpnDashboard/src/templates/vpn-list.tpl.html
rename to views/ngXosViews/openVPNDashboard/src/templates/openvpn-list.tpl.html
diff --git a/xos/core/xoslib/dashboards/xosVpnDashboard.html b/xos/core/xoslib/dashboards/xosVpnDashboard.html
deleted file mode 100644
index b63559e..0000000
--- a/xos/core/xoslib/dashboards/xosVpnDashboard.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!-- browserSync -->
-
-<!-- inject:css -->
-<link rel="stylesheet" href="/static/css/xosVpnDashboard.css">
-<!-- endinject -->
-
-<div id="xosVpnDashboard">
-    <div ui-view></div>
-</div>
-
-
-<!-- inject:js -->
-<script src="/static/js/xosVpnDashboard.js"></script>
-<!-- endinject -->
diff --git a/xos/core/xoslib/methods/vpnview.py b/xos/core/xoslib/methods/openvpnview.py
similarity index 64%
rename from xos/core/xoslib/methods/vpnview.py
rename to xos/core/xoslib/methods/openvpnview.py
index bf8231d..d8cf39e 100644
--- a/xos/core/xoslib/methods/vpnview.py
+++ b/xos/core/xoslib/methods/openvpnview.py
@@ -2,7 +2,7 @@
 from core.models import TenantPrivilege
 from plus import PlusSerializerMixin
 from rest_framework import serializers
-from services.vpn.models import VPNService, VPNTenant
+from services.openvpn.models import OpenVPNService, OpenVPNTenant
 from xos.apibase import XOSListCreateAPIView
 
 if hasattr(serializers, "ReadOnlyField"):
@@ -13,18 +13,18 @@
     ReadOnlyField = serializers.Field
 
 
-def get_default_vpn_service():
-    vpn_services = VPNService.get_service_objects().all()
-    if vpn_services:
-        return vpn_services[0].id
+def get_default_openvpn_service():
+    openvpn_services = OpenVPNService.get_service_objects().all()
+    if openvpn_services:
+        return openvpn_services[0].id
     return None
 
 
-class VPNTenantSerializer(serializers.ModelSerializer, PlusSerializerMixin):
-    """A Serializer for the VPNTenant that has the minimum information required for clients.
+class OpenVPNTenantSerializer(serializers.ModelSerializer, PlusSerializerMixin):
+    """A Serializer for the OpenVPNTenant that has the minimum information required for clients.
 
     Attributes:
-        id (ReadOnlyField): The ID of VPNTenant.
+        id (ReadOnlyField): The ID of OpenVPNTenant.
         server_network (ReadOnlyField): The network of the VPN.
         vpn_subnet (ReadOnlyField): The subnet of the VPN.
         script_text (SerializerMethodField): The text of the script for the client to use to
@@ -36,7 +36,7 @@
     script_text = serializers.SerializerMethodField()
 
     class Meta:
-        model = VPNTenant
+        model = OpenVPNTenant
         fields = ('id', 'service_specific_attribute', 'vpn_subnet',
                   'server_network', 'script_text')
 
@@ -44,18 +44,19 @@
         """Gets the text of the client script for the requesting user.
 
         Parameters:
-            obj (services.vpn.models.VPNTenant): The VPNTenant to connect to.
+            obj (services.openvpn.models.OpenVPNTenant): The OpenVPNTenant to connect to.
 
         Returns:
             str: The client script as a str.
         """
-        env = jinja2.Environment(loader=jinja2.FileSystemLoader("/opt/xos/services/vpn/templates"))
+        env = jinja2.Environment(
+            loader=jinja2.FileSystemLoader("/opt/xos/services/openvpn/templates"))
         template = env.get_template("connect.vpn.j2")
         client_name = self.context['request'].user.email + "-" + str(obj.id)
         remote_ids = list(obj.failover_server_ids)
         remote_ids.insert(0, obj.id)
-        remotes = VPNTenant.get_tenant_objects().filter(pk__in=remote_ids)
-        pki_dir = VPNService.get_pki_dir(obj)
+        remotes = OpenVPNTenant.get_tenant_objects().filter(pk__in=remote_ids)
+        pki_dir = OpenVPNService.get_pki_dir(obj)
         fields = {"client_name": client_name,
                   "remotes": remotes,
                   "is_persistent": obj.is_persistent,
@@ -66,11 +67,11 @@
         return template.render(fields)
 
 
-class VPNTenantList(XOSListCreateAPIView):
-    """Class that provides a list of VPNTenants that the user has permission to access."""
-    serializer_class = VPNTenantSerializer
+class OpenVPNTenantList(XOSListCreateAPIView):
+    """Class that provides a list of OpenVPNTenants that the user has permission to access."""
+    serializer_class = OpenVPNTenantSerializer
     method_kind = "list"
-    method_name = "vpntenant"
+    method_name = "openvpntenant"
 
     def get_queryset(self):
         # Get every privilege for this user
@@ -79,5 +80,5 @@
         vpn_tenants = []
         for priv in tenants_privs:
             vpn_tenants.append(
-                VPNTenant.get_tenant_objects().filter(pk=priv.tenant.pk)[0])
+                OpenVPNTenant.get_tenant_objects().filter(pk=priv.tenant.pk)[0])
         return vpn_tenants
diff --git a/xos/core/xoslib/static/css/xosVpnDashboard.css b/xos/core/xoslib/static/css/xosVpnDashboard.css
deleted file mode 100644
index d5a8ed4..0000000
--- a/xos/core/xoslib/static/css/xosVpnDashboard.css
+++ /dev/null
@@ -1 +0,0 @@
-#xosVpnDashboard{width:70%;margin:auto}.vpn-row{display:table-row}.vpn-cell{display:table-cell;padding:5px}.vpn-header{font-weight:700}
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosVpnDashboard.js b/xos/core/xoslib/static/js/xosVpnDashboard.js
deleted file mode 100644
index 7077f40..0000000
--- a/xos/core/xoslib/static/js/xosVpnDashboard.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";angular.module("xos.vpnDashboard",["ngResource","ngCookies","ngLodash","ui.router","xos.helpers"]).config(["$stateProvider",function(n){n.state("vpnList",{url:"/",template:"<vpn-list></vpn-list>"})}]).config(["$compileProvider",function(n){n.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|tel|file|blob):/)}]).service("Vpn",["$http","$q",function(n,t){this.getVpnTenants=function(){var e=t.defer();return n.get("/xoslib/vpntenant/").then(function(n){e.resolve(n.data)})["catch"](function(n){e.reject(n)}),e.promise}}]).config(["$httpProvider",function(n){n.interceptors.push("NoHyperlinks")}]).directive("vpnList",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/vpn-list.tpl.html",controller:["Vpn",function(n){var t=this;n.getVpnTenants().then(function(n){t.vpns=n;for(var e=0;e<t.vpns.length;e++){var i=new Blob([t.vpns[e].script_text],{type:"text/plain"});t.vpns[e].script_text=(window.URL||window.webkitURL).createObjectURL(i)}})["catch"](function(n){throw new Error(n)})}]}}),angular.module("xos.vpnDashboard").run(["$templateCache",function(n){n.put("templates/vpn-list.tpl.html",'<div style="display: table;">\n  <div class="vpn-row">\n    <h1 class="vpn-cell">VPN List</h1>\n  </div>\n  <div class="vpn-row">\n    <div class="vpn-cell vpn-header">ID</div>\n    <div class="vpn-cell vpn-header">VPN Network</div>\n    <div class="vpn-cell vpn-header">VPN Subnet</div>\n    <div class="vpn-cell vpn-header">Script Link</div>\n  </div>\n  <div class="vpn-row" ng-repeat="vpn in vm.vpns">\n    <div class="vpn-cell">{{ vpn.id }}</div>\n    <div class="vpn-cell">{{ vpn.server_network }}</div>\n    <div class="vpn-cell">{{ vpn.vpn_subnet }}</div>\n    <div class="vpn-cell">\n      <a download="connect-{{ vpn.id }}.vpn" ng-href="{{ vpn.script_text }}">Script</a>\n    </div>\n  </div>\n</div>\n')}]),angular.module("xos.vpnDashboard").run(["$location",function(n){n.path("/")}]),angular.bootstrap(angular.element("#xosVpnDashboard"),["xos.vpnDashboard"]);
\ No newline at end of file
diff --git a/xos/services/vpn/__init__.py b/xos/services/openvpn/__init__.py
similarity index 100%
rename from xos/services/vpn/__init__.py
rename to xos/services/openvpn/__init__.py
diff --git a/xos/services/vpn/admin.py b/xos/services/openvpn/admin.py
similarity index 79%
rename from xos/services/vpn/admin.py
rename to xos/services/openvpn/admin.py
index 63040f9..28e778d 100644
--- a/xos/services/vpn/admin.py
+++ b/xos/services/openvpn/admin.py
@@ -4,16 +4,16 @@
 from core.admin import ReadOnlyAwareAdmin, SliceInline, TenantPrivilegeInline
 from core.middleware import get_request
 from core.models import User
-from services.vpn.models import VPN_KIND, VPNService, VPNTenant
+from services.openvpn.models import OPENVPN_KIND, OpenVPNService, OpenVPNTenant
 from xos.exceptions import XOSValidationError
 
 
-class VPNServiceForm(forms.ModelForm):
+class OpenVPNServiceForm(forms.ModelForm):
 
     exposed_ports = forms.CharField(required=True)
 
     def __init__(self, *args, **kwargs):
-        super(VPNServiceForm, self).__init__(*args, **kwargs)
+        super(OpenVPNServiceForm, self).__init__(*args, **kwargs)
 
         if self.instance:
             self.fields['exposed_ports'].initial = (
@@ -21,7 +21,7 @@
 
     def save(self, commit=True):
         self.instance.exposed_ports = self.cleaned_data['exposed_ports']
-        return super(VPNServiceForm, self).save(commit=commit)
+        return super(OpenVPNServiceForm, self).save(commit=commit)
 
     def clean_exposed_ports(self):
         exposed_ports = self.cleaned_data['exposed_ports']
@@ -63,14 +63,14 @@
         return list(range(first, last))
 
     class Meta:
-        model = VPNService
+        model = OpenVPNService
 
 
-class VPNServiceAdmin(ReadOnlyAwareAdmin):
-    """Defines the admin for the VPNService."""
-    model = VPNService
-    form = VPNServiceForm
-    verbose_name = "VPN Service"
+class OpenVPNServiceAdmin(ReadOnlyAwareAdmin):
+    """Defines the admin for the OpenVPNService."""
+    model = OpenVPNService
+    form = OpenVPNServiceForm
+    verbose_name = "OpenVPN Service"
 
     list_display = ("backend_status_icon", "name", "enabled")
 
@@ -90,19 +90,14 @@
     user_readonly_fields = ["name", "enabled", "versionNumber", "description"]
 
     suit_form_tabs = (('general', 'VPN Service Details'),
-                      ('administration', 'Tenants'),
                       ('slices', 'Slices'),)
 
-    suit_form_includes = (('vpnserviceadmin.html',
-                           'top',
-                           'administration'),)
-
     def queryset(self, request):
-        return VPNService.get_service_objects_by_user(request.user)
+        return OpenVPNService.get_service_objects_by_user(request.user)
 
 
-class VPNTenantForm(forms.ModelForm):
-    """The form used to create and edit a VPNTenant.
+class OpenVPNTenantForm(forms.ModelForm):
+    """The form used to create and edit a OpenVPNTenant.
 
     Attributes:
         creator (forms.ModelChoiceField): The XOS user that created this
@@ -113,10 +108,10 @@
             this connection alive through failures.
         clients_can_see_each_other (forms.BooleanField): Determines if the clients on the VPN can
             communicate with each other.
-        failover_servers (forms.ModelMultipleChoiceField): The other VPNTenants to use as failover
+        failover_servers (forms.ModelMultipleChoiceField): The other OpenVPNTenants to use as failover
             servers.
         protocol (forms.ChoiceField): The protocol to use.
-        use_ca_from (forms.ModelChoiceField): Another VPNTenant to use the CA of, this is a very
+        use_ca_from (forms.ModelChoiceField): Another OpenVPNTenant to use the CA of, this is a very
             hacky way to let VPNs have the same clients.
     """
     creator = forms.ModelChoiceField(queryset=User.objects.all())
@@ -126,21 +121,21 @@
     is_persistent = forms.BooleanField(required=False)
     clients_can_see_each_other = forms.BooleanField(required=False)
     failover_servers = forms.ModelMultipleChoiceField(
-        required=False, queryset=VPNTenant.get_tenant_objects())
+        required=False, queryset=OpenVPNTenant.get_tenant_objects())
     protocol = forms.ChoiceField(required=True, choices=[
         ("tcp", "tcp"), ("udp", "udp")])
     use_ca_from = forms.ModelChoiceField(
-        queryset=VPNTenant.get_tenant_objects(), required=False)
+        queryset=OpenVPNTenant.get_tenant_objects(), required=False)
 
     def __init__(self, *args, **kwargs):
-        super(VPNTenantForm, self).__init__(*args, **kwargs)
+        super(OpenVPNTenantForm, self).__init__(*args, **kwargs)
         self.fields['kind'].widget.attrs['readonly'] = True
         self.fields['failover_servers'].widget.attrs['rows'] = 300
         self.fields[
             'provider_service'].queryset = (
-                VPNService.get_service_objects().all())
+                OpenVPNService.get_service_objects().all())
 
-        self.fields['kind'].initial = VPN_KIND
+        self.fields['kind'].initial = OPENVPN_KIND
 
         if self.instance:
             self.fields['creator'].initial = self.instance.creator
@@ -153,14 +148,14 @@
             self.fields['is_persistent'].initial = self.instance.is_persistent
             self.initial['protocol'] = self.instance.protocol
             self.fields['failover_servers'].queryset = (
-                VPNTenant.get_tenant_objects().exclude(pk=self.instance.pk))
-            self.initial['failover_servers'] = VPNTenant.get_tenant_objects().filter(
+                OpenVPNTenant.get_tenant_objects().exclude(pk=self.instance.pk))
+            self.initial['failover_servers'] = OpenVPNTenant.get_tenant_objects().filter(
                 pk__in=self.instance.failover_server_ids)
             self.fields['use_ca_from'].queryset = (
-                VPNTenant.get_tenant_objects().exclude(pk=self.instance.pk))
+                OpenVPNTenant.get_tenant_objects().exclude(pk=self.instance.pk))
             if (self.instance.use_ca_from_id):
                 self.initial['use_ca_from'] = (
-                    VPNTenant.get_tenant_objects().filter(pk=self.instance.use_ca_from_id)[0])
+                    OpenVPNTenant.get_tenant_objects().filter(pk=self.instance.use_ca_from_id)[0])
 
         if (not self.instance) or (not self.instance.pk):
             self.fields['creator'].initial = get_request().user
@@ -169,10 +164,10 @@
             self.fields['clients_can_see_each_other'].initial = True
             self.fields['is_persistent'].initial = True
             self.fields['failover_servers'].queryset = (
-                VPNTenant.get_tenant_objects())
-            if VPNService.get_service_objects().exists():
+                OpenVPNTenant.get_tenant_objects())
+            if OpenVPNService.get_service_objects().exists():
                 self.fields["provider_service"].initial = (
-                    VPNService.get_service_objects().all()[0])
+                    OpenVPNService.get_service_objects().all()[0])
 
     def save(self, commit=True):
         self.instance.creator = self.cleaned_data.get("creator")
@@ -199,14 +194,14 @@
         else:
             self.instance.use_ca_from_id = None
 
-        return super(VPNTenantForm, self).save(commit=commit)
+        return super(OpenVPNTenantForm, self).save(commit=commit)
 
     class Meta:
-        model = VPNTenant
+        model = OpenVPNTenant
 
 
-class VPNTenantAdmin(ReadOnlyAwareAdmin):
-    verbose_name = "VPN Tenant Admin"
+class OpenVPNTenantAdmin(ReadOnlyAwareAdmin):
+    verbose_name = "OpenVPN Tenant Admin"
     list_display = ('id', 'backend_status_icon', 'instance',
                     'server_network', 'vpn_subnet')
     list_display_links = ('id', 'backend_status_icon',
@@ -219,16 +214,16 @@
                                     'failover_servers', "protocol"],
                          'classes': ['suit-tab suit-tab-general']})]
     readonly_fields = ('backend_status_text', 'instance')
-    form = VPNTenantForm
+    form = OpenVPNTenantForm
     inlines = [TenantPrivilegeInline]
 
     suit_form_tabs = (('general', 'Details'),
                       ('tenantprivileges', 'Privileges'))
 
     def queryset(self, request):
-        return VPNTenant.get_tenant_objects_by_user(request.user)
+        return OpenVPNTenant.get_tenant_objects_by_user(request.user)
 
 
 # Associate the admin forms with the models.
-admin.site.register(VPNService, VPNServiceAdmin)
-admin.site.register(VPNTenant, VPNTenantAdmin)
+admin.site.register(OpenVPNService, OpenVPNServiceAdmin)
+admin.site.register(OpenVPNTenant, OpenVPNTenantAdmin)
diff --git a/xos/services/vpn/models.py b/xos/services/openvpn/models.py
similarity index 89%
rename from xos/services/vpn/models.py
rename to xos/services/openvpn/models.py
index 66b1bf8..10a62ad 100644
--- a/xos/services/vpn/models.py
+++ b/xos/services/openvpn/models.py
@@ -5,12 +5,12 @@
 from core.models import Service, TenantWithContainer
 from xos.exceptions import XOSConfigurationError, XOSValidationError
 
-VPN_KIND = "vpn"
+OPENVPN_KIND = "openvpn"
 
 
-class VPNService(Service):
+class OpenVPNService(Service):
     """Defines the Service for creating VPN servers."""
-    KIND = VPN_KIND
+    KIND = OPENVPN_KIND
     OPENVPN_PREFIX = "/opt/openvpn/"
     """The location of the openvpn EASY RSA files and PKIs."""
     SERVER_PREFIX = OPENVPN_PREFIX + "server-"
@@ -31,7 +31,7 @@
             command (str): The command to execute using ESAY RSA.
         """
         full_command = (
-            VPNService.EASYRSA_COMMAND_PREFIX + " --pki-dir=" +
+            OpenVPNService.EASYRSA_COMMAND_PREFIX + " --pki-dir=" +
             pki_dir + " " + command)
         proc = Popen(
             full_command, shell=True, stdout=PIPE, stderr=PIPE
@@ -47,12 +47,12 @@
         """Gets the directory of the PKI for the given tenant.
 
         Parameters:
-            tenant (services.vpn.models.VPNTenant): The tenant to get the PKI directory for.
+            tenant (services.openvpn.models.OpenVPNTenant): The tenant to get the PKI directory for.
 
         Returns:
             str: The pki directory for the tenant.
         """
-        return VPNService.SERVER_PREFIX + str(tenant.id)
+        return OpenVPNService.SERVER_PREFIX + str(tenant.id)
 
     class Meta:
         proxy = True
@@ -102,7 +102,7 @@
             raise XOSValidationError(
                 "No availble ports for protocol: " + protocol)
         tenants = [
-            tenant for tenant in VPNTenant.get_tenant_objects().all()
+            tenant for tenant in OpenVPNTenant.get_tenant_objects().all()
             if tenant.protocol == protocol]
         port_numbers = self.exposed_ports[protocol]
         for port_number in port_numbers:
@@ -113,14 +113,14 @@
                 return port_number
 
 
-class VPNTenant(TenantWithContainer):
+class OpenVPNTenant(TenantWithContainer):
     """Defines the Tenant for creating VPN servers."""
 
     class Meta:
         proxy = True
         verbose_name = "VPN Tenant"
 
-    KIND = VPN_KIND
+    KIND = OPENVPN_KIND
 
     sync_attributes = ("nat_ip", "nat_mac",)
 
@@ -134,19 +134,19 @@
                           'protocol': None}
 
     def __init__(self, *args, **kwargs):
-        vpn_services = VPNService.get_service_objects().all()
+        vpn_services = OpenVPNService.get_service_objects().all()
         if vpn_services:
             self._meta.get_field(
                 "provider_service").default = vpn_services[0].id
-        super(VPNTenant, self).__init__(*args, **kwargs)
+        super(OpenVPNTenant, self).__init__(*args, **kwargs)
 
     def save(self, *args, **kwargs):
-        super(VPNTenant, self).save(*args, **kwargs)
+        super(OpenVPNTenant, self).save(*args, **kwargs)
         model_policy_vpn_tenant(self.pk)
 
     def delete(self, *args, **kwargs):
         self.cleanup_container()
-        super(VPNTenant, self).delete(*args, **kwargs)
+        super(OpenVPNTenant, self).delete(*args, **kwargs)
 
     @property
     def protocol(self):
@@ -160,7 +160,7 @@
 
     @property
     def use_ca_from_id(self):
-        """int: The ID of VPNTenant to use to obtain a CA."""
+        """int: The ID of OpenVPNTenant to use to obtain a CA."""
         return self.get_attribute(
             "use_ca_from_id", self.default_attributes["use_ca_from_id"])
 
@@ -231,7 +231,7 @@
 
     @property
     def failover_server_ids(self):
-        """list(int): The IDs of the VPNTenants to use as failover servers."""
+        """list(int): The IDs of the OpenVPNTenants to use as failover servers."""
         return self.get_attribute(
             "failover_server_ids", self.default_attributes["failover_server_ids"])
 
@@ -261,13 +261,13 @@
         self.set_attribute("port", value)
 
     def get_ca_crt(self, pki_dir):
-        """Gets the lines fo the ca.crt file for this VPNTenant.
+        """Gets the lines fo the ca.crt file for this OpenVPNTenant.
 
         Parameters:
             pki_dir (str): The PKI directory to look in.
 
         Returns:
-            list(str): The lines of the ca.crt file for this VPNTenant.
+            list(str): The lines of the ca.crt file for this OpenVPNTenant.
         """
         with open(pki_dir + "/ca.crt", 'r') as f:
             return f.readlines()
@@ -303,12 +303,12 @@
     """Manages the container for the VPN Tenant.
 
     Parameters
-        pk (int): The ID of this VPNTenant.
+        pk (int): The ID of this OpenVPNTenant.
     """
     # This section of code is atomic to prevent race conditions
     with transaction.atomic():
         # We find all of the tenants that are waiting to update
-        tenant = VPNTenant.objects.select_for_update().filter(pk=pk)
+        tenant = OpenVPNTenant.objects.select_for_update().filter(pk=pk)
         if not tenant:
             return
         # Since this code is atomic it is safe to always use the first tenant
diff --git a/xos/services/vpn/templates/connect.vpn.j2 b/xos/services/openvpn/templates/connect.vpn.j2
similarity index 94%
rename from xos/services/vpn/templates/connect.vpn.j2
rename to xos/services/openvpn/templates/connect.vpn.j2
index 4ce9894..2028cd9 100644
--- a/xos/services/vpn/templates/connect.vpn.j2
+++ b/xos/services/openvpn/templates/connect.vpn.j2
@@ -1,5 +1,5 @@
 #! /bin/bash
-# This file autogenerated by VPNTenant.
+# This file autogenerated by OpenVPNTenant.
 # It contains a script used to generate the OPENVPN client files.
 printf "%b" "client
 dev tun
diff --git a/xos/services/vpn/templates/vpnserviceadmin.html b/xos/services/vpn/templates/vpnserviceadmin.html
deleted file mode 100644
index d983771..0000000
--- a/xos/services/vpn/templates/vpnserviceadmin.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- Template used to for the button leading to the HelloWorldTenantComplete form. -->
-<div class = "left-nav">
-  <ul>
-    <li>
-      <a href="/admin/vpn/vpntenant/">
-        VPN Tenants
-      </a>
-    </li>
-  </ul>
-</div>
diff --git a/xos/synchronizers/vpn/__init__.py b/xos/synchronizers/openvpn/__init__.py
similarity index 100%
rename from xos/synchronizers/vpn/__init__.py
rename to xos/synchronizers/openvpn/__init__.py
diff --git a/xos/synchronizers/vpn/model-deps b/xos/synchronizers/openvpn/model-deps
similarity index 100%
rename from xos/synchronizers/vpn/model-deps
rename to xos/synchronizers/openvpn/model-deps
diff --git a/xos/synchronizers/vpn/run.sh b/xos/synchronizers/openvpn/run.sh
similarity index 100%
rename from xos/synchronizers/vpn/run.sh
rename to xos/synchronizers/openvpn/run.sh
diff --git a/xos/synchronizers/vpn/steps/__init__.py b/xos/synchronizers/openvpn/steps/__init__.py
similarity index 100%
rename from xos/synchronizers/vpn/steps/__init__.py
rename to xos/synchronizers/openvpn/steps/__init__.py
diff --git a/xos/synchronizers/vpn/steps/roles/openvpn/handlers/main.yml b/xos/synchronizers/openvpn/steps/roles/openvpn/handlers/main.yml
similarity index 100%
rename from xos/synchronizers/vpn/steps/roles/openvpn/handlers/main.yml
rename to xos/synchronizers/openvpn/steps/roles/openvpn/handlers/main.yml
diff --git a/xos/synchronizers/vpn/steps/roles/openvpn/tasks/main.yml b/xos/synchronizers/openvpn/steps/roles/openvpn/tasks/main.yml
similarity index 100%
rename from xos/synchronizers/vpn/steps/roles/openvpn/tasks/main.yml
rename to xos/synchronizers/openvpn/steps/roles/openvpn/tasks/main.yml
diff --git a/xos/synchronizers/vpn/steps/roles/openvpn/templates/server.conf.j2 b/xos/synchronizers/openvpn/steps/roles/openvpn/templates/server.conf.j2
similarity index 90%
rename from xos/synchronizers/vpn/steps/roles/openvpn/templates/server.conf.j2
rename to xos/synchronizers/openvpn/steps/roles/openvpn/templates/server.conf.j2
index 3930d28..4766e7b 100644
--- a/xos/synchronizers/vpn/steps/roles/openvpn/templates/server.conf.j2
+++ b/xos/synchronizers/openvpn/steps/roles/openvpn/templates/server.conf.j2
@@ -1,4 +1,4 @@
-# This file autogenerated by VPNTenant synchronizer
+# This file autogenerated by OpenVPNTenant synchronizer
 # It contains the OPENVPN config file for the server
 script-security 3 system
 port {{ port_number }}
diff --git a/xos/synchronizers/openvpn/steps/sync_openvpntenant.py b/xos/synchronizers/openvpn/steps/sync_openvpntenant.py
new file mode 100644
index 0000000..b58dd94
--- /dev/null
+++ b/xos/synchronizers/openvpn/steps/sync_openvpntenant.py
@@ -0,0 +1,75 @@
+import os
+import shutil
+import sys
+
+from django.db.models import F, Q
+
+from services.openvpn.models import OpenVPNService, OpenVPNTenant
+from synchronizers.base.SyncInstanceUsingAnsible import \
+    SyncInstanceUsingAnsible
+
+parentdir = os.path.join(os.path.dirname(__file__), "..")
+sys.path.insert(0, parentdir)
+
+
+class SyncOpenVPNTenant(SyncInstanceUsingAnsible):
+    """Class for syncing a OpenVPNTenant using Ansible.
+
+    This SyncStep creates any necessary files for the OpenVPNTenant using ESAY RSA and then runs the
+    Ansible template to start the server on an instance.
+    """
+    provides = [OpenVPNTenant]
+    observes = OpenVPNTenant
+    requested_interval = 0
+    template_name = "sync_openvpntenant.yaml"
+    service_key_name = "/opt/xos/synchronizers/openvpn/openvpn_private_key"
+
+    def fetch_pending(self, deleted):
+        if (not deleted):
+            objs = OpenVPNTenant.get_tenant_objects().filter(
+                Q(enacted__lt=F('updated')) |
+                Q(enacted=None), Q(lazy_blocked=False))
+        else:
+            objs = OpenVPNTenant.get_deleted_tenant_objects()
+
+        return objs
+
+    def get_extra_attributes(self, tenant):
+        return {"is_persistent": tenant.is_persistent,
+                "vpn_subnet": tenant.vpn_subnet,
+                "server_network": tenant.server_network,
+                "clients_can_see_each_other": (
+                    tenant.clients_can_see_each_other),
+                "port_number": tenant.port_number,
+                "protocol": tenant.protocol,
+                "pki_dir": OpenVPNService.get_pki_dir(tenant)
+                }
+
+    def sync_fields(self, o, fields):
+        pki_dir = OpenVPNService.get_pki_dir(o)
+
+        if (not os.path.isdir(pki_dir)):
+            OpenVPNService.execute_easyrsa_command(pki_dir, "init-pki")
+            OpenVPNService.execute_easyrsa_command(
+                pki_dir, "--req-cn=XOS build-ca nopass")
+
+        # Very hacky way to handle VPNs that need to share CAs
+        if (o.use_ca_from_id):
+            tenant = OpenVPNTenant.get_tenant_objects().filter(
+                pk=o.use_ca_from_id)[0]
+            other_pki_dir = OpenVPNService.get_pki_dir(tenant)
+            shutil.copy2(other_pki_dir + "/ca.crt", pki_dir)
+            shutil.copy2(other_pki_dir + "/private/ca.key",
+                         pki_dir + "/private")
+
+        # If the server has to be built then we need to build it
+        if (not os.path.isfile(pki_dir + "/issued/server.crt")):
+            OpenVPNService.execute_easyrsa_command(
+                pki_dir, "build-server-full server nopass")
+            OpenVPNService.execute_easyrsa_command(pki_dir, "gen-dh")
+
+        # Get the most recent list of revoked clients
+        OpenVPNService.execute_easyrsa_command(pki_dir, "gen-crl")
+
+        # Super runs the playbook
+        super(SyncOpenVPNTenant, self).sync_fields(o, fields)
diff --git a/xos/synchronizers/vpn/steps/sync_vpntenant.yaml b/xos/synchronizers/openvpn/steps/sync_openvpntenant.yaml
similarity index 100%
rename from xos/synchronizers/vpn/steps/sync_vpntenant.yaml
rename to xos/synchronizers/openvpn/steps/sync_openvpntenant.yaml
diff --git a/xos/synchronizers/vpn/steps/sync_tenantprivilege.py b/xos/synchronizers/openvpn/steps/sync_tenantprivilege.py
similarity index 76%
rename from xos/synchronizers/vpn/steps/sync_tenantprivilege.py
rename to xos/synchronizers/openvpn/steps/sync_tenantprivilege.py
index 81e5910..51ee6df 100644
--- a/xos/synchronizers/vpn/steps/sync_tenantprivilege.py
+++ b/xos/synchronizers/openvpn/steps/sync_tenantprivilege.py
@@ -2,7 +2,7 @@
 import sys
 
 from core.models import TenantPrivilege
-from services.vpn.models import VPN_KIND, VPNService, VPNTenant
+from services.openvpn.models import OPENVPN_KIND, OpenVPNService, OpenVPNTenant
 from synchronizers.base.syncstep import DeferredException, SyncStep
 
 parentdir = os.path.join(os.path.dirname(__file__), "..")
@@ -10,13 +10,13 @@
 
 
 class SyncTenantPrivilege(SyncStep):
-    """Class for syncing a TenantPrivilege for a VPNTenant.
+    """Class for syncing a TenantPrivilege for a OpenVPNTenant.
 
-    This SyncStep isolates the updated TenantPrivileges that are for VPNTenants and performs
+    This SyncStep isolates the updated TenantPrivileges that are for OpenVPNTenants and performs
     actions if the TenantPrivilege has been added or deleted. For added privileges a new client
-    certificate and key are made, signed with the ca.crt file used by this VPNTenant. For deleted
+    certificate and key are made, signed with the ca.crt file used by this OpenVPNTenant. For deleted
     privileges the client certificate is revoked and the files associated are deleted. In both
-    cases the associated VPNTenant is saved causing the VPNTenant synchronizer to run.
+    cases the associated OpenVPNTenant is saved causing the OpenVPNTenant synchronizer to run.
     """
     provides = [TenantPrivilege]
     observes = TenantPrivilege
@@ -24,21 +24,21 @@
 
     def fetch_pending(self, deleted):
         privs = super(SyncTenantPrivilege, self).fetch_pending(deleted)
-        # Get only the TenantPrivileges that relate to VPNTenants
-        privs = [priv for priv in privs if priv.tenant.kind == VPN_KIND]
+        # Get only the TenantPrivileges that relate to OpenVPNTenants
+        privs = [priv for priv in privs if priv.tenant.kind == OPENVPN_KIND]
         return privs
 
     def sync_record(self, record):
         if (not record.tenant.id):
             raise DeferredException("Privilege waiting on VPN Tenant ID")
         certificate = self.get_certificate_name(record)
-        tenant = VPNTenant.get_tenant_objects().filter(pk=record.tenant.id)[0]
+        tenant = OpenVPNTenant.get_tenant_objects().filter(pk=record.tenant.id)[0]
         if (not tenant):
             raise DeferredException("Privilege waiting on VPN Tenant")
         # Only add a certificate if ones does not yet exist
-        pki_dir = VPNService.get_pki_dir(tenant)
+        pki_dir = OpenVPNService.get_pki_dir(tenant)
         if (not os.path.isfile(pki_dir + "/issued/" + certificate + ".crt")):
-            VPNService.execute_easyrsa_command(
+            OpenVPNService.execute_easyrsa_command(
                 pki_dir, "build-client-full " + certificate + " nopass")
             tenant.save()
         record.save()
@@ -47,13 +47,13 @@
         if (not record.tenant.id):
             return
         certificate = self.get_certificate_name(record)
-        tenant = VPNTenant.get_tenant_objects().filter(pk=record.tenant.id)[0]
+        tenant = OpenVPNTenant.get_tenant_objects().filter(pk=record.tenant.id)[0]
         if (not tenant):
             return
         # If the client has already been reovked don't do it again
-        pki_dir = VPNService.get_pki_dir(tenant)
+        pki_dir = OpenVPNService.get_pki_dir(tenant)
         if (os.path.isfile(pki_dir + "/issued/" + certificate + ".crt")):
-            VPNService.execute_easyrsa_command(
+            OpenVPNService.execute_easyrsa_command(
                 pki_dir, "revoke " + certificate)
             # Revoking a client cert does not delete any of the files
             # to make sure that we can add this user again we need to
diff --git a/xos/synchronizers/vpn/stop.sh b/xos/synchronizers/openvpn/stop.sh
similarity index 100%
rename from xos/synchronizers/vpn/stop.sh
rename to xos/synchronizers/openvpn/stop.sh
diff --git a/xos/synchronizers/vpn/vpn-synchronizer.py b/xos/synchronizers/openvpn/vpn-synchronizer.py
similarity index 100%
rename from xos/synchronizers/vpn/vpn-synchronizer.py
rename to xos/synchronizers/openvpn/vpn-synchronizer.py
diff --git a/xos/synchronizers/vpn/vpn_config b/xos/synchronizers/openvpn/vpn_config
similarity index 100%
rename from xos/synchronizers/vpn/vpn_config
rename to xos/synchronizers/openvpn/vpn_config
diff --git a/xos/synchronizers/vpn/steps/sync_vpntenant.py b/xos/synchronizers/vpn/steps/sync_vpntenant.py
deleted file mode 100644
index 586ffb2..0000000
--- a/xos/synchronizers/vpn/steps/sync_vpntenant.py
+++ /dev/null
@@ -1,75 +0,0 @@
-import os
-import shutil
-import sys
-
-from django.db.models import F, Q
-
-from services.vpn.models import VPNService, VPNTenant
-from synchronizers.base.SyncInstanceUsingAnsible import \
-    SyncInstanceUsingAnsible
-
-parentdir = os.path.join(os.path.dirname(__file__), "..")
-sys.path.insert(0, parentdir)
-
-
-class SyncVPNTenant(SyncInstanceUsingAnsible):
-    """Class for syncing a VPNTenant using Ansible.
-
-    This SyncStep creates any necessary files for the VPNTenant using ESAY RSA and then runs the
-    Ansible template to start the server on an instance.
-    """
-    provides = [VPNTenant]
-    observes = VPNTenant
-    requested_interval = 0
-    template_name = "sync_vpntenant.yaml"
-    service_key_name = "/opt/xos/synchronizers/vpn/vpn_private_key"
-
-    def fetch_pending(self, deleted):
-        if (not deleted):
-            objs = VPNTenant.get_tenant_objects().filter(
-                Q(enacted__lt=F('updated')) |
-                Q(enacted=None), Q(lazy_blocked=False))
-        else:
-            objs = VPNTenant.get_deleted_tenant_objects()
-
-        return objs
-
-    def get_extra_attributes(self, tenant):
-        return {"is_persistent": tenant.is_persistent,
-                "vpn_subnet": tenant.vpn_subnet,
-                "server_network": tenant.server_network,
-                "clients_can_see_each_other": (
-                    tenant.clients_can_see_each_other),
-                "port_number": tenant.port_number,
-                "protocol": tenant.protocol,
-                "pki_dir": VPNService.get_pki_dir(tenant)
-                }
-
-    def sync_fields(self, o, fields):
-        pki_dir = VPNService.get_pki_dir(o)
-
-        if (not os.path.isdir(pki_dir)):
-            VPNService.execute_easyrsa_command(pki_dir, "init-pki")
-            VPNService.execute_easyrsa_command(
-                pki_dir, "--req-cn=XOS build-ca nopass")
-
-        # Very hacky way to handle VPNs that need to share CAs
-        if (o.use_ca_from_id):
-            tenant = VPNTenant.get_tenant_objects().filter(
-                pk=o.use_ca_from_id)[0]
-            other_pki_dir = VPNService.get_pki_dir(tenant)
-            shutil.copy2(other_pki_dir + "/ca.crt", pki_dir)
-            shutil.copy2(other_pki_dir + "/private/ca.key",
-                         pki_dir + "/private")
-
-        # If the server has to be built then we need to build it
-        if (not os.path.isfile(pki_dir + "/issued/server.crt")):
-            VPNService.execute_easyrsa_command(
-                pki_dir, "build-server-full server nopass")
-            VPNService.execute_easyrsa_command(pki_dir, "gen-dh")
-
-        # Get the most recent list of revoked clients
-        VPNService.execute_easyrsa_command(pki_dir, "gen-crl")
-
-        # Super runs the playbook
-        super(SyncVPNTenant, self).sync_fields(o, fields)
diff --git a/xos/xos/settings.py b/xos/xos/settings.py
index ec6055b..1fafe20 100644
--- a/xos/xos/settings.py
+++ b/xos/xos/settings.py
@@ -180,7 +180,7 @@
     'services.ceilometer',
     'services.requestrouter',
     'services.syndicate_storage',
-    'services.vpn',
+    'services.openvpn',
     'services.vtr',
     'services.vrouter',
     'geoposition',