mirror of
https://github.com/ansible/awx.git
synced 2026-02-01 09:38:10 -03:30
Changed project property available_playbooks to playbooks, exposed via API as a child resource of the project detail. Changed project local_path to a CharField and added helper method and API attribute to show the list of available choices for local_path.
This commit is contained in:
@@ -95,8 +95,8 @@ class BaseTestMixin(object):
|
||||
test_playbook_file.write(playbook_content)
|
||||
test_playbook_file.close()
|
||||
return Project.objects.create(
|
||||
name=name, description=description, local_path=project_dir,
|
||||
created_by=created_by,
|
||||
name=name, description=description,
|
||||
local_path=os.path.basename(project_dir), created_by=created_by,
|
||||
#scm_type='git', default_playbook='foo.yml',
|
||||
)
|
||||
|
||||
|
||||
@@ -315,7 +315,7 @@ class BaseJobTest(BaseTest):
|
||||
job_type='check',
|
||||
inventory= self.inv_eng,
|
||||
project=self.proj_dev,
|
||||
playbook=self.proj_dev.available_playbooks[0],
|
||||
playbook=self.proj_dev.playbooks[0],
|
||||
created_by=self.user_sue,
|
||||
)
|
||||
self.jt_eng_run = JobTemplate.objects.create(
|
||||
@@ -323,7 +323,7 @@ class BaseJobTest(BaseTest):
|
||||
job_type='run',
|
||||
inventory= self.inv_eng,
|
||||
project=self.proj_dev,
|
||||
playbook=self.proj_dev.available_playbooks[0],
|
||||
playbook=self.proj_dev.playbooks[0],
|
||||
created_by=self.user_sue,
|
||||
)
|
||||
|
||||
@@ -334,7 +334,7 @@ class BaseJobTest(BaseTest):
|
||||
job_type='check',
|
||||
inventory= self.inv_sup,
|
||||
project=self.proj_test,
|
||||
playbook=self.proj_test.available_playbooks[0],
|
||||
playbook=self.proj_test.playbooks[0],
|
||||
created_by=self.user_sue,
|
||||
)
|
||||
self.jt_sup_run = JobTemplate.objects.create(
|
||||
@@ -342,7 +342,7 @@ class BaseJobTest(BaseTest):
|
||||
job_type='run',
|
||||
inventory= self.inv_sup,
|
||||
project=self.proj_test,
|
||||
playbook=self.proj_test.available_playbooks[0],
|
||||
playbook=self.proj_test.playbooks[0],
|
||||
created_by=self.user_sue,
|
||||
)
|
||||
|
||||
@@ -353,7 +353,7 @@ class BaseJobTest(BaseTest):
|
||||
job_type='check',
|
||||
inventory= self.inv_ops_east,
|
||||
project=self.proj_prod,
|
||||
playbook=self.proj_prod.available_playbooks[0],
|
||||
playbook=self.proj_prod.playbooks[0],
|
||||
credential=self.cred_ops_east,
|
||||
created_by=self.user_sue,
|
||||
)
|
||||
@@ -362,7 +362,7 @@ class BaseJobTest(BaseTest):
|
||||
job_type='run',
|
||||
inventory= self.inv_ops_east,
|
||||
project=self.proj_prod,
|
||||
playbook=self.proj_prod.available_playbooks[0],
|
||||
playbook=self.proj_prod.playbooks[0],
|
||||
credential=self.cred_ops_east,
|
||||
created_by=self.user_sue,
|
||||
)
|
||||
@@ -371,7 +371,7 @@ class BaseJobTest(BaseTest):
|
||||
job_type='check',
|
||||
inventory= self.inv_ops_west,
|
||||
project=self.proj_prod,
|
||||
playbook=self.proj_prod.available_playbooks[0],
|
||||
playbook=self.proj_prod.playbooks[0],
|
||||
credential=self.cred_ops_west,
|
||||
created_by=self.user_sue,
|
||||
)
|
||||
@@ -380,7 +380,7 @@ class BaseJobTest(BaseTest):
|
||||
job_type='run',
|
||||
inventory= self.inv_ops_west,
|
||||
project=self.proj_prod,
|
||||
playbook=self.proj_prod.available_playbooks[0],
|
||||
playbook=self.proj_prod.playbooks[0],
|
||||
credential=self.cred_ops_west,
|
||||
created_by=self.user_sue,
|
||||
)
|
||||
@@ -454,7 +454,7 @@ class JobTemplateTest(BaseJobTest):
|
||||
inventory = self.inventory.pk,
|
||||
project = self.project.pk,
|
||||
job_type = PERM_INVENTORY_DEPLOY,
|
||||
playbook = self.project.available_playbooks[0],
|
||||
playbook = self.project.playbooks[0],
|
||||
)
|
||||
with self.current_user(self.normal_django_user):
|
||||
response = self.post(url, data, expect=201)
|
||||
|
||||
@@ -42,7 +42,7 @@ class ProjectsTest(BaseTest):
|
||||
self.setup_users()
|
||||
|
||||
self.organizations = self.make_organizations(self.super_django_user, 10)
|
||||
self.projects = self.make_projects(self.normal_django_user, 10)
|
||||
self.projects = self.make_projects(self.normal_django_user, 10, TEST_PLAYBOOK)
|
||||
|
||||
# add projects to organizations in a more or less arbitrary way
|
||||
for project in self.projects[0:2]:
|
||||
@@ -100,50 +100,56 @@ class ProjectsTest(BaseTest):
|
||||
# here is a user without any permissions...
|
||||
return ('nobody', 'nobody')
|
||||
|
||||
def test_available_playbooks(self):
|
||||
def test_playbooks(self):
|
||||
def write_test_file(project, name, content):
|
||||
full_path = os.path.join(project.local_path, name)
|
||||
full_path = os.path.join(project.get_project_path(), name)
|
||||
if not os.path.exists(os.path.dirname(full_path)):
|
||||
os.makedirs(os.path.dirname(full_path))
|
||||
f = file(os.path.join(project.local_path, name), 'wb')
|
||||
f = file(full_path, 'wb')
|
||||
f.write(content)
|
||||
f.close()
|
||||
# Invalid local_path
|
||||
project = self.projects[0]
|
||||
project.local_path = os.path.join(project.local_path,
|
||||
'does_not_exist')
|
||||
project.local_path = 'path_does_not_exist'
|
||||
project.save()
|
||||
self.assertEqual(len(project.available_playbooks), 0)
|
||||
self.assertFalse(project.get_project_path())
|
||||
self.assertEqual(len(project.playbooks), 0)
|
||||
# Simple playbook
|
||||
project = self.projects[1]
|
||||
self.assertEqual(len(project.playbooks), 1)
|
||||
write_test_file(project, 'foo.yml', TEST_PLAYBOOK)
|
||||
self.assertEqual(len(project.available_playbooks), 1)
|
||||
self.assertEqual(len(project.playbooks), 2)
|
||||
# Other files
|
||||
project = self.projects[2]
|
||||
self.assertEqual(len(project.playbooks), 1)
|
||||
write_test_file(project, 'foo.txt', 'not a playbook')
|
||||
self.assertEqual(len(project.available_playbooks), 0)
|
||||
self.assertEqual(len(project.playbooks), 1)
|
||||
# Empty playbook
|
||||
project = self.projects[3]
|
||||
self.assertEqual(len(project.playbooks), 1)
|
||||
write_test_file(project, 'blah.yml', '')
|
||||
self.assertEqual(len(project.available_playbooks), 0)
|
||||
self.assertEqual(len(project.playbooks), 1)
|
||||
# Invalid YAML
|
||||
project = self.projects[4]
|
||||
self.assertEqual(len(project.playbooks), 1)
|
||||
write_test_file(project, 'blah.yml', TEST_PLAYBOOK + '----')
|
||||
self.assertEqual(len(project.available_playbooks), 0)
|
||||
self.assertEqual(len(project.playbooks), 1)
|
||||
# No hosts or includes
|
||||
project = self.projects[5]
|
||||
self.assertEqual(len(project.playbooks), 1)
|
||||
playbook_content = TEST_PLAYBOOK.replace('hosts', 'hoists')
|
||||
write_test_file(project, 'blah.yml', playbook_content)
|
||||
self.assertEqual(len(project.available_playbooks), 0)
|
||||
self.assertEqual(len(project.playbooks), 1)
|
||||
# Playbook in roles folder
|
||||
project = self.projects[6]
|
||||
self.assertEqual(len(project.playbooks), 1)
|
||||
write_test_file(project, 'roles/blah.yml', TEST_PLAYBOOK)
|
||||
self.assertEqual(len(project.available_playbooks), 0)
|
||||
self.assertEqual(len(project.playbooks), 1)
|
||||
# Playbook in tasks folder
|
||||
project = self.projects[7]
|
||||
self.assertEqual(len(project.playbooks), 1)
|
||||
write_test_file(project, 'tasks/blah.yml', TEST_PLAYBOOK)
|
||||
self.assertEqual(len(project.available_playbooks), 0)
|
||||
|
||||
self.assertEqual(len(project.playbooks), 1)
|
||||
|
||||
def test_mainline(self):
|
||||
|
||||
@@ -180,6 +186,11 @@ class ProjectsTest(BaseTest):
|
||||
self.delete(project, expect=204, auth=self.get_normal_credentials())
|
||||
self.get(project, expect=404, auth=self.get_normal_credentials())
|
||||
|
||||
# can list playbooks for projects
|
||||
proj_playbooks = '/api/v1/projects/%d/playbooks/' % self.projects[2].pk
|
||||
got = self.get(proj_playbooks, expect=200, auth=self.get_super_credentials())
|
||||
self.assertEqual(got, self.projects[2].playbooks)
|
||||
|
||||
# can list member organizations for projects
|
||||
proj_orgs = '/api/v1/projects/1/organizations/'
|
||||
# only usable as superuser
|
||||
|
||||
@@ -177,7 +177,7 @@ class RunJobTest(BaseCeleryTest):
|
||||
'credential': self.credential,
|
||||
}
|
||||
try:
|
||||
opts['playbook'] = self.project.available_playbooks[0]
|
||||
opts['playbook'] = self.project.playbooks[0]
|
||||
except (AttributeError, IndexError):
|
||||
pass
|
||||
opts.update(kwargs)
|
||||
@@ -196,7 +196,7 @@ class RunJobTest(BaseCeleryTest):
|
||||
'credential': self.credential,
|
||||
}
|
||||
try:
|
||||
opts['playbook'] = self.project.available_playbooks[0]
|
||||
opts['playbook'] = self.project.playbooks[0]
|
||||
except (AttributeError, IndexError):
|
||||
pass
|
||||
opts.update(kwargs)
|
||||
|
||||
Reference in New Issue
Block a user