Major rename of package from lib to ansibleworks.

This commit is contained in:
Chris Church
2013-05-21 18:20:26 -04:00
parent 5133b9a30e
commit aeac739735
264 changed files with 230 additions and 316 deletions

12
.gitignore vendored
View File

@@ -1,8 +1,10 @@
lib/settings/local_settings.py* ansibleworks/settings/local_settings.py*
lib/acom.sqlite3 ansibleworks/acom.sqlite3
lib/projects ansibleworks/projects
lib/public/media ansibleworks/public/media
lib/public/static ansibleworks/public/static
env/* env/*
build
dist
*.py[c,o] *.py[c,o]
*.swp *.swp

View File

@@ -1,9 +1,9 @@
recursive-include lib *.py recursive-include ansibleworks *.py
recursive-include lib/static *.ico recursive-include ansibleworks/static *.ico
recursive-include lib/templates *.html recursive-include ansibleworks/templates *.html
recursive-exclude lib/settings local_settings.py recursive-exclude ansibleworks/settings local_settings.py
include *.py *.txt *.md include *.py *.txt *.md
include MANIFEST.in include MANIFEST.in
include COPYING include COPYING
prune lib/public prune ansibleworks/public
prune lib/project prune ansibleworks/project

View File

@@ -1,4 +1,5 @@
clean: clean:
rm -rf build dist *.egg-info
find . -type f -regex ".*\.py[co]$$" -delete find . -type f -regex ".*\.py[co]$$" -delete
rebase: rebase:

View File

@@ -25,12 +25,10 @@ See the ansible-doc repo
Accessing the UI Accessing the UI
================ ================
The UI is installed under lib/static/web. After starting the django server The UI is installed under ansibleworks/ui/ and accessible at the root URL.
(i.e. make runserver), access the ui from a web browser at: After starting the Django server (i.e. make runserver), access the UI from a
web browser at:
http://127.0.0.1:8013/static/web/app/index.html http://127.0.0.1:8013/
(routes and formal installation steps including Apache proxying pending) (routes and formal installation steps including Apache proxying pending)

View File

@@ -11,7 +11,8 @@ __all__ = ['__version__']
def manage(): def manage():
# Default to production mode unless being called from manage.py, which sets # Default to production mode unless being called from manage.py, which sets
# the environment variable for development mode instead. # the environment variable for development mode instead.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'lib.settings.production') os.environ.setdefault('DJANGO_SETTINGS_MODULE',
'ansibleworks.settings.production')
from django.core.management import execute_from_command_line from django.core.management import execute_from_command_line
if len(sys.argv) >= 2 and sys.argv[1] in ('version', '--version'): if len(sys.argv) >= 2 and sys.argv[1] in ('version', '--version'):
sys.stdout.write('ansibleworks-%s\n' % __version__) sys.stdout.write('ansibleworks-%s\n' % __version__)

View File

@@ -1,2 +1,2 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.

View File

@@ -1,11 +1,14 @@
# Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved.
import logging import logging
from django.db.models import Q from django.db.models import Q
from django.contrib.auth.models import User from django.contrib.auth.models import User
from lib.main.models import * from ansibleworks.main.models import *
__all__ = ['get_user_queryset', 'check_user_access'] __all__ = ['get_user_queryset', 'check_user_access']
logger = logging.getLogger('lib.main.access') logger = logging.getLogger('ansibleworks.main.access')
access_registry = { access_registry = {
# <model_class>: [<access_class>, ...], # <model_class>: [<access_class>, ...],

View File

@@ -1,5 +1,5 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
import json import json
import urllib import urllib
@@ -13,8 +13,8 @@ from django.http import HttpResponseRedirect
from django.utils.timezone import now from django.utils.timezone import now
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils.html import format_html from django.utils.html import format_html
from lib.main.models import * from ansibleworks.main.models import *
from lib.main.forms import * from ansibleworks.main.forms import *
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin from django.contrib.auth.admin import UserAdmin

View File

@@ -1,15 +1,14 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# # All Rights Reserved.
# This file is part of Ansible Commander.
# All rights reserved
from django.http import HttpResponse, Http404 from django.http import HttpResponse, Http404
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from lib.main.models import * from ansibleworks.main.models import *
from django.contrib.auth.models import User from django.contrib.auth.models import User
from lib.main.serializers import * from ansibleworks.main.serializers import *
from lib.main.rbac import * from ansibleworks.main.rbac import *
from lib.main.access import * from ansibleworks.main.access import *
from rest_framework.exceptions import PermissionDenied from rest_framework.exceptions import PermissionDenied
from rest_framework import mixins from rest_framework import mixins
from rest_framework import generics from rest_framework import generics
@@ -142,10 +141,10 @@ class BaseSubList(BaseList):
if self.__class__.parent_model == Organization: if self.__class__.parent_model == Organization:
organization = Organization.objects.get(pk=data[inject_primary_key]) organization = Organization.objects.get(pk=data[inject_primary_key])
import lib.main.views import ansibleworks.main.views
if self.__class__ == lib.main.views.OrganizationsUsersList: if self.__class__ == ansibleworks.main.views.OrganizationsUsersList:
organization.users.add(obj) organization.users.add(obj)
elif self.__class__ == lib.main.views.OrganizationsAdminsList: elif self.__class__ == ansibleworks.main.views.OrganizationsAdminsList:
organization.admins.add(obj) organization.admins.add(obj)
else: else:

View File

@@ -1,5 +1,5 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
from rest_framework.filters import BaseFilterBackend from rest_framework.filters import BaseFilterBackend
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied

View File

@@ -1,11 +1,11 @@
# (C) AnsibleWorks, 2013 # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
import json import json
from django import forms from django import forms
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from jsonfield.fields import JSONFormField from jsonfield.fields import JSONFormField
from lib.main.models import * from ansibleworks.main.models import *
EMPTY_CHOICE = ('', '---------') EMPTY_CHOICE = ('', '---------')

View File

@@ -0,0 +1,2 @@
# Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved.

View File

@@ -1,19 +1,5 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# # All Rights Reserved.
# This file is part of Ansible Commander.
#
# Ansible Commander is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3 of the License.
#
# Ansible Commander is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible Commander. If not, see <http://www.gnu.org/licenses/>.
import os import os
import sys import sys

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
import json import json
from optparse import make_option from optparse import make_option
@@ -31,7 +31,7 @@ class Command(NoArgsCommand):
) )
def handle_noargs(self, **options): def handle_noargs(self, **options):
from lib.main.models import Job, JobEvent from ansibleworks.main.models import Job, JobEvent
event_type = options.get('event_type', None) event_type = options.get('event_type', None)
if not event_type: if not event_type:
raise CommandError('No event specified') raise CommandError('No event specified')

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env python #!/usr/bin/env python
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
import json import json
from optparse import make_option from optparse import make_option
@@ -43,7 +43,7 @@ class Command(NoArgsCommand):
self.stdout.write(json.dumps(groups, indent=indent)) self.stdout.write(json.dumps(groups, indent=indent))
def get_host(self, inventory, hostname, indent=None): def get_host(self, inventory, hostname, indent=None):
from lib.main.models import Host from ansibleworks.main.models import Host
hostvars = {} hostvars = {}
try: try:
# FIXME: Check if active? # FIXME: Check if active?
@@ -57,7 +57,7 @@ class Command(NoArgsCommand):
def handle_noargs(self, **options): def handle_noargs(self, **options):
try: try:
from lib.main.models import Inventory from ansibleworks.main.models import Inventory
try: try:
# Command line argument takes precedence over environment # Command line argument takes precedence over environment
# variable. # variable.

View File

@@ -0,0 +1,2 @@
# Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved.

View File

@@ -1,19 +1,5 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# # All Rights Reserved.
# This file is part of Ansible Commander.
#
# Ansible Commander is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3 of the License.
#
# Ansible Commander is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible Commander. If not, see <http://www.gnu.org/licenses/>.
import os import os
import shlex import shlex
@@ -81,7 +67,7 @@ class EditHelper(object):
@classmethod @classmethod
def illegal_changes(cls, request, obj, model_class): def illegal_changes(cls, request, obj, model_class):
''' have any illegal changes been made (for a PUT request)? ''' ''' have any illegal changes been made (for a PUT request)? '''
from lib.main.access import check_user_access from ansibleworks.main.access import check_user_access
#can_admin = model_class.can_user_administrate(request.user, obj, request.DATA) #can_admin = model_class.can_user_administrate(request.user, obj, request.DATA)
can_admin = check_user_access(request.user, User, 'change', obj, request.DATA) can_admin = check_user_access(request.user, User, 'change', obj, request.DATA)
if (not can_admin) or (can_admin == 'partial'): if (not can_admin) or (can_admin == 'partial'):
@@ -724,7 +710,7 @@ class Job(CommonModel):
return bool(self.status == 'new') return bool(self.status == 'new')
def start(self, **kwargs): def start(self, **kwargs):
from lib.main.tasks import RunJob from ansibleworks.main.tasks import RunJob
if not self.can_start: if not self.can_start:
return False return False
needed = self.get_passwords_needed_to_start() needed = self.get_passwords_needed_to_start()

View File

@@ -1,13 +1,13 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
import logging import logging
from django.http import Http404 from django.http import Http404
from rest_framework.exceptions import PermissionDenied from rest_framework.exceptions import PermissionDenied
from rest_framework import permissions from rest_framework import permissions
from lib.main.access import * from ansibleworks.main.access import *
logger = logging.getLogger('lib.main.rbac') logger = logging.getLogger('ansibleworks.main.rbac')
# FIXME: this will probably need to be subclassed by object type # FIXME: this will probably need to be subclassed by object type

View File

@@ -1,5 +1,5 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
# Django # Django
from django.contrib.auth.models import User from django.contrib.auth.models import User
@@ -10,8 +10,8 @@ from django.core.exceptions import ObjectDoesNotExist
from rest_framework import serializers, pagination from rest_framework import serializers, pagination
from rest_framework.templatetags.rest_framework import replace_query_param from rest_framework.templatetags.rest_framework import replace_query_param
# Ansible Commander # AnsibleWorks
from lib.main.models import * from ansibleworks.main.models import *
BASE_FIELDS = ('id', 'url', 'related', 'summary_fields', 'created', BASE_FIELDS = ('id', 'url', 'related', 'summary_fields', 'created',
'creation_date', 'name', 'description') 'creation_date', 'name', 'description')

View File

@@ -1,5 +1,5 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
import cStringIO import cStringIO
import logging import logging
@@ -12,12 +12,11 @@ import traceback
from celery import Task from celery import Task
from django.conf import settings from django.conf import settings
import pexpect import pexpect
from lib.main.models import * from ansibleworks.main.models import *
__all__ = ['RunJob'] __all__ = ['RunJob']
logger = logging.getLogger('lib.main.tasks') logger = logging.getLogger('ansibleworks.main.tasks')
class RunJob(Task): class RunJob(Task):
''' '''

View File

@@ -0,0 +1,11 @@
# Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved.
from ansibleworks.main.tests.organizations import OrganizationsTest
from ansibleworks.main.tests.users import UsersTest
from ansibleworks.main.tests.inventory import InventoryTest
from ansibleworks.main.tests.projects import ProjectsTest
from ansibleworks.main.tests.commands import *
from ansibleworks.main.tests.tasks import RunJobTest
from ansibleworks.main.tests.jobs import *

View File

@@ -1,5 +1,5 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
import contextlib import contextlib
import datetime import datetime
@@ -12,8 +12,7 @@ from django.conf import settings
from django.contrib.auth.models import User from django.contrib.auth.models import User
import django.test import django.test
from django.test.client import Client from django.test.client import Client
from lib.main.models import * from ansibleworks.main.models import *
class BaseTestMixin(object): class BaseTestMixin(object):
''' '''

View File

@@ -1,5 +1,5 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
import json import json
import os import os
@@ -10,8 +10,8 @@ from django.conf import settings
from django.core.management import call_command from django.core.management import call_command
from django.core.management.base import CommandError from django.core.management.base import CommandError
from django.utils.timezone import now from django.utils.timezone import now
from lib.main.models import * from ansibleworks.main.models import *
from lib.main.tests.base import BaseTest from ansibleworks.main.tests.base import BaseTest
__all__ = ['RunCommandAsScriptTest', 'AcomInventoryTest', __all__ = ['RunCommandAsScriptTest', 'AcomInventoryTest',
'AcomCallbackEventTest'] 'AcomCallbackEventTest']
@@ -77,7 +77,7 @@ class RunCommandAsScriptTest(BaseCommandTest):
''' '''
def test_run_command_as_script(self): def test_run_command_as_script(self):
from lib.main.management.commands import run_command_as_script from ansibleworks.main.management.commands import run_command_as_script
os.environ['ACOM_TEST_DATABASE_NAME'] = settings.DATABASES['default']['NAME'] os.environ['ACOM_TEST_DATABASE_NAME'] = settings.DATABASES['default']['NAME']
# FIXME: Not sure how to test ImportError for settings module. # FIXME: Not sure how to test ImportError for settings module.
def run_cmd(name, *args, **kwargs): def run_cmd(name, *args, **kwargs):

View File

@@ -1,5 +1,5 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
import datetime import datetime
import json import json
@@ -7,8 +7,8 @@ import json
from django.contrib.auth.models import User as DjangoUser from django.contrib.auth.models import User as DjangoUser
import django.test import django.test
from django.test.client import Client from django.test.client import Client
from lib.main.models import * from ansibleworks.main.models import *
from lib.main.tests.base import BaseTest from ansibleworks.main.tests.base import BaseTest
class InventoryTest(BaseTest): class InventoryTest(BaseTest):

View File

@@ -1,5 +1,5 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
import datetime import datetime
import json import json
@@ -9,8 +9,8 @@ from django.db import transaction
import django.test import django.test
from django.test.client import Client from django.test.client import Client
from django.test.utils import override_settings from django.test.utils import override_settings
from lib.main.models import * from ansibleworks.main.models import *
from lib.main.tests.base import BaseTestMixin from ansibleworks.main.tests.base import BaseTestMixin
__all__ = ['JobTemplateTest', 'JobTest', 'JobStartCancelTest'] __all__ = ['JobTemplateTest', 'JobTest', 'JobStartCancelTest']
@@ -221,9 +221,9 @@ class BaseJobTestMixin(BaseTestMixin):
self.team_ops_west.users.add(self.user_iris) self.team_ops_west.users.add(self.user_iris)
# Each user has his/her own set of credentials. # Each user has his/her own set of credentials.
from lib.main.tests.tasks import (TEST_SSH_KEY_DATA, from ansibleworks.main.tests.tasks import (TEST_SSH_KEY_DATA,
TEST_SSH_KEY_DATA_LOCKED, TEST_SSH_KEY_DATA_LOCKED,
TEST_SSH_KEY_DATA_UNLOCK) TEST_SSH_KEY_DATA_UNLOCK)
self.cred_bob = self.user_bob.credentials.create( self.cred_bob = self.user_bob.credentials.create(
ssh_username='bob', ssh_username='bob',
ssh_password='ASK', ssh_password='ASK',
@@ -825,7 +825,7 @@ class JobStartCancelTest(BaseJobTestMixin, django.test.TransactionTestCase):
self.assertEqual(job.status, 'failed') self.assertEqual(job.status, 'failed')
# Test with a job that prompts for SSH unlock key, given the right key. # Test with a job that prompts for SSH unlock key, given the right key.
from lib.main.tests.tasks import TEST_SSH_KEY_DATA_UNLOCK from ansibleworks.main.tests.tasks import TEST_SSH_KEY_DATA_UNLOCK
job = self.jt_ops_west_run.create_job( job = self.jt_ops_west_run.create_job(
credential=self.cred_greg, credential=self.cred_greg,
created_by=self.user_sue, created_by=self.user_sue,

View File

@@ -1,5 +1,5 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
import datetime import datetime
import json import json
@@ -8,8 +8,8 @@ from django.contrib.auth.models import User as DjangoUser
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
import django.test import django.test
from django.test.client import Client from django.test.client import Client
from lib.main.models import * from ansibleworks.main.models import *
from lib.main.tests.base import BaseTest from ansibleworks.main.tests.base import BaseTest
class OrganizationsTest(BaseTest): class OrganizationsTest(BaseTest):

View File

@@ -1,5 +1,5 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
import datetime import datetime
import json import json
@@ -8,8 +8,8 @@ from django.contrib.auth.models import User as DjangoUser
import django.test import django.test
from django.test.client import Client from django.test.client import Client
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from lib.main.models import * from ansibleworks.main.models import *
from lib.main.tests.base import BaseTest from ansibleworks.main.tests.base import BaseTest
TEST_PLAYBOOK = '''- hosts: mygroup TEST_PLAYBOOK = '''- hosts: mygroup
gather_facts: false gather_facts: false

View File

@@ -1,14 +1,14 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
import os import os
import shutil import shutil
import tempfile import tempfile
from django.conf import settings from django.conf import settings
from django.test.utils import override_settings from django.test.utils import override_settings
from lib.main.models import * from ansibleworks.main.models import *
from lib.main.tests.base import BaseTransactionTest from ansibleworks.main.tests.base import BaseTransactionTest
from lib.main.tasks import RunJob from ansibleworks.main.tasks import RunJob
TEST_PLAYBOOK = '''- hosts: test-group TEST_PLAYBOOK = '''- hosts: test-group
gather_facts: False gather_facts: False

View File

@@ -1,13 +1,13 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
import json import json
from django.contrib.auth.models import User as DjangoUser from django.contrib.auth.models import User as DjangoUser
import django.test import django.test
from django.test.client import Client from django.test.client import Client
from lib.main.models import * from ansibleworks.main.models import *
from lib.main.tests.base import BaseTest from ansibleworks.main.tests.base import BaseTest
class UsersTest(BaseTest): class UsersTest(BaseTest):

View File

@@ -1,8 +1,8 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
from django.conf.urls import include, patterns, url as original_url from django.conf.urls import include, patterns, url as original_url
import lib.main.views as views import ansibleworks.main.views as views
def url(regex, view, kwargs=None, name=None, prefix=''): def url(regex, view, kwargs=None, name=None, prefix=''):
# Set default name from view name (if a string). # Set default name from view name (if a string).
@@ -10,7 +10,7 @@ def url(regex, view, kwargs=None, name=None, prefix=''):
name = view name = view
return original_url(regex, view, kwargs, name, prefix) return original_url(regex, view, kwargs, name, prefix)
organizations_urls = patterns('lib.main.views', organizations_urls = patterns('ansibleworks.main.views',
url(r'^$', 'organizations_list'), url(r'^$', 'organizations_list'),
url(r'^(?P<pk>[0-9]+)/$', 'organizations_detail'), url(r'^(?P<pk>[0-9]+)/$', 'organizations_detail'),
url(r'^(?P<pk>[0-9]+)/audit_trail/$', 'organizations_audit_trail_list'), url(r'^(?P<pk>[0-9]+)/audit_trail/$', 'organizations_audit_trail_list'),
@@ -22,7 +22,7 @@ organizations_urls = patterns('lib.main.views',
url(r'^(?P<pk>[0-9]+)/teams/$', 'organizations_teams_list'), url(r'^(?P<pk>[0-9]+)/teams/$', 'organizations_teams_list'),
) )
users_urls = patterns('lib.main.views', users_urls = patterns('ansibleworks.main.views',
url(r'^$', 'users_list'), url(r'^$', 'users_list'),
url(r'^(?P<pk>[0-9]+)/$', 'users_detail'), url(r'^(?P<pk>[0-9]+)/$', 'users_detail'),
url(r'^(?P<pk>[0-9]+)/teams/$', 'users_teams_list'), url(r'^(?P<pk>[0-9]+)/teams/$', 'users_teams_list'),
@@ -33,20 +33,20 @@ users_urls = patterns('lib.main.views',
url(r'^(?P<pk>[0-9]+)/permissions/$', 'users_permissions_list'), url(r'^(?P<pk>[0-9]+)/permissions/$', 'users_permissions_list'),
) )
projects_urls = patterns('lib.main.views', projects_urls = patterns('ansibleworks.main.views',
url(r'^$', 'projects_list'), url(r'^$', 'projects_list'),
url(r'^(?P<pk>[0-9]+)/$', 'projects_detail'), url(r'^(?P<pk>[0-9]+)/$', 'projects_detail'),
url(r'^(?P<pk>[0-9]+)/playbooks/$', 'projects_detail_playbooks'), url(r'^(?P<pk>[0-9]+)/playbooks/$', 'projects_detail_playbooks'),
url(r'^(?P<pk>[0-9]+)/organizations/$', 'projects_organizations_list'), url(r'^(?P<pk>[0-9]+)/organizations/$', 'projects_organizations_list'),
) )
audit_trails_urls = patterns('lib.main.views', audit_trails_urls = patterns('ansibleworks.main.views',
#url(r'^$', 'audit_trails_list'), #url(r'^$', 'audit_trails_list'),
#url(r'^(?P<pk>[0-9]+)/$', 'audit_trails_detail'), #url(r'^(?P<pk>[0-9]+)/$', 'audit_trails_detail'),
# ... and ./audit_trails/ on all resources # ... and ./audit_trails/ on all resources
) )
teams_urls = patterns('lib.main.views', teams_urls = patterns('ansibleworks.main.views',
url(r'^$', 'teams_list'), url(r'^$', 'teams_list'),
url(r'^(?P<pk>[0-9]+)/$', 'teams_detail'), url(r'^(?P<pk>[0-9]+)/$', 'teams_detail'),
url(r'^(?P<pk>[0-9]+)/projects/$', 'teams_projects_list'), url(r'^(?P<pk>[0-9]+)/projects/$', 'teams_projects_list'),
@@ -55,7 +55,7 @@ teams_urls = patterns('lib.main.views',
url(r'^(?P<pk>[0-9]+)/permissions/$', 'teams_permissions_list'), url(r'^(?P<pk>[0-9]+)/permissions/$', 'teams_permissions_list'),
) )
inventory_urls = patterns('lib.main.views', inventory_urls = patterns('ansibleworks.main.views',
url(r'^$', 'inventory_list'), url(r'^$', 'inventory_list'),
url(r'^(?P<pk>[0-9]+)/$', 'inventory_detail'), url(r'^(?P<pk>[0-9]+)/$', 'inventory_detail'),
url(r'^(?P<pk>[0-9]+)/hosts/$', 'inventory_hosts_list'), url(r'^(?P<pk>[0-9]+)/hosts/$', 'inventory_hosts_list'),
@@ -63,7 +63,7 @@ inventory_urls = patterns('lib.main.views',
url(r'^(?P<pk>[0-9]+)/root_groups/$', 'inventory_root_groups_list'), url(r'^(?P<pk>[0-9]+)/root_groups/$', 'inventory_root_groups_list'),
) )
hosts_urls = patterns('lib.main.views', hosts_urls = patterns('ansibleworks.main.views',
url(r'^$', 'hosts_list'), url(r'^$', 'hosts_list'),
url(r'^(?P<pk>[0-9]+)/$', 'hosts_detail'), url(r'^(?P<pk>[0-9]+)/$', 'hosts_detail'),
url(r'^(?P<pk>[0-9]+)/variable_data/$', 'hosts_variable_detail'), url(r'^(?P<pk>[0-9]+)/variable_data/$', 'hosts_variable_detail'),
@@ -71,7 +71,7 @@ hosts_urls = patterns('lib.main.views',
url(r'^(?P<pk>[0-9]+)/job_host_summaries/$', 'host_job_host_summary_list'), url(r'^(?P<pk>[0-9]+)/job_host_summaries/$', 'host_job_host_summary_list'),
) )
groups_urls = patterns('lib.main.views', groups_urls = patterns('ansibleworks.main.views',
url(r'^$', 'groups_list'), url(r'^$', 'groups_list'),
url(r'^(?P<pk>[0-9]+)/$', 'groups_detail'), url(r'^(?P<pk>[0-9]+)/$', 'groups_detail'),
url(r'^(?P<pk>[0-9]+)/children/$', 'groups_children_list'), url(r'^(?P<pk>[0-9]+)/children/$', 'groups_children_list'),
@@ -82,28 +82,28 @@ groups_urls = patterns('lib.main.views',
url(r'^(?P<pk>[0-9]+)/job_host_summaries/$', 'group_job_host_summary_list'), url(r'^(?P<pk>[0-9]+)/job_host_summaries/$', 'group_job_host_summary_list'),
) )
variable_data_urls = patterns('lib.main.views', variable_data_urls = patterns('ansibleworks.main.views',
url(r'^(?P<pk>[0-9]+)/$', 'variable_detail'), url(r'^(?P<pk>[0-9]+)/$', 'variable_detail'),
# See also variable_data resources on hosts/groups. # See also variable_data resources on hosts/groups.
) )
credentials_urls = patterns('lib.main.views', credentials_urls = patterns('ansibleworks.main.views',
url(r'^$', 'credentials_list'), url(r'^$', 'credentials_list'),
url(r'^(?P<pk>[0-9]+)/$', 'credentials_detail'), url(r'^(?P<pk>[0-9]+)/$', 'credentials_detail'),
# See also credentials resources on users/teams. # See also credentials resources on users/teams.
) )
permissions_urls = patterns('lib.main.views', permissions_urls = patterns('ansibleworks.main.views',
url(r'^(?P<pk>[0-9]+)/$', 'permissions_detail'), url(r'^(?P<pk>[0-9]+)/$', 'permissions_detail'),
) )
job_templates_urls = patterns('lib.main.views', job_templates_urls = patterns('ansibleworks.main.views',
url(r'^$', 'job_template_list'), url(r'^$', 'job_template_list'),
url(r'^(?P<pk>[0-9]+)/$', 'job_template_detail'), url(r'^(?P<pk>[0-9]+)/$', 'job_template_detail'),
url(r'^(?P<pk>[0-9]+)/jobs/$', 'job_template_job_list'), url(r'^(?P<pk>[0-9]+)/jobs/$', 'job_template_job_list'),
) )
jobs_urls = patterns('lib.main.views', jobs_urls = patterns('ansibleworks.main.views',
url(r'^$', 'job_list'), url(r'^$', 'job_list'),
url(r'^(?P<pk>[0-9]+)/$', 'job_detail'), url(r'^(?P<pk>[0-9]+)/$', 'job_detail'),
url(r'^(?P<pk>[0-9]+)/start/$', 'job_start'), url(r'^(?P<pk>[0-9]+)/start/$', 'job_start'),
@@ -116,21 +116,21 @@ jobs_urls = patterns('lib.main.views',
url(r'^(?P<pk>[0-9]+)/job_events/$', 'job_job_event_list'), url(r'^(?P<pk>[0-9]+)/job_events/$', 'job_job_event_list'),
) )
job_host_summary_urls = patterns('lib.main.views', job_host_summary_urls = patterns('ansibleworks.main.views',
url(r'^(?P<pk>[0-9]+)/$', 'job_host_summary_detail'), url(r'^(?P<pk>[0-9]+)/$', 'job_host_summary_detail'),
) )
job_events_urls = patterns('lib.main.views', job_events_urls = patterns('ansibleworks.main.views',
url(r'^$', 'job_event_list'), url(r'^$', 'job_event_list'),
url(r'^(?P<pk>[0-9]+)/$', 'job_event_detail'), url(r'^(?P<pk>[0-9]+)/$', 'job_event_detail'),
) )
tags_urls = patterns('lib.main.views', tags_urls = patterns('ansibleworks.main.views',
url(r'^(?P<pk>[0-9]+)/$', 'tags_detail'), url(r'^(?P<pk>[0-9]+)/$', 'tags_detail'),
# ... and tag relations on all resources # ... and tag relations on all resources
) )
v1_urls = patterns('lib.main.views', v1_urls = patterns('ansibleworks.main.views',
url(r'^$', 'api_v1_root_view'), url(r'^$', 'api_v1_root_view'),
url(r'^authtoken/$', 'auth_token_view'), url(r'^authtoken/$', 'auth_token_view'),
url(r'^me/$', 'users_me_list'), url(r'^me/$', 'users_me_list'),
@@ -152,7 +152,7 @@ v1_urls = patterns('lib.main.views',
url(r'^tags/', include(tags_urls)), url(r'^tags/', include(tags_urls)),
) )
urlpatterns = patterns('lib.main.views', urlpatterns = patterns('ansibleworks.main.views',
url(r'^$', 'api_root_view'), url(r'^$', 'api_root_view'),
url(r'^v1/', include(v1_urls)), url(r'^v1/', include(v1_urls)),
) )

View File

@@ -1,13 +1,13 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved # All Rights Reserved.
from django.http import HttpResponse from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from lib.main.models import * from ansibleworks.main.models import *
from django.contrib.auth.models import User from django.contrib.auth.models import User
from lib.main.serializers import * from ansibleworks.main.serializers import *
from lib.main.rbac import * from ansibleworks.main.rbac import *
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from rest_framework.exceptions import PermissionDenied from rest_framework.exceptions import PermissionDenied
from rest_framework import mixins from rest_framework import mixins
@@ -24,7 +24,7 @@ import re
import sys import sys
import json as python_json import json as python_json
from base_views import * from base_views import *
from lib.main.access import * from ansibleworks.main.access import *
class ApiRootView(APIView): class ApiRootView(APIView):
''' '''

View File

@@ -0,0 +1,2 @@
# Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved.

View File

@@ -0,0 +1,12 @@
# Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved.
import traceback
from django.http import HttpResponse
class ExceptionMiddleware(object):
def process_exception(self, request, exception):
# FIXME: Should only format plain text for API exceptions.
return HttpResponse(traceback.format_exc(exception), content_type="text/plain", status=500)

View File

@@ -1,11 +1,8 @@
# Copyright (c) 2013 AnsibleWorks, Inc. # Copyright (c) 2013 AnsibleWorks, Inc.
# This file is a utility Ansible plugin that is not part of Ansible Commander # This file is a utility Ansible plugin that is not part of the AnsibleWorks
# or Ansible. It does not import any ansible-commander code, nor does its # or Ansible packages. It does not import any code from either package, nor
# license apply to Ansible or Ansible Commander. # does its license apply to Ansible or AnsibleWorks.
# #
# Copyright (c) 2013, AnsibleWorks Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without # Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met: # modification, are permitted provided that the following conditions are met:
# #

View File

@@ -0,0 +1,2 @@
# Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved.

View File

@@ -24,8 +24,8 @@ ADMINS = (
MANAGERS = ADMINS MANAGERS = ADMINS
REST_FRAMEWORK = { REST_FRAMEWORK = {
'FILTER_BACKEND': 'lib.main.custom_filters.CustomFilterBackend', 'FILTER_BACKEND': 'ansibleworks.main.custom_filters.CustomFilterBackend',
'DEFAULT_PAGINATION_SERIALIZER_CLASS': 'lib.main.serializers.PaginationSerializer', 'DEFAULT_PAGINATION_SERIALIZER_CLASS': 'ansibleworks.main.serializers.PaginationSerializer',
'PAGINATE_BY': 25, 'PAGINATE_BY': 25,
'PAGINATE_BY_PARAM': 'page_size', 'PAGINATE_BY_PARAM': 'page_size',
'DEFAULT_AUTHENTICATION_CLASSES': ( 'DEFAULT_AUTHENTICATION_CLASSES': (
@@ -106,12 +106,12 @@ ALLOWED_HOSTS = []
TEMPLATE_CONTEXT_PROCESSORS += ( TEMPLATE_CONTEXT_PROCESSORS += (
'django.core.context_processors.request', 'django.core.context_processors.request',
'lib.ui.context_processors.settings', 'ansibleworks.ui.context_processors.settings',
) )
MIDDLEWARE_CLASSES += ( MIDDLEWARE_CLASSES += (
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
'lib.middleware.exceptions.ExceptionMiddleware', 'ansibleworks.middleware.exceptions.ExceptionMiddleware',
'django.middleware.transaction.TransactionMiddleware', 'django.middleware.transaction.TransactionMiddleware',
# middleware loaded after this point will be subject to transactions # middleware loaded after this point will be subject to transactions
) )
@@ -120,9 +120,9 @@ TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'templates'), os.path.join(BASE_DIR, 'templates'),
) )
ROOT_URLCONF = 'lib.urls' ROOT_URLCONF = 'ansibleworks.urls'
WSGI_APPLICATION = 'lib.wsgi.application' WSGI_APPLICATION = 'ansibleworks.wsgi.application'
INSTALLED_APPS = ( INSTALLED_APPS = (
'django.contrib.admin', 'django.contrib.admin',
@@ -138,8 +138,8 @@ INSTALLED_APPS = (
'django_extensions', 'django_extensions',
'djcelery', 'djcelery',
'kombu.transport.django', 'kombu.transport.django',
'lib.main', 'ansibleworks.main',
'lib.ui', 'ansibleworks.ui',
) )
INTERNAL_IPS = ('127.0.0.1',) INTERNAL_IPS = ('127.0.0.1',)
@@ -245,17 +245,17 @@ LOGGING = {
'py.warnings': { 'py.warnings': {
'handlers': ['console'], 'handlers': ['console'],
}, },
'lib.main': { 'ansibleworks.main': {
'handlers': ['console'], 'handlers': ['console'],
'level': 'DEBUG', 'level': 'DEBUG',
'filters': [] 'filters': []
}, },
'lib.main.rbac': { 'ansibleworks.main.rbac': {
'handlers': ['null'], 'handlers': ['null'],
# Comment the line below to show lots of permissions logging. # Comment the line below to show lots of permissions logging.
'propagate': False, 'propagate': False,
}, },
'lib.main.access': { 'ansibleworks.main.access': {
'handlers': ['null'], 'handlers': ['null'],
# Comment the line below to show lots of permissions logging. # Comment the line below to show lots of permissions logging.
'propagate': False, 'propagate': False,

View File

Before

Width:  |  Height:  |  Size: 318 B

After

Width:  |  Height:  |  Size: 318 B

View File

@@ -5,6 +5,9 @@ The user interface to Ansible Commander
Installation Installation
------------ ------------
FIXME: Update the instructions below.
To use the UI you will first need to complete the installation of Ansible Commander. Within To use the UI you will first need to complete the installation of Ansible Commander. Within
Ansbile Commander you should be able to start the server (make runserver) and log into the Ansbile Commander you should be able to start the server (make runserver) and log into the
admin console. If that all works, then you are ready to install Ansible UI. admin console. If that all works, then you are ready to install Ansible UI.

View File

@@ -1,3 +1,6 @@
# Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved.
from django.conf import settings as django_settings from django.conf import settings as django_settings
def settings(request): def settings(request):

View File

@@ -0,0 +1,4 @@
# Copyright (c) 2013 AnsibleWorks, Inc.
# All Rights Reserved.
# Empty models file.

View File

Before

Width:  |  Height:  |  Size: 135 KiB

After

Width:  |  Height:  |  Size: 135 KiB

View File

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 318 B

After

Width:  |  Height:  |  Size: 318 B

View File

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Some files were not shown because too many files have changed in this diff Show More