mirror of
https://github.com/ansible/awx.git
synced 2026-05-06 00:47:37 -02:30
Apply new rules from black update (#16232)
This commit is contained in:
@@ -7,7 +7,6 @@ from rest_framework import serializers
|
|||||||
# AWX
|
# AWX
|
||||||
from awx.conf import fields, register, register_validate
|
from awx.conf import fields, register, register_validate
|
||||||
|
|
||||||
|
|
||||||
register(
|
register(
|
||||||
'SESSION_COOKIE_AGE',
|
'SESSION_COOKIE_AGE',
|
||||||
field_class=fields.IntegerField,
|
field_class=fields.IntegerField,
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ class NullFieldMixin(object):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def validate_empty_values(self, data):
|
def validate_empty_values(self, data):
|
||||||
(is_empty_value, data) = super(NullFieldMixin, self).validate_empty_values(data)
|
is_empty_value, data = super(NullFieldMixin, self).validate_empty_values(data)
|
||||||
if is_empty_value and data is None:
|
if is_empty_value and data is None:
|
||||||
return (False, data)
|
return (False, data)
|
||||||
return (is_empty_value, data)
|
return (is_empty_value, data)
|
||||||
|
|||||||
@@ -764,7 +764,7 @@ class SubListCreateAttachDetachAPIView(SubListCreateAPIView):
|
|||||||
return Response(status=status.HTTP_204_NO_CONTENT)
|
return Response(status=status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
def unattach(self, request, *args, **kwargs):
|
def unattach(self, request, *args, **kwargs):
|
||||||
(sub_id, res) = self.unattach_validate(request)
|
sub_id, res = self.unattach_validate(request)
|
||||||
if res:
|
if res:
|
||||||
return res
|
return res
|
||||||
return self.unattach_by_id(request, sub_id)
|
return self.unattach_by_id(request, sub_id)
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.urls import re_path
|
|||||||
|
|
||||||
from awx.api.views import MetricsView
|
from awx.api.views import MetricsView
|
||||||
|
|
||||||
|
|
||||||
urls = [re_path(r'^$', MetricsView.as_view(), name='metrics_view')]
|
urls = [re_path(r'^$', MetricsView.as_view(), name='metrics_view')]
|
||||||
|
|
||||||
__all__ = ['urls']
|
__all__ = ['urls']
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.urls import re_path
|
|||||||
|
|
||||||
from awx.api.views import ActivityStreamList, ActivityStreamDetail
|
from awx.api.views import ActivityStreamList, ActivityStreamDetail
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', ActivityStreamList.as_view(), name='activity_stream_list'),
|
re_path(r'^$', ActivityStreamList.as_view(), name='activity_stream_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', ActivityStreamDetail.as_view(), name='activity_stream_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', ActivityStreamDetail.as_view(), name='activity_stream_detail'),
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ from awx.api.views import (
|
|||||||
AdHocCommandStdout,
|
AdHocCommandStdout,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', AdHocCommandList.as_view(), name='ad_hoc_command_list'),
|
re_path(r'^$', AdHocCommandList.as_view(), name='ad_hoc_command_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', AdHocCommandDetail.as_view(), name='ad_hoc_command_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', AdHocCommandDetail.as_view(), name='ad_hoc_command_detail'),
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.urls import re_path
|
|||||||
|
|
||||||
from awx.api.views import AdHocCommandEventDetail
|
from awx.api.views import AdHocCommandEventDetail
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', AdHocCommandEventDetail.as_view(), name='ad_hoc_command_event_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', AdHocCommandEventDetail.as_view(), name='ad_hoc_command_event_detail'),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.urls import re_path
|
|||||||
|
|
||||||
import awx.api.views.analytics as analytics
|
import awx.api.views.analytics as analytics
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', analytics.AnalyticsRootView.as_view(), name='analytics_root_view'),
|
re_path(r'^$', analytics.AnalyticsRootView.as_view(), name='analytics_root_view'),
|
||||||
re_path(r'^authorized/$', analytics.AnalyticsAuthorizedView.as_view(), name='analytics_authorized'),
|
re_path(r'^authorized/$', analytics.AnalyticsAuthorizedView.as_view(), name='analytics_authorized'),
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ from awx.api.views import (
|
|||||||
CredentialExternalTest,
|
CredentialExternalTest,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', CredentialList.as_view(), name='credential_list'),
|
re_path(r'^$', CredentialList.as_view(), name='credential_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/activity_stream/$', CredentialActivityStreamList.as_view(), name='credential_activity_stream_list'),
|
re_path(r'^(?P<pk>[0-9]+)/activity_stream/$', CredentialActivityStreamList.as_view(), name='credential_activity_stream_list'),
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.urls import re_path
|
|||||||
|
|
||||||
from awx.api.views import CredentialInputSourceDetail, CredentialInputSourceList
|
from awx.api.views import CredentialInputSourceDetail, CredentialInputSourceList
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', CredentialInputSourceList.as_view(), name='credential_input_source_list'),
|
re_path(r'^$', CredentialInputSourceList.as_view(), name='credential_input_source_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', CredentialInputSourceDetail.as_view(), name='credential_input_source_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', CredentialInputSourceDetail.as_view(), name='credential_input_source_detail'),
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.urls import re_path
|
|||||||
|
|
||||||
from awx.api.views import CredentialTypeList, CredentialTypeDetail, CredentialTypeCredentialList, CredentialTypeActivityStreamList, CredentialTypeExternalTest
|
from awx.api.views import CredentialTypeList, CredentialTypeDetail, CredentialTypeCredentialList, CredentialTypeActivityStreamList, CredentialTypeExternalTest
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', CredentialTypeList.as_view(), name='credential_type_list'),
|
re_path(r'^$', CredentialTypeList.as_view(), name='credential_type_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', CredentialTypeDetail.as_view(), name='credential_type_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', CredentialTypeDetail.as_view(), name='credential_type_detail'),
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from awx.api.views import (
|
|||||||
ExecutionEnvironmentActivityStreamList,
|
ExecutionEnvironmentActivityStreamList,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', ExecutionEnvironmentList.as_view(), name='execution_environment_list'),
|
re_path(r'^$', ExecutionEnvironmentList.as_view(), name='execution_environment_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', ExecutionEnvironmentDetail.as_view(), name='execution_environment_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', ExecutionEnvironmentDetail.as_view(), name='execution_environment_detail'),
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ from awx.api.views import (
|
|||||||
GroupAdHocCommandsList,
|
GroupAdHocCommandsList,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', GroupList.as_view(), name='group_list'),
|
re_path(r'^$', GroupList.as_view(), name='group_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', GroupDetail.as_view(), name='group_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', GroupDetail.as_view(), name='group_detail'),
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ from awx.api.views import (
|
|||||||
HostAdHocCommandEventsList,
|
HostAdHocCommandEventsList,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', HostList.as_view(), name='host_list'),
|
re_path(r'^$', HostList.as_view(), name='host_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', HostDetail.as_view(), name='host_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', HostDetail.as_view(), name='host_detail'),
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ from awx.api.views import (
|
|||||||
)
|
)
|
||||||
from awx.api.views.instance_install_bundle import InstanceInstallBundle
|
from awx.api.views.instance_install_bundle import InstanceInstallBundle
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', InstanceList.as_view(), name='instance_list'),
|
re_path(r'^$', InstanceList.as_view(), name='instance_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', InstanceDetail.as_view(), name='instance_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', InstanceDetail.as_view(), name='instance_detail'),
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ from awx.api.views import (
|
|||||||
InstanceGroupObjectRolesList,
|
InstanceGroupObjectRolesList,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', InstanceGroupList.as_view(), name='instance_group_list'),
|
re_path(r'^$', InstanceGroupList.as_view(), name='instance_group_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', InstanceGroupDetail.as_view(), name='instance_group_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', InstanceGroupDetail.as_view(), name='instance_group_detail'),
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ from awx.api.views import (
|
|||||||
InventoryVariableData,
|
InventoryVariableData,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', InventoryList.as_view(), name='inventory_list'),
|
re_path(r'^$', InventoryList.as_view(), name='inventory_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', InventoryDetail.as_view(), name='inventory_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', InventoryDetail.as_view(), name='inventory_detail'),
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ from awx.api.views import (
|
|||||||
InventorySourceNotificationTemplatesSuccessList,
|
InventorySourceNotificationTemplatesSuccessList,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', InventorySourceList.as_view(), name='inventory_source_list'),
|
re_path(r'^$', InventorySourceList.as_view(), name='inventory_source_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', InventorySourceDetail.as_view(), name='inventory_source_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', InventorySourceDetail.as_view(), name='inventory_source_detail'),
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ from awx.api.views import (
|
|||||||
InventoryUpdateCredentialsList,
|
InventoryUpdateCredentialsList,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', InventoryUpdateList.as_view(), name='inventory_update_list'),
|
re_path(r'^$', InventoryUpdateList.as_view(), name='inventory_update_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', InventoryUpdateDetail.as_view(), name='inventory_update_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', InventoryUpdateDetail.as_view(), name='inventory_update_detail'),
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ from awx.api.views import (
|
|||||||
JobHostSummaryDetail,
|
JobHostSummaryDetail,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', JobList.as_view(), name='job_list'),
|
re_path(r'^$', JobList.as_view(), name='job_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', JobDetail.as_view(), name='job_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', JobDetail.as_view(), name='job_detail'),
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.urls import re_path
|
|||||||
|
|
||||||
from awx.api.views import JobHostSummaryDetail
|
from awx.api.views import JobHostSummaryDetail
|
||||||
|
|
||||||
|
|
||||||
urls = [re_path(r'^(?P<pk>[0-9]+)/$', JobHostSummaryDetail.as_view(), name='job_host_summary_detail')]
|
urls = [re_path(r'^(?P<pk>[0-9]+)/$', JobHostSummaryDetail.as_view(), name='job_host_summary_detail')]
|
||||||
|
|
||||||
__all__ = ['urls']
|
__all__ = ['urls']
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ from awx.api.views import (
|
|||||||
JobTemplateCopy,
|
JobTemplateCopy,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', JobTemplateList.as_view(), name='job_template_list'),
|
re_path(r'^$', JobTemplateList.as_view(), name='job_template_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', JobTemplateDetail.as_view(), name='job_template_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', JobTemplateDetail.as_view(), name='job_template_detail'),
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.urls import re_path
|
|||||||
|
|
||||||
from awx.api.views.labels import LabelList, LabelDetail
|
from awx.api.views.labels import LabelList, LabelDetail
|
||||||
|
|
||||||
|
|
||||||
urls = [re_path(r'^$', LabelList.as_view(), name='label_list'), re_path(r'^(?P<pk>[0-9]+)/$', LabelDetail.as_view(), name='label_detail')]
|
urls = [re_path(r'^$', LabelList.as_view(), name='label_list'), re_path(r'^(?P<pk>[0-9]+)/$', LabelDetail.as_view(), name='label_detail')]
|
||||||
|
|
||||||
__all__ = ['urls']
|
__all__ = ['urls']
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.urls import re_path
|
|||||||
|
|
||||||
from awx.api.views import NotificationList, NotificationDetail
|
from awx.api.views import NotificationList, NotificationDetail
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', NotificationList.as_view(), name='notification_list'),
|
re_path(r'^$', NotificationList.as_view(), name='notification_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', NotificationDetail.as_view(), name='notification_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', NotificationDetail.as_view(), name='notification_detail'),
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ from awx.api.views import (
|
|||||||
NotificationTemplateCopy,
|
NotificationTemplateCopy,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', NotificationTemplateList.as_view(), name='notification_template_list'),
|
re_path(r'^$', NotificationTemplateList.as_view(), name='notification_template_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', NotificationTemplateDetail.as_view(), name='notification_template_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', NotificationTemplateDetail.as_view(), name='notification_template_detail'),
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ from awx.api.views.organization import (
|
|||||||
)
|
)
|
||||||
from awx.api.views import OrganizationCredentialList
|
from awx.api.views import OrganizationCredentialList
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', OrganizationList.as_view(), name='organization_list'),
|
re_path(r'^$', OrganizationList.as_view(), name='organization_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', OrganizationDetail.as_view(), name='organization_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', OrganizationDetail.as_view(), name='organization_detail'),
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ from awx.api.views import (
|
|||||||
ProjectCopy,
|
ProjectCopy,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', ProjectList.as_view(), name='project_list'),
|
re_path(r'^$', ProjectList.as_view(), name='project_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', ProjectDetail.as_view(), name='project_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', ProjectDetail.as_view(), name='project_detail'),
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ from awx.api.views import (
|
|||||||
ProjectUpdateEventsList,
|
ProjectUpdateEventsList,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', ProjectUpdateList.as_view(), name='project_update_list'),
|
re_path(r'^$', ProjectUpdateList.as_view(), name='project_update_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', ProjectUpdateDetail.as_view(), name='project_update_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', ProjectUpdateDetail.as_view(), name='project_update_detail'),
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from awx.api.views import (
|
|||||||
ReceptorAddressDetail,
|
ReceptorAddressDetail,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', ReceptorAddressesList.as_view(), name='receptor_addresses_list'),
|
re_path(r'^$', ReceptorAddressesList.as_view(), name='receptor_addresses_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', ReceptorAddressDetail.as_view(), name='receptor_address_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', ReceptorAddressDetail.as_view(), name='receptor_address_detail'),
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.urls import re_path
|
|||||||
|
|
||||||
from awx.api.views import RoleList, RoleDetail, RoleUsersList, RoleTeamsList
|
from awx.api.views import RoleList, RoleDetail, RoleUsersList, RoleTeamsList
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', RoleList.as_view(), name='role_list'),
|
re_path(r'^$', RoleList.as_view(), name='role_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', RoleDetail.as_view(), name='role_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', RoleDetail.as_view(), name='role_detail'),
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.urls import re_path
|
|||||||
|
|
||||||
from awx.api.views import ScheduleList, ScheduleDetail, ScheduleUnifiedJobsList, ScheduleCredentialsList, ScheduleLabelsList, ScheduleInstanceGroupList
|
from awx.api.views import ScheduleList, ScheduleDetail, ScheduleUnifiedJobsList, ScheduleCredentialsList, ScheduleLabelsList, ScheduleInstanceGroupList
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', ScheduleList.as_view(), name='schedule_list'),
|
re_path(r'^$', ScheduleList.as_view(), name='schedule_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', ScheduleDetail.as_view(), name='schedule_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', ScheduleDetail.as_view(), name='schedule_detail'),
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.urls import re_path
|
|||||||
|
|
||||||
from awx.api.views import SystemJobList, SystemJobDetail, SystemJobCancel, SystemJobNotificationsList, SystemJobEventsList
|
from awx.api.views import SystemJobList, SystemJobDetail, SystemJobCancel, SystemJobNotificationsList, SystemJobEventsList
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', SystemJobList.as_view(), name='system_job_list'),
|
re_path(r'^$', SystemJobList.as_view(), name='system_job_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', SystemJobDetail.as_view(), name='system_job_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', SystemJobDetail.as_view(), name='system_job_detail'),
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ from awx.api.views import (
|
|||||||
SystemJobTemplateNotificationTemplatesSuccessList,
|
SystemJobTemplateNotificationTemplatesSuccessList,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', SystemJobTemplateList.as_view(), name='system_job_template_list'),
|
re_path(r'^$', SystemJobTemplateList.as_view(), name='system_job_template_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', SystemJobTemplateDetail.as_view(), name='system_job_template_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', SystemJobTemplateDetail.as_view(), name='system_job_template_detail'),
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ from awx.api.views import (
|
|||||||
TeamAccessList,
|
TeamAccessList,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', TeamList.as_view(), name='team_list'),
|
re_path(r'^$', TeamList.as_view(), name='team_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', TeamDetail.as_view(), name='team_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', TeamDetail.as_view(), name='team_detail'),
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ from django.urls import re_path
|
|||||||
|
|
||||||
from awx.api.views.webhooks import WebhookKeyView, GithubWebhookReceiver, GitlabWebhookReceiver, BitbucketDcWebhookReceiver
|
from awx.api.views.webhooks import WebhookKeyView, GithubWebhookReceiver, GitlabWebhookReceiver, BitbucketDcWebhookReceiver
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
re_path(r'^webhook_key/$', WebhookKeyView.as_view(), name='webhook_key'),
|
re_path(r'^webhook_key/$', WebhookKeyView.as_view(), name='webhook_key'),
|
||||||
re_path(r'^github/$', GithubWebhookReceiver.as_view(), name='webhook_receiver_github'),
|
re_path(r'^github/$', GithubWebhookReceiver.as_view(), name='webhook_receiver_github'),
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.urls import re_path
|
|||||||
|
|
||||||
from awx.api.views import WorkflowApprovalList, WorkflowApprovalDetail, WorkflowApprovalApprove, WorkflowApprovalDeny
|
from awx.api.views import WorkflowApprovalList, WorkflowApprovalDetail, WorkflowApprovalApprove, WorkflowApprovalDeny
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', WorkflowApprovalList.as_view(), name='workflow_approval_list'),
|
re_path(r'^$', WorkflowApprovalList.as_view(), name='workflow_approval_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowApprovalDetail.as_view(), name='workflow_approval_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowApprovalDetail.as_view(), name='workflow_approval_detail'),
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.urls import re_path
|
|||||||
|
|
||||||
from awx.api.views import WorkflowApprovalTemplateDetail, WorkflowApprovalTemplateJobsList
|
from awx.api.views import WorkflowApprovalTemplateDetail, WorkflowApprovalTemplateJobsList
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowApprovalTemplateDetail.as_view(), name='workflow_approval_template_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowApprovalTemplateDetail.as_view(), name='workflow_approval_template_detail'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/approvals/$', WorkflowApprovalTemplateJobsList.as_view(), name='workflow_approval_template_jobs_list'),
|
re_path(r'^(?P<pk>[0-9]+)/approvals/$', WorkflowApprovalTemplateJobsList.as_view(), name='workflow_approval_template_jobs_list'),
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ from awx.api.views import (
|
|||||||
WorkflowJobActivityStreamList,
|
WorkflowJobActivityStreamList,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', WorkflowJobList.as_view(), name='workflow_job_list'),
|
re_path(r'^$', WorkflowJobList.as_view(), name='workflow_job_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowJobDetail.as_view(), name='workflow_job_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowJobDetail.as_view(), name='workflow_job_detail'),
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ from awx.api.views import (
|
|||||||
WorkflowJobNodeInstanceGroupsList,
|
WorkflowJobNodeInstanceGroupsList,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', WorkflowJobNodeList.as_view(), name='workflow_job_node_list'),
|
re_path(r'^$', WorkflowJobNodeList.as_view(), name='workflow_job_node_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowJobNodeDetail.as_view(), name='workflow_job_node_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowJobNodeDetail.as_view(), name='workflow_job_node_detail'),
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ from awx.api.views import (
|
|||||||
WorkflowJobTemplateLabelList,
|
WorkflowJobTemplateLabelList,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', WorkflowJobTemplateList.as_view(), name='workflow_job_template_list'),
|
re_path(r'^$', WorkflowJobTemplateList.as_view(), name='workflow_job_template_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowJobTemplateDetail.as_view(), name='workflow_job_template_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowJobTemplateDetail.as_view(), name='workflow_job_template_detail'),
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ from awx.api.views import (
|
|||||||
WorkflowJobTemplateNodeInstanceGroupsList,
|
WorkflowJobTemplateNodeInstanceGroupsList,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
urls = [
|
urls = [
|
||||||
re_path(r'^$', WorkflowJobTemplateNodeList.as_view(), name='workflow_job_template_node_list'),
|
re_path(r'^$', WorkflowJobTemplateNodeList.as_view(), name='workflow_job_template_node_list'),
|
||||||
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowJobTemplateNodeDetail.as_view(), name='workflow_job_template_node_detail'),
|
re_path(r'^(?P<pk>[0-9]+)/$', WorkflowJobTemplateNodeDetail.as_view(), name='workflow_job_template_node_detail'),
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ from awx.api.views.mixin import RelatedJobsPreventDeleteMixin
|
|||||||
|
|
||||||
from awx.api.pagination import UnifiedJobEventPagination
|
from awx.api.pagination import UnifiedJobEventPagination
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.api.views.organization')
|
logger = logging.getLogger('awx.api.views.organization')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class LabelSubListCreateAttachDetachView(SubListCreateAttachDetachAPIView):
|
|||||||
resource_purpose = 'labels of a resource'
|
resource_purpose = 'labels of a resource'
|
||||||
|
|
||||||
def unattach(self, request, *args, **kwargs):
|
def unattach(self, request, *args, **kwargs):
|
||||||
(sub_id, res) = super().unattach_validate(request)
|
sub_id, res = super().unattach_validate(request)
|
||||||
if res:
|
if res:
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ from rest_framework.permissions import AllowAny
|
|||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.exceptions import PermissionDenied
|
from rest_framework.exceptions import PermissionDenied
|
||||||
|
|
||||||
|
|
||||||
# AWX
|
# AWX
|
||||||
# from awx.main.analytics import collectors
|
# from awx.main.analytics import collectors
|
||||||
import awx.main.analytics.subsystem_metrics as s_metrics
|
import awx.main.analytics.subsystem_metrics as s_metrics
|
||||||
@@ -23,7 +22,6 @@ from awx.api import renderers
|
|||||||
|
|
||||||
from awx.api.generics import APIView
|
from awx.api.generics import APIView
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.analytics')
|
logger = logging.getLogger('awx.analytics')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.urls import re_path
|
|||||||
|
|
||||||
from awx.conf.views import SettingCategoryList, SettingSingletonDetail, SettingLoggingTest
|
from awx.conf.views import SettingCategoryList, SettingSingletonDetail, SettingLoggingTest
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
re_path(r'^$', SettingCategoryList.as_view(), name='setting_category_list'),
|
re_path(r'^$', SettingCategoryList.as_view(), name='setting_category_list'),
|
||||||
re_path(r'^(?P<category_slug>[a-z0-9-]+)/$', SettingSingletonDetail.as_view(), name='setting_singleton_detail'),
|
re_path(r'^(?P<category_slug>[a-z0-9-]+)/$', SettingSingletonDetail.as_view(), name='setting_singleton_detail'),
|
||||||
|
|||||||
@@ -32,7 +32,6 @@ from awx.conf.serializers import SettingCategorySerializer, SettingSingletonSeri
|
|||||||
from awx.conf import settings_registry
|
from awx.conf import settings_registry
|
||||||
from awx.main.utils.external_logging import reconfigure_rsyslog
|
from awx.main.utils.external_logging import reconfigure_rsyslog
|
||||||
|
|
||||||
|
|
||||||
SettingCategory = collections.namedtuple('SettingCategory', ('url', 'slug', 'name'))
|
SettingCategory = collections.namedtuple('SettingCategory', ('url', 'slug', 'name'))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ from prometheus_client import (
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from awx.main.utils.redis import get_redis_client, get_redis_client_async
|
from awx.main.utils.redis import get_redis_client, get_redis_client_async
|
||||||
|
|
||||||
|
|
||||||
BROADCAST_WEBSOCKET_REDIS_KEY_NAME = 'broadcast_websocket_stats'
|
BROADCAST_WEBSOCKET_REDIS_KEY_NAME = 'broadcast_websocket_stats'
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -487,9 +487,7 @@ def unified_jobs_table(since, full_path, until, **kwargs):
|
|||||||
OR (main_unifiedjob.finished > '{0}' AND main_unifiedjob.finished <= '{1}'))
|
OR (main_unifiedjob.finished > '{0}' AND main_unifiedjob.finished <= '{1}'))
|
||||||
AND main_unifiedjob.launch_type != 'sync'
|
AND main_unifiedjob.launch_type != 'sync'
|
||||||
ORDER BY main_unifiedjob.id ASC) TO STDOUT WITH CSV HEADER
|
ORDER BY main_unifiedjob.id ASC) TO STDOUT WITH CSV HEADER
|
||||||
'''.format(
|
'''.format(since.isoformat(), until.isoformat())
|
||||||
since.isoformat(), until.isoformat()
|
|
||||||
)
|
|
||||||
return _copy_table(table='unified_jobs', query=unified_job_query, path=full_path)
|
return _copy_table(table='unified_jobs', query=unified_job_query, path=full_path)
|
||||||
|
|
||||||
|
|
||||||
@@ -550,9 +548,7 @@ def workflow_job_node_table(since, full_path, until, **kwargs):
|
|||||||
) always_nodes ON main_workflowjobnode.id = always_nodes.from_workflowjobnode_id
|
) always_nodes ON main_workflowjobnode.id = always_nodes.from_workflowjobnode_id
|
||||||
WHERE (main_workflowjobnode.modified > '{}' AND main_workflowjobnode.modified <= '{}')
|
WHERE (main_workflowjobnode.modified > '{}' AND main_workflowjobnode.modified <= '{}')
|
||||||
ORDER BY main_workflowjobnode.id ASC) TO STDOUT WITH CSV HEADER
|
ORDER BY main_workflowjobnode.id ASC) TO STDOUT WITH CSV HEADER
|
||||||
'''.format(
|
'''.format(since.isoformat(), until.isoformat())
|
||||||
since.isoformat(), until.isoformat()
|
|
||||||
)
|
|
||||||
return _copy_table(table='workflow_job_node', query=workflow_job_node_query, path=full_path)
|
return _copy_table(table='workflow_job_node', query=workflow_job_node_query, path=full_path)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -41,10 +41,10 @@ class WebsocketSecretAuthHelper:
|
|||||||
@classmethod
|
@classmethod
|
||||||
def verify_secret(cls, s, nonce_tolerance=300):
|
def verify_secret(cls, s, nonce_tolerance=300):
|
||||||
try:
|
try:
|
||||||
(prefix, payload) = s.split(' ')
|
prefix, payload = s.split(' ')
|
||||||
if prefix != 'HMAC-SHA256':
|
if prefix != 'HMAC-SHA256':
|
||||||
raise ValueError('Unsupported encryption algorithm')
|
raise ValueError('Unsupported encryption algorithm')
|
||||||
(nonce_parsed, secret_parsed) = payload.split(':')
|
nonce_parsed, secret_parsed = payload.split(':')
|
||||||
except Exception:
|
except Exception:
|
||||||
raise ValueError("Failed to parse secret")
|
raise ValueError("Failed to parse secret")
|
||||||
|
|
||||||
@@ -106,7 +106,7 @@ class RelayConsumer(AsyncJsonWebsocketConsumer):
|
|||||||
await self.send(event['text'])
|
await self.send(event['text'])
|
||||||
|
|
||||||
async def receive_json(self, data):
|
async def receive_json(self, data):
|
||||||
(group, message) = unwrap_broadcast_msg(data)
|
group, message = unwrap_broadcast_msg(data)
|
||||||
if group == "metrics":
|
if group == "metrics":
|
||||||
message = json.loads(message['text'])
|
message = json.loads(message['text'])
|
||||||
await self._redis_conn.set(
|
await self._redis_conn.set(
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ from awx import prepare_env
|
|||||||
|
|
||||||
from dispatcherd.utils import resolve_callable
|
from dispatcherd.utils import resolve_callable
|
||||||
|
|
||||||
|
|
||||||
prepare_env()
|
prepare_env()
|
||||||
|
|
||||||
django.setup() # noqa
|
django.setup() # noqa
|
||||||
@@ -18,7 +17,6 @@ django.setup() # noqa
|
|||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
|
|
||||||
# Preload all periodic tasks so their imports will be in shared memory
|
# Preload all periodic tasks so their imports will be in shared memory
|
||||||
for name, options in settings.CELERYBEAT_SCHEDULE.items():
|
for name, options in settings.CELERYBEAT_SCHEDULE.items():
|
||||||
resolve_callable(options['task'])
|
resolve_callable(options['task'])
|
||||||
@@ -31,6 +29,5 @@ from awx.main.scheduler.kubernetes import PodManager # noqa
|
|||||||
from django.core.cache import cache as django_cache
|
from django.core.cache import cache as django_cache
|
||||||
from django.db import connection
|
from django.db import connection
|
||||||
|
|
||||||
|
|
||||||
connection.close()
|
connection.close()
|
||||||
django_cache.close()
|
django_cache.close()
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import time
|
|||||||
import yaml
|
import yaml
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.dispatch.periodic')
|
logger = logging.getLogger('awx.main.dispatch.periodic')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ from awx.main.validators import validate_ssh_private_key
|
|||||||
from awx.main.constants import ENV_BLOCKLIST
|
from awx.main.constants import ENV_BLOCKLIST
|
||||||
from awx.main import utils
|
from awx.main import utils
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'JSONBlob',
|
'JSONBlob',
|
||||||
'AutoOneToOneField',
|
'AutoOneToOneField',
|
||||||
|
|||||||
@@ -23,8 +23,7 @@ class Command(BaseCommand):
|
|||||||
|
|
||||||
print('## ' + JobTemplate.objects.get(pk=jt).name + f' (last {history} runs)\n')
|
print('## ' + JobTemplate.objects.get(pk=jt).name + f' (last {history} runs)\n')
|
||||||
with connection.cursor() as cursor:
|
with connection.cursor() as cursor:
|
||||||
cursor.execute(
|
cursor.execute(f'''
|
||||||
f'''
|
|
||||||
SELECT
|
SELECT
|
||||||
b.id, b.job_id, b.host_name, b.created - a.created delta,
|
b.id, b.job_id, b.host_name, b.created - a.created delta,
|
||||||
b.task task,
|
b.task task,
|
||||||
@@ -44,8 +43,7 @@ class Command(BaseCommand):
|
|||||||
LIMIT {history}
|
LIMIT {history}
|
||||||
)
|
)
|
||||||
ORDER BY delta DESC;
|
ORDER BY delta DESC;
|
||||||
'''
|
''')
|
||||||
)
|
|
||||||
slowest_events = cursor.fetchall()
|
slowest_events = cursor.fetchall()
|
||||||
|
|
||||||
def format_td(x):
|
def format_td(x):
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
import datetime
|
import datetime
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
|
||||||
# Django
|
# Django
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import datetime
|
|||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
||||||
# Django
|
# Django
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.core.management.base import BaseCommand, CommandError
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ class Command(BaseCommand):
|
|||||||
|
|
||||||
from awx.main.management.commands.register_queue import RegisterQueue
|
from awx.main.management.commands.register_queue import RegisterQueue
|
||||||
|
|
||||||
(changed, instance) = Instance.objects.register(ip_address=os.environ.get('MY_POD_IP'), node_type='control', node_uuid=settings.SYSTEM_UUID)
|
changed, instance = Instance.objects.register(ip_address=os.environ.get('MY_POD_IP'), node_type='control', node_uuid=settings.SYSTEM_UUID)
|
||||||
RegisterQueue(settings.DEFAULT_CONTROL_PLANE_QUEUE_NAME, 100, 0, [], is_container_group=False).register()
|
RegisterQueue(settings.DEFAULT_CONTROL_PLANE_QUEUE_NAME, 100, 0, [], is_container_group=False).register()
|
||||||
RegisterQueue(
|
RegisterQueue(
|
||||||
settings.DEFAULT_EXECUTION_QUEUE_NAME,
|
settings.DEFAULT_EXECUTION_QUEUE_NAME,
|
||||||
@@ -48,7 +48,7 @@ class Command(BaseCommand):
|
|||||||
max_concurrent_jobs=settings.DEFAULT_EXECUTION_QUEUE_MAX_CONCURRENT_JOBS,
|
max_concurrent_jobs=settings.DEFAULT_EXECUTION_QUEUE_MAX_CONCURRENT_JOBS,
|
||||||
).register()
|
).register()
|
||||||
else:
|
else:
|
||||||
(changed, instance) = Instance.objects.register(hostname=hostname, node_type=node_type, node_uuid=uuid)
|
changed, instance = Instance.objects.register(hostname=hostname, node_type=node_type, node_uuid=uuid)
|
||||||
if changed:
|
if changed:
|
||||||
print("Successfully registered instance {}".format(hostname))
|
print("Successfully registered instance {}".format(hostname))
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class RegisterQueue:
|
|||||||
def get_create_update_instance_group(self):
|
def get_create_update_instance_group(self):
|
||||||
created = False
|
created = False
|
||||||
changed = False
|
changed = False
|
||||||
(ig, created) = InstanceGroup.objects.get_or_create(name=self.queuename)
|
ig, created = InstanceGroup.objects.get_or_create(name=self.queuename)
|
||||||
if ig.policy_instance_percentage != self.instance_percent:
|
if ig.policy_instance_percentage != self.instance_percent:
|
||||||
ig.policy_instance_percentage = self.instance_percent
|
ig.policy_instance_percentage = self.instance_percent
|
||||||
changed = True
|
changed = True
|
||||||
@@ -91,14 +91,14 @@ class RegisterQueue:
|
|||||||
with advisory_lock('cluster_policy_lock'):
|
with advisory_lock('cluster_policy_lock'):
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
changed2 = False
|
changed2 = False
|
||||||
(ig, created, changed1) = self.get_create_update_instance_group()
|
ig, created, changed1 = self.get_create_update_instance_group()
|
||||||
if created:
|
if created:
|
||||||
print("Creating instance group {}".format(ig.name))
|
print("Creating instance group {}".format(ig.name))
|
||||||
elif not created:
|
elif not created:
|
||||||
print("Instance Group already registered {}".format(ig.name))
|
print("Instance Group already registered {}".format(ig.name))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
(instances, changed2) = self.add_instances_to_group(ig)
|
instances, changed2 = self.add_instances_to_group(ig)
|
||||||
for i in instances:
|
for i in instances:
|
||||||
print("Added instance {} to {}".format(i.hostname, ig.name))
|
print("Added instance {} to {}".format(i.hostname, ig.name))
|
||||||
except InstanceNotFound as e:
|
except InstanceNotFound as e:
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ from awx.main.analytics.broadcast_websocket import (
|
|||||||
from awx.main.analytics.subsystem_metrics import WebsocketsMetricsServer
|
from awx.main.analytics.subsystem_metrics import WebsocketsMetricsServer
|
||||||
from awx.main.wsrelay import WebSocketRelayManager
|
from awx.main.wsrelay import WebSocketRelayManager
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.wsrelay')
|
logger = logging.getLogger('awx.main.wsrelay')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ from awx.main.utils.common import memoize
|
|||||||
from awx.urls import get_urlpatterns
|
from awx.urls import get_urlpatterns
|
||||||
from awx.main.utils.named_url_graph import reset_counters
|
from awx.main.utils.named_url_graph import reset_counters
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.middleware')
|
logger = logging.getLogger('awx.main.middleware')
|
||||||
perf_logger = logging.getLogger('awx.analytics.performance')
|
perf_logger = logging.getLogger('awx.analytics.performance')
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from django.db import migrations
|
|||||||
|
|
||||||
from awx.main.migrations._inventory_source import set_new_instance_id, back_out_new_instance_id
|
from awx.main.migrations._inventory_source import set_new_instance_id, back_out_new_instance_id
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.migrations')
|
logger = logging.getLogger('awx.main.migrations')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ from django.db import migrations, models
|
|||||||
import uuid
|
import uuid
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.migrations')
|
logger = logging.getLogger('awx.main.migrations')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ from awx.main.models.base import VarsDictProperty
|
|||||||
|
|
||||||
from ._inventory_source_vars import FrozenInjectors
|
from ._inventory_source_vars import FrozenInjectors
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.migrations')
|
logger = logging.getLogger('awx.main.migrations')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ from django.db import migrations, models
|
|||||||
|
|
||||||
from awx.main.models.credential import ManagedCredentialType, CredentialType as ModernCredentialType
|
from awx.main.models.credential import ManagedCredentialType, CredentialType as ModernCredentialType
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ from django.db import migrations, models
|
|||||||
|
|
||||||
from awx.main.migrations._db_constraints import _rename_duplicates
|
from awx.main.migrations._db_constraints import _rename_duplicates
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.migrations')
|
logger = logging.getLogger('awx.main.migrations')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ from awx.main.constants import role_name_to_perm_mapping
|
|||||||
|
|
||||||
from ansible_base.rbac.permission_registry import permission_registry
|
from ansible_base.rbac.permission_registry import permission_registry
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.migrations._dab_rbac')
|
logger = logging.getLogger('awx.main.migrations._dab_rbac')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import logging
|
|||||||
|
|
||||||
from django.db.models import Count
|
from django.db.models import Count
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import logging
|
|||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
from django.utils.encoding import iri_to_uri
|
from django.utils.encoding import iri_to_uri
|
||||||
|
|
||||||
|
|
||||||
FrozenInjectors = dict()
|
FrozenInjectors = dict()
|
||||||
logger = logging.getLogger('awx.main.migrations')
|
logger = logging.getLogger('awx.main.migrations')
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.migrations')
|
logger = logging.getLogger('awx.main.migrations')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.migrations')
|
logger = logging.getLogger('awx.main.migrations')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -95,12 +95,10 @@ from awx.main.models.workflow import ( # noqa
|
|||||||
WorkflowApprovalTemplate,
|
WorkflowApprovalTemplate,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# Add custom methods to User model for permissions checks.
|
# Add custom methods to User model for permissions checks.
|
||||||
from django.contrib.auth.models import User # noqa
|
from django.contrib.auth.models import User # noqa
|
||||||
from awx.main.access import get_user_queryset, check_user_access, check_user_access_with_errors # noqa
|
from awx.main.access import get_user_queryset, check_user_access, check_user_access_with_errors # noqa
|
||||||
|
|
||||||
|
|
||||||
User.add_to_class('get_queryset', get_user_queryset)
|
User.add_to_class('get_queryset', get_user_queryset)
|
||||||
User.add_to_class('can_access', check_user_access)
|
User.add_to_class('can_access', check_user_access)
|
||||||
User.add_to_class('can_access_with_errors', check_user_access_with_errors)
|
User.add_to_class('can_access_with_errors', check_user_access_with_errors)
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ from importlib.metadata import entry_points
|
|||||||
import re
|
import re
|
||||||
from types import SimpleNamespace
|
from types import SimpleNamespace
|
||||||
|
|
||||||
|
|
||||||
# Django
|
# Django
|
||||||
from django.apps.config import AppConfig
|
from django.apps.config import AppConfig
|
||||||
from django.apps.registry import Apps
|
from django.apps.registry import Apps
|
||||||
@@ -22,7 +21,6 @@ from django.utils.functional import cached_property
|
|||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
|
|
||||||
# DRF
|
# DRF
|
||||||
from rest_framework.serializers import ValidationError as DRFValidationError
|
from rest_framework.serializers import ValidationError as DRFValidationError
|
||||||
|
|
||||||
@@ -50,12 +48,10 @@ from awx.main.models import Team, Organization
|
|||||||
from awx.main.utils import encrypt_field
|
from awx.main.utils import encrypt_field
|
||||||
from awx_plugins.interfaces._temporary_private_licensing_api import detect_server_product_name
|
from awx_plugins.interfaces._temporary_private_licensing_api import detect_server_product_name
|
||||||
|
|
||||||
|
|
||||||
# DAB
|
# DAB
|
||||||
from ansible_base.resource_registry.tasks.sync import get_resource_server_client
|
from ansible_base.resource_registry.tasks.sync import get_resource_server_client
|
||||||
from ansible_base.resource_registry.utils.settings import resource_server_defined
|
from ansible_base.resource_registry.utils.settings import resource_server_defined
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['Credential', 'CredentialType', 'CredentialInputSource', 'build_safe_env']
|
__all__ = ['Credential', 'CredentialType', 'CredentialInputSource', 'build_safe_env']
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.models.credential')
|
logger = logging.getLogger('awx.main.models.credential')
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ from awx.api.versioning import reverse
|
|||||||
from awx.main.models.base import CommonModel
|
from awx.main.models.base import CommonModel
|
||||||
from awx.main.validators import validate_container_image_name
|
from awx.main.validators import validate_container_image_name
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['ExecutionEnvironment']
|
__all__ = ['ExecutionEnvironment']
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,6 @@ from awx.main.utils import _inventory_updates
|
|||||||
from awx.main.utils.safe_yaml import sanitize_jinja
|
from awx.main.utils.safe_yaml import sanitize_jinja
|
||||||
from awx.main.utils.execution_environments import get_control_plane_execution_environment
|
from awx.main.utils.execution_environments import get_control_plane_execution_environment
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['Inventory', 'Host', 'Group', 'InventorySource', 'InventoryUpdate', 'SmartInventoryMembership', 'HostMetric', 'HostMetricSummaryMonthly']
|
__all__ = ['Inventory', 'Host', 'Group', 'InventorySource', 'InventoryUpdate', 'SmartInventoryMembership', 'HostMetric', 'HostMetricSummaryMonthly']
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.models.inventory')
|
logger = logging.getLogger('awx.main.models.inventory')
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import logging
|
|||||||
import time
|
import time
|
||||||
from urllib.parse import urljoin
|
from urllib.parse import urljoin
|
||||||
|
|
||||||
|
|
||||||
# Django
|
# Django
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
@@ -55,7 +54,6 @@ from awx.main.models.mixins import (
|
|||||||
)
|
)
|
||||||
from awx.main.constants import JOB_VARIABLE_PREFIXES
|
from awx.main.constants import JOB_VARIABLE_PREFIXES
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.models.jobs')
|
logger = logging.getLogger('awx.main.models.jobs')
|
||||||
|
|
||||||
__all__ = ['JobTemplate', 'JobLaunchConfig', 'Job', 'JobHostSummary', 'SystemJobTemplate', 'SystemJob']
|
__all__ = ['JobTemplate', 'JobLaunchConfig', 'Job', 'JobHostSummary', 'SystemJobTemplate', 'SystemJob']
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ from awx.main.utils.polymorphic import build_polymorphic_ctypes_map
|
|||||||
from awx.main.fields import AskForField
|
from awx.main.fields import AskForField
|
||||||
from awx.main.constants import ACTIVE_STATES, org_role_to_permission
|
from awx.main.constants import ACTIVE_STATES, org_role_to_permission
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.models.mixins')
|
logger = logging.getLogger('awx.main.models.mixins')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ from awx.main.notifications.rocketchat_backend import RocketChatBackend
|
|||||||
from awx.main.notifications.irc_backend import IrcBackend
|
from awx.main.notifications.irc_backend import IrcBackend
|
||||||
from awx.main.notifications.awssns_backend import AWSSNSBackend
|
from awx.main.notifications.awssns_backend import AWSSNSBackend
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.models.notifications')
|
logger = logging.getLogger('awx.main.models.notifications')
|
||||||
|
|
||||||
__all__ = ['NotificationTemplate', 'Notification']
|
__all__ = ['NotificationTemplate', 'Notification']
|
||||||
@@ -528,7 +527,7 @@ class JobNotificationMixin(object):
|
|||||||
return
|
return
|
||||||
|
|
||||||
for nt in set(notification_templates.get(self.STATUS_TO_TEMPLATE_TYPE[status], [])):
|
for nt in set(notification_templates.get(self.STATUS_TO_TEMPLATE_TYPE[status], [])):
|
||||||
(msg, body) = self.build_notification_message(nt, status)
|
msg, body = self.build_notification_message(nt, status)
|
||||||
|
|
||||||
# Use kwargs to force late-binding
|
# Use kwargs to force late-binding
|
||||||
# https://stackoverflow.com/a/3431699/10669572
|
# https://stackoverflow.com/a/3431699/10669572
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ from django.utils.text import slugify
|
|||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.utils.timezone import now, make_aware, get_default_timezone
|
from django.utils.timezone import now, make_aware, get_default_timezone
|
||||||
|
|
||||||
|
|
||||||
# AWX
|
# AWX
|
||||||
from awx.api.versioning import reverse
|
from awx.api.versioning import reverse
|
||||||
from awx.main.models.base import PROJECT_UPDATE_JOB_TYPE_CHOICES, PERM_INVENTORY_DEPLOY
|
from awx.main.models.base import PROJECT_UPDATE_JOB_TYPE_CHOICES, PERM_INVENTORY_DEPLOY
|
||||||
|
|||||||
@@ -365,8 +365,7 @@ class Role(models.Model):
|
|||||||
if len(removals) > 0:
|
if len(removals) > 0:
|
||||||
for ids in split_ids_for_sqlite(removals):
|
for ids in split_ids_for_sqlite(removals):
|
||||||
sql_params['ids'] = ','.join(str(x) for x in ids)
|
sql_params['ids'] = ','.join(str(x) for x in ids)
|
||||||
cursor.execute(
|
cursor.execute('''
|
||||||
'''
|
|
||||||
DELETE FROM %(ancestors_table)s
|
DELETE FROM %(ancestors_table)s
|
||||||
WHERE descendent_id IN (%(ids)s)
|
WHERE descendent_id IN (%(ids)s)
|
||||||
AND descendent_id != ancestor_id
|
AND descendent_id != ancestor_id
|
||||||
@@ -378,9 +377,7 @@ class Role(models.Model):
|
|||||||
WHERE parents.from_role_id = %(ancestors_table)s.descendent_id
|
WHERE parents.from_role_id = %(ancestors_table)s.descendent_id
|
||||||
AND %(ancestors_table)s.ancestor_id = inner_ancestors.ancestor_id
|
AND %(ancestors_table)s.ancestor_id = inner_ancestors.ancestor_id
|
||||||
)
|
)
|
||||||
'''
|
''' % sql_params)
|
||||||
% sql_params
|
|
||||||
)
|
|
||||||
|
|
||||||
delete_ct += cursor.rowcount
|
delete_ct += cursor.rowcount
|
||||||
|
|
||||||
@@ -388,8 +385,7 @@ class Role(models.Model):
|
|||||||
if len(additions) > 0:
|
if len(additions) > 0:
|
||||||
for ids in split_ids_for_sqlite(additions):
|
for ids in split_ids_for_sqlite(additions):
|
||||||
sql_params['ids'] = ','.join(str(x) for x in ids)
|
sql_params['ids'] = ','.join(str(x) for x in ids)
|
||||||
cursor.execute(
|
cursor.execute('''
|
||||||
'''
|
|
||||||
INSERT INTO %(ancestors_table)s (descendent_id, ancestor_id, role_field, content_type_id, object_id)
|
INSERT INTO %(ancestors_table)s (descendent_id, ancestor_id, role_field, content_type_id, object_id)
|
||||||
SELECT from_id, to_id, new_ancestry_list.role_field, new_ancestry_list.content_type_id, new_ancestry_list.object_id FROM (
|
SELECT from_id, to_id, new_ancestry_list.role_field, new_ancestry_list.content_type_id, new_ancestry_list.object_id FROM (
|
||||||
SELECT roles.id from_id,
|
SELECT roles.id from_id,
|
||||||
@@ -419,9 +415,7 @@ class Role(models.Model):
|
|||||||
AND %(ancestors_table)s.ancestor_id = new_ancestry_list.to_id
|
AND %(ancestors_table)s.ancestor_id = new_ancestry_list.to_id
|
||||||
)
|
)
|
||||||
|
|
||||||
'''
|
''' % sql_params)
|
||||||
% sql_params
|
|
||||||
)
|
|
||||||
insert_ct += cursor.rowcount
|
insert_ct += cursor.rowcount
|
||||||
|
|
||||||
if insert_ct == 0 and delete_ct == 0:
|
if insert_ct == 0 and delete_ct == 0:
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ from awx.main.models.jobs import LaunchTimeConfig
|
|||||||
from awx.main.utils import ignore_inventory_computed_fields
|
from awx.main.utils import ignore_inventory_computed_fields
|
||||||
from awx.main.consumers import emit_channel_notification
|
from awx.main.consumers import emit_channel_notification
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.models.schedule')
|
logger = logging.getLogger('awx.main.models.schedule')
|
||||||
|
|
||||||
__all__ = ['Schedule']
|
__all__ = ['Schedule']
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ from awx.main.models.credential import Credential
|
|||||||
from awx.main.redact import REPLACE_STR
|
from awx.main.redact import REPLACE_STR
|
||||||
from awx.main.utils import ScheduleWorkflowManager
|
from awx.main.utils import ScheduleWorkflowManager
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'WorkflowJobTemplate',
|
'WorkflowJobTemplate',
|
||||||
'WorkflowJob',
|
'WorkflowJob',
|
||||||
@@ -939,7 +938,7 @@ class WorkflowApproval(UnifiedJob, JobNotificationMixin):
|
|||||||
return
|
return
|
||||||
for nt in self.workflow_job_template.notification_templates["approvals"]:
|
for nt in self.workflow_job_template.notification_templates["approvals"]:
|
||||||
try:
|
try:
|
||||||
(notification_subject, notification_body) = self.build_approval_notification_message(nt, approval_status)
|
notification_subject, notification_body = self.build_approval_notification_message(nt, approval_status)
|
||||||
except Exception:
|
except Exception:
|
||||||
raise NotImplementedError("build_approval_notification_message() does not exist")
|
raise NotImplementedError("build_approval_notification_message() does not exist")
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class UriCleaner(object):
|
|||||||
if o.netloc and ":" in o.netloc:
|
if o.netloc and ":" in o.netloc:
|
||||||
# Handle the special case url http://username:password that can appear in SCM url
|
# Handle the special case url http://username:password that can appear in SCM url
|
||||||
# on account of a bug? in ansible redaction
|
# on account of a bug? in ansible redaction
|
||||||
(username, password) = o.netloc.split(':')
|
username, password = o.netloc.split(':')
|
||||||
else:
|
else:
|
||||||
text_index += len(match.group(1))
|
text_index += len(match.group(1))
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ from ansible_base.lib.channels.middleware import DrfAuthMiddlewareStack
|
|||||||
from awx.main.utils.redis import get_redis_client
|
from awx.main.utils.redis import get_redis_client
|
||||||
from . import consumers
|
from . import consumers
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.routing')
|
logger = logging.getLogger('awx.main.routing')
|
||||||
_application = None
|
_application = None
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ from awx.main.models import (
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.scheduler.dependency_graph')
|
logger = logging.getLogger('awx.main.scheduler.dependency_graph')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,6 @@ from awx.main.tasks.jobs import dispatch_waiting_jobs
|
|||||||
import awx.main.analytics.subsystem_metrics as s_metrics
|
import awx.main.analytics.subsystem_metrics as s_metrics
|
||||||
from awx.main.utils import decrypt_field
|
from awx.main.utils import decrypt_field
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.scheduler')
|
logger = logging.getLogger('awx.main.scheduler')
|
||||||
|
|
||||||
|
|
||||||
@@ -498,7 +497,7 @@ class TaskManager(TaskBase):
|
|||||||
|
|
||||||
task.status = 'waiting'
|
task.status = 'waiting'
|
||||||
|
|
||||||
(start_status, opts) = task.pre_start()
|
start_status, opts = task.pre_start()
|
||||||
if not start_status:
|
if not start_status:
|
||||||
task.status = 'failed'
|
task.status = 'failed'
|
||||||
if task.job_explanation:
|
if task.job_explanation:
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ from django.utils import timezone
|
|||||||
from crum import get_current_request, get_current_user
|
from crum import get_current_request, get_current_user
|
||||||
from crum.signals import current_user_getter
|
from crum.signals import current_user_getter
|
||||||
|
|
||||||
|
|
||||||
# AWX
|
# AWX
|
||||||
from awx.main.models import (
|
from awx.main.models import (
|
||||||
ActivityStream,
|
ActivityStream,
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ from ansible_base.lib.logging.runtime import log_excess_runtime
|
|||||||
from awx.main.utils.db import bulk_update_sorted_by_id
|
from awx.main.utils.db import bulk_update_sorted_by_id
|
||||||
from awx.main.models import Host
|
from awx.main.models import Host
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.tasks.facts')
|
logger = logging.getLogger('awx.main.tasks.facts')
|
||||||
system_tracking_logger = logging.getLogger('awx.analytics.system_tracking')
|
system_tracking_logger = logging.getLogger('awx.analytics.system_tracking')
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ from awx.conf.license import get_license
|
|||||||
from ansible_base.lib.utils.db import advisory_lock
|
from ansible_base.lib.utils.db import advisory_lock
|
||||||
from awx.main.utils.db import bulk_update_sorted_by_id
|
from awx.main.utils.db import bulk_update_sorted_by_id
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.tasks.host_metrics')
|
logger = logging.getLogger('awx.main.tasks.host_metrics')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ from rest_framework import fields
|
|||||||
from awx.main import models
|
from awx.main import models
|
||||||
from awx.main.exceptions import PolicyEvaluationError
|
from awx.main.exceptions import PolicyEvaluationError
|
||||||
|
|
||||||
|
|
||||||
# Monkey patching opa_client.base.BaseClient to fix retries and timeout settings
|
# Monkey patching opa_client.base.BaseClient to fix retries and timeout settings
|
||||||
_original_opa_base_client_init = BaseClient.__init__
|
_original_opa_base_client_init = BaseClient.__init__
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import signal
|
|||||||
import functools
|
import functools
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger('awx.main.tasks.signals')
|
logger = logging.getLogger('awx.main.tasks.signals')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -776,7 +776,7 @@ def _heartbeat_instance_management():
|
|||||||
logger.warning(f'Heartbeat skew - interval={(nowtime - last_last_seen).total_seconds():.4f}, expected={settings.CLUSTER_NODE_HEARTBEAT_PERIOD}')
|
logger.warning(f'Heartbeat skew - interval={(nowtime - last_last_seen).total_seconds():.4f}, expected={settings.CLUSTER_NODE_HEARTBEAT_PERIOD}')
|
||||||
else:
|
else:
|
||||||
if settings.AWX_AUTO_DEPROVISION_INSTANCES:
|
if settings.AWX_AUTO_DEPROVISION_INSTANCES:
|
||||||
(changed, this_inst) = Instance.objects.register(ip_address=os.environ.get('MY_POD_IP'), node_type='control', node_uuid=settings.SYSTEM_UUID)
|
changed, this_inst = Instance.objects.register(ip_address=os.environ.get('MY_POD_IP'), node_type='control', node_uuid=settings.SYSTEM_UUID)
|
||||||
if changed:
|
if changed:
|
||||||
logger.warning(f'Recreated instance record {this_inst.hostname} after unexpected removal')
|
logger.warning(f'Recreated instance record {this_inst.hostname} after unexpected removal')
|
||||||
this_inst.local_health_check()
|
this_inst.local_health_check()
|
||||||
@@ -958,10 +958,8 @@ def awx_periodic_scheduler():
|
|||||||
continue
|
continue
|
||||||
if not can_start:
|
if not can_start:
|
||||||
new_unified_job.status = 'failed'
|
new_unified_job.status = 'failed'
|
||||||
new_unified_job.job_explanation = gettext_noop(
|
new_unified_job.job_explanation = gettext_noop("Scheduled job could not start because it \
|
||||||
"Scheduled job could not start because it \
|
was not in the right state or required manual credentials")
|
||||||
was not in the right state or required manual credentials"
|
|
||||||
)
|
|
||||||
new_unified_job.save(update_fields=['status', 'job_explanation'])
|
new_unified_job.save(update_fields=['status', 'job_explanation'])
|
||||||
new_unified_job.websocket_emit_status("failed")
|
new_unified_job.websocket_emit_status("failed")
|
||||||
emit_channel_notification('schedules-changed', dict(id=schedule.id, group_name="schedules"))
|
emit_channel_notification('schedules-changed', dict(id=schedule.id, group_name="schedules"))
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ from awx.main.dispatch.publish import task as old_task
|
|||||||
|
|
||||||
from ansible_base.lib.utils.db import advisory_lock
|
from ansible_base.lib.utils.db import advisory_lock
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -59,8 +59,7 @@ def app_post_migration(sender, app_config, **kwargs):
|
|||||||
elif tblname == 'main_systemjobevent':
|
elif tblname == 'main_systemjobevent':
|
||||||
unique_columns = "system_job_id integer NOT NULL"
|
unique_columns = "system_job_id integer NOT NULL"
|
||||||
|
|
||||||
cur.execute(
|
cur.execute(f"""CREATE TABLE _unpartitioned_{tblname} (
|
||||||
f"""CREATE TABLE _unpartitioned_{tblname} (
|
|
||||||
id bigint NOT NULL,
|
id bigint NOT NULL,
|
||||||
created timestamp with time zone NOT NULL,
|
created timestamp with time zone NOT NULL,
|
||||||
modified timestamp with time zone NOT NULL,
|
modified timestamp with time zone NOT NULL,
|
||||||
@@ -72,8 +71,7 @@ def app_post_migration(sender, app_config, **kwargs):
|
|||||||
uuid character varying(1024) NOT NULL,
|
uuid character varying(1024) NOT NULL,
|
||||||
verbosity integer NOT NULL,
|
verbosity integer NOT NULL,
|
||||||
{unique_columns});
|
{unique_columns});
|
||||||
"""
|
""")
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if settings.DATABASES['default']['ENGINE'] == 'django.db.backends.sqlite3':
|
if settings.DATABASES['default']['ENGINE'] == 'django.db.backends.sqlite3':
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ def test_database_counts(organization_factory, job_template_factory, workflow_jo
|
|||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_inventory_counts(organization_factory, inventory_factory):
|
def test_inventory_counts(organization_factory, inventory_factory):
|
||||||
(inv1, inv2, inv3) = [inventory_factory(f"inv-{i}") for i in range(3)]
|
inv1, inv2, inv3 = [inventory_factory(f"inv-{i}") for i in range(3)]
|
||||||
|
|
||||||
s1 = inv1.inventory_sources.create(name="src1", source="ec2")
|
s1 = inv1.inventory_sources.create(name="src1", source="ec2")
|
||||||
s2 = inv1.inventory_sources.create(name="src2", source="file")
|
s2 = inv1.inventory_sources.create(name="src2", source="file")
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import pytest
|
|||||||
|
|
||||||
from awx.api.versioning import reverse
|
from awx.api.versioning import reverse
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
def run_test_ad_hoc_command(self, **kwargs):
|
def run_test_ad_hoc_command(self, **kwargs):
|
||||||
# Post to list to start a new ad hoc command.
|
# Post to list to start a new ad hoc command.
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ from django.http import HttpResponse
|
|||||||
|
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
|
|
||||||
|
|
||||||
INSTANCE_KWARGS = dict(hostname='example-host', cpu=6, node_type='execution', memory=36000000000, cpu_capacity=6, mem_capacity=42)
|
INSTANCE_KWARGS = dict(hostname='example-host', cpu=6, node_type='execution', memory=36000000000, cpu_capacity=6, mem_capacity=42)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from awx.api.versioning import reverse
|
|||||||
from awx.main.models import JobTemplate, Schedule
|
from awx.main.models import JobTemplate, Schedule
|
||||||
from awx.main.utils.encryption import decrypt_value, get_encryption_key
|
from awx.main.utils.encryption import decrypt_value, get_encryption_key
|
||||||
|
|
||||||
|
|
||||||
RRULE_EXAMPLE = 'DTSTART:20151117T050000Z RRULE:FREQ=DAILY;INTERVAL=1;COUNT=1'
|
RRULE_EXAMPLE = 'DTSTART:20151117T050000Z RRULE:FREQ=DAILY;INTERVAL=1;COUNT=1'
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ from awx.main.models import UnifiedJob, ProjectUpdate, InventoryUpdate
|
|||||||
from awx.main.tests.URI import URI
|
from awx.main.tests.URI import URI
|
||||||
from awx.main.constants import ACTIVE_STATES
|
from awx.main.constants import ACTIVE_STATES
|
||||||
|
|
||||||
|
|
||||||
TEST_STATES = list(ACTIVE_STATES)
|
TEST_STATES = list(ACTIVE_STATES)
|
||||||
TEST_STATES.remove('new')
|
TEST_STATES.remove('new')
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ from django.test.utils import override_settings
|
|||||||
from awx.main.models import User
|
from awx.main.models import User
|
||||||
from awx.api.versioning import reverse
|
from awx.api.versioning import reverse
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# user creation
|
# user creation
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ from awx.main.management.commands import inventory_import
|
|||||||
from awx.main.models import Inventory, Host, Group, InventorySource
|
from awx.main.models import Inventory, Host, Group, InventorySource
|
||||||
from awx.main.utils.mem_inventory import MemGroup
|
from awx.main.utils.mem_inventory import MemGroup
|
||||||
|
|
||||||
|
|
||||||
TEST_INVENTORY_CONTENT = {
|
TEST_INVENTORY_CONTENT = {
|
||||||
"_meta": {"hostvars": {}},
|
"_meta": {"hostvars": {}},
|
||||||
"all": {"children": ["others", "servers", "ungrouped"], "vars": {"vara": "A"}},
|
"all": {"children": ["others", "servers", "ungrouped"], "vars": {"vara": "A"}},
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user