resolve merge conflict
diff --git a/.gitignore b/.gitignore
index 451dd79..61b07cd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,9 +3,13 @@
*.swp
profile
*.moved-aside
+.idea
+xos.iml
xos/configurations/frontend/Dockerfile
xos/core/xoslib/karma-*
xos/core/xoslib/docs
xos/core/xoslib/coverage
node_modules
xos/xos_configuration/*
+.idea/*
+xos.iml
diff --git a/README.md b/README.md
index 7a72658..ab36a2c 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,10 @@
Additional design notes, presentations, and other collateral are
also available at http://xosproject.org and http://cord.onosproject.org.
-The quickest way to get started is to look at the collection of
+One quick way to get started is to build and run the containers in
+*containers* (see the README in that directory for more information).
+
+Another quick way to get started is to look at the collection of
canned configurations in *xos/configurations*. The *cord*
configuration in that directory corresponds to our current
CORD development environment, and the README you'll find there
diff --git a/containers/README.md b/containers/README.md
index fb53887..46f970e 100644
--- a/containers/README.md
+++ b/containers/README.md
@@ -17,7 +17,7 @@
To build and run the database container:
```
-$ cd postgres; make build && make run
+$ cd postgresql; make build && make run
```
#### XOS Container
@@ -29,7 +29,7 @@
```
You should now be able to access the login page by visiting
-`http://localhost:80` and log in using the default `paadmin@vicci.org` account
+`http://localhost:8000` and log in using the default `padmin@vicci.org` account
with password `letmein`. It may be helpful to bootstrap xos with some sample
data; deployment, controllers, sites, slices, etc. You can get started by
loading tosca configuration for the opencloud demo dataset:
diff --git a/containers/synchronizer/conf/synchronizer.conf b/containers/synchronizer/conf/synchronizer.conf
index cda6716..2131a25 100644
--- a/containers/synchronizer/conf/synchronizer.conf
+++ b/containers/synchronizer/conf/synchronizer.conf
@@ -4,6 +4,6 @@
nodaemon=true
[program:synchronizer]
-command=python /opt/xos/xos-observer.py
+command=python /opt/xos/synchronizers/openstack/xos-synchronizer.py
stderr_logfile=/var/log/supervisor/synchronizer.err.log
stdout_logfile=/var/log/supervisor/synchronizer.out.log
diff --git a/xos/core/xoslib/ngXosLib/.bowerrc b/gui/ngXosLib/.bowerrc
similarity index 100%
rename from xos/core/xoslib/ngXosLib/.bowerrc
rename to gui/ngXosLib/.bowerrc
diff --git a/xos/core/xoslib/ngXosLib/.gitignore b/gui/ngXosLib/.gitignore
similarity index 100%
rename from xos/core/xoslib/ngXosLib/.gitignore
rename to gui/ngXosLib/.gitignore
diff --git a/xos/core/xoslib/ngXosLib/README.md b/gui/ngXosLib/README.md
similarity index 100%
rename from xos/core/xoslib/ngXosLib/README.md
rename to gui/ngXosLib/README.md
diff --git a/xos/core/xoslib/ngXosLib/api/.gitignore b/gui/ngXosLib/api/.gitignore
similarity index 100%
rename from xos/core/xoslib/ngXosLib/api/.gitignore
rename to gui/ngXosLib/api/.gitignore
diff --git a/xos/core/xoslib/ngXosLib/api/ng-hpcapi.js b/gui/ngXosLib/api/ng-hpcapi.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/api/ng-hpcapi.js
rename to gui/ngXosLib/api/ng-hpcapi.js
diff --git a/xos/core/xoslib/ngXosLib/api/ng-xos.js b/gui/ngXosLib/api/ng-xos.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/api/ng-xos.js
rename to gui/ngXosLib/api/ng-xos.js
diff --git a/xos/core/xoslib/ngXosLib/api/ng-xoslib.js b/gui/ngXosLib/api/ng-xoslib.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/api/ng-xoslib.js
rename to gui/ngXosLib/api/ng-xoslib.js
diff --git a/xos/core/xoslib/ngXosLib/apiTemplates/custom-angular-class.mustache b/gui/ngXosLib/apiTemplates/custom-angular-class.mustache
similarity index 100%
rename from xos/core/xoslib/ngXosLib/apiTemplates/custom-angular-class.mustache
rename to gui/ngXosLib/apiTemplates/custom-angular-class.mustache
diff --git a/xos/core/xoslib/ngXosLib/bower.json b/gui/ngXosLib/bower.json
similarity index 100%
rename from xos/core/xoslib/ngXosLib/bower.json
rename to gui/ngXosLib/bower.json
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/app/index.js b/gui/ngXosLib/generator-xos/app/index.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/generator-xos/app/index.js
rename to gui/ngXosLib/generator-xos/app/index.js
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/app/templates/.bowerrc b/gui/ngXosLib/generator-xos/app/templates/.bowerrc
similarity index 100%
rename from xos/core/xoslib/ngXosLib/generator-xos/app/templates/.bowerrc
rename to gui/ngXosLib/generator-xos/app/templates/.bowerrc
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/app/templates/.eslintrc b/gui/ngXosLib/generator-xos/app/templates/.eslintrc
similarity index 100%
rename from xos/core/xoslib/ngXosLib/generator-xos/app/templates/.eslintrc
rename to gui/ngXosLib/generator-xos/app/templates/.eslintrc
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/app/templates/.gitignore b/gui/ngXosLib/generator-xos/app/templates/.gitignore
similarity index 100%
rename from xos/core/xoslib/ngXosLib/generator-xos/app/templates/.gitignore
rename to gui/ngXosLib/generator-xos/app/templates/.gitignore
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/app/templates/bower.json b/gui/ngXosLib/generator-xos/app/templates/bower.json
similarity index 100%
rename from xos/core/xoslib/ngXosLib/generator-xos/app/templates/bower.json
rename to gui/ngXosLib/generator-xos/app/templates/bower.json
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/app/templates/env/default.js b/gui/ngXosLib/generator-xos/app/templates/env/default.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/generator-xos/app/templates/env/default.js
rename to gui/ngXosLib/generator-xos/app/templates/env/default.js
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/app/templates/gulp/build.js b/gui/ngXosLib/generator-xos/app/templates/gulp/build.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/generator-xos/app/templates/gulp/build.js
rename to gui/ngXosLib/generator-xos/app/templates/gulp/build.js
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/app/templates/gulp/server.js b/gui/ngXosLib/generator-xos/app/templates/gulp/server.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/generator-xos/app/templates/gulp/server.js
rename to gui/ngXosLib/generator-xos/app/templates/gulp/server.js
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/gulpfile.js b/gui/ngXosLib/generator-xos/app/templates/gulpfile.js
similarity index 70%
copy from xos/core/xoslib/ngXosViews/ceilometerDashboard/gulpfile.js
copy to gui/ngXosLib/generator-xos/app/templates/gulpfile.js
index de911e9..b2cdab8 100644
--- a/xos/core/xoslib/ngXosViews/ceilometerDashboard/gulpfile.js
+++ b/gui/ngXosLib/generator-xos/app/templates/gulpfile.js
@@ -5,14 +5,13 @@
var options = {
src: 'src/',
- css: 'src/css/',
scripts: 'src/js/',
tmp: 'src/.tmp',
dist: 'dist/',
api: '../../ngXosLib/api/',
helpers: '../../ngXosLib/xosHelpers/src/',
- static: '../../static/', // this is the django static folder
- dashboards: '../../dashboards/' // this is the django html folder
+ static: '../../../xos/core/xoslib/static/', // this is the django static folder
+ dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
};
wrench.readdirSyncRecursive('./gulp')
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/app/templates/karma.conf.js b/gui/ngXosLib/generator-xos/app/templates/karma.conf.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/generator-xos/app/templates/karma.conf.js
rename to gui/ngXosLib/generator-xos/app/templates/karma.conf.js
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/app/templates/package.json b/gui/ngXosLib/generator-xos/app/templates/package.json
similarity index 100%
rename from xos/core/xoslib/ngXosLib/generator-xos/app/templates/package.json
rename to gui/ngXosLib/generator-xos/app/templates/package.json
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/app/templates/spec/sample.test.js b/gui/ngXosLib/generator-xos/app/templates/spec/sample.test.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/generator-xos/app/templates/spec/sample.test.js
rename to gui/ngXosLib/generator-xos/app/templates/spec/sample.test.js
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/app/templates/src/css/dev.css b/gui/ngXosLib/generator-xos/app/templates/src/css/dev.css
similarity index 100%
rename from xos/core/xoslib/ngXosLib/generator-xos/app/templates/src/css/dev.css
rename to gui/ngXosLib/generator-xos/app/templates/src/css/dev.css
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/app/templates/src/index.html b/gui/ngXosLib/generator-xos/app/templates/src/index.html
similarity index 100%
rename from xos/core/xoslib/ngXosLib/generator-xos/app/templates/src/index.html
rename to gui/ngXosLib/generator-xos/app/templates/src/index.html
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/app/templates/src/js/main.js b/gui/ngXosLib/generator-xos/app/templates/src/js/main.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/generator-xos/app/templates/src/js/main.js
rename to gui/ngXosLib/generator-xos/app/templates/src/js/main.js
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/app/templates/src/templates/users-list.tpl.html b/gui/ngXosLib/generator-xos/app/templates/src/templates/users-list.tpl.html
similarity index 100%
rename from xos/core/xoslib/ngXosLib/generator-xos/app/templates/src/templates/users-list.tpl.html
rename to gui/ngXosLib/generator-xos/app/templates/src/templates/users-list.tpl.html
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/package.json b/gui/ngXosLib/generator-xos/package.json
similarity index 100%
rename from xos/core/xoslib/ngXosLib/generator-xos/package.json
rename to gui/ngXosLib/generator-xos/package.json
diff --git a/xos/core/xoslib/ngXosLib/gulp/ngXosHelpers.js b/gui/ngXosLib/gulp/ngXosHelpers.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/gulp/ngXosHelpers.js
rename to gui/ngXosLib/gulp/ngXosHelpers.js
diff --git a/xos/core/xoslib/ngXosLib/gulp/ngXosVendor.js b/gui/ngXosLib/gulp/ngXosVendor.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/gulp/ngXosVendor.js
rename to gui/ngXosLib/gulp/ngXosVendor.js
diff --git a/xos/core/xoslib/ngXosLib/gulpfile.js b/gui/ngXosLib/gulpfile.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/gulpfile.js
rename to gui/ngXosLib/gulpfile.js
diff --git a/xos/core/xoslib/ngXosLib/karma.conf.js b/gui/ngXosLib/karma.conf.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/karma.conf.js
rename to gui/ngXosLib/karma.conf.js
diff --git a/xos/core/xoslib/ngXosLib/package.json b/gui/ngXosLib/package.json
similarity index 100%
rename from xos/core/xoslib/ngXosLib/package.json
rename to gui/ngXosLib/package.json
diff --git a/xos/core/xoslib/ngXosLib/xos-resource-generator.js b/gui/ngXosLib/xos-resource-generator.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/xos-resource-generator.js
rename to gui/ngXosLib/xos-resource-generator.js
diff --git a/xos/core/xoslib/ngXosLib/xos-swagger-def.js b/gui/ngXosLib/xos-swagger-def.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/xos-swagger-def.js
rename to gui/ngXosLib/xos-swagger-def.js
diff --git a/xos/core/xoslib/ngXosLib/xosHelpers/spec/csrftoken.test.js b/gui/ngXosLib/xosHelpers/spec/csrftoken.test.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/xosHelpers/spec/csrftoken.test.js
rename to gui/ngXosLib/xosHelpers/spec/csrftoken.test.js
diff --git a/xos/core/xoslib/ngXosLib/xosHelpers/src/services/api.services.js b/gui/ngXosLib/xosHelpers/src/services/api.services.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/xosHelpers/src/services/api.services.js
rename to gui/ngXosLib/xosHelpers/src/services/api.services.js
diff --git a/xos/core/xoslib/ngXosLib/xosHelpers/src/services/csrfToken.interceptor.js b/gui/ngXosLib/xosHelpers/src/services/csrfToken.interceptor.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/xosHelpers/src/services/csrfToken.interceptor.js
rename to gui/ngXosLib/xosHelpers/src/services/csrfToken.interceptor.js
diff --git a/xos/core/xoslib/ngXosLib/xosHelpers/src/services/noHyperlinks.interceptor.js b/gui/ngXosLib/xosHelpers/src/services/noHyperlinks.interceptor.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/xosHelpers/src/services/noHyperlinks.interceptor.js
rename to gui/ngXosLib/xosHelpers/src/services/noHyperlinks.interceptor.js
diff --git a/xos/core/xoslib/ngXosLib/xosHelpers/src/xosHelpers.module.js b/gui/ngXosLib/xosHelpers/src/xosHelpers.module.js
similarity index 100%
rename from xos/core/xoslib/ngXosLib/xosHelpers/src/xosHelpers.module.js
rename to gui/ngXosLib/xosHelpers/src/xosHelpers.module.js
diff --git a/xos/core/xoslib/ngXosViews/.gitignore b/gui/ngXosViews/.gitignore
similarity index 100%
rename from xos/core/xoslib/ngXosViews/.gitignore
rename to gui/ngXosViews/.gitignore
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/.bowerrc b/gui/ngXosViews/ceilometerDashboard/.bowerrc
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/.bowerrc
rename to gui/ngXosViews/ceilometerDashboard/.bowerrc
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/.eslintrc b/gui/ngXosViews/ceilometerDashboard/.eslintrc
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/.eslintrc
rename to gui/ngXosViews/ceilometerDashboard/.eslintrc
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/.gitignore b/gui/ngXosViews/ceilometerDashboard/.gitignore
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/.gitignore
rename to gui/ngXosViews/ceilometerDashboard/.gitignore
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/bower.json b/gui/ngXosViews/ceilometerDashboard/bower.json
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/bower.json
rename to gui/ngXosViews/ceilometerDashboard/bower.json
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/env/default.js b/gui/ngXosViews/ceilometerDashboard/env/default.js
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/env/default.js
rename to gui/ngXosViews/ceilometerDashboard/env/default.js
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/env/srikanth.js b/gui/ngXosViews/ceilometerDashboard/env/srikanth.js
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/env/srikanth.js
rename to gui/ngXosViews/ceilometerDashboard/env/srikanth.js
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/gulp/build.js b/gui/ngXosViews/ceilometerDashboard/gulp/build.js
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/gulp/build.js
rename to gui/ngXosViews/ceilometerDashboard/gulp/build.js
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/gulp/server.js b/gui/ngXosViews/ceilometerDashboard/gulp/server.js
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/gulp/server.js
rename to gui/ngXosViews/ceilometerDashboard/gulp/server.js
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/gulpfile.js b/gui/ngXosViews/ceilometerDashboard/gulpfile.js
similarity index 71%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/gulpfile.js
rename to gui/ngXosViews/ceilometerDashboard/gulpfile.js
index de911e9..a3523ee 100644
--- a/xos/core/xoslib/ngXosViews/ceilometerDashboard/gulpfile.js
+++ b/gui/ngXosViews/ceilometerDashboard/gulpfile.js
@@ -11,8 +11,8 @@
dist: 'dist/',
api: '../../ngXosLib/api/',
helpers: '../../ngXosLib/xosHelpers/src/',
- static: '../../static/', // this is the django static folder
- dashboards: '../../dashboards/' // this is the django html folder
+ static: '../../../xos/core/xoslib/static/', // this is the django static folder
+ dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
};
wrench.readdirSyncRecursive('./gulp')
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/karma.conf.js b/gui/ngXosViews/ceilometerDashboard/karma.conf.js
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/karma.conf.js
rename to gui/ngXosViews/ceilometerDashboard/karma.conf.js
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/package.json b/gui/ngXosViews/ceilometerDashboard/package.json
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/package.json
rename to gui/ngXosViews/ceilometerDashboard/package.json
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/spec/.eslintrc b/gui/ngXosViews/ceilometerDashboard/spec/.eslintrc
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/spec/.eslintrc
rename to gui/ngXosViews/ceilometerDashboard/spec/.eslintrc
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/spec/backend.mock.js b/gui/ngXosViews/ceilometerDashboard/spec/backend.mock.js
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/spec/backend.mock.js
rename to gui/ngXosViews/ceilometerDashboard/spec/backend.mock.js
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/spec/ceilometer.test.js b/gui/ngXosViews/ceilometerDashboard/spec/ceilometer.test.js
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/spec/ceilometer.test.js
rename to gui/ngXosViews/ceilometerDashboard/spec/ceilometer.test.js
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/css/ceilometerDashboard.css b/gui/ngXosViews/ceilometerDashboard/src/css/ceilometerDashboard.css
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/src/css/ceilometerDashboard.css
rename to gui/ngXosViews/ceilometerDashboard/src/css/ceilometerDashboard.css
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/css/dev.css b/gui/ngXosViews/ceilometerDashboard/src/css/dev.css
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/src/css/dev.css
rename to gui/ngXosViews/ceilometerDashboard/src/css/dev.css
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/index.html b/gui/ngXosViews/ceilometerDashboard/src/index.html
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/src/index.html
rename to gui/ngXosViews/ceilometerDashboard/src/index.html
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/js/main.js b/gui/ngXosViews/ceilometerDashboard/src/js/main.js
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/src/js/main.js
rename to gui/ngXosViews/ceilometerDashboard/src/js/main.js
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/meters_mock.json b/gui/ngXosViews/ceilometerDashboard/src/meters_mock.json
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/src/meters_mock.json
rename to gui/ngXosViews/ceilometerDashboard/src/meters_mock.json
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/stats_mock.json b/gui/ngXosViews/ceilometerDashboard/src/stats_mock.json
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/src/stats_mock.json
rename to gui/ngXosViews/ceilometerDashboard/src/stats_mock.json
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/templates/accordion-group.html b/gui/ngXosViews/ceilometerDashboard/src/templates/accordion-group.html
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/src/templates/accordion-group.html
rename to gui/ngXosViews/ceilometerDashboard/src/templates/accordion-group.html
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/templates/accordion.html b/gui/ngXosViews/ceilometerDashboard/src/templates/accordion.html
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/src/templates/accordion.html
rename to gui/ngXosViews/ceilometerDashboard/src/templates/accordion.html
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/templates/ceilometer-dashboard.tpl.html b/gui/ngXosViews/ceilometerDashboard/src/templates/ceilometer-dashboard.tpl.html
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/src/templates/ceilometer-dashboard.tpl.html
rename to gui/ngXosViews/ceilometerDashboard/src/templates/ceilometer-dashboard.tpl.html
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/templates/ceilometer-samples.tpl.html b/gui/ngXosViews/ceilometerDashboard/src/templates/ceilometer-samples.tpl.html
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/src/templates/ceilometer-samples.tpl.html
rename to gui/ngXosViews/ceilometerDashboard/src/templates/ceilometer-samples.tpl.html
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/src/templates/ceilometer-stats.tpl.html b/gui/ngXosViews/ceilometerDashboard/src/templates/ceilometer-stats.tpl.html
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/src/templates/ceilometer-stats.tpl.html
rename to gui/ngXosViews/ceilometerDashboard/src/templates/ceilometer-stats.tpl.html
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/teone@clnode015.clemson.cloudlab.us b/gui/ngXosViews/ceilometerDashboard/teone@clnode015.clemson.cloudlab.us
similarity index 100%
rename from xos/core/xoslib/ngXosViews/ceilometerDashboard/teone@clnode015.clemson.cloudlab.us
rename to gui/ngXosViews/ceilometerDashboard/teone@clnode015.clemson.cloudlab.us
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/.bowerrc b/gui/ngXosViews/contentProvider/.bowerrc
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/.bowerrc
rename to gui/ngXosViews/contentProvider/.bowerrc
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/.eslintrc b/gui/ngXosViews/contentProvider/.eslintrc
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/.eslintrc
rename to gui/ngXosViews/contentProvider/.eslintrc
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/.gitignore b/gui/ngXosViews/contentProvider/.gitignore
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/.gitignore
rename to gui/ngXosViews/contentProvider/.gitignore
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/bower.json b/gui/ngXosViews/contentProvider/bower.json
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/bower.json
rename to gui/ngXosViews/contentProvider/bower.json
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/gulp/build.js b/gui/ngXosViews/contentProvider/gulp/build.js
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/gulp/build.js
rename to gui/ngXosViews/contentProvider/gulp/build.js
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/gulp/server.js b/gui/ngXosViews/contentProvider/gulp/server.js
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/gulp/server.js
rename to gui/ngXosViews/contentProvider/gulp/server.js
diff --git a/xos/core/xoslib/ngXosViews/ceilometerDashboard/gulpfile.js b/gui/ngXosViews/contentProvider/gulpfile.js
similarity index 70%
copy from xos/core/xoslib/ngXosViews/ceilometerDashboard/gulpfile.js
copy to gui/ngXosViews/contentProvider/gulpfile.js
index de911e9..b2cdab8 100644
--- a/xos/core/xoslib/ngXosViews/ceilometerDashboard/gulpfile.js
+++ b/gui/ngXosViews/contentProvider/gulpfile.js
@@ -5,14 +5,13 @@
var options = {
src: 'src/',
- css: 'src/css/',
scripts: 'src/js/',
tmp: 'src/.tmp',
dist: 'dist/',
api: '../../ngXosLib/api/',
helpers: '../../ngXosLib/xosHelpers/src/',
- static: '../../static/', // this is the django static folder
- dashboards: '../../dashboards/' // this is the django html folder
+ static: '../../../xos/core/xoslib/static/', // this is the django static folder
+ dashboards: '../../../xos/core/xoslib/dashboards/' // this is the django html folder
};
wrench.readdirSyncRecursive('./gulp')
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/karma.conf.js b/gui/ngXosViews/contentProvider/karma.conf.js
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/karma.conf.js
rename to gui/ngXosViews/contentProvider/karma.conf.js
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/package.json b/gui/ngXosViews/contentProvider/package.json
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/package.json
rename to gui/ngXosViews/contentProvider/package.json
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/spec/contentprovider.test.js b/gui/ngXosViews/contentProvider/spec/contentprovider.test.js
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/spec/contentprovider.test.js
rename to gui/ngXosViews/contentProvider/spec/contentprovider.test.js
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/spec/mocks/contentProvider.mock.js b/gui/ngXosViews/contentProvider/spec/mocks/contentProvider.mock.js
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/spec/mocks/contentProvider.mock.js
rename to gui/ngXosViews/contentProvider/spec/mocks/contentProvider.mock.js
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/spec/sample.test.js b/gui/ngXosViews/contentProvider/spec/sample.test.js
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/spec/sample.test.js
rename to gui/ngXosViews/contentProvider/spec/sample.test.js
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/src/css/dev.css b/gui/ngXosViews/contentProvider/src/css/dev.css
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/src/css/dev.css
rename to gui/ngXosViews/contentProvider/src/css/dev.css
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/src/index.html b/gui/ngXosViews/contentProvider/src/index.html
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/src/index.html
rename to gui/ngXosViews/contentProvider/src/index.html
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/src/js/main.js b/gui/ngXosViews/contentProvider/src/js/main.js
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/src/js/main.js
rename to gui/ngXosViews/contentProvider/src/js/main.js
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/src/templates/cp_actions.html b/gui/ngXosViews/contentProvider/src/templates/cp_actions.html
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/src/templates/cp_actions.html
rename to gui/ngXosViews/contentProvider/src/templates/cp_actions.html
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/src/templates/cp_cdn_prefix.html b/gui/ngXosViews/contentProvider/src/templates/cp_cdn_prefix.html
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/src/templates/cp_cdn_prefix.html
rename to gui/ngXosViews/contentProvider/src/templates/cp_cdn_prefix.html
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/src/templates/cp_detail.html b/gui/ngXosViews/contentProvider/src/templates/cp_detail.html
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/src/templates/cp_detail.html
rename to gui/ngXosViews/contentProvider/src/templates/cp_detail.html
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/src/templates/cp_list.html b/gui/ngXosViews/contentProvider/src/templates/cp_list.html
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/src/templates/cp_list.html
rename to gui/ngXosViews/contentProvider/src/templates/cp_list.html
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/src/templates/cp_origin_server.html b/gui/ngXosViews/contentProvider/src/templates/cp_origin_server.html
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/src/templates/cp_origin_server.html
rename to gui/ngXosViews/contentProvider/src/templates/cp_origin_server.html
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/src/templates/cp_side_nav.html b/gui/ngXosViews/contentProvider/src/templates/cp_side_nav.html
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/src/templates/cp_side_nav.html
rename to gui/ngXosViews/contentProvider/src/templates/cp_side_nav.html
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/src/templates/cp_user.html b/gui/ngXosViews/contentProvider/src/templates/cp_user.html
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/src/templates/cp_user.html
rename to gui/ngXosViews/contentProvider/src/templates/cp_user.html
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/src/templates/users-list.tpl.html b/gui/ngXosViews/contentProvider/src/templates/users-list.tpl.html
similarity index 100%
rename from xos/core/xoslib/ngXosViews/contentProvider/src/templates/users-list.tpl.html
rename to gui/ngXosViews/contentProvider/src/templates/users-list.tpl.html
diff --git a/xos/configurations/cord/Makefile b/xos/configurations/cord/Makefile
index c95d9dd..41bb37f 100644
--- a/xos/configurations/cord/Makefile
+++ b/xos/configurations/cord/Makefile
@@ -14,6 +14,10 @@
sudo MYIP=$(MYIP) docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /opt/xos/configurations/cord/cord.yaml
sudo MYIP=$(MYIP) docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /opt/xos/configurations/cord/ceilometer.yaml
+containers:
+ cd ../../../containers/xos; make devel
+ cd ../../../containers/synchronizer; make
+
common_cloudlab:
make -C ../common -f Makefile.cloudlab
diff --git a/xos/configurations/cord/docker-compose.yml b/xos/configurations/cord/docker-compose.yml
index e09dc1a..2b14f40 100644
--- a/xos/configurations/cord/docker-compose.yml
+++ b/xos/configurations/cord/docker-compose.yml
@@ -4,7 +4,7 @@
- "5432"
xos_synchronizer_openstack:
- command: bash -c "sleep 120 ; python /opt/xos/xos-observer.py"
+ command: python /opt/xos/synchronizers/openstack/xos-synchronizer.py
image: xosproject/xos-synchronizer-openstack
labels:
org.xosproject.kind: synchronizer
@@ -20,7 +20,7 @@
xos_synchronizer_onos:
image: xosproject/xos-synchronizer-openstack
- command: bash -c "sleep 120 ; python /opt/xos/observers/onos/onos-observer.py -C /opt/xos/observers/onos/onos_observer_config"
+ command: python /opt/xos/synchronizers/onos/onos-synchronizer.py -C /opt/xos/synchronizers/onos/onos_synchronizer_config
labels:
org.xosproject.kind: synchronizer
org.xosproject.target: onos
@@ -33,8 +33,7 @@
xos_synchronizer_vcpe:
image: xosproject/xos-synchronizer-openstack
- #command: /usr/bin/supervisord -c /opt/xos/observers/vcpe/supervisor/vcpe-observer.conf
- command: bash -c "sleep 120 ; python /opt/xos/observers/vcpe/vcpe-observer.py -C /opt/xos/observers/vcpe/vcpe_observer_config"
+ command: python /opt/xos/synchronizers/vcpe/vcpe-synchronizer.py -C /opt/xos/synchronizers/vcpe/vcpe_synchronizer_config
labels:
org.xosproject.kind: synchronizer
org.xosproject.target: vcpe
@@ -45,10 +44,10 @@
volumes:
- ../setup/id_rsa:/opt/xos/observers/vcpe/vcpe_private_key:ro # private key
- ../setup:/root/setup:ro
-
+
xos_synchronizer_vbng:
image: xosproject/xos-synchronizer-openstack
- command: bash -c "sleep 120 ; python /opt/xos/observers/vbng/vbng-observer.py -C /opt/xos/observers/vbng/vbng_observer_config"
+ command: python /opt/xos/synchronizers/vbng/vbng-synchronizer.py -C /opt/xos/synchronizers/vbng/vbng_synchronizer_config
labels:
org.xosproject.kind: synchronizer
org.xosproject.target: vbng
@@ -59,8 +58,7 @@
xos_synchronizer_monitoring_channel:
image: xosproject/xos-synchronizer-openstack
- #command: /usr/bin/supervisord -c /opt/xos/observers/monitoring_channel/supervisor/monitoring_channel_observer.conf
- command: bash -c "sleep 120 ; python /opt/xos/observers/monitoring_channel/monitoring_channel_observer.py -C /opt/xos/observers/monitoring_channel/monitoring_channel_observer_config"
+ command: python /opt/xos/synchronizers/monitoring_channel/monitoring_channel_synchronizer.py -C /opt/xos/synchronizers/monitoring_channel/monitoring_channel_synchronizer_config
labels:
org.xosproject.kind: synchronizer
org.xosproject.target: monitoring_channel
diff --git a/xos/configurations/devel/Makefile b/xos/configurations/devel/Makefile
index b4f3fcf..1e650f3 100644
--- a/xos/configurations/devel/Makefile
+++ b/xos/configurations/devel/Makefile
@@ -10,6 +10,10 @@
sudo MYIP=$(MYIP) docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /opt/xos/configurations/common/base.yaml
sudo MYIP=$(MYIP) docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /root/setup/nodes.yaml
+containers:
+ cd ../../../containers/xos; make devel
+ cd ../../../containers/synchronizer; make
+
common_cloudlab:
make -C ../common -f Makefile.cloudlab
@@ -40,5 +44,5 @@
rebuild_xos:
make -C ../../../containers/xos devel
-rebuild_synchronizer:
+rebuild_synchronizer:
make -C ../../../containers/synchronizer
diff --git a/xos/configurations/devel/README.md b/xos/configurations/devel/README.md
index 2361396..84bf6fc 100644
--- a/xos/configurations/devel/README.md
+++ b/xos/configurations/devel/README.md
@@ -65,6 +65,8 @@
Delete the containers and relaunch them: `make rm; make [cloudlab|devstack]`
+Build the containers from scratch using the local XOS source tree: `make containers`
+
View logs: `make showlogs`
See what containers are running: `make ps`
diff --git a/xos/configurations/devel/docker-compose.yml b/xos/configurations/devel/docker-compose.yml
index 66f6702..f3342fc 100644
--- a/xos/configurations/devel/docker-compose.yml
+++ b/xos/configurations/devel/docker-compose.yml
@@ -5,7 +5,7 @@
xos_synchronizer_openstack:
image: xosproject/xos-synchronizer-openstack
- command: bash -c "sleep 120; python /opt/xos/xos-observer.py"
+ command: python /opt/xos/synchronizers/openstack/xos-synchronizer.py
labels:
org.xosproject.kind: synchronizer
org.xosproject.target: openstack
diff --git a/xos/configurations/frontend/Makefile b/xos/configurations/frontend/Makefile
index 4c95f90..130153a 100644
--- a/xos/configurations/frontend/Makefile
+++ b/xos/configurations/frontend/Makefile
@@ -6,6 +6,9 @@
bash ../common/wait_for_xos.sh
sudo docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /opt/xos/configurations/frontend/sample.yaml
+containers:
+ cd ../../../containers/xos; make devel
+
stop:
sudo docker-compose stop
diff --git a/xos/configurations/frontend/README.md b/xos/configurations/frontend/README.md
index 1cf244d..a0ee72e 100644
--- a/xos/configurations/frontend/README.md
+++ b/xos/configurations/frontend/README.md
@@ -25,6 +25,8 @@
Delete the containers and relaunch them: `make rm; make`
+Build the containers from scratch using the local XOS source tree: `make containers`
+
View logs: `make showlogs`
See what containers are running: `make ps`
diff --git a/xos/configurations/test/Makefile b/xos/configurations/test/Makefile
index a79e322..adf349a 100644
--- a/xos/configurations/test/Makefile
+++ b/xos/configurations/test/Makefile
@@ -12,6 +12,10 @@
sudo MYIP=$(MYIP) docker-compose run xos bash -c "cd /opt/xos/tosca/tests; python ./alltests.py"
sudo MYIP=$(MYIP) docker-compose run xos bash -c "cd /opt/xos/tosca/tests; python ./allObserverTests.py"
+containers:
+ cd ../../../containers/xos; make devel
+ cd ../../../containers/synchronizer; make
+
common_cloudlab:
make -C ../common -f Makefile.cloudlab
diff --git a/xos/configurations/vtn/Makefile b/xos/configurations/vtn/Makefile
index 59feb2d..335f83d 100644
--- a/xos/configurations/vtn/Makefile
+++ b/xos/configurations/vtn/Makefile
@@ -12,6 +12,10 @@
sudo MYIP=$(MYIP) docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /root/setup/nodes.yaml
sudo MYIP=$(MYIP) docker-compose run xos python /opt/xos/tosca/run.py padmin@vicci.org /opt/xos/tosca/samples/vtn.yaml
+containers:
+ cd ../../../containers/xos; make devel
+ cd ../../../containers/synchronizer; make
+
common_cloudlab:
make -C ../common -f Makefile.cloudlab
diff --git a/xos/configurations/vtn/README.md b/xos/configurations/vtn/README.md
index 0fac0a5..f4c8248 100644
--- a/xos/configurations/vtn/README.md
+++ b/xos/configurations/vtn/README.md
@@ -30,7 +30,7 @@
steps outlined in [the VTN README](../cord/README-VTN.md). Run:
```
ctl:~/xos/xos/configurations/vtn$ make destroy-networks
-ctl:~/xos/xos/configurations/vtn$ sudo ansible-playbook setup.yml
+ctl:~/xos/xos/configurations/vtn$ sudo ansible-playbook setup.yml
```
@@ -69,6 +69,8 @@
Delete the containers and relaunch them: `make rm; make [cloudlab|devstack]`
+Build the containers from scratch using the local XOS source tree: `make containers`
+
View logs: `make showlogs`
See what containers are running: `make ps`
diff --git a/xos/configurations/vtn/docker-compose.yml b/xos/configurations/vtn/docker-compose.yml
index 976de78..c54927b 100644
--- a/xos/configurations/vtn/docker-compose.yml
+++ b/xos/configurations/vtn/docker-compose.yml
@@ -5,7 +5,7 @@
xos_synchronizer_openstack:
image: xosproject/xos-synchronizer-openstack
- command: bash -c "python /opt/xos/xos-observer.py"
+ command: bash -c "python /opt/xos/synchronizers/openstack/xos-synchronizer.py"
labels:
org.xosproject.kind: synchronizer
org.xosproject.target: openstack
diff --git a/xos/core/__init__.py b/xos/core/__init__.py
index e69de29..e01f9cd 100644
--- a/xos/core/__init__.py
+++ b/xos/core/__init__.py
@@ -0,0 +1 @@
+# from tests import *
diff --git a/xos/core/fixtures/initial_data.json b/xos/core/fixtures/core_initial_data.json
similarity index 100%
rename from xos/core/fixtures/initial_data.json
rename to xos/core/fixtures/core_initial_data.json
diff --git a/xos/core/models/__init__.py b/xos/core/models/__init__.py
index c380e9c..a022cae 100644
--- a/xos/core/models/__init__.py
+++ b/xos/core/models/__init__.py
@@ -2,7 +2,7 @@
from .project import Project
from .singletonmodel import SingletonModel
from .service import Service, Tenant, TenantWithContainer, CoarseTenant, ServicePrivilege, TenantRoot, TenantRootPrivilege, TenantRootRole, Subscriber, Provider
-from .service import ServiceAttribute, TenantAttribute
+from .service import ServiceAttribute, TenantAttribute, ServiceRole
from .tag import Tag
from .role import Role
from .site import Site, Deployment, DeploymentRole, DeploymentPrivilege, Controller, ControllerRole, ControllerSite, SiteDeployment
diff --git a/xos/core/models/slice.py b/xos/core/models/slice.py
index 84622cf..42e3a25 100644
--- a/xos/core/models/slice.py
+++ b/xos/core/models/slice.py
@@ -15,6 +15,7 @@
from core.models import Flavor, Image
from core.models.plcorebase import StrippedCharField
from django.core.exceptions import PermissionDenied, ValidationError
+from xos.exceptions import *
# Create your models here.
@@ -52,13 +53,13 @@
site = Site.objects.get(id=self.site.id)
# allow preexisting slices to keep their original name for now
if not self.id and not self.name.startswith(site.login_base):
- raise ValidationError('slice name must begin with %s' % site.login_base)
+ raise XOSValidationError('slice name must begin with %s' % site.login_base)
if self.name == site.login_base+"_":
- raise ValidationError('slice name is too short')
+ raise XOSValidationError('slice name is too short')
if " " in self.name:
- raise ValidationError('slice name must not contain spaces')
+ raise XOSValidationError('slice name must not contain spaces')
if self.serviceClass is None:
# We allowed None=True for serviceClass because Django evolution
@@ -82,7 +83,7 @@
raise PermissionDenied("Insufficient privileges to change slice creator")
if not self.creator:
- raise ValidationError('slice has no creator')
+ raise XOSValidationError('slice has no creator')
if self.network=="Private Only":
# "Private Only" was the default from the old Tenant View
diff --git a/xos/core/tests.py b/xos/core/tests.py
index e3d7faa..06bf678 100644
--- a/xos/core/tests.py
+++ b/xos/core/tests.py
@@ -1,128 +1,337 @@
+# TEST
+# To execute these tests use `python manage.py test core`
+
#!/usr/bin/env python
from django.test import TestCase
-from core.models import *
-from rest_framework.test import *
-from genapi import *
+from django.contrib.auth.models import User
+from rest_framework import status
+from rest_framework.test import APIClient
+from rest_framework.test import APITestCase
import json
-from datetime import datetime
+from django.forms.models import model_to_dict
-FIXTURES_FILE = 'core/fixtures/initial_data.json'
-MODELS = ['Deployment','Image','Node','Reservation','Slice','Instance','User']
+from core.models import *
-def is_dynamic_type(x):
- t = type(x)
- return t in [datetime]
+print "-------------------------- Let's test!!!!!!!! --------------------------"
-class APITestCase(TestCase):
- def setUp(self):
- self.init_data=json.loads(open(FIXTURES_FILE).read())
- self.data_dict={}
- self.hidden_keys={}
+from django.apps import apps
+from django.test.client import Client
+from django.test import testcases
+from django.http import SimpleCookie, HttpRequest, QueryDict
+from importlib import import_module
+from django.conf import settings
+class FixedClient(Client):
+ def login(self, **credentials):
+ """
+ Sets the Factory to appear as if it has successfully logged into a site.
- for d in self.init_data:
- model_tag = d['model']
- model_name = model_tag.split('.')[1]
+ Returns True if login is possible; False if the provided credentials
+ are incorrect, or the user is inactive, or if the sessions framework is
+ not available.
+ """
+ from django.contrib.auth import authenticate, login
+ user = authenticate(**credentials)
+ if (user and user.is_active and
+ apps.is_installed('django.contrib.sessions')):
+ engine = import_module(settings.SESSION_ENGINE)
- try:
- self.data_dict[model_name].append(d)
- except:
- self.data_dict[model_name]=[d]
+ # Create a fake request to store login details.
+ request = HttpRequest()
- # Any admin user would do
- self.calling_user = User('sapan@onlab.us')
- self.client = APIClient()
- self.client.force_authenticate(user=self.calling_user)
+ # XOS's admin.py requires these to be filled in
+ request.POST = {"username": credentials["username"],
+ "password": credentials["password"]}
+
+ if self.session:
+ request.session = self.session
+ else:
+ request.session = engine.SessionStore()
+ login(request, user)
+
+ # Save the session values.
+ request.session.save()
+
+ # Set the cookie to represent the session.
+ session_cookie = settings.SESSION_COOKIE_NAME
+ self.cookies[session_cookie] = request.session.session_key
+ cookie_data = {
+ 'max-age': None,
+ 'path': '/',
+ 'domain': settings.SESSION_COOKIE_DOMAIN,
+ 'secure': settings.SESSION_COOKIE_SECURE or None,
+ 'expires': None,
+ }
+ self.cookies[session_cookie].update(cookie_data)
+
+ return True
+ else:
+ return False
+
+class FixedAPITestCase(testcases.TestCase):
+ client_class = FixedClient
+
+# Environment Tests - Should pass everytime, if not something in the config is broken.
+class SimpleTest(TestCase):
+ fixtures = []
+
+ def test_basic_addition(self):
+ """
+ Tests that 1 + 1 always equals 2.
+ """
+ self.assertEqual(1 + 1, 2)
- def check_items(self, response, data_list):
- rdict = {}
- for r in response:
- rdict['%d'%r['id']]=r
+# Site Test
+class SiteTest(TestCase):
+ fixtures = []
- for d in data_list:
- match = True
- try:
- item = rdict['%d'%d['pk']]
- except Exception,e:
- print 'API missing item %d / %r'%(d['pk'],rdict.keys())
- raise e
+ def setUp(self):
+ Site.objects.create(
+ name="Test Site",
+ login_base="test_"
+ )
- fields=d['fields']
- fields['id']=d['pk']
-
- for k in item.keys():
- try:
- resp_val = fields[k]
- except KeyError:
- if (not self.hidden_keys.has_key(k)):
- print 'Hidden key %s'%k
- self.hidden_keys[k]=True
-
- continue
-
- if (item[k]!=resp_val and not is_dynamic_type(item[k])):
- if (type(resp_val)==type(item[k])):
- print 'Key %s did not match: 1. %r 2. %r'%(k,item[k],resp_val)
- print fields
- match = False
+ def test_read_site(self):
+ """
+ Should read a site in the DB.
+ """
+ site = Site.objects.get(name="Test Site")
+ # print(site._meta.get_all_field_names())
+ self.assertEqual(site.login_base, "test_")
+class UnautheticatedRequest(FixedAPITestCase):
+ fixtures = []
- def create(self, model, mplural, record):
- request = self.client.put('/xos/%s/'%mplural,record['fields'])
+ def test_require_authentication(self):
+ """
+ Ensure that request must be authenticated
+ """
+ response = self.client.get('/xos/sites/', format='json')
+ self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
- #if (len2==len1):
- # raise Exception('Could not delete %s/%d'%(model,pk))
- return
+class SiteTestAPI(FixedAPITestCase):
+ fixtures = []
- def update(self, model, mplural, pk):
- src_record = self.data_dict[model.lower()][0]
- record_to_update = src_record['fields']
- now = datetime.now()
- record_to_update['enacted']=now
- response = self.client.put('/xos/%s/%d/'%(mplural,pk),record_to_update)
- self.assertEqual(response.data['enacted'],now)
+ def setUp(self):
+ self.site = Site.objects.create(
+ name="Test Site",
+ login_base="test_"
+ )
+ self.user = User(
+ username='testuser',
+ email='test@mail.org',
+ password='testing',
+ site=self.site,
+ is_admin=True
+ )
+ self.user.save()
+ self.client.login(username='test@mail.org', password='testing')
- return
+ def test_read_site_API(self):
+ """
+ Read a Site trough API
+ """
+ response = self.client.get('/xos/sites/', format='json')
+ parsed = json.loads(response.content)
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ self.assertEqual(len(parsed), 1)
+ self.assertEqual(parsed[0]['login_base'], 'test_')
- def delete(self, model, mplural, pk):
- mclass = globals()[model]
- len1 = len(mclass.objects.all())
- response = self.client.delete('/xos/%s/%d/'%(mplural,pk))
- len2 = len(mclass.objects.all())
- self.assertNotEqual(len1,len2)
+ def test_create_site_API(self):
+ """
+ Create a Site trough API
+ """
+ data = {
+ 'name': "Another Test Site",
+ 'login_base': "another_test_",
+ 'location': [10, 20],
+ 'abbreviated_name': 'test'
+ }
+ response = self.client.post('/xos/sites/', data, format='json')
+ self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+ self.assertEqual(Site.objects.count(), 2)
+ self.assertEqual(Site.objects.filter(name="Another Test Site").count(), 1)
- return
- def retrieve(self, m, mplural, mlower):
- response = self.client.get('/xos/%s/'%mplural)
- #force_authenticate(request,user=self.calling_user)
- self.check_items(response.data,self.data_dict[mlower])
+class SliceTestAPI(FixedAPITestCase):
+ fixtures = []
- return
+ def setUp(self):
+ self.site = Site.objects.create(
+ name="Test Site",
+ login_base="test_"
+ )
+ self.pi = SiteRole.objects.create(role='pi')
+ self.user = User(
+ username='testuser',
+ email='test@mail.org',
+ password='testing',
+ site=self.site
+ )
+ self.user.save()
+ self.siteprivileges = SitePrivilege.objects.create(
+ user=self.user,
+ site=self.site,
+ role=self.pi
+ )
+ self.serviceClass = ServiceClass.objects.create(
+ name='Test Service Class'
+ )
+ self.client.login(username='test@mail.org', password='testing')
- def test_initial_retrieve(self):
- for m in MODELS:
- print 'Checking retrieve on %s...'%m
- self.retrieve(m, m.lower()+'s',m.lower())
+ def test_create_site_slice(self):
+ """
+ Add a slice to a given site
+ """
+ data = {
+ 'name': "test_slice",
+ 'site': self.site.id,
+ 'serviceClass': self.serviceClass.id
+ }
+ response = self.client.post('/xos/slices/?no_hyperlinks=1', data, format='json')
+ self.assertEqual(response.status_code, status.HTTP_201_CREATED)
-
- def test_update(self):
- for m in MODELS:
- print 'Checking update on %s...'%m
- first = self.data_dict[m.lower()][0]['pk']
- self.update(m, m.lower()+'s',int(first))
-
- def test_delete(self):
- for m in MODELS:
- print 'Checking delete on %s...'%m
- first = self.data_dict[m.lower()][0]['pk']
- self.delete(m, m.lower()+'s',int(first))
+ def test_validation_slice_name(self):
+ """
+ The slice name should start with site.login_base
+ curl -H "Accept: application/json; indent=4" -u padmin@vicci.org:letmein 'http://xos:9999/xos/slices/?no_hyperlinks=1' -H "Content-Type: application/json" -X POST --data '{"name": "test", "site":"1", "serviceClass":1}'
+ """
+ data = {
+ 'name': "wrong_slice",
+ 'site': self.site.id,
+ 'serviceClass': self.serviceClass.id
+ }
+ response = self.client.post('/xos/slices/?no_hyperlinks=1', data, format='json')
+ parsed = json.loads(response.content)
+ self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
+ self.assertEqual(parsed['detail']['specific_error'], "slice name must begin with test_")
- def test_create(self):
- for m in MODELS:
- print 'Checking create on %s...'%m
- first = self.data_dict[m.lower()][0]
- self.create(m, m.lower()+'s',first)
+ def test_only_admin_can_change_creator(self):
+ """
+ Only an admin can change the creator of a slice
+ """
+ slice = Slice.objects.create(
+ name="test_slice",
+ site=self.site,
+ serviceClass=self.serviceClass,
+ creator=self.user
+ )
+ user2 = User(
+ username='another_testuser',
+ email='another_test@mail.org',
+ password='testing',
+ site=self.site
+ )
+ user2.save()
+
+ data = model_to_dict(slice)
+ data['creator'] = user2.id
+ json_data = json.dumps(data)
+
+ response = self.client.put('/xos/slices/%s/?no_hyperlinks=1' % slice.id, json_data, format='json', content_type="application/json")
+ self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
+ parsed = json.loads(response.content)
+ self.assertEqual(parsed['detail']['specific_error'], "Insufficient privileges to change slice creator")
+
+class ServiceTestAPI(FixedAPITestCase):
+ fixtures = []
+
+ def setUp(self):
+ self.site = Site.objects.create(
+ name="Test Site",
+ login_base="test_"
+ )
+ self.admin = User(
+ username='testadmin',
+ email='admin@mail.org',
+ password='testing',
+ site=self.site,
+ is_admin=True
+ )
+ self.admin.save()
+
+ self.user = User(
+ username='testuser',
+ email='user@mail.org',
+ password='testing',
+ site=self.site
+ )
+ self.user.save()
+
+ self.service1 = Service.objects.create(
+ name="fakeService1",
+ versionNumber="1.0.0",
+ published=True,
+ enabled=True
+ )
+
+ self.service2 = Service.objects.create(
+ name="fakeService1",
+ versionNumber="1.0.0",
+ published=True,
+ enabled=True
+ )
+
+ self.service_role = ServiceRole.objects.create(role='admin')
+
+ self.service_privileges = ServicePrivilege.objects.create(
+ user=self.user,
+ service=self.service2,
+ role=self.service_role
+ )
+
+ # TODO
+ # [x] admin view all service
+ # [ ] user view only service2
+ # [x] admin view a specific service service
+ # [ ] user view can't view a specific service
+ # [ ] user update service2
+ # [ ] usercan NOT update service2
+ # [x] admin update service1
+ def test_admin_read_all_service(self):
+ """
+ Admin should read all the services
+ """
+ self.client.login(username='admin@mail.org', password='testing')
+ response = self.client.get('/xos/services/', format='json')
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ self.assertEqual(len(json.loads(response.content)), 2)
+
+ # need to understand how slices are related
+ def xtest_user_read_all_service(self):
+ """
+ User should read only service for which have privileges
+ """
+ self.client.login(username='user@mail.org', password='testing')
+ response = self.client.get('/xos/services/', format='json')
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ self.assertEqual(len(json.loads(response.content)), 1)
+
+ def test_admin_read_one_service(self):
+ """
+ Read a given service
+ """
+ self.client.login(username='admin@mail.org', password='testing')
+ response = self.client.get('/xos/services/%s/' % self.service1.id, format='json')
+ parsed = json.loads(response.content)
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ self.assertEqual(parsed['name'], self.service1.name)
+
+ def test_admin_update_service(self):
+ """
+ Update a given service
+ """
+ data = model_to_dict(self.service1)
+ data['name'] = "newName"
+ json_data = json.dumps(data)
+
+ self.client.login(username='admin@mail.org', password='testing')
+ response = self.client.put('/xos/services/%s/' % self.service1.id, json_data, format='json', content_type="application/json")
+ parsed = json.loads(response.content)
+ self.assertEqual(response.status_code, status.HTTP_200_OK)
+ model = Service.objects.get(id=self.service1.id)
+ self.assertEqual(model.name, data['name'])
+
\ No newline at end of file
diff --git a/xos/core/xoslib/ngXosLib/generator-xos/app/templates/gulpfile.js b/xos/core/xoslib/ngXosLib/generator-xos/app/templates/gulpfile.js
deleted file mode 100644
index f114774..0000000
--- a/xos/core/xoslib/ngXosLib/generator-xos/app/templates/gulpfile.js
+++ /dev/null
@@ -1,24 +0,0 @@
-'use strict';
-
-var gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
- src: 'src/',
- scripts: 'src/js/',
- tmp: 'src/.tmp',
- dist: 'dist/',
- api: '../../ngXosLib/api/',
- helpers: '../../ngXosLib/xosHelpers/src/',
- static: '../../static/', // this is the django static folder
- dashboards: '../../dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
- require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
- gulp.start('build');
-});
diff --git a/xos/core/xoslib/ngXosViews/contentProvider/gulpfile.js b/xos/core/xoslib/ngXosViews/contentProvider/gulpfile.js
deleted file mode 100644
index f114774..0000000
--- a/xos/core/xoslib/ngXosViews/contentProvider/gulpfile.js
+++ /dev/null
@@ -1,24 +0,0 @@
-'use strict';
-
-var gulp = require('gulp');
-var wrench = require('wrench');
-
-var options = {
- src: 'src/',
- scripts: 'src/js/',
- tmp: 'src/.tmp',
- dist: 'dist/',
- api: '../../ngXosLib/api/',
- helpers: '../../ngXosLib/xosHelpers/src/',
- static: '../../static/', // this is the django static folder
- dashboards: '../../dashboards/' // this is the django html folder
-};
-
-wrench.readdirSyncRecursive('./gulp')
-.map(function(file) {
- require('./gulp/' + file)(options);
-});
-
-gulp.task('default', function () {
- gulp.start('build');
-});
diff --git a/xos/manage.py b/xos/manage.py
index ae4f598..219d0e7 100644
--- a/xos/manage.py
+++ b/xos/manage.py
@@ -3,6 +3,7 @@
import sys
if __name__ == "__main__":
+ os.chdir('..') # <<<---This is what you want to add
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xos.settings")
from django.core.management import execute_from_command_line
diff --git a/xos/services/cord/templates/vbngadmin.html b/xos/services/cord/templates/vbngadmin.html
index 721f76c..cceaee0 100644
--- a/xos/services/cord/templates/vbngadmin.html
+++ b/xos/services/cord/templates/vbngadmin.html
@@ -1,6 +1,6 @@
-<div class = "left-nav">
-<ul>
-<li><a href="/admin/cord/vbngtenant/">vBNG Tenants</a></li>
-</ul>
+<div class = "row text-center">
+ <div class="col-xs-12">
+ <a class="btn btn-primary" href="/admin/cord/vbngtenant/">vBNG Tenants</a>
+ </div>
</div>
diff --git a/xos/services/cord/templates/vcpeadmin.html b/xos/services/cord/templates/vcpeadmin.html
index 7a5d43f..a21dabe 100644
--- a/xos/services/cord/templates/vcpeadmin.html
+++ b/xos/services/cord/templates/vcpeadmin.html
@@ -1,7 +1,9 @@
-<div class = "left-nav">
-<ul>
-<li><a href="/admin/cord/vcpetenant/">vCPE Tenants</a></li>
-<li><a href="/admin/dashboard/cord/">Subscriber View</a></li>
-</ul>
+<div class = "row text-center">
+ <div class="col-xs-6">
+ <a class="btn btn-primary" href="/admin/cord/vcpetenant/">vCPE Tenants</a>
+ </div>
+ <div class="col-xs-6">
+ <a class="btn btn-primary" href="/admin/dashboard/cord/">Subscriber View</a>
+ </div>
</div>
diff --git a/xos/services/cord/templates/voltadmin.html b/xos/services/cord/templates/voltadmin.html
index 5bf28ff..e6887c5 100644
--- a/xos/services/cord/templates/voltadmin.html
+++ b/xos/services/cord/templates/voltadmin.html
@@ -1,6 +1,6 @@
-<div class = "left-nav">
-<ul>
-<li><a href="/admin/cord/volttenant/">vOLT Tenants</a></li>
-</ul>
+<div class = "row text-center">
+ <div class="col-xs-12">
+ <a href="/admin/cord/volttenant/">vOLT Tenants</a>
+ </div>
</div>
diff --git a/xos/synchronizers/base/ansible.py b/xos/synchronizers/base/ansible.py
index 9846c9f..7c30685 100644
--- a/xos/synchronizers/base/ansible.py
+++ b/xos/synchronizers/base/ansible.py
@@ -16,7 +16,7 @@
step_dir = Config().observer_steps_dir
sys_dir = Config().observer_sys_dir
except:
- step_dir = XOS_DIR + '/observer/steps'
+ step_dir = XOS_DIR + '/synchronizers/openstack/steps'
sys_dir = '/opt/opencloud'
os_template_loader = jinja2.FileSystemLoader( searchpath=step_dir)
diff --git a/xos/synchronizers/base/event_loop.py b/xos/synchronizers/base/event_loop.py
index d1ef6da..6cfc9f6 100644
--- a/xos/synchronizers/base/event_loop.py
+++ b/xos/synchronizers/base/event_loop.py
@@ -26,7 +26,7 @@
from syncstep import SyncStep
from toposort import toposort
from synchronizers.base.error_mapper import *
-from openstack_observer.openstacksyncstep import OpenStackSyncStep
+from synchronizers.openstack.openstacksyncstep import OpenStackSyncStep
from synchronizers.base.steps.sync_object import SyncObject
# Load app models
@@ -121,7 +121,7 @@
if hasattr(Config(), "observer_steps_dir"):
step_dir = Config().observer_steps_dir
else:
- step_dir = XOS_DIR + "/observer/steps"
+ step_dir = XOS_DIR + "/synchronizers/openstack/steps"
for fn in os.listdir(step_dir):
pathname = os.path.join(step_dir,fn)
diff --git a/xos/synchronizers/base/steps/sync_container.py b/xos/synchronizers/base/steps/sync_container.py
index 3db5a52..d647aef 100644
--- a/xos/synchronizers/base/steps/sync_container.py
+++ b/xos/synchronizers/base/steps/sync_container.py
@@ -6,7 +6,7 @@
import time
from django.db.models import F, Q
from xos.config import Config
-from observers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
+from synchronizers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
from synchronizers.base.syncstep import SyncStep, DeferredException
from synchronizers.base.ansible import run_template_ssh
from core.models import Service, Slice, Instance
diff --git a/xos/synchronizers/base/steps/sync_controller_sites.py b/xos/synchronizers/base/steps/sync_controller_sites.py
index bb9a566..1b3c2ba 100644
--- a/xos/synchronizers/base/steps/sync_controller_sites.py
+++ b/xos/synchronizers/base/steps/sync_controller_sites.py
@@ -2,7 +2,7 @@
import base64
from django.db.models import F, Q
from xos.config import Config
-from openstack_observer.openstacksyncstep import OpenStackSyncStep
+from synchronizers.openstack.openstacksyncstep import OpenStackSyncStep
from core.models.site import *
from synchronizers.base.syncstep import *
from synchronizers.base.ansible import *
diff --git a/xos/synchronizers/base/xos-synchronizer.py b/xos/synchronizers/base/xos-synchronizer.py
new file mode 100644
index 0000000..3fffd33
--- /dev/null
+++ b/xos/synchronizers/base/xos-synchronizer.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+import os
+import argparse
+import sys
+
+sys.path.append('/opt/xos')
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xos.settings")
+from synchronizers.base.backend import Backend
+from xos.config import Config, DEFAULT_CONFIG_FN
+from core.models import Instance
+from xos.logger import Logger, logging, logger
+from django.db import ProgrammingError
+import time
+
+try:
+ from django import setup as django_setup # django 1.7
+except:
+ django_setup = False
+
+config = Config()
+
+# after http://www.erlenstar.demon.co.uk/unix/faq_2.html
+def daemon():
+ """Daemonize the current process."""
+ if os.fork() != 0: os._exit(0)
+ os.setsid()
+ if os.fork() != 0: os._exit(0)
+ os.umask(0)
+ devnull = os.open(os.devnull, os.O_RDWR)
+ os.dup2(devnull, 0)
+ # xxx fixme - this is just to make sure that nothing gets stupidly lost - should use devnull
+ logdir=os.path.dirname(config.observer_logfile)
+ # when installed in standalone we might not have httpd installed
+ if not os.path.isdir(logdir): os.mkdir(logdir)
+ crashlog = os.open('%s'%config.observer_logfile, os.O_RDWR | os.O_APPEND | os.O_CREAT, 0644)
+ os.dup2(crashlog, 1)
+ os.dup2(crashlog, 2)
+
+ if hasattr(config, "observer_pidfile"):
+ pidfile = config.get("observer_pidfile")
+ else:
+ pidfile = "/var/run/xosobserver.pid"
+ try:
+ file(pidfile,"w").write(str(os.getpid()))
+ except:
+ print "failed to create pidfile %s" % pidfile
+
+def main():
+ # Generate command line parser
+ parser = argparse.ArgumentParser(usage='%(prog)s [options]')
+ parser.add_argument('-d', '--daemon', dest='daemon', action='store_true', default=False,
+ help='Run as daemon.')
+ # smbaker: util/config.py parses sys.argv[] directly to get config file name; include the option here to avoid
+ # throwing unrecognized argument exceptions
+ parser.add_argument('-C', '--config', dest='config_file', action='store', default=DEFAULT_CONFIG_FN,
+ help='Name of config file.')
+ args = parser.parse_args()
+
+ if args.daemon: daemon()
+
+ if django_setup: # 1.7
+ django_setup()
+
+ models_active = False
+ wait = False
+ while not models_active:
+ try:
+ _ = Instance.objects.first()
+ models_active = True
+ except ProgrammingError:
+ logger.info('Waiting for data model to come up before starting...')
+ wait = True
+
+ if (wait):
+ time.sleep(60) # Safety factor, seeing that we stumbled waiting for the data model to come up.
+ backend = Backend()
+ backend.run()
+
+if __name__ == '__main__':
+
+ main()
diff --git a/xos/synchronizers/helloworld/helloworld-observer.py b/xos/synchronizers/helloworld/helloworld-synchronizer.py
similarity index 70%
rename from xos/synchronizers/helloworld/helloworld-observer.py
rename to xos/synchronizers/helloworld/helloworld-synchronizer.py
index d6a71ff..84bec4f 100755
--- a/xos/synchronizers/helloworld/helloworld-observer.py
+++ b/xos/synchronizers/helloworld/helloworld-synchronizer.py
@@ -5,7 +5,7 @@
import importlib
import os
import sys
-observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../..")
+observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../../synchronizers/base")
sys.path.append(observer_path)
-mod = importlib.import_module("xos-observer")
+mod = importlib.import_module("xos-synchronizer")
mod.main()
diff --git a/xos/synchronizers/helloworld/helloworld_config b/xos/synchronizers/helloworld/helloworld_config
index e32ee0c..1f67242 100644
--- a/xos/synchronizers/helloworld/helloworld_config
+++ b/xos/synchronizers/helloworld/helloworld_config
@@ -37,7 +37,7 @@
images_directory=/opt/xos/images
dependency_graph=/opt/xos/model-deps
logfile=/var/log/xos_backend.log
-steps_dir=/opt/xos/observers/helloworld/steps
+steps_dir=/opt/xos/synchronizers/helloworld/steps
applist=helloworld
[gui]
diff --git a/xos/synchronizers/helloworldservice_complete/helloworldservice-observer.py b/xos/synchronizers/helloworldservice_complete/helloworldservice-synchronizer.py
similarity index 67%
rename from xos/synchronizers/helloworldservice_complete/helloworldservice-observer.py
rename to xos/synchronizers/helloworldservice_complete/helloworldservice-synchronizer.py
index 75dcc46..95f4081 100755
--- a/xos/synchronizers/helloworldservice_complete/helloworldservice-observer.py
+++ b/xos/synchronizers/helloworldservice_complete/helloworldservice-synchronizer.py
@@ -7,7 +7,7 @@
import os
import sys
observer_path = os.path.join(os.path.dirname(
- os.path.realpath(__file__)), "../..")
+ os.path.realpath(__file__)), "../../synchronizers/base")
sys.path.append(observer_path)
-mod = importlib.import_module("xos-observer")
+mod = importlib.import_module("xos-synchronizer")
mod.main()
diff --git a/xos/synchronizers/helloworldservice_complete/helloworldservice_config b/xos/synchronizers/helloworldservice_complete/helloworldservice_config
index 716e3a0..b779d0e 100644
--- a/xos/synchronizers/helloworldservice_complete/helloworldservice_config
+++ b/xos/synchronizers/helloworldservice_complete/helloworldservice_config
@@ -17,7 +17,7 @@
# This is the location to the dependency graph you generate
dependency_graph=/opt/xos/observers/helloworldservice_complete/model-deps
# The location of your SyncSteps
-steps_dir=/opt/xos/observers/helloworldservice_complete/steps
+steps_dir=/opt/xos/synchronizers/helloworldservice_complete/steps
# A temporary directory that will be used by ansible
sys_dir=/opt/xos/observers/helloworldservice_complete/sys
# Location of the file to save logging messages to the backend log is often used
diff --git a/xos/synchronizers/helloworldservice_complete/steps/sync_helloworldtenant.py b/xos/synchronizers/helloworldservice_complete/steps/sync_helloworldtenant.py
index 5604296..b7ed2a8 100644
--- a/xos/synchronizers/helloworldservice_complete/steps/sync_helloworldtenant.py
+++ b/xos/synchronizers/helloworldservice_complete/steps/sync_helloworldtenant.py
@@ -2,7 +2,7 @@
import sys
from django.db.models import Q, F
from services.helloworldservice_complete.models import HelloWorldServiceComplete, HelloWorldTenantComplete
-from observers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
+from synchronizers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
parentdir = os.path.join(os.path.dirname(__file__), "..")
sys.path.insert(0, parentdir)
diff --git a/xos/synchronizers/hpc/hpc-observer.py b/xos/synchronizers/hpc/hpc-synchronizer.py
similarity index 71%
rename from xos/synchronizers/hpc/hpc-observer.py
rename to xos/synchronizers/hpc/hpc-synchronizer.py
index d6a71ff..84bec4f 100755
--- a/xos/synchronizers/hpc/hpc-observer.py
+++ b/xos/synchronizers/hpc/hpc-synchronizer.py
@@ -5,7 +5,7 @@
import importlib
import os
import sys
-observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../..")
+observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../../synchronizers/base")
sys.path.append(observer_path)
-mod = importlib.import_module("xos-observer")
+mod = importlib.import_module("xos-synchronizer")
mod.main()
diff --git a/xos/synchronizers/hpc/hpc_observer_config b/xos/synchronizers/hpc/hpc_synchronizer_config
similarity index 74%
rename from xos/synchronizers/hpc/hpc_observer_config
rename to xos/synchronizers/hpc/hpc_synchronizer_config
index 326e731..9d4e70a 100644
--- a/xos/synchronizers/hpc/hpc_observer_config
+++ b/xos/synchronizers/hpc/hpc_synchronizer_config
@@ -23,9 +23,9 @@
[observer]
name=hpc
-dependency_graph=/opt/xos/observers/hpc/model-deps
-steps_dir=/opt/xos/observers/hpc/steps
-deleters_dir=/opt/xos/observers/hpc/deleters
+dependency_graph=/opt/xos/synchronizers/hpc/model-deps
+steps_dir=/opt/xos/synchronizers/hpc/steps
+deleters_dir=/opt/xos/synchronizers/hpc/deleters
log_file=console
#/var/log/hpc.log
driver=None
diff --git a/xos/synchronizers/model_policy.py b/xos/synchronizers/model_policy.py
index 6cc2176..b8fdd5d 100644
--- a/xos/synchronizers/model_policy.py
+++ b/xos/synchronizers/model_policy.py
@@ -1,7 +1,7 @@
from django.db.models.signals import post_save
from django.dispatch import receiver
import pdb
-from generator.dependency_walker import *
+from generate.dependency_walker import *
from synchronizers.openstack import model_policies
from xos.logger import logger
from datetime import datetime
diff --git a/xos/synchronizers/monitoring_channel/monitoring_channel_observer.py b/xos/synchronizers/monitoring_channel/monitoring_channel_observer.py
deleted file mode 100755
index d6a71ff..0000000
--- a/xos/synchronizers/monitoring_channel/monitoring_channel_observer.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# This imports and runs ../../xos-observer.py
-
-import importlib
-import os
-import sys
-observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../..")
-sys.path.append(observer_path)
-mod = importlib.import_module("xos-observer")
-mod.main()
diff --git a/xos/synchronizers/helloworld/helloworld-observer.py b/xos/synchronizers/monitoring_channel/monitoring_channel_synchronizer.py
similarity index 70%
copy from xos/synchronizers/helloworld/helloworld-observer.py
copy to xos/synchronizers/monitoring_channel/monitoring_channel_synchronizer.py
index d6a71ff..84bec4f 100755
--- a/xos/synchronizers/helloworld/helloworld-observer.py
+++ b/xos/synchronizers/monitoring_channel/monitoring_channel_synchronizer.py
@@ -5,7 +5,7 @@
import importlib
import os
import sys
-observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../..")
+observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../../synchronizers/base")
sys.path.append(observer_path)
-mod = importlib.import_module("xos-observer")
+mod = importlib.import_module("xos-synchronizer")
mod.main()
diff --git a/xos/synchronizers/monitoring_channel/monitoring_channel_observer_config b/xos/synchronizers/monitoring_channel/monitoring_channel_synchronizer_config
similarity index 68%
rename from xos/synchronizers/monitoring_channel/monitoring_channel_observer_config
rename to xos/synchronizers/monitoring_channel/monitoring_channel_synchronizer_config
index 5657e1d..8c6578f 100644
--- a/xos/synchronizers/monitoring_channel/monitoring_channel_observer_config
+++ b/xos/synchronizers/monitoring_channel/monitoring_channel_synchronizer_config
@@ -23,10 +23,10 @@
[observer]
name=monitoring_channel
-dependency_graph=/opt/xos/observers/monitoring_channel/model-deps
-steps_dir=/opt/xos/observers/monitoring_channel/steps
-sys_dir=/opt/xos/observers/monitoring_channel/sys
-deleters_dir=/opt/xos/observers/monitoring_channel/deleters
+dependency_graph=/opt/xos/synchronizers/monitoring_channel/model-deps
+steps_dir=/opt/xos/synchronizers/monitoring_channel/steps
+sys_dir=/opt/xos/synchronizers/monitoring_channel/sys
+deleters_dir=/opt/xos/synchronizers/monitoring_channel/deleters
log_file=console
driver=None
pretend=False
diff --git a/xos/synchronizers/monitoring_channel/steps/sync_monitoringchannel.py b/xos/synchronizers/monitoring_channel/steps/sync_monitoringchannel.py
index 2b93c48..2e4eca8 100644
--- a/xos/synchronizers/monitoring_channel/steps/sync_monitoringchannel.py
+++ b/xos/synchronizers/monitoring_channel/steps/sync_monitoringchannel.py
@@ -8,7 +8,7 @@
from xos.config import Config
from synchronizers.base.syncstep import SyncStep
from synchronizers.base.ansible import run_template_ssh
-from observers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
+from synchronizers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
from core.models import Service, Slice
from services.ceilometer.models import MonitoringChannel
from xos.logger import Logger, logging
diff --git a/xos/synchronizers/onos/onos-observer.py b/xos/synchronizers/onos/onos-observer.py
deleted file mode 100755
index d6a71ff..0000000
--- a/xos/synchronizers/onos/onos-observer.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# This imports and runs ../../xos-observer.py
-
-import importlib
-import os
-import sys
-observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../..")
-sys.path.append(observer_path)
-mod = importlib.import_module("xos-observer")
-mod.main()
diff --git a/xos/synchronizers/helloworld/helloworld-observer.py b/xos/synchronizers/onos/onos-synchronizer.py
similarity index 70%
copy from xos/synchronizers/helloworld/helloworld-observer.py
copy to xos/synchronizers/onos/onos-synchronizer.py
index d6a71ff..84bec4f 100755
--- a/xos/synchronizers/helloworld/helloworld-observer.py
+++ b/xos/synchronizers/onos/onos-synchronizer.py
@@ -5,7 +5,7 @@
import importlib
import os
import sys
-observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../..")
+observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../../synchronizers/base")
sys.path.append(observer_path)
-mod = importlib.import_module("xos-observer")
+mod = importlib.import_module("xos-synchronizer")
mod.main()
diff --git a/xos/synchronizers/onos/onos_observer_config b/xos/synchronizers/onos/onos_synchronizer_config
similarity index 72%
rename from xos/synchronizers/onos/onos_observer_config
rename to xos/synchronizers/onos/onos_synchronizer_config
index 3c6d63d..c6ceece 100644
--- a/xos/synchronizers/onos/onos_observer_config
+++ b/xos/synchronizers/onos/onos_synchronizer_config
@@ -23,10 +23,10 @@
[observer]
name=onos
-dependency_graph=/opt/xos/observers/onos/model-deps
-steps_dir=/opt/xos/observers/onos/steps
-sys_dir=/opt/xos/observers/onos/sys
-deleters_dir=/opt/xos/observers/onos/deleters
+dependency_graph=/opt/xos/synchronizers/onos/model-deps
+steps_dir=/opt/xos/synchronizers/onos/steps
+sys_dir=/opt/xos/synchronizers/onos/sys
+deleters_dir=/opt/xos/synchronizers/onos/deleters
log_file=console
driver=None
pretend=False
diff --git a/xos/synchronizers/onos/steps/sync_onosapp.py b/xos/synchronizers/onos/steps/sync_onosapp.py
index 6b26461..91eec44 100644
--- a/xos/synchronizers/onos/steps/sync_onosapp.py
+++ b/xos/synchronizers/onos/steps/sync_onosapp.py
@@ -9,7 +9,7 @@
from xos.config import Config
from synchronizers.base.syncstep import SyncStep
from synchronizers.base.ansible import run_template_ssh
-from observers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
+from synchronizers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
from core.models import Service, Slice
from services.onos.models import ONOSService, ONOSApp
from xos.logger import Logger, logging
diff --git a/xos/synchronizers/onos/steps/sync_onosservice.py b/xos/synchronizers/onos/steps/sync_onosservice.py
index 2236fb5..0474dc6 100644
--- a/xos/synchronizers/onos/steps/sync_onosservice.py
+++ b/xos/synchronizers/onos/steps/sync_onosservice.py
@@ -8,7 +8,7 @@
from xos.config import Config
from synchronizers.base.syncstep import SyncStep
from synchronizers.base.ansible import run_template_ssh
-from observers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
+from synchronizers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
from core.models import Service, Slice
from services.onos.models import ONOSService, ONOSApp
from xos.logger import Logger, logging
diff --git a/xos/synchronizers/openstack/ansible.py b/xos/synchronizers/openstack/ansible.py
deleted file mode 100644
index 9846c9f..0000000
--- a/xos/synchronizers/openstack/ansible.py
+++ /dev/null
@@ -1,211 +0,0 @@
-#!/usr/bin/env python
-import jinja2
-import tempfile
-import os
-import json
-import pdb
-import string
-import random
-import re
-import traceback
-import subprocess
-from xos.config import Config, XOS_DIR
-from xos.logger import observer_logger
-
-try:
- step_dir = Config().observer_steps_dir
- sys_dir = Config().observer_sys_dir
-except:
- step_dir = XOS_DIR + '/observer/steps'
- sys_dir = '/opt/opencloud'
-
-os_template_loader = jinja2.FileSystemLoader( searchpath=step_dir)
-os_template_env = jinja2.Environment(loader=os_template_loader)
-
-def parse_output(msg):
- lines = msg.splitlines()
- results = []
-
- observer_logger.info(msg)
-
- for l in lines:
- magic_str = 'ok: [127.0.0.1] => '
- magic_str2 = 'changed: [127.0.0.1] => '
- if (l.startswith(magic_str)):
- w = len(magic_str)
- str = l[w:]
- d = json.loads(str)
- results.append(d)
- elif (l.startswith(magic_str2)):
- w = len(magic_str2)
- str = l[w:]
- d = json.loads(str)
- results.append(d)
-
-
- return results
-
-def parse_unreachable(msg):
- total_unreachable=0
- total_failed=0
- for l in msg.splitlines():
- x = re.findall('ok=([0-9]+).*changed=([0-9]+).*unreachable=([0-9]+).*failed=([0-9]+)', l)
- if x:
- (ok, changed, unreachable, failed) = x[0]
- ok=int(ok)
- changed=int(changed)
- unreachable=int(unreachable)
- failed=int(failed)
-
- total_unreachable += unreachable
- total_failed += failed
- return {'unreachable':total_unreachable,'failed':total_failed}
-
-
-def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
- return ''.join(random.choice(chars) for _ in range(size))
-
-def shellquote(s):
- return "'" + s.replace("'", "'\\''") + "'"
-
-def get_playbook_fn(opts, path):
- if not opts.get("ansible_tag", None):
- # if no ansible_tag is in the options, then generate a unique one
- objname= id_generator()
- opts = opts.copy()
- opts["ansible_tag"] = objname
-
- objname = opts["ansible_tag"]
-
- os.system('mkdir -p %s' % os.path.join(sys_dir, path))
- return (opts, os.path.join(sys_dir,path,objname))
-
-def run_template(name, opts, path='', expected_num=None, ansible_config=None, ansible_hosts=None, run_ansible_script=None):
- template = os_template_env.get_template(name)
- buffer = template.render(opts)
-
- (opts, fqp) = get_playbook_fn(opts, path)
-
- f = open(fqp,'w')
- f.write(buffer)
- f.flush()
-
- # This is messy -- there's no way to specify ansible config file from
- # the command line, but we can specify it using the environment.
- env = os.environ.copy()
- if ansible_config:
- env["ANSIBLE_CONFIG"] = ansible_config
- if ansible_hosts:
- env["ANSIBLE_HOSTS"] = ansible_hosts
-
- if (not Config().observer_pretend):
- if not run_ansible_script:
- run_ansible_script = os.path.join(XOS_DIR, "synchronizers/base/run_ansible")
-
- process = subprocess.Popen("%s %s" % (run_ansible_script, shellquote(fqp)), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env)
- msg = process.stdout.read()
- err_msg = process.stderr.read()
-
- if getattr(Config(), "observer_save_ansible_output", False):
- try:
- open(fqp+".out","w").write(msg)
- open(fqp+".err","w").write(err_msg)
- except:
- # fail silently
- pass
-
- else:
- msg = open(fqp+'.out').read()
-
- try:
- ok_results = parse_output(msg)
- if (expected_num is not None) and (len(ok_results) != expected_num):
- raise ValueError('Unexpected num %s!=%d' % (str(expected_num), len(ok_results)) )
-
- parsed = parse_unreachable(msg)
- total_unreachable = parsed['unreachable']
- failed = parsed['failed']
- if (failed):
- raise ValueError('Ansible playbook failed.')
-
- if (total_unreachable > 0):
- raise ValueError("Unreachable results in ansible recipe")
- except ValueError,e:
- all_fatal = [e.message] + re.findall(r'^msg: (.*)',msg,re.MULTILINE)
- all_fatal2 = re.findall(r'^ERROR: (.*)',msg,re.MULTILINE)
-
- all_fatal.extend(all_fatal2)
- try:
- error = ' // '.join(all_fatal)
- except:
- pass
- raise Exception(error)
-
- return ok_results
-
-def run_template_ssh(name, opts, path='', expected_num=None):
- instance_name = opts["instance_name"]
- hostname = opts["hostname"]
- private_key = opts["private_key"]
- baremetal_ssh = opts.get("baremetal_ssh",False)
- if baremetal_ssh:
- # no instance_id or nat_ip for baremetal
- # we never proxy to baremetal
- proxy_ssh = False
- else:
- instance_id = opts["instance_id"]
- nat_ip = opts["nat_ip"]
- try:
- proxy_ssh = Config().observer_proxy_ssh
- except:
- proxy_ssh = True
-
- (opts, fqp) = get_playbook_fn(opts, path)
- private_key_pathname = fqp + ".key"
- config_pathname = fqp + ".config"
- hosts_pathname = fqp + ".hosts"
-
- f = open(private_key_pathname, "w")
- f.write(private_key)
- f.close()
-
- f = open(config_pathname, "w")
- f.write("[ssh_connection]\n")
- if proxy_ssh:
- proxy_command = "ProxyCommand ssh -q -i %s -o StrictHostKeyChecking=no %s@%s" % (private_key_pathname, instance_id, hostname)
- f.write('ssh_args = -o "%s"\n' % proxy_command)
- f.write('scp_if_ssh = True\n')
- f.write('pipelining = True\n')
- f.write('\n[defaults]\n')
- f.write('host_key_checking = False\n')
- f.close()
-
- f = open(hosts_pathname, "w")
- f.write("[%s]\n" % instance_name)
- if proxy_ssh or baremetal_ssh:
- f.write("%s ansible_ssh_private_key_file=%s\n" % (hostname, private_key_pathname))
- else:
- # acb: Login user is hardcoded, this is not great
- f.write("%s ansible_ssh_private_key_file=%s ansible_ssh_user=ubuntu\n" % (nat_ip, private_key_pathname))
- f.close()
-
- # SSH will complain if private key is world or group readable
- os.chmod(private_key_pathname, 0600)
-
- print "ANSIBLE_CONFIG=%s" % config_pathname
- print "ANSIBLE_HOSTS=%s" % hosts_pathname
-
- return run_template(name, opts, path, ansible_config = config_pathname, ansible_hosts = hosts_pathname, run_ansible_script="/opt/xos/observer/run_ansible_verbose")
-
-
-
-def main():
- run_template('ansible/sync_user_deployments.yaml',{ "endpoint" : "http://172.31.38.128:5000/v2.0/",
- "name" : "Sapan Bhatia",
- "email": "gwsapan@gmail.com",
- "password": "foobar",
- "admin_user":"admin",
- "admin_password":"6a789bf69dd647e2",
- "admin_tenant":"admin",
- "tenant":"demo",
- "roles":['user','admin'] })
diff --git a/xos/synchronizers/openstack/ansible.py b/xos/synchronizers/openstack/ansible.py
new file mode 120000
index 0000000..c20dc8b
--- /dev/null
+++ b/xos/synchronizers/openstack/ansible.py
@@ -0,0 +1 @@
+../base/ansible.py
\ No newline at end of file
diff --git a/xos/synchronizers/openstack/event_loop.py b/xos/synchronizers/openstack/event_loop.py
index d1ef6da..6cfc9f6 100644
--- a/xos/synchronizers/openstack/event_loop.py
+++ b/xos/synchronizers/openstack/event_loop.py
@@ -26,7 +26,7 @@
from syncstep import SyncStep
from toposort import toposort
from synchronizers.base.error_mapper import *
-from openstack_observer.openstacksyncstep import OpenStackSyncStep
+from synchronizers.openstack.openstacksyncstep import OpenStackSyncStep
from synchronizers.base.steps.sync_object import SyncObject
# Load app models
@@ -121,7 +121,7 @@
if hasattr(Config(), "observer_steps_dir"):
step_dir = Config().observer_steps_dir
else:
- step_dir = XOS_DIR + "/observer/steps"
+ step_dir = XOS_DIR + "/synchronizers/openstack/steps"
for fn in os.listdir(step_dir):
pathname = os.path.join(step_dir,fn)
diff --git a/xos/synchronizers/openstack/steps/sync_container.py b/xos/synchronizers/openstack/steps/sync_container.py
index 3db5a52..d647aef 100644
--- a/xos/synchronizers/openstack/steps/sync_container.py
+++ b/xos/synchronizers/openstack/steps/sync_container.py
@@ -6,7 +6,7 @@
import time
from django.db.models import F, Q
from xos.config import Config
-from observers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
+from synchronizers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
from synchronizers.base.syncstep import SyncStep, DeferredException
from synchronizers.base.ansible import run_template_ssh
from core.models import Service, Slice, Instance
diff --git a/xos/synchronizers/openstack/steps/sync_controller_sites.py b/xos/synchronizers/openstack/steps/sync_controller_sites.py
index bb9a566..1b3c2ba 100644
--- a/xos/synchronizers/openstack/steps/sync_controller_sites.py
+++ b/xos/synchronizers/openstack/steps/sync_controller_sites.py
@@ -2,7 +2,7 @@
import base64
from django.db.models import F, Q
from xos.config import Config
-from openstack_observer.openstacksyncstep import OpenStackSyncStep
+from synchronizers.openstack.openstacksyncstep import OpenStackSyncStep
from core.models.site import *
from synchronizers.base.syncstep import *
from synchronizers.base.ansible import *
diff --git a/xos/synchronizers/openstack/xos-synchronizer.py b/xos/synchronizers/openstack/xos-synchronizer.py
index 5ca55e5..3fffd33 100644
--- a/xos/synchronizers/openstack/xos-synchronizer.py
+++ b/xos/synchronizers/openstack/xos-synchronizer.py
@@ -1,6 +1,10 @@
#!/usr/bin/env python
import os
import argparse
+import sys
+
+sys.path.append('/opt/xos')
+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xos.settings")
from synchronizers.base.backend import Backend
from xos.config import Config, DEFAULT_CONFIG_FN
diff --git a/xos/synchronizers/requestrouter/rr_observer_config b/xos/synchronizers/requestrouter/rr_synchronizer_config
similarity index 70%
rename from xos/synchronizers/requestrouter/rr_observer_config
rename to xos/synchronizers/requestrouter/rr_synchronizer_config
index ec3a1ba..179540e 100644
--- a/xos/synchronizers/requestrouter/rr_observer_config
+++ b/xos/synchronizers/requestrouter/rr_synchronizer_config
@@ -24,9 +24,9 @@
nova_enabled=True
[observer]
-dependency_graph=/opt/xos/observers/requestrouter/model-deps
-steps_dir=/opt/xos/observers/requestrouter/steps
-deleters_dir=/opt/xos/observers/requestrouter/deleters
+dependency_graph=/opt/xos/synchronizers/requestrouter/model-deps
+steps_dir=/opt/xos/synchronizers/requestrouter/steps
+deleters_dir=/opt/xos/synchronizers/requestrouter/deleters
log_file=console
#/var/log/hpc.log
driver=None
diff --git a/xos/synchronizers/syndicate/syndicate_observer_config b/xos/synchronizers/syndicate/syndicate_synchronizer_config
similarity index 71%
rename from xos/synchronizers/syndicate/syndicate_observer_config
rename to xos/synchronizers/syndicate/syndicate_synchronizer_config
index 7e6d78a..7c9d2d2 100644
--- a/xos/synchronizers/syndicate/syndicate_observer_config
+++ b/xos/synchronizers/syndicate/syndicate_synchronizer_config
@@ -24,9 +24,9 @@
nova_enabled=True
[observer]
-dependency_graph=/opt/xos/observers/syndicate/model-deps
-steps_dir=/opt/xos/observers/syndicate/steps
-deleters_dir=/opt/xos/observers/syndicate/deleters
+dependency_graph=/opt/xos/synchronizers/syndicate/model-deps
+steps_dir=/opt/xos/synchronizers/syndicate/steps
+deleters_dir=/opt/xos/synchronizers/syndicate/deleters
log_file=console
driver=None
diff --git a/xos/synchronizers/vbng/vbng-observer.py b/xos/synchronizers/vbng/vbng-observer.py
deleted file mode 100755
index d6a71ff..0000000
--- a/xos/synchronizers/vbng/vbng-observer.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# This imports and runs ../../xos-observer.py
-
-import importlib
-import os
-import sys
-observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../..")
-sys.path.append(observer_path)
-mod = importlib.import_module("xos-observer")
-mod.main()
diff --git a/xos/synchronizers/helloworld/helloworld-observer.py b/xos/synchronizers/vbng/vbng-synchronizer.py
similarity index 70%
copy from xos/synchronizers/helloworld/helloworld-observer.py
copy to xos/synchronizers/vbng/vbng-synchronizer.py
index d6a71ff..84bec4f 100755
--- a/xos/synchronizers/helloworld/helloworld-observer.py
+++ b/xos/synchronizers/vbng/vbng-synchronizer.py
@@ -5,7 +5,7 @@
import importlib
import os
import sys
-observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../..")
+observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../../synchronizers/base")
sys.path.append(observer_path)
-mod = importlib.import_module("xos-observer")
+mod = importlib.import_module("xos-synchronizer")
mod.main()
diff --git a/xos/synchronizers/vbng/vbng_observer_config b/xos/synchronizers/vbng/vbng_synchronizer_config
similarity index 69%
rename from xos/synchronizers/vbng/vbng_observer_config
rename to xos/synchronizers/vbng/vbng_synchronizer_config
index b75d498..d613ce3 100644
--- a/xos/synchronizers/vbng/vbng_observer_config
+++ b/xos/synchronizers/vbng/vbng_synchronizer_config
@@ -23,10 +23,10 @@
[observer]
name=vbng
-dependency_graph=/opt/xos/observers/vbng/model-deps
-steps_dir=/opt/xos/observers/vbng/steps
-sys_dir=/opt/xos/observers/vbng/sys
-deleters_dir=/opt/xos/observers/vbng/deleters
+dependency_graph=/opt/xos/synchronizers/vbng/model-deps
+steps_dir=/opt/xos/synchronizers/vbng/steps
+sys_dir=/opt/xos/synchronizers/vbng/sys
+deleters_dir=/opt/xos/synchronizers/vbng/deleters
log_file=console
#/var/log/hpc.log
driver=None
diff --git a/xos/synchronizers/vcpe/steps/sync_vcpetenant.py b/xos/synchronizers/vcpe/steps/sync_vcpetenant.py
index ed5433b..691671a 100644
--- a/xos/synchronizers/vcpe/steps/sync_vcpetenant.py
+++ b/xos/synchronizers/vcpe/steps/sync_vcpetenant.py
@@ -8,7 +8,7 @@
from xos.config import Config
from synchronizers.base.syncstep import SyncStep
from synchronizers.base.ansible import run_template_ssh
-from observers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
+from synchronizers.base.SyncInstanceUsingAnsible import SyncInstanceUsingAnsible
from core.models import Service, Slice
from services.cord.models import VCPEService, VCPETenant, VOLTTenant
from services.hpc.models import HpcService, CDNPrefix
diff --git a/xos/synchronizers/vcpe/vcpe-observer.py b/xos/synchronizers/vcpe/vcpe-observer.py
deleted file mode 100755
index d6a71ff..0000000
--- a/xos/synchronizers/vcpe/vcpe-observer.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# This imports and runs ../../xos-observer.py
-
-import importlib
-import os
-import sys
-observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../..")
-sys.path.append(observer_path)
-mod = importlib.import_module("xos-observer")
-mod.main()
diff --git a/xos/synchronizers/helloworld/helloworld-observer.py b/xos/synchronizers/vcpe/vcpe-synchronizer.py
similarity index 70%
copy from xos/synchronizers/helloworld/helloworld-observer.py
copy to xos/synchronizers/vcpe/vcpe-synchronizer.py
index d6a71ff..84bec4f 100755
--- a/xos/synchronizers/helloworld/helloworld-observer.py
+++ b/xos/synchronizers/vcpe/vcpe-synchronizer.py
@@ -5,7 +5,7 @@
import importlib
import os
import sys
-observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../..")
+observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../../synchronizers/base")
sys.path.append(observer_path)
-mod = importlib.import_module("xos-observer")
+mod = importlib.import_module("xos-synchronizer")
mod.main()
diff --git a/xos/synchronizers/vcpe/vcpe_observer_config b/xos/synchronizers/vcpe/vcpe_synchronizer_config
similarity index 73%
rename from xos/synchronizers/vcpe/vcpe_observer_config
rename to xos/synchronizers/vcpe/vcpe_synchronizer_config
index d2c9239..110b8e2 100644
--- a/xos/synchronizers/vcpe/vcpe_observer_config
+++ b/xos/synchronizers/vcpe/vcpe_synchronizer_config
@@ -23,10 +23,10 @@
[observer]
name=vcpe
-dependency_graph=/opt/xos/observers/vcpe/model-deps
-steps_dir=/opt/xos/observers/vcpe/steps
-sys_dir=/opt/xos/observers/vcpe/sys
-deleters_dir=/opt/xos/observers/vcpe/deleters
+dependency_graph=/opt/xos/synchronizers/vcpe/model-deps
+steps_dir=/opt/xos/synchronizers/vcpe/steps
+sys_dir=/opt/xos/synchronizers/vcpe/sys
+deleters_dir=/opt/xos/synchronizers/vcpe/deleters
log_file=console
#/var/log/hpc.log
driver=None
diff --git a/xos/synchronizers/vtn/vtn-observer.py b/xos/synchronizers/vtn/vtn-synchronizer.py
similarity index 71%
rename from xos/synchronizers/vtn/vtn-observer.py
rename to xos/synchronizers/vtn/vtn-synchronizer.py
index d6a71ff..84bec4f 100755
--- a/xos/synchronizers/vtn/vtn-observer.py
+++ b/xos/synchronizers/vtn/vtn-synchronizer.py
@@ -5,7 +5,7 @@
import importlib
import os
import sys
-observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../..")
+observer_path = os.path.join(os.path.dirname(os.path.realpath(__file__)),"../../synchronizers/base")
sys.path.append(observer_path)
-mod = importlib.import_module("xos-observer")
+mod = importlib.import_module("xos-synchronizer")
mod.main()
diff --git a/xos/synchronizers/vtn/vtn_observer_config b/xos/synchronizers/vtn/vtn_synchronizer_config
similarity index 70%
rename from xos/synchronizers/vtn/vtn_observer_config
rename to xos/synchronizers/vtn/vtn_synchronizer_config
index 19e9a39..302a096 100644
--- a/xos/synchronizers/vtn/vtn_observer_config
+++ b/xos/synchronizers/vtn/vtn_synchronizer_config
@@ -23,10 +23,10 @@
[observer]
name=vtn
-dependency_graph=/opt/xos/observers/vtn/model-deps
-steps_dir=/opt/xos/observers/vtn/steps
-sys_dir=/opt/xos/observers/vtn/sys
-deleters_dir=/opt/xos/observers/vtn/deleters
+dependency_graph=/opt/xos/synchronizers/vtn/model-deps
+steps_dir=/opt/xos/synchronizers/vtn/steps
+sys_dir=/opt/xos/synchronizers/vtn/sys
+deleters_dir=/opt/xos/synchronizers/vtn/deleters
log_file=console
#/var/log/hpc.log
driver=None
diff --git a/xos/templates/README.md b/xos/templates/README.md
new file mode 100644
index 0000000..af46be9
--- /dev/null
+++ b/xos/templates/README.md
@@ -0,0 +1,5 @@
+# DJANGO TEMPLATES
+
+These are the templates used by the Django Application to render the UI.
+
+More information are available in the [Django Documentation](https://docs.djangoproject.com/es/1.9/topics/templates/)
\ No newline at end of file
diff --git a/xos/templates/cord_admin/base.html b/xos/templates/cord_admin/base.html
deleted file mode 100644
index db5ccbf..0000000
--- a/xos/templates/cord_admin/base.html
+++ /dev/null
@@ -1,287 +0,0 @@
-{% load admin_static %}{% load suit_tags %}{% load url from future %}<!DOCTYPE html>
-<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
-<head>
- <title>{% block title %} {%if title %} {{ title }} | {% endif %} CORD {% endblock %}</title>
- <link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% endblock %}"/>
- <link rel="stylesheet" type="text/css" href="{% static 'suit/bootstrap/css/bootstrap.min.css' %}" media="all"/>
- <link rel="stylesheet" type="text/css" href="{% static 'suit/css/suit.css' %}" media="all">
- <link rel="stylesheet" type="text/css" href="{% static 'xos.css' %}" media="all">
- <link rel="stylesheet" type="text/css" href="{% static 'cord.css' %}" media="all">
- {% block extrastyle %}{% endblock %}
- {% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}"/>{% endif %}
- <script type="text/javascript">window.__admin_media_prefix__ = "{% filter escapejs %}{% static "admin/" %}{% endfilter %}";</script>
- <script src="{% static 'suit/js/jquery-1.9.1.min.js' %}"></script>
- <script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
- <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
- <script type="text/javascript" src="{% static 'log4javascript-1.4.6/log4javascript.js' %}"></script>
- <script type="text/javascript" src="{% static 'uploadTextarea.js' %}"></script>
- <script type="text/javascript" src="{% static 'observer_status.js' %}"></script>
-
- <script type="text/javascript">var Suit = { $: $.noConflict() }; if (!$) $ = Suit.$; </script>
- {% if 'SHOW_REQUIRED_ASTERISK'|suit_conf %}
- <style type="text/css">.required:after { content: '*'; margin: 0 0 0 5px; position: absolute; color: #ccc;}</style>
- {% endif %}
- {% block extrahead %}{% endblock %}
- {% block blockbots %}
- <meta name="robots" content="NONE,NOARCHIVE"/>{% endblock %}
- <link rel="shortcut icon" href="{% static 'favicon.png' %}">
-</head>
-{% load i18n %}
-
-<body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}">
-
-<div id="dialog-placeholder">
-<!-- This is a placeholder for dialog boxes, like the observer calendar -->
-</div>
-
-<!-- Sticky footer wrap -->
-<div id="wrap">
-
- <!-- Container -->
- {% block container %}
- <div id="container">
-
- {% block logo %}
- <a href="{% url 'admin:index' %}"><h1 id="site-name"><img class="logo" height="70" width="259" src="{% static 'open-cloud-login-themed-light.png' %}"/></h1></a>
- {% endblock %}
- {% block header %}
- {% if not is_popup %}
- <!-- Header -->
- <div id="header" class="header">
-
- <div id="branding">
- {% block quick-search %}
- {% with 'SEARCH_URL'|suit_conf as search_url %}
- {% if search_url %}
- <form class="form-search nav-quick-search" autocomplete="off" action="{% if '/' in search_url %}{{ search_url }}{% else %}{% url search_url %}{% endif %}" method="GET">
- <i class="input-icon icon-search"></i>
- <input type="text" name="q" class="input-medium search-query" id="quick-search">
- <input type="submit" class="submit" value="">
- </form>
- {% endif %}
- {% endwith %}
- {% endblock %}
- </div>
-
- {% block header_time %}
- <div id="branding2">
- <!--<div class="header-content header-content-first">
- <div class="header-column icon">
- <i class="icon-time"></i>
- </div>
- <div class="header-column">
- <span class="date"> {% suit_date %}</span><br>
- <span class="time" id="clock">{% suit_time %}</span>
- </div>
- </div>-->
-
- {% endblock %}
-
- {% block header_content %}
- <!--<div class="header-content">
- <div class="header-column icon">
- <i class="icon-comment"></i>
- </div>
- <div class="header-column">
- <a href="" class="grey"><b>2</b> new messages</a>
- </div>
- </div>-->
- {% endblock %}
-
- {% if user.is_active and user.is_staff %}
- <div id="user-tools">
- {% trans 'Welcome,' %}
- <a href="http://{{ request.get_host}}/admin/core/user/{{user.id}}">{{user.email}}</a>
- <span id="observer-status"></span>
- <span class="user-links">
- {% block userlinks %}
- {% url 'django-admindocs-docroot' as docsroot %}
- {% if docsroot %}
- <a href="http://guide.xosproject.org/">{% trans 'Documentation' %}</a>
- <span class="separator">|</span>
- {% endif %}
- <a href="{% url 'admin:password_change' %}">{% trans 'Change password' %}</a>
- <span class="separator">|</span>
- <a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>
- </span>
- {% endblock %}
- </div>
- {% endif %}
-
- {% block nav-global %}{% endblock %}
-
- </div>
- </div>
- {% endif %}
- <!-- END Header -->
- {% endblock %}
-
-
- <div class="suit-columns {{ is_popup|yesno:'one-column,two-columns' }}">
-
- {% block content-center %}
- <div id="suit-center" class="suit-column">
-
- {% if not is_popup %}
- {% block minidash %}
- <div id=openCloudTopPage>
- {% include "admin/newminidashboard.html" %}
- </div>
- {% endblock %}
-
- {% block breadcrumbs %}
- <ul class="breadcrumb">
- <li><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
- {% if title %}
- <span class="divider">»</span>
- </li>
- <li class="active">
- {{ title }}
- {% endif %}
- </li>
- </ul>
- {% endblock %}
- {% endif %}
-
- {% block messages %}
- {% if messages %}
-
- {% for message in messages %}
- <div class="alert alert-{% firstof message.tags 'info' %}">
- <button class="close" data-dismiss="alert">×</button>
- <strong>
- {% if message.tags %}{{ message.tags|capfirst }}{% else %}
- Message{% endif %}!</strong>
- {{ message }}
- </div>
- {% endfor %}
- {% endif %}
- {% endblock messages %}
-
- <!-- Content -->
- <div id="content" class="{% block coltype %}colM{% endblock %} row-fluid">
- {% block pretitle %}{% endblock %}
- {% block content_title %}{% if title %}
- <h2 class="content-title">{{ title }}</h2>
- {% endif %}{% endblock %}
- {% block content %}
- {% block object-tools %}{% endblock %}
- {{ content }}
- {% endblock %}
- {% block sidebar_content %}
- {% block sidebar %}{% endblock %}
- {% endblock %}
- </div>
- <!-- END Content -->
- <span class="clearfix"></span>
- </div>
- {% endblock %}
-
-
- {% block content-left %}
- {% if not user.is_appuser %}
- {% if not is_popup %}
- <div id="suit-left" class="suit-column">
-
-
- {% include 'suit/menu.html' %}
-
- </div>
- {% endif %}
- {% endif %}
- {% endblock %}
-
- </div>
- </div>
- {% endblock %}
-
- {% if not is_popup %}
- <!-- Sticky footer push -->
- <div id="push"></div>
- {% endif %}
-
-</div>
-
-{% block footer %}
- {% if not is_popup %}
- <div id="footer" class="footer">
- <div class="content">
- <div class="tools">
- {% block footer_links %}
- <a href="http://djangosuit.com/support/" target="_blank" class="icon"><i class="icon-question-sign"></i>Support</a>
- <a href="http://djangosuit.com/pricing/" target="_blank" class="icon"><i class="icon-bookmark"></i>Licence</a>
- <a href="http://github.com/darklow/django-suit/issues" target="_blank" class="icon"><i class="icon-comment"></i>Report a bug</a>
- {% endblock %}
- </div>
-
- <div class="statusMsg" id="statusMsg">
- <!-- this is a placeholder for xoslib views to display status messages -->
- </div>
-
- <!-- <div class="copyright">
- {% block copyright %}
- Copyright © 2013 DjangoSuit.com<br>Developed by <a href="http://djangosuit.com" target="_blank">DjangoSuit.com</a>
- {% endblock %}
- </div> -->
-
- <div class="branding">{% block footer_branding %}
- CORD
- {% endblock %}</div>
- </div>
- </div>
- {% endif %}
-{% endblock %}
-
- <script src="{% static 'suit/bootstrap/js/bootstrap.min.js' %}"></script>
- <script src="{% static 'suit/js/suit.js' %}"></script>
- <script type="text/javascript" src="//www.google.com/jsapi"></script>
- <!-- src="{% static 'xos_graphs.js' %}" -->
-
- {% block extrajs %}{% endblock %}
-<script src="http://d3js.org/d3.v3.js"></script>
- <div class="modal fade hide" id="chartsModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
- <div class="modal-dialog">
- <div class="modal-content">
- <!--<div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
- <h4 class="modal-title" id="myModalLabel">OpenCloud</h4>
- </div>-->
- <div class="modal-body" style="overflow-y:hidden; overflow-x:hidden;">
- <div class="chartContainer">
- <div class="row">
- <div class=" padding">
- </div>
- </div>
-
- <div class="row">
- <div class=" heading">
- <p id="chartHeading" class="heading">OpenCloud</p>
- </div>
- </div>
- <div class="row">
- <div class="padding"></div>
- <div class="padding"></div>
- </div>
- <div class="row">
- <div id="graph" class="graph">
- </div>
- </div>
- </div>
- <div id="graph_work" style="display:none"></div>
- </div>
- <!--<div class="modal-footer">
- <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
- </div>-->
- </div><!-- /.modal-content -->
- </div><!-- /.modal-dialog -->
- </div><!-- /.modal -->
-
-
-<script>
-
-
-
-
-</script>
-</body>
-</html>
diff --git a/xos/templates/cord_admin/base_site.html b/xos/templates/cord_admin/base_site.html
deleted file mode 100644
index 80d39fe..0000000
--- a/xos/templates/cord_admin/base_site.html
+++ /dev/null
@@ -1,57 +0,0 @@
-{% extends "admin/base.html" %}
-{% load admin_static %}
-
-{# Additional <head> content here, some extra meta tags or favicon #}
-{#{% block extrahead %}#}
-{#{% endblock %}#}
-
-
-{# Additional CSS includes #}
-{# {% block extrastyle %} #}
-{# {% endblock %} #}
-
-
-{# Additional JS files in footer, right before </body> #}
-{#{% block extrajs %}#}
-{# <script type="text/javascript" src="{% static 'js/my_project.js' %}"></script>#}
-{#{% endblock %}#}
-
-
-{# Footer links (left side) #}
-{#{% block footer_links %}#}
-{# <a href="/docs/" class="icon"><i class="icon-question-sign"></i>Documentation</a>#}
-{#{% endblock %}#}
-
-{# Additional header content like notifications or language switcher #}
-{#{% block header_content %}#}
-{# {{ block.super }}#}
-{# <div class="header-content">#}
-{# <!-- First icon column -->#}
-{# <div class="header-column icon">#}
-{# <i class="icon-home"></i><br>#}
-{# <i class="icon-cog"></i>#}
-{# </div>#}
-{# <div class="header-column" style="margin-right: 20px">#}
-{# <a href="/" class="grey">Front-end</a><br>#}
-{# <a href="" class="grey">One more link</a>#}
-{# </div>#}
-{# <!-- Second icon column -->#}
-{# <div class="header-column icon">#}
-{# <i class="icon-comment"></i>#}
-{# </div>#}
-{# <div class="header-column">#}
-{# <a href="" class="grey">5 new messages</a>#}
-{# </div>#}
-{# </div>#}
-{#{% endblock %}#}
-
-{# Footer branding name (center) #}
-{% block footer_branding %}
-CORD
-{% endblock %}
-
-
-{# Footer copyright (right side) #}
-{% block copyright %}
-{# Copyright © 2013 Client<br>Developed by <a href="http://yoursite.com" target="_blank">YourName</a> #}
-{% endblock %}
diff --git a/xos/templates/cord_admin/dashboard_base.html b/xos/templates/cord_admin/dashboard_base.html
deleted file mode 100644
index bde87c2..0000000
--- a/xos/templates/cord_admin/dashboard_base.html
+++ /dev/null
@@ -1,92 +0,0 @@
-{% extends "admin/base.html" %}
-{% load admin_static %}
-
-{% block extrahead %}
-<link rel="stylesheet" href="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.0/css/jquery.dataTables.css">
-<link rel="stylesheet" type="text/css" href="{% static 'suit/css/suit.css' %}" media="all">
-<link rel="stylesheet" type="text/css" href="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.0/css/jquery.dataTables_themeroller.css">
-<link rel="stylesheet" type="text/css" href="{% static 'xos.css' %}" media="all">
-<link rel="stylesheet" type="text/css" href="{% static 'cord.css' %}" media="all">
-<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
-<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css" />
-<script src="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js"></script>
-
-
-<!-- no need to include jquery here as it's already included by base.html. Including it multiple times will break mtuity statistics. -->
-<!-- src="http://code.jquery.com/jquery-1.9.1.js" -->
-
-<script src="http://code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
-<script src="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js"></script>
-<script type="text/javascript" src="{% static 'log4javascript-1.4.6/log4javascript.js' %}"></script>
-<script src="{% static 'js/Leaflet.MakiMarkers.js' %}" > </script>
-
-<script>
- $(function() {
- $( "#hometabs" ).tabs({active: 0, //event: "mouseover"
- //collapsible: true
- });
- });
-
-var consoleAppender = new log4javascript.BrowserConsoleAppender();
-var patternLayout = new log4javascript.PatternLayout("%d{HH:mm:ss,SSS} %l{s:l} %-5p - %m{1}%n");
-consoleAppender.setLayout(patternLayout);
-//var log = log4javascript.getDefaultLogger();
-var log = log4javascript.getRootLogger();
-log.addAppender(consoleAppender);
-log.setLevel(log4javascript.Level.ERROR);
-
-function confirmDialog(title,msg) {
- var dialog = $('<div>'+msg+'</div>');
- var def = $.Deferred();
-
- $(dialog).dialog({
- resizable: false,
- title: title,
- autoOpen: true,
- modal: true,
- dialogClass: "dashboard-hpc-instance",
- buttons: {
- 'OK': function() {
- def.resolve();
- log.debug("Chose to add a instance");
- $( this ).dialog( "close" );
- },
- 'Cancel': function() {
- def.reject();
- $( this ).dialog( "close" );
- }
- },
- close: {
- }
- });
- return def.promise();
-}
-
-function errorDialog(title,msg) {
- var dialog = $('<div>'+msg+'</div>');
- var def = $.Deferred();
-
- $(dialog).dialog({
- resizable: false,
- title: title,
- autoOpen: true,
- modal: true,
- dialogClass: "dashboard-hpc-instance",
- buttons: {
- 'OK': function() {
- def.resolve();
- $( this ).dialog( "close" );
- },
- },
- close: {
- }
- });
- return def.promise();
-}
-
-</script>
-{% endblock %}
-
-{% block content %}
-dashboard goes here
-{% endblock %}
diff --git a/xos/templates/cord_admin/login.html b/xos/templates/cord_admin/login.html
deleted file mode 100644
index a586acf..0000000
--- a/xos/templates/cord_admin/login.html
+++ /dev/null
@@ -1,161 +0,0 @@
-{% extends "admin/base_site_login.html" %}
-{% load i18n admin_static %}
-
-{% block extrastyle %}{{ block.super }}
-<link rel="stylesheet" type="text/css" href="/static/suit/bootstrap/css/bootstrap.min.css" media="all"/>
-<link rel="stylesheet" type="text/css" href="{% static "xos.css" %}" />
-<link rel="stylesheet" type="text/css" href="{% static "cord.css" %}" />
-<script src="{% static 'suit/js/jquery-1.9.1.min.js' %}"></script>
-<script src="http://code.jquery.com/ui/1.11.0/jquery-ui.js"></script>
-{% endblock %}
-
-
-{% block bodyclass %}login{% endblock %}
-
-{% block nav-global %}{% endblock %}
-
-{% block content_title %}{% endblock %}
-
-{% block breadcrumbs %}{% endblock %}
-
-{% block content %}
-{% if form.errors and not form.non_field_errors and not form.this_is_the_login_form.errors %}
-<p class="errornote">
-{% blocktrans count counter=form.errors.items|length %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
-</p>
-{% endif %}
-
-{% if form.non_field_errors or form.this_is_the_login_form.errors %}
-{% for error in form.non_field_errors %}
-<p class="errornote">
- {{ error }}
-</p>
-{% endfor %}
-{% for error in form.this_is_the_login_form.errors %}
-<p class="errornote">
- {{ error }}
-</p>
-{% endfor %}
-{% endif %}
-<div id="wrap">
-<div id="content-main">
-<h1><i class="icon-lock icon-white"></i> OpenCloud</h1>
-<form action="{{ app_path }}" method="post" id="login-form">{% csrf_token %}
- <div class="form-row">
- {% if not form.this_is_the_login_form.errors %}{{ form.username.errors }}{% endif %}
- {{ form.username }}
- </div>
- <div class="form-row">
- {% if not form.this_is_the_login_form.errors %}{{ form.password.errors }}{% endif %}
- {{ form.password }}
- <input type="hidden" name="this_is_the_login_form" value="1" />
- <input type="hidden" name="old_next" value="{{ next }}" />
- <input type="hidden" name="next" value="/loggedin/?orig_next={{ next }}" />
- </div>
- <div class="submit-row">
- <input type="submit" class="btn btn-info" value="{% trans 'SIGN IN' %}" />
- </div>
- <div id="requestAccountLink">{% trans 'Request a new Account' %}</div>
-</form>
-
-<div id="request-account-form" title="Request an Account" style="display: none;">
- <form>
- <fieldset>
- <div class="request-form-row">
- <label for="request-first-name">First Name</label>
- <input type="text" name="request-first-name" id="request-first-name">
- </div>
- <div class="request-form-row">
- <label for="request-last-name">Last Name</label>
- <input type="text" name="request-last-name" id="request-last-name">
- </div>
- <div class="request-form-row">
- <label for="request-email">Email</label>
- <input type="text" name="request-email" id="request-email">
- </div>
- <div class="request-form-row">
- <label for="request-site-name">Site</label><br>
- <select id="request-site-name" name="request-site-name">
- <option>---------</option>
- {% for site in sites %}
- {% if site.allowNewUsers %}
- <option>{{ site.name }}</option>
- {% endif %}
- {% endfor %}
- </select>
- </div>
- <div class="submit-row">
- <input id ="request-signup" class="btn btn-info" value="SIGN UP">
- </div>
- </fieldset>
- </form>
-</div>
-</div>
-</div>
-
-
-<script type="text/javascript">
-$(function() {
- initRequest();
-});
-function initRequest(){
- $.ajax({
- url: '/tenantview',
- dataType: 'json',
- success: function (data) {
- var sites = data['sitesToBeRequested'];
- console.log(sites);
- for (site in sites){
- $("#request-site-name").append("<option>" + site + "</option>");
- }
- }
- });
-}
-$("#requestAccountLink").unbind().click(function(){
- $("#request-account-form").dialog({
- autoOpen: false,
- modal: true,
- dialogClass: "requestDialog",
- });
- $("#request-account-form").dialog("open");
-})
-$("#request-signup").unbind().click(function(){
- $.ajax({
- url: '/requestaccess/',
- dataType: 'json',
- data: {
- email: $("#request-email").val(),
- firstname: $("#request-first-name").val(),
- lastname: $("#request-last-name").val(),
- site: $("#request-site-name").val(),
- csrfmiddlewaretoken: "{{ csrf_token }}", // < here
- state: "inactive"
- },
- async: false,
- type: 'POST',
- success: function (response) {
- if (response && response.error) {
- if (response.error == "already_approved") {
- alert("Your request has already been proccessed and approved. We are sending you another email with a new temporary password");
- return;
- } else if (response.error == "already_pending") {
- alert("Your request is already pending and awaiting approval");
- return;
- } else if (response.error == "is_deleted") {
- alert("Your user record is in a deleted state. Please contact OpenCloud support");
- return;
- }
- }
- $("#request-account-form").dialog("close");
- alert("Your request has been submitted");
- },
- error:function (xhr, textStatus, thrownError){
- alert("Error:", textStatus + " " + xhr.responseText);
- }
- });
-})
-document.getElementById('id_username').focus()
-</script>
-</div>
-</div>
-{% endblock %}
diff --git a/xos/templates/registration/logged_out.html b/xos/templates/registration/logged_out.html
deleted file mode 100644
index 476a713..0000000
--- a/xos/templates/registration/logged_out.html
+++ /dev/null
@@ -1,12 +0,0 @@
-{% extends "admin/base_site.html" %}
-{% load i18n %}
-
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="{% url 'admin:index' %}">{% trans 'Home' %}</a></div>{% endblock %}
-
-{% block content %}
-
-<p>{% trans "Thanks for spending some quality time with the Web site today." %}</p>
-
-<p><a href="{% url 'admin:loggedin' %}">{% trans 'Log in again' %}</a></p>
-
-{% endblock %}
diff --git a/xos/tools/chuckmove b/xos/tools/chuckmove
index a7e0bff..5a77876 100755
--- a/xos/tools/chuckmove
+++ b/xos/tools/chuckmove
@@ -14,6 +14,10 @@
action="store_false", dest="verbose",
help="be vewwy quiet (I'm hunting wabbits)")
+parser.add_option("-r", "--reuse",
+ action="store_false", dest="reuse",
+ help="Reuse .orig files. Dangerous!")
+
parser.add_option("-o", "--old",
metavar="old", help="Old namespace")
@@ -56,9 +60,11 @@
if (n.endswith('.py')):
full_path = '/'.join([root,n])
orig_path = full_path + '.orig'
- print 'Working on %s:'%full_path
- if (not os.path.exists(orig_path)):
- print 'Copying %s->%s:'%(full_path,orig_path)
+ if (options.verbose):
+ print 'Working on %s:'%full_path
+ if (not os.path.exists(orig_path) or not options.reuse):
+ if (options.verbose):
+ print 'Copying %s->%s:'%(full_path,orig_path)
copy(full_path, orig_path)
f_contents = open(orig_path).read()
new_contents = []
diff --git a/xos/tools/xos-manage b/xos/tools/xos-manage
index 075870b..4783bf5 100755
--- a/xos/tools/xos-manage
+++ b/xos/tools/xos-manage
@@ -82,7 +82,7 @@
python $XOS_DIR/manage.py syncdb --noinput
if [[ $DJANGO_17 ]]; then
echo "Loading initial data from fixture..."
- python $XOS_DIR/manage.py --noobserver --nomodelpolicy loaddata $XOS_DIR/core/fixtures/initial_data.json
+ python $XOS_DIR/manage.py --noobserver --nomodelpolicy loaddata $XOS_DIR/core/fixtures/core_initial_data.json
fi
}
function evolvedb {
@@ -170,8 +170,8 @@
dumpdata
# TODO: This is where we could run migration scripts to upgrade the
# dumped data to the new models.
- mv $XOS_DIR/core/fixtures/initial_data.json $XOS_DIR/core/fixtures/initial_data.json-old
- cp $BACKUP_DIR/dumpdata-latest.json $XOS_DIR/core/fixtures/initial_data.json
+ mv $XOS_DIR/core/fixtures/core_initial_data.json $XOS_DIR/core/fixtures/core_initial_data.json-old
+ cp $BACKUP_DIR/dumpdata-latest.json $XOS_DIR/core/fixtures/core_initial_data.json
dropdb
createdb
syncdb
@@ -183,8 +183,8 @@
fi
stopserver
ensure_postgres_running
- mv $XOS_DIR/core/fixtures/initial_data.json $XOS_DIR/core/fixtures/initial_data.json-old
- cp $BACKUP_DIR/dumpdata-latest.json $XOS_DIR/core/fixtures/initial_data.json
+ mv $XOS_DIR/core/fixtures/core_initial_data.json $XOS_DIR/core/fixtures/core_initial_data.json-old
+ cp $BACKUP_DIR/dumpdata-latest.json $XOS_DIR/core/fixtures/core_initial_data.json
dropdb
createdb
syncdb
diff --git a/xos/xos/config.py b/xos/xos/config.py
index 50b04d0..8ae7816 100644
--- a/xos/xos/config.py
+++ b/xos/xos/config.py
@@ -82,6 +82,7 @@
try:
if os.path.isdir(filename):
config_list = list(reversed(os.listdir(filename)))
+ config_list.remove('README.md')
config_list = [os.path.join(filename, s) for s in config_list]
self.config.read(config_list)
else:
diff --git a/xos/xos_configuration/README.md b/xos/xos_configuration/README.md
new file mode 100644
index 0000000..044d7e0
--- /dev/null
+++ b/xos/xos_configuration/README.md
@@ -0,0 +1,99 @@
+# Managing Configurations
+
+XOS comes with several pre-configured envirnments. The main available configurations are:
+
+- Frontend Only
+- - CORD
+Every configurations come with different settings and different features, from GUI elements to Services.
+
+__NOTE: in this folder files should not be added. They will broke the configuration system.__
+
+## Basic configuration
+
+A common configuration file is saved in `xos/configurations/common/xos_common_config`. In this file are stored all the common configurations for XOS.
+
+This is the base config:
+``
+[plc]
+name=plc
+deployment=plc
+
+[db]
+name=xos
+user=postgres
+password=password
+host=localhost
+port=5432
+
+[api]
+host=localhost
+port=8000
+ssl_key=None
+ssl_cert=None
+ca_ssl_cert=None
+ratelimit_enabled=0
+omf_enabled=0
+mail_support_address=support@localhost
+nova_enabled=True
+logfile=/var/log/xos.log
+
+[nova]
+admin_user=admin@domain.com
+admin_password=admin
+admin_tenant=admin
+url=http://localhost:5000/v2.0/
+default_image=None
+default_flavor=m1.small
+default_security_group=default
+ca_ssl_cert=/etc/ssl/certs/ca-certificates.crt
+
+[observer]
+pretend=False
+backoff_disabled=False
+images_directory=/opt/xos/images
+dependency_graph=/opt/xos/model-deps
+logfile=/var/log/xos_backend.log
+
+[gui]
+disable_minidashboard=True
+branding_name=Open Cloud
+#branding_css= #no branding css is provided by default
+branding_icon=/static/logo.png
+
+``
+
+## Extending configuration
+
+### How it works
+
+In some environment some changes to the configuration are needed, to achieve this XOS reads configurations from a `xos/xos_configuration`.
+
+All the configuration files in this folder will be parsed with [ConfigParser](https://docs.python.org/2/library/configparser.html).
+
+### Exetending a configuration
+
+_An example is available in the CORD config_
+
+These are the basic step to extend a configuration.
+_From now we'll use `myConf` as placeholder for the current configuration._
+
+**Local Config**
+
+- In your configuration create a new config file named: `xos_<myConf>_config`
+Sample local config:
+``
+[gui]
+branding_name=A BRAND NAME
+branding_icon=/static/my_logo.png
+``
+
+_The file above will change the displayed brand name and the logo in the UI_
+
+**Makefile Changes**
+- Clean the configuration folder: `rm ../../xos_configuration/*`
+- - Add the common config: `cp ../common/xos_common_config ../../xos_configuration/`
+- - Add the local config: `cp ./xos_<myConf>_config ../../xos_configuration/`
+_IMPORTANT: this instructions have to be executed before `docker build`_
+
+
+