diff --git a/awx/api/serializers.py b/awx/api/serializers.py index f36688ce46..106e4b0198 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -89,8 +89,8 @@ SUMMARIZABLE_FK_FIELDS = { 'project': DEFAULT_SUMMARY_FIELDS + ('status', 'scm_type'), 'source_project': DEFAULT_SUMMARY_FIELDS + ('status', 'scm_type'), 'project_update': DEFAULT_SUMMARY_FIELDS + ('status', 'failed',), - 'credential': DEFAULT_SUMMARY_FIELDS + ('kind', 'cloud'), - 'vault_credential': DEFAULT_SUMMARY_FIELDS + ('kind', 'cloud'), + 'credential': DEFAULT_SUMMARY_FIELDS + ('kind', 'cloud', 'credential_type_id'), + 'vault_credential': DEFAULT_SUMMARY_FIELDS + ('kind', 'cloud', 'credential_type_id'), 'job': DEFAULT_SUMMARY_FIELDS + ('status', 'failed', 'elapsed'), 'job_template': DEFAULT_SUMMARY_FIELDS, 'workflow_job_template': DEFAULT_SUMMARY_FIELDS, @@ -779,10 +779,10 @@ class UserSerializer(BaseSerializer): 'username', 'first_name', 'last_name', 'email', 'is_superuser', 'is_system_auditor', 'password', 'ldap_dn', 'external_account') - def to_representation(self, obj): + def to_representation(self, obj): # TODO: Remove in 3.3 ret = super(UserSerializer, self).to_representation(obj) ret.pop('password', None) - if obj: + if obj and type(self) is UserSerializer or self.version == 1: ret['auth'] = obj.social_auth.values('provider', 'uid') return ret @@ -1171,24 +1171,41 @@ class InventorySerializer(BaseSerializerWithVariables): ret['organization'] = None return ret + def validate_host_filter(self, host_filter): + if host_filter: + try: + SmartFilter().query_from_string(host_filter) + except RuntimeError, e: + raise models.base.ValidationError(e) + return host_filter + def validate(self, attrs): - kind = attrs.get('kind', 'standard') - if kind == 'smart': - host_filter = attrs.get('host_filter') - if host_filter is not None: - try: - SmartFilter().query_from_string(host_filter) - except RuntimeError, e: - raise models.base.ValidationError(e) + kind = None + if 'kind' in attrs: + kind = attrs['kind'] + elif self.instance: + kind = self.instance.kind + + host_filter = None + if 'host_filter' in attrs: + host_filter = attrs['host_filter'] + elif self.instance: + host_filter = self.instance.host_filter + + if kind == 'smart' and not host_filter: + raise serializers.ValidationError({'host_filter': _( + 'Smart inventories must specify host_filter')}) return super(InventorySerializer, self).validate(attrs) +# TODO: Remove entire serializer in 3.3, replace with normal serializer class InventoryDetailSerializer(InventorySerializer): - class Meta: - fields = ('*', 'can_run_ad_hoc_commands') - - can_run_ad_hoc_commands = serializers.SerializerMethodField() + def get_fields(self): + fields = super(InventoryDetailSerializer, self).get_fields() + if self.version == 1: + fields['can_run_ad_hoc_commands'] = serializers.SerializerMethodField() + return fields def get_can_run_ad_hoc_commands(self, obj): view = self.context.get('view', None) @@ -1551,11 +1568,11 @@ class InventorySourceOptionsSerializer(BaseSerializer): errors['inventory'] = _("Must provide an inventory.") else: dest_inventory = self.instance.inventory - if source_script.organization != dest_inventory.organization: + if dest_inventory and source_script.organization != dest_inventory.organization: errors['source_script'] = _("The 'source_script' does not belong to the same organization as the inventory.") - except Exception as exc: + except Exception: errors['source_script'] = _("'source_script' doesn't exist.") - logger.error(str(exc)) + logger.exception('Problem processing source_script validation.') if errors: raise serializers.ValidationError(errors) @@ -1670,7 +1687,7 @@ class InventorySourceSerializer(UnifiedJobTemplateSerializer, InventorySourceOpt return value def validate_inventory(self, value): - if value.kind == 'smart': + if value and value.kind == 'smart': raise serializers.ValidationError({"detail": _("Cannot create Inventory Source for Smart Inventory")}) return value @@ -2141,6 +2158,14 @@ class CredentialSerializer(BaseSerializer): return value return super(CredentialSerializer, self).to_internal_value(data) + def validate_credential_type(self, credential_type): + if self.instance and credential_type.pk != self.instance.credential_type.pk: + raise ValidationError( + _('You cannot change the credential type of the credential, as it may break the functionality' + ' of the resources using it.'), + ) + return credential_type + class CredentialSerializerCreate(CredentialSerializer): @@ -2490,6 +2515,22 @@ class JobTemplateSerializer(JobTemplateMixin, UnifiedJobTemplateSerializer, JobO def validate_extra_vars(self, value): return vars_validate_or_raise(value) + def get_summary_fields(self, obj): + summary_fields = super(JobTemplateSerializer, self).get_summary_fields(obj) + if 'pk' in self.context['view'].kwargs and self.version > 1: # TODO: remove version check in 3.3 + extra_creds = [] + for cred in obj.extra_credentials.all(): + extra_creds.append({ + 'id': cred.pk, + 'name': cred.name, + 'description': cred.description, + 'kind': cred.kind, + 'credential_type_id': cred.credential_type_id + }) + summary_fields['extra_credentials'] = extra_creds + return summary_fields + + class JobSerializer(UnifiedJobSerializer, JobOptionsSerializer): @@ -2525,7 +2566,7 @@ class JobSerializer(UnifiedJobSerializer, JobOptionsSerializer): if obj.job_template: res['job_template'] = self.reverse('api:job_template_detail', kwargs={'pk': obj.job_template.pk}) - if obj.can_start or True: + if (obj.can_start or True) and self.version == 1: # TODO: remove in 3.3 res['start'] = self.reverse('api:job_start', kwargs={'pk': obj.pk}) if obj.can_cancel or True: res['cancel'] = self.reverse('api:job_cancel', kwargs={'pk': obj.pk}) @@ -2577,6 +2618,21 @@ class JobSerializer(UnifiedJobSerializer, JobOptionsSerializer): ret['extra_vars'] = obj.display_extra_vars() return ret + def get_summary_fields(self, obj): + summary_fields = super(JobSerializer, self).get_summary_fields(obj) + if 'pk' in self.context['view'].kwargs and self.version > 1: # TODO: remove version check in 3.3 + extra_creds = [] + for cred in obj.extra_credentials.all(): + extra_creds.append({ + 'id': cred.pk, + 'name': cred.name, + 'description': cred.description, + 'kind': cred.kind, + 'credential_type_id': cred.credential_type_id + }) + summary_fields['extra_credentials'] = extra_creds + return summary_fields + class JobCancelSerializer(JobSerializer): @@ -2630,7 +2686,7 @@ class JobRelaunchSerializer(JobSerializer): raise serializers.ValidationError(dict(credential=[_("Credential not found or deleted.")])) if obj.project is None: raise serializers.ValidationError(dict(errors=[_("Job Template Project is missing or undefined.")])) - if obj.inventory is None: + if obj.inventory is None or obj.inventory.pending_deletion: raise serializers.ValidationError(dict(errors=[_("Job Template Inventory is missing or undefined.")])) attrs = super(JobRelaunchSerializer, self).validate(attrs) return attrs @@ -3564,6 +3620,7 @@ class InstanceSerializer(BaseSerializer): class InstanceGroupSerializer(BaseSerializer): + consumed_capacity = serializers.SerializerMethodField() percent_capacity_remaining = serializers.SerializerMethodField() jobs_running = serializers.SerializerMethodField() instances = serializers.SerializerMethodField() @@ -3581,17 +3638,37 @@ class InstanceGroupSerializer(BaseSerializer): res['controller'] = self.reverse('api:instance_group_detail', kwargs={'pk': obj.controller_id}) return res + def get_jobs_qs(self): + # Store running jobs queryset in context, so it will be shared in ListView + if 'running_jobs' not in self.context: + self.context['running_jobs'] = UnifiedJob.objects.filter( + status__in=('running', 'waiting')) + return self.context['running_jobs'] + + def get_capacity_dict(self): + # Store capacity values (globally computed) in the context + if 'capacity_map' not in self.context: + ig_qs = None + if self.parent: # Is ListView: + ig_qs = self.parent.instance + self.context['capacity_map'] = InstanceGroup.objects.capacity_values( + qs=ig_qs, tasks=self.get_jobs_qs(), breakdown=True) + return self.context['capacity_map'] + def get_consumed_capacity(self, obj): - return obj.consumed_capacity + return self.get_capacity_dict()[obj.name]['consumed_capacity'] def get_percent_capacity_remaining(self, obj): - if not obj.capacity or obj.consumed_capacity == obj.capacity: + if not obj.capacity: return 0.0 else: - return float("{0:.2f}".format(((float(obj.capacity) - float(obj.consumed_capacity)) / (float(obj.capacity))) * 100)) + return float("{0:.2f}".format( + ((float(obj.capacity) - float(self.get_consumed_capacity(obj))) / (float(obj.capacity))) * 100) + ) def get_jobs_running(self, obj): - return UnifiedJob.objects.filter(instance_group=obj, status__in=('running', 'waiting',)).count() + jobs_qs = self.get_jobs_qs() + return sum(1 for job in jobs_qs if job.instance_group_id == obj.id) def get_instances(self, obj): return obj.instances.count() diff --git a/awx/api/templates/eula.md b/awx/api/templates/eula.md index 83fb3ccb6e..e69de29bb2 100644 --- a/awx/api/templates/eula.md +++ b/awx/api/templates/eula.md @@ -1,19 +0,0 @@ -ANSIBLE TOWER BY RED HAT END USER LICENSE AGREEMENT - -This end user license agreement (“EULA”) governs the use of the Ansible Tower software and any related updates, upgrades, versions, appearance, structure and organization (the “Ansible Tower Software”), regardless of the delivery mechanism. - -1. License Grant. Subject to the terms of this EULA, Red Hat, Inc. and its affiliates (“Red Hat”) grant to you (“You”) a non-transferable, non-exclusive, worldwide, non-sublicensable, limited, revocable license to use the Ansible Tower Software for the term of the associated Red Hat Software Subscription(s) and in a quantity equal to the number of Red Hat Software Subscriptions purchased from Red Hat for the Ansible Tower Software (“License”), each as set forth on the applicable Red Hat ordering document. You acquire only the right to use the Ansible Tower Software and do not acquire any rights of ownership. Red Hat reserves all rights to the Ansible Tower Software not expressly granted to You. This License grant pertains solely to Your use of the Ansible Tower Software and is not intended to limit Your rights under, or grant You rights that supersede, the license terms of any software packages which may be made available with the Ansible Tower Software that are subject to an open source software license. - -2. Intellectual Property Rights. Title to the Ansible Tower Software and each component, copy and modification, including all derivative works whether made by Red Hat, You or on Red Hat's behalf, including those made at Your suggestion and all associated intellectual property rights, are and shall remain the sole and exclusive property of Red Hat and/or it licensors. The License does not authorize You (nor may You allow any third party, specifically non-employees of Yours) to: (a) copy, distribute, reproduce, use or allow third party access to the Ansible Tower Software except as expressly authorized hereunder; (b) decompile, disassemble, reverse engineer, translate, modify, convert or apply any procedure or process to the Ansible Tower Software in order to ascertain, derive, and/or appropriate for any reason or purpose, including the Ansible Tower Software source code or source listings or any trade secret information or process contained in the Ansible Tower Software (except as permitted under applicable law); (c) execute or incorporate other software (except for approved software as appears in the Ansible Tower Software documentation or specifically approved by Red Hat in writing) into Ansible Tower Software, or create a derivative work of any part of the Ansible Tower Software; (d) remove any trademarks, trade names or titles, copyrights legends or any other proprietary marking on the Ansible Tower Software; (e) disclose the results of any benchmarking of the Ansible Tower Software (whether or not obtained with Red Hat’s assistance) to any third party; (f) attempt to circumvent any user limits or other license, timing or use restrictions that are built into, defined or agreed upon, regarding the Ansible Tower Software. You are hereby notified that the Ansible Tower Software may contain time-out devices, counter devices, and/or other devices intended to ensure the limits of the License will not be exceeded (“Limiting Devices”). If the Ansible Tower Software contains Limiting Devices, Red Hat will provide You materials necessary to use the Ansible Tower Software to the extent permitted. You may not tamper with or otherwise take any action to defeat or circumvent a Limiting Device or other control measure, including but not limited to, resetting the unit amount or using false host identification number for the purpose of extending any term of the License. - -3. Evaluation Licenses. Unless You have purchased Ansible Tower Software Subscriptions from Red Hat or an authorized reseller under the terms of a commercial agreement with Red Hat, all use of the Ansible Tower Software shall be limited to testing purposes and not for production use (“Evaluation”). Unless otherwise agreed by Red Hat, Evaluation of the Ansible Tower Software shall be limited to an evaluation environment and the Ansible Tower Software shall not be used to manage any systems or virtual machines on networks being used in the operation of Your business or any other non-evaluation purpose. Unless otherwise agreed by Red Hat, You shall limit all Evaluation use to a single 30 day evaluation period and shall not download or otherwise obtain additional copies of the Ansible Tower Software or license keys for Evaluation. - -4. Limited Warranty. Except as specifically stated in this Section 4, to the maximum extent permitted under applicable law, the Ansible Tower Software and the components are provided and licensed “as is” without warranty of any kind, expressed or implied, including the implied warranties of merchantability, non-infringement or fitness for a particular purpose. Red Hat warrants solely to You that the media on which the Ansible Tower Software may be furnished will be free from defects in materials and manufacture under normal use for a period of thirty (30) days from the date of delivery to You. Red Hat does not warrant that the functions contained in the Ansible Tower Software will meet Your requirements or that the operation of the Ansible Tower Software will be entirely error free, appear precisely as described in the accompanying documentation, or comply with regulatory requirements. - -5. Limitation of Remedies and Liability. To the maximum extent permitted by applicable law, Your exclusive remedy under this EULA is to return any defective media within thirty (30) days of delivery along with a copy of Your payment receipt and Red Hat, at its option, will replace it or refund the money paid by You for the media. To the maximum extent permitted under applicable law, neither Red Hat nor any Red Hat authorized distributor will be liable to You for any incidental or consequential damages, including lost profits or lost savings arising out of the use or inability to use the Ansible Tower Software or any component, even if Red Hat or the authorized distributor has been advised of the possibility of such damages. In no event shall Red Hat's liability or an authorized distributor’s liability exceed the amount that You paid to Red Hat for the Ansible Tower Software during the twelve months preceding the first event giving rise to liability. - -6. Export Control. In accordance with the laws of the United States and other countries, You represent and warrant that You: (a) understand that the Ansible Tower Software and its components may be subject to export controls under the U.S. Commerce Department’s Export Administration Regulations (“EAR”); (b) are not located in any country listed in Country Group E:1 in Supplement No. 1 to part 740 of the EAR; (c) will not export, re-export, or transfer the Ansible Tower Software to any prohibited destination or to any end user who has been prohibited from participating in US export transactions by any federal agency of the US government; (d) will not use or transfer the Ansible Tower Software for use in connection with the design, development or production of nuclear, chemical or biological weapons, or rocket systems, space launch vehicles, or sounding rockets or unmanned air vehicle systems; (e) understand and agree that if you are in the United States and you export or transfer the Ansible Tower Software to eligible end users, you will, to the extent required by EAR Section 740.17 obtain a license for such export or transfer and will submit semi-annual reports to the Commerce Department’s Bureau of Industry and Security, which include the name and address (including country) of each transferee; and (f) understand that countries including the United States may restrict the import, use, or export of encryption products (which may include the Ansible Tower Software) and agree that you shall be solely responsible for compliance with any such import, use, or export restrictions. - -7. General. If any provision of this EULA is held to be unenforceable, that shall not affect the enforceability of the remaining provisions. This agreement shall be governed by the laws of the State of New York and of the United States, without regard to any conflict of laws provisions. The rights and obligations of the parties to this EULA shall not be governed by the United Nations Convention on the International Sale of Goods. - -Copyright © 2015 Red Hat, Inc. All rights reserved. "Red Hat" and “Ansible Tower” are registered trademarks of Red Hat, Inc. All other trademarks are the property of their respective owners. diff --git a/awx/api/urls.py b/awx/api/urls.py index a21d1df9ab..f2eb18777f 100644 --- a/awx/api/urls.py +++ b/awx/api/urls.py @@ -215,7 +215,7 @@ job_template_urls = patterns('awx.api.views', job_urls = patterns('awx.api.views', url(r'^$', 'job_list'), url(r'^(?P[0-9]+)/$', 'job_detail'), - url(r'^(?P[0-9]+)/start/$', 'job_start'), + url(r'^(?P[0-9]+)/start/$', 'job_start'), # TODO: remove in 3.3 url(r'^(?P[0-9]+)/cancel/$', 'job_cancel'), url(r'^(?P[0-9]+)/relaunch/$', 'job_relaunch'), url(r'^(?P[0-9]+)/job_host_summaries/$', 'job_job_host_summaries_list'), diff --git a/awx/api/views.py b/awx/api/views.py index cf40687256..0930e5e71b 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -122,7 +122,7 @@ class WorkflowsEnforcementMixin(object): Mixin to check that license supports workflows. ''' def check_permissions(self, request): - if not feature_enabled('workflows') and request.method not in ('GET', 'OPTIONS'): + if not feature_enabled('workflows') and request.method not in ('GET', 'OPTIONS', 'DELETE'): raise LicenseForbids(_('Your license does not allow use of workflows.')) return super(WorkflowsEnforcementMixin, self).check_permissions(request) @@ -3739,6 +3739,13 @@ class JobList(ListCreateAPIView): methods.remove('POST') return methods + # NOTE: Remove in 3.3, switch ListCreateAPIView to ListAPIView + def post(self, request, *args, **kwargs): + if get_request_version(self.request) > 1: + return Response({"error": _("POST not allowed for Job launching in version 2 of the api")}, + status=status.HTTP_405_METHOD_NOT_ALLOWED) + return super(JobList, self).post(request, *args, **kwargs) + class JobDetail(UnifiedJobDeletionMixin, RetrieveUpdateDestroyAPIView): @@ -3788,6 +3795,7 @@ class JobActivityStreamList(ActivityStreamEnforcementMixin, SubListAPIView): new_in_145 = True +# TODO: remove endpoint in 3.3 class JobStart(GenericAPIView): model = Job @@ -3795,7 +3803,13 @@ class JobStart(GenericAPIView): is_job_start = True deprecated = True + def v2_not_allowed(self): + return Response({'detail': 'Action only possible through v1 API.'}, + status=status.HTTP_404_NOT_FOUND) + def get(self, request, *args, **kwargs): + if get_request_version(request) > 1: + return self.v2_not_allowed() obj = self.get_object() data = dict( can_start=obj.can_start, @@ -3806,6 +3820,8 @@ class JobStart(GenericAPIView): return Response(data) def post(self, request, *args, **kwargs): + if get_request_version(request) > 1: + return self.v2_not_allowed() obj = self.get_object() if obj.can_start: result = obj.signal_start(**request.data) diff --git a/awx/conf/models.py b/awx/conf/models.py index afdacb1757..7dae8bc77e 100644 --- a/awx/conf/models.py +++ b/awx/conf/models.py @@ -74,6 +74,10 @@ class Setting(CreatedModifiedModel): def get_cache_key(self, key): return key + @classmethod + def get_cache_id_key(self, key): + return '{}_ID'.format(key) + import awx.conf.signals # noqa diff --git a/awx/conf/settings.py b/awx/conf/settings.py index 89bfa0660a..a4e589f53e 100644 --- a/awx/conf/settings.py +++ b/awx/conf/settings.py @@ -69,6 +69,12 @@ def _log_database_error(): pass +def filter_sensitive(registry, key, value): + if registry.is_setting_encrypted(key): + return '$encrypted$' + return value + + class EncryptedCacheProxy(object): def __init__(self, cache, registry, encrypter=None, decrypter=None): @@ -105,9 +111,13 @@ class EncryptedCacheProxy(object): six.text_type(value) except UnicodeDecodeError: value = value.decode('utf-8') + logger.debug('cache get(%r, %r) -> %r', key, empty, filter_sensitive(self.registry, key, value)) return value - def set(self, key, value, **kwargs): + def set(self, key, value, log=True, **kwargs): + if log is True: + logger.debug('cache set(%r, %r, %r)', key, filter_sensitive(self.registry, key, value), + SETTING_CACHE_TIMEOUT) self.cache.set( key, self._handle_encryption(self.encrypter, key, value), @@ -115,8 +125,13 @@ class EncryptedCacheProxy(object): ) def set_many(self, data, **kwargs): + filtered_data = dict( + (key, filter_sensitive(self.registry, key, value)) + for key, value in data.items() + ) + logger.debug('cache set_many(%r, %r)', filtered_data, SETTING_CACHE_TIMEOUT) for key, value in data.items(): - self.set(key, value, **kwargs) + self.set(key, value, log=False, **kwargs) def _handle_encryption(self, method, key, value): TransientSetting = namedtuple('TransientSetting', ['pk', 'value']) @@ -124,9 +139,16 @@ class EncryptedCacheProxy(object): if value is not empty and self.registry.is_setting_encrypted(key): # If the setting exists in the database, we'll use its primary key # as part of the AES key when encrypting/decrypting + obj_id = self.cache.get(Setting.get_cache_id_key(key), default=empty) + if obj_id is empty: + logger.info('Efficiency notice: Corresponding id not stored in cache %s', + Setting.get_cache_id_key(key)) + obj_id = getattr(self._get_setting_from_db(key), 'pk', None) + elif obj_id == SETTING_CACHE_NONE: + obj_id = None return method( TransientSetting( - pk=getattr(self._get_setting_from_db(key), 'pk', None), + pk=obj_id, value=value ), 'value' @@ -241,11 +263,13 @@ class SettingsWrapper(UserSettingsHolder): # to indicate from the cache that the setting is not configured without # a database lookup. settings_to_cache = get_settings_to_cache(self.registry) + setting_ids = {} # Load all settings defined in the database. for setting in Setting.objects.filter(key__in=settings_to_cache.keys(), user__isnull=True).order_by('pk'): if settings_to_cache[setting.key] != SETTING_CACHE_NOTSET: continue if self.registry.is_setting_encrypted(setting.key): + setting_ids[setting.key] = setting.id try: value = decrypt_field(setting, 'value') except ValueError, e: @@ -264,12 +288,18 @@ class SettingsWrapper(UserSettingsHolder): field = self.registry.get_setting_field(key) try: settings_to_cache[key] = get_cache_value(field.get_default()) + if self.registry.is_setting_encrypted(key): + # No database pk, so None will be passed to encryption algorithm + setting_ids[key] = SETTING_CACHE_NOTSET except SkipField: pass # Generate a cache key for each setting and store them all at once. settings_to_cache = dict([(Setting.get_cache_key(k), v) for k, v in settings_to_cache.items()]) + for k, id_val in setting_ids.items(): + logger.debug('Saving id in cache for encrypted setting %s, %s', + Setting.get_cache_id_key(k), id_val) + self.cache.cache.set(Setting.get_cache_id_key(k), id_val) settings_to_cache['_awx_conf_preload_expires'] = self._awx_conf_preload_expires - logger.debug('cache set_many(%r, %r)', settings_to_cache, SETTING_CACHE_TIMEOUT) self.cache.set_many(settings_to_cache, timeout=SETTING_CACHE_TIMEOUT) def _get_local(self, name): @@ -279,7 +309,6 @@ class SettingsWrapper(UserSettingsHolder): cache_value = self.cache.get(cache_key, default=empty) except ValueError: cache_value = empty - logger.debug('cache get(%r, %r) -> %r', cache_key, empty, cache_value) if cache_value == SETTING_CACHE_NOTSET: value = empty elif cache_value == SETTING_CACHE_NONE: @@ -293,6 +322,7 @@ class SettingsWrapper(UserSettingsHolder): field = self.registry.get_setting_field(name) if value is empty: setting = None + setting_id = None if not field.read_only or name in ( # these two values are read-only - however - we *do* want # to fetch their value from the database @@ -303,6 +333,7 @@ class SettingsWrapper(UserSettingsHolder): if setting: if getattr(field, 'encrypted', False): value = decrypt_field(setting, 'value') + setting_id = setting.id else: value = setting.value else: @@ -310,15 +341,17 @@ class SettingsWrapper(UserSettingsHolder): if SETTING_CACHE_DEFAULTS: try: value = field.get_default() + if getattr(field, 'encrypted', False): + setting_id = SETTING_CACHE_NONE except SkipField: pass # If None implies not set, convert when reading the value. if value is None and SETTING_CACHE_NOTSET == SETTING_CACHE_NONE: value = SETTING_CACHE_NOTSET if cache_value != value: - logger.debug('cache set(%r, %r, %r)', cache_key, - get_cache_value(value), - SETTING_CACHE_TIMEOUT) + if setting_id: + logger.debug('Saving id in cache for encrypted setting %s', cache_key) + self.cache.cache.set(Setting.get_cache_id_key(cache_key), setting_id) self.cache.set(cache_key, get_cache_value(value), timeout=SETTING_CACHE_TIMEOUT) if value == SETTING_CACHE_NOTSET and not SETTING_CACHE_DEFAULTS: try: diff --git a/awx/conf/tests/unit/test_settings.py b/awx/conf/tests/unit/test_settings.py index f7f1540108..2f3c197478 100644 --- a/awx/conf/tests/unit/test_settings.py +++ b/awx/conf/tests/unit/test_settings.py @@ -391,7 +391,20 @@ def test_charfield_properly_sets_none(settings, mocker): ) -def test_settings_use_an_encrypted_cache(settings): +def test_settings_use_cache(settings, mocker): + settings.registry.register( + 'AWX_VAR', + field_class=fields.CharField, + category=_('System'), + category_slug='system' + ) + settings.cache.set('AWX_VAR', 'foobar') + settings.cache.set('_awx_conf_preload_expires', 100) + # Will fail test if database is used + getattr(settings, 'AWX_VAR') + + +def test_settings_use_an_encrypted_cache(settings, mocker): settings.registry.register( 'AWX_ENCRYPTED', field_class=fields.CharField, @@ -402,6 +415,11 @@ def test_settings_use_an_encrypted_cache(settings): assert isinstance(settings.cache, EncryptedCacheProxy) assert settings.cache.__dict__['encrypter'] == encrypt_field assert settings.cache.__dict__['decrypter'] == decrypt_field + settings.cache.set('AWX_ENCRYPTED_ID', 402) + settings.cache.set('AWX_ENCRYPTED', 'foobar') + settings.cache.set('_awx_conf_preload_expires', 100) + # Will fail test if database is used + getattr(settings, 'AWX_ENCRYPTED') def test_sensitive_cache_data_is_encrypted(settings, mocker): diff --git a/awx/locale/django.pot b/awx/locale/django.pot index 141b9ce4ea..3038bed7d1 100644 --- a/awx/locale/django.pot +++ b/awx/locale/django.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-28 18:57+0000\n" +"POT-Creation-Date: 2017-08-27 19:27+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -155,7 +155,7 @@ msgstr "" msgid "Command" msgstr "" -#: awx/api/serializers.py:270 awx/main/models/unified_jobs.py:434 +#: awx/api/serializers.py:270 awx/main/models/unified_jobs.py:435 msgid "SCM Update" msgstr "" @@ -175,7 +175,7 @@ msgstr "" msgid "Workflow Template" msgstr "" -#: awx/api/serializers.py:697 awx/api/serializers.py:755 awx/api/views.py:4330 +#: awx/api/serializers.py:697 awx/api/serializers.py:755 awx/api/views.py:4314 #, python-format msgid "" "Standard Output too large to display (%(text_size)d bytes), only download " @@ -217,761 +217,765 @@ msgid "" "comprehensive." msgstr "" -#: awx/api/serializers.py:1283 +#: awx/api/serializers.py:1282 #, python-format msgid "Invalid port specification: %s" msgstr "" -#: awx/api/serializers.py:1311 awx/api/serializers.py:3208 -#: awx/api/serializers.py:3293 awx/main/validators.py:198 +#: awx/api/serializers.py:1293 +msgid "Cannot create Host for Smart Inventory" +msgstr "" + +#: awx/api/serializers.py:1315 awx/api/serializers.py:3218 +#: awx/api/serializers.py:3303 awx/main/validators.py:198 msgid "Must be valid JSON or YAML." msgstr "" -#: awx/api/serializers.py:1407 +#: awx/api/serializers.py:1411 msgid "Invalid group name." msgstr "" -#: awx/api/serializers.py:1479 +#: awx/api/serializers.py:1416 +msgid "Cannot create Group for Smart Inventory" +msgstr "" + +#: awx/api/serializers.py:1488 msgid "" "Script must begin with a hashbang sequence: i.e.... #!/usr/bin/env python" msgstr "" -#: awx/api/serializers.py:1525 +#: awx/api/serializers.py:1534 msgid "`{}` is a prohibited environment variable" msgstr "" -#: awx/api/serializers.py:1536 +#: awx/api/serializers.py:1545 msgid "If 'source' is 'custom', 'source_script' must be provided." msgstr "" -#: awx/api/serializers.py:1542 +#: awx/api/serializers.py:1551 msgid "Must provide an inventory." msgstr "" -#: awx/api/serializers.py:1546 +#: awx/api/serializers.py:1555 msgid "" "The 'source_script' does not belong to the same organization as the " "inventory." msgstr "" -#: awx/api/serializers.py:1548 +#: awx/api/serializers.py:1557 msgid "'source_script' doesn't exist." msgstr "" -#: awx/api/serializers.py:1572 +#: awx/api/serializers.py:1581 msgid "Automatic group relationship, will be removed in 3.3" msgstr "" -#: awx/api/serializers.py:1649 +#: awx/api/serializers.py:1658 msgid "Cannot use manual project for SCM-based inventory." msgstr "" -#: awx/api/serializers.py:1655 +#: awx/api/serializers.py:1664 msgid "" "Manual inventory sources are created automatically when a group is created " "in the v1 API." msgstr "" -#: awx/api/serializers.py:1660 +#: awx/api/serializers.py:1669 msgid "Setting not compatible with existing schedules." msgstr "" -#: awx/api/serializers.py:1673 -msgid "Cannot set source_path if not SCM type." +#: awx/api/serializers.py:1674 +msgid "Cannot create Inventory Source for Smart Inventory" msgstr "" -#: awx/api/serializers.py:1676 -msgid "" -"Cannot update SCM-based inventory source on launch if set to update on " -"project update. Instead, configure the corresponding source project to " -"update on launch." +#: awx/api/serializers.py:1688 +#, python-format +msgid "Cannot set %s if not SCM type." msgstr "" -#: awx/api/serializers.py:1680 -msgid "Inventory controlled by project-following SCM." -msgstr "" - -#: awx/api/serializers.py:1683 -msgid "SCM type sources must set `overwrite_vars` to `true`." -msgstr "" - -#: awx/api/serializers.py:1925 +#: awx/api/serializers.py:1929 msgid "Modifications not allowed for managed credential types" msgstr "" -#: awx/api/serializers.py:1930 +#: awx/api/serializers.py:1934 msgid "" "Modifications to inputs are not allowed for credential types that are in use" msgstr "" -#: awx/api/serializers.py:1936 +#: awx/api/serializers.py:1940 #, python-format msgid "Must be 'cloud' or 'net', not %s" msgstr "" -#: awx/api/serializers.py:1942 +#: awx/api/serializers.py:1946 msgid "'ask_at_runtime' is not supported for custom credentials." msgstr "" -#: awx/api/serializers.py:2115 +#: awx/api/serializers.py:2119 #, python-format msgid "\"%s\" is not a valid choice" msgstr "" -#: awx/api/serializers.py:2134 +#: awx/api/serializers.py:2138 #, python-format msgid "'%s' is not a valid field for %s" msgstr "" -#: awx/api/serializers.py:2146 +#: awx/api/serializers.py:2150 msgid "" "Write-only field used to add user to owner role. If provided, do not give " "either team or organization. Only valid for creation." msgstr "" -#: awx/api/serializers.py:2151 +#: awx/api/serializers.py:2155 msgid "" "Write-only field used to add team to owner role. If provided, do not give " "either user or organization. Only valid for creation." msgstr "" -#: awx/api/serializers.py:2156 +#: awx/api/serializers.py:2160 msgid "" "Inherit permissions from organization roles. If provided on creation, do not " "give either user or team." msgstr "" -#: awx/api/serializers.py:2172 +#: awx/api/serializers.py:2176 msgid "Missing 'user', 'team', or 'organization'." msgstr "" -#: awx/api/serializers.py:2212 +#: awx/api/serializers.py:2216 msgid "" "Credential organization must be set and match before assigning to a team" msgstr "" -#: awx/api/serializers.py:2374 +#: awx/api/serializers.py:2378 msgid "You must provide a cloud credential." msgstr "" -#: awx/api/serializers.py:2375 +#: awx/api/serializers.py:2379 msgid "You must provide a network credential." msgstr "" -#: awx/api/serializers.py:2391 +#: awx/api/serializers.py:2395 msgid "This field is required." msgstr "" -#: awx/api/serializers.py:2393 awx/api/serializers.py:2395 +#: awx/api/serializers.py:2397 awx/api/serializers.py:2399 msgid "Playbook not found for project." msgstr "" -#: awx/api/serializers.py:2397 +#: awx/api/serializers.py:2401 msgid "Must select playbook for project." msgstr "" -#: awx/api/serializers.py:2466 +#: awx/api/serializers.py:2476 msgid "Must either set a default value or ask to prompt on launch." msgstr "" -#: awx/api/serializers.py:2468 awx/main/models/jobs.py:325 +#: awx/api/serializers.py:2478 awx/main/models/jobs.py:325 msgid "Job types 'run' and 'check' must have assigned a project." msgstr "" -#: awx/api/serializers.py:2539 +#: awx/api/serializers.py:2549 msgid "Invalid job template." msgstr "" -#: awx/api/serializers.py:2620 +#: awx/api/serializers.py:2630 msgid "Credential not found or deleted." msgstr "" -#: awx/api/serializers.py:2622 +#: awx/api/serializers.py:2632 msgid "Job Template Project is missing or undefined." msgstr "" -#: awx/api/serializers.py:2624 +#: awx/api/serializers.py:2634 msgid "Job Template Inventory is missing or undefined." msgstr "" -#: awx/api/serializers.py:2911 -#, python-format -msgid "%(job_type)s is not a valid job type. The choices are %(choices)s." -msgstr "" - -#: awx/api/serializers.py:2916 -msgid "Workflow job template is missing during creation." -msgstr "" - #: awx/api/serializers.py:2921 #, python-format +msgid "%(job_type)s is not a valid job type. The choices are %(choices)s." +msgstr "" + +#: awx/api/serializers.py:2926 +msgid "Workflow job template is missing during creation." +msgstr "" + +#: awx/api/serializers.py:2931 +#, python-format msgid "Cannot nest a %s inside a WorkflowJobTemplate" msgstr "" -#: awx/api/serializers.py:3178 +#: awx/api/serializers.py:3188 #, python-format msgid "Job Template '%s' is missing or undefined." msgstr "" -#: awx/api/serializers.py:3181 +#: awx/api/serializers.py:3191 msgid "The inventory associated with this Job Template is being deleted." msgstr "" -#: awx/api/serializers.py:3222 awx/api/views.py:2998 +#: awx/api/serializers.py:3232 awx/api/views.py:2991 #, python-format msgid "Cannot assign multiple %s credentials." msgstr "" -#: awx/api/serializers.py:3224 awx/api/views.py:3001 +#: awx/api/serializers.py:3234 awx/api/views.py:2994 msgid "Extra credentials must be network or cloud." msgstr "" -#: awx/api/serializers.py:3361 +#: awx/api/serializers.py:3371 msgid "" "Missing required fields for Notification Configuration: notification_type" msgstr "" -#: awx/api/serializers.py:3384 +#: awx/api/serializers.py:3394 msgid "No values specified for field '{}'" msgstr "" -#: awx/api/serializers.py:3389 +#: awx/api/serializers.py:3399 msgid "Missing required fields for Notification Configuration: {}." msgstr "" -#: awx/api/serializers.py:3392 +#: awx/api/serializers.py:3402 msgid "Configuration field '{}' incorrect type, expected {}." msgstr "" -#: awx/api/serializers.py:3445 +#: awx/api/serializers.py:3455 msgid "Inventory Source must be a cloud resource." msgstr "" -#: awx/api/serializers.py:3447 +#: awx/api/serializers.py:3457 msgid "Manual Project cannot have a schedule set." msgstr "" -#: awx/api/serializers.py:3450 +#: awx/api/serializers.py:3460 msgid "" "Inventory sources with `update_on_project_update` cannot be scheduled. " "Schedule its source project `{}` instead." msgstr "" -#: awx/api/serializers.py:3469 +#: awx/api/serializers.py:3479 msgid "Projects and inventory updates cannot accept extra variables." msgstr "" -#: awx/api/serializers.py:3491 +#: awx/api/serializers.py:3501 msgid "DTSTART required in rrule. Value should match: DTSTART:YYYYMMDDTHHMMSSZ" msgstr "" -#: awx/api/serializers.py:3493 +#: awx/api/serializers.py:3503 msgid "Multiple DTSTART is not supported." msgstr "" -#: awx/api/serializers.py:3495 +#: awx/api/serializers.py:3505 msgid "RRULE require in rrule." msgstr "" -#: awx/api/serializers.py:3497 +#: awx/api/serializers.py:3507 msgid "Multiple RRULE is not supported." msgstr "" -#: awx/api/serializers.py:3499 +#: awx/api/serializers.py:3509 msgid "INTERVAL required in rrule." msgstr "" -#: awx/api/serializers.py:3501 +#: awx/api/serializers.py:3511 msgid "TZID is not supported." msgstr "" -#: awx/api/serializers.py:3503 +#: awx/api/serializers.py:3513 msgid "SECONDLY is not supported." msgstr "" -#: awx/api/serializers.py:3505 +#: awx/api/serializers.py:3515 msgid "Multiple BYMONTHDAYs not supported." msgstr "" -#: awx/api/serializers.py:3507 +#: awx/api/serializers.py:3517 msgid "Multiple BYMONTHs not supported." msgstr "" -#: awx/api/serializers.py:3509 +#: awx/api/serializers.py:3519 msgid "BYDAY with numeric prefix not supported." msgstr "" -#: awx/api/serializers.py:3511 +#: awx/api/serializers.py:3521 msgid "BYYEARDAY not supported." msgstr "" -#: awx/api/serializers.py:3513 +#: awx/api/serializers.py:3523 msgid "BYWEEKNO not supported." msgstr "" -#: awx/api/serializers.py:3517 +#: awx/api/serializers.py:3527 msgid "COUNT > 999 is unsupported." msgstr "" -#: awx/api/serializers.py:3521 +#: awx/api/serializers.py:3531 msgid "rrule parsing failed validation." msgstr "" -#: awx/api/serializers.py:3621 +#: awx/api/serializers.py:3631 msgid "" "A summary of the new and changed values when an object is created, updated, " "or deleted" msgstr "" -#: awx/api/serializers.py:3623 +#: awx/api/serializers.py:3633 msgid "" "For create, update, and delete events this is the object type that was " "affected. For associate and disassociate events this is the object type " "associated or disassociated with object2." msgstr "" -#: awx/api/serializers.py:3626 +#: awx/api/serializers.py:3636 msgid "" "Unpopulated for create, update, and delete events. For associate and " "disassociate events this is the object type that object1 is being associated " "with." msgstr "" -#: awx/api/serializers.py:3629 +#: awx/api/serializers.py:3639 msgid "The action taken with respect to the given object(s)." msgstr "" -#: awx/api/serializers.py:3732 +#: awx/api/serializers.py:3749 msgid "Unable to login with provided credentials." msgstr "" -#: awx/api/serializers.py:3734 +#: awx/api/serializers.py:3751 msgid "Must include \"username\" and \"password\"." msgstr "" -#: awx/api/views.py:107 +#: awx/api/views.py:106 msgid "Your license does not allow use of the activity stream." msgstr "" -#: awx/api/views.py:117 +#: awx/api/views.py:116 msgid "Your license does not permit use of system tracking." msgstr "" -#: awx/api/views.py:127 +#: awx/api/views.py:126 msgid "Your license does not allow use of workflows." msgstr "" -#: awx/api/views.py:135 awx/templates/rest_framework/api.html:28 -msgid "REST API" +#: awx/api/views.py:140 +msgid "Cannot delete job resource when associated workflow job is running." msgstr "" #: awx/api/views.py:144 -msgid "Ansible Tower REST API" +msgid "Cannot delete running job resource." msgstr "" -#: awx/api/views.py:206 +#: awx/api/views.py:153 awx/templates/rest_framework/api.html:28 +msgid "REST API" +msgstr "" + +#: awx/api/views.py:162 awx/templates/rest_framework/api.html:4 +msgid "AWX REST API" +msgstr "" + +#: awx/api/views.py:224 msgid "Version 1" msgstr "" -#: awx/api/views.py:210 +#: awx/api/views.py:228 msgid "Version 2" msgstr "" -#: awx/api/views.py:221 +#: awx/api/views.py:239 msgid "Ping" msgstr "" -#: awx/api/views.py:256 awx/conf/apps.py:12 +#: awx/api/views.py:270 awx/conf/apps.py:12 msgid "Configuration" msgstr "" -#: awx/api/views.py:309 +#: awx/api/views.py:323 msgid "Invalid license data" msgstr "" -#: awx/api/views.py:311 +#: awx/api/views.py:325 msgid "Missing 'eula_accepted' property" msgstr "" -#: awx/api/views.py:315 +#: awx/api/views.py:329 msgid "'eula_accepted' value is invalid" msgstr "" -#: awx/api/views.py:318 +#: awx/api/views.py:332 msgid "'eula_accepted' must be True" msgstr "" -#: awx/api/views.py:325 +#: awx/api/views.py:339 msgid "Invalid JSON" msgstr "" -#: awx/api/views.py:333 +#: awx/api/views.py:347 msgid "Invalid License" msgstr "" -#: awx/api/views.py:343 +#: awx/api/views.py:357 msgid "Invalid license" msgstr "" -#: awx/api/views.py:351 +#: awx/api/views.py:365 #, python-format msgid "Failed to remove license (%s)" msgstr "" -#: awx/api/views.py:356 +#: awx/api/views.py:370 msgid "Dashboard" msgstr "" -#: awx/api/views.py:455 +#: awx/api/views.py:469 msgid "Dashboard Jobs Graphs" msgstr "" -#: awx/api/views.py:491 +#: awx/api/views.py:505 #, python-format msgid "Unknown period \"%s\"" msgstr "" -#: awx/api/views.py:505 +#: awx/api/views.py:519 msgid "Instances" msgstr "" -#: awx/api/views.py:513 +#: awx/api/views.py:527 msgid "Instance Detail" msgstr "" -#: awx/api/views.py:521 +#: awx/api/views.py:535 msgid "Instance Running Jobs" msgstr "" -#: awx/api/views.py:536 +#: awx/api/views.py:550 msgid "Instance's Instance Groups" msgstr "" -#: awx/api/views.py:546 +#: awx/api/views.py:560 msgid "Instance Groups" msgstr "" -#: awx/api/views.py:554 +#: awx/api/views.py:568 msgid "Instance Group Detail" msgstr "" -#: awx/api/views.py:562 +#: awx/api/views.py:576 msgid "Instance Group Running Jobs" msgstr "" -#: awx/api/views.py:572 +#: awx/api/views.py:586 msgid "Instance Group's Instances" msgstr "" -#: awx/api/views.py:582 +#: awx/api/views.py:596 msgid "Schedules" msgstr "" -#: awx/api/views.py:601 +#: awx/api/views.py:615 msgid "Schedule Jobs List" msgstr "" -#: awx/api/views.py:825 +#: awx/api/views.py:841 msgid "Your license only permits a single organization to exist." msgstr "" -#: awx/api/views.py:1061 awx/api/views.py:4624 +#: awx/api/views.py:1077 awx/api/views.py:4615 msgid "You cannot assign an Organization role as a child role for a Team." msgstr "" -#: awx/api/views.py:1065 awx/api/views.py:4638 +#: awx/api/views.py:1081 awx/api/views.py:4629 msgid "You cannot grant system-level permissions to a team." msgstr "" -#: awx/api/views.py:1072 awx/api/views.py:4630 +#: awx/api/views.py:1088 awx/api/views.py:4621 msgid "" "You cannot grant credential access to a team when the Organization field " "isn't set, or belongs to a different organization" msgstr "" -#: awx/api/views.py:1162 +#: awx/api/views.py:1178 msgid "Cannot delete project." msgstr "" -#: awx/api/views.py:1197 +#: awx/api/views.py:1213 msgid "Project Schedules" msgstr "" -#: awx/api/views.py:1209 +#: awx/api/views.py:1225 msgid "Project SCM Inventory Sources" msgstr "" -#: awx/api/views.py:1312 awx/api/views.py:2685 awx/api/views.py:3767 -msgid "Cannot delete job resource when associated workflow job is running." -msgstr "" - -#: awx/api/views.py:1345 +#: awx/api/views.py:1352 msgid "Project Update SCM Inventory Updates" msgstr "" -#: awx/api/views.py:1400 +#: awx/api/views.py:1407 msgid "Me" msgstr "" -#: awx/api/views.py:1444 awx/api/views.py:4581 +#: awx/api/views.py:1451 awx/api/views.py:4572 msgid "You may not perform any action with your own admin_role." msgstr "" -#: awx/api/views.py:1450 awx/api/views.py:4585 +#: awx/api/views.py:1457 awx/api/views.py:4576 msgid "You may not change the membership of a users admin_role" msgstr "" -#: awx/api/views.py:1455 awx/api/views.py:4590 +#: awx/api/views.py:1462 awx/api/views.py:4581 msgid "" "You cannot grant credential access to a user not in the credentials' " "organization" msgstr "" -#: awx/api/views.py:1459 awx/api/views.py:4594 +#: awx/api/views.py:1466 awx/api/views.py:4585 msgid "You cannot grant private credential access to another user" msgstr "" -#: awx/api/views.py:1557 +#: awx/api/views.py:1564 #, python-format msgid "Cannot change %s." msgstr "" -#: awx/api/views.py:1563 +#: awx/api/views.py:1570 msgid "Cannot delete user." msgstr "" -#: awx/api/views.py:1592 +#: awx/api/views.py:1599 msgid "Deletion not allowed for managed credential types" msgstr "" -#: awx/api/views.py:1594 +#: awx/api/views.py:1601 msgid "Credential types that are in use cannot be deleted" msgstr "" -#: awx/api/views.py:1772 +#: awx/api/views.py:1779 msgid "Cannot delete inventory script." msgstr "" -#: awx/api/views.py:1857 +#: awx/api/views.py:1864 msgid "{0}" msgstr "" -#: awx/api/views.py:2078 +#: awx/api/views.py:2089 msgid "Fact not found." msgstr "" -#: awx/api/views.py:2102 +#: awx/api/views.py:2113 msgid "SSLError while trying to connect to {}" msgstr "" -#: awx/api/views.py:2104 +#: awx/api/views.py:2115 msgid "Request to {} timed out." msgstr "" -#: awx/api/views.py:2106 +#: awx/api/views.py:2117 msgid "Unkown exception {} while trying to GET {}" msgstr "" -#: awx/api/views.py:2109 +#: awx/api/views.py:2120 +msgid "" +"Unauthorized access. Please check your Insights Credential username and " +"password." +msgstr "" + +#: awx/api/views.py:2122 msgid "" "Failed to gather reports and maintenance plans from Insights API at URL {}. " "Server responded with {} status code and message {}" msgstr "" -#: awx/api/views.py:2115 +#: awx/api/views.py:2128 msgid "Expected JSON response from Insights but instead got {}" msgstr "" -#: awx/api/views.py:2122 +#: awx/api/views.py:2135 msgid "This host is not recognized as an Insights host." msgstr "" -#: awx/api/views.py:2127 +#: awx/api/views.py:2140 msgid "The Insights Credential for \"{}\" was not found." msgstr "" -#: awx/api/views.py:2196 +#: awx/api/views.py:2209 msgid "Cyclical Group association." msgstr "" -#: awx/api/views.py:2473 +#: awx/api/views.py:2482 msgid "Inventory Source List" msgstr "" -#: awx/api/views.py:2486 +#: awx/api/views.py:2495 msgid "Inventory Sources Update" msgstr "" -#: awx/api/views.py:2514 -msgid "You do not have permission to update project `{}`" -msgstr "" - -#: awx/api/views.py:2526 +#: awx/api/views.py:2525 msgid "Could not start because `can_update` returned False" msgstr "" -#: awx/api/views.py:2534 +#: awx/api/views.py:2533 msgid "No inventory sources to update." msgstr "" -#: awx/api/views.py:2566 +#: awx/api/views.py:2565 msgid "Cannot delete inventory source." msgstr "" -#: awx/api/views.py:2574 +#: awx/api/views.py:2573 msgid "Inventory Source Schedules" msgstr "" -#: awx/api/views.py:2604 +#: awx/api/views.py:2603 msgid "Notification Templates can only be assigned when source is one of {}." msgstr "" -#: awx/api/views.py:2833 +#: awx/api/views.py:2826 msgid "Job Template Schedules" msgstr "" -#: awx/api/views.py:2853 awx/api/views.py:2869 +#: awx/api/views.py:2846 awx/api/views.py:2862 msgid "Your license does not allow adding surveys." msgstr "" -#: awx/api/views.py:2876 +#: awx/api/views.py:2869 msgid "'name' missing from survey spec." msgstr "" -#: awx/api/views.py:2878 +#: awx/api/views.py:2871 msgid "'description' missing from survey spec." msgstr "" -#: awx/api/views.py:2880 +#: awx/api/views.py:2873 msgid "'spec' missing from survey spec." msgstr "" -#: awx/api/views.py:2882 +#: awx/api/views.py:2875 msgid "'spec' must be a list of items." msgstr "" -#: awx/api/views.py:2884 +#: awx/api/views.py:2877 msgid "'spec' doesn't contain any items." msgstr "" -#: awx/api/views.py:2890 +#: awx/api/views.py:2883 #, python-format msgid "Survey question %s is not a json object." msgstr "" -#: awx/api/views.py:2892 +#: awx/api/views.py:2885 #, python-format msgid "'type' missing from survey question %s." msgstr "" -#: awx/api/views.py:2894 +#: awx/api/views.py:2887 #, python-format msgid "'question_name' missing from survey question %s." msgstr "" -#: awx/api/views.py:2896 +#: awx/api/views.py:2889 #, python-format msgid "'variable' missing from survey question %s." msgstr "" -#: awx/api/views.py:2898 +#: awx/api/views.py:2891 #, python-format msgid "'variable' '%(item)s' duplicated in survey question %(survey)s." msgstr "" -#: awx/api/views.py:2903 +#: awx/api/views.py:2896 #, python-format msgid "'required' missing from survey question %s." msgstr "" -#: awx/api/views.py:2908 +#: awx/api/views.py:2901 msgid "" "$encrypted$ is reserved keyword and may not be used as a default for " "password {}." msgstr "" -#: awx/api/views.py:3024 +#: awx/api/views.py:3017 msgid "Maximum number of labels for {} reached." msgstr "" -#: awx/api/views.py:3143 +#: awx/api/views.py:3136 msgid "No matching host could be found!" msgstr "" -#: awx/api/views.py:3146 +#: awx/api/views.py:3139 msgid "Multiple hosts matched the request!" msgstr "" -#: awx/api/views.py:3151 +#: awx/api/views.py:3144 msgid "Cannot start automatically, user input required!" msgstr "" -#: awx/api/views.py:3158 +#: awx/api/views.py:3151 msgid "Host callback job already pending." msgstr "" -#: awx/api/views.py:3171 +#: awx/api/views.py:3164 msgid "Error starting job!" msgstr "" -#: awx/api/views.py:3278 +#: awx/api/views.py:3271 msgid "Cannot associate {0} when {1} have been associated." msgstr "" -#: awx/api/views.py:3303 +#: awx/api/views.py:3296 msgid "Multiple parent relationship not allowed." msgstr "" -#: awx/api/views.py:3308 +#: awx/api/views.py:3301 msgid "Cycle detected." msgstr "" -#: awx/api/views.py:3512 +#: awx/api/views.py:3505 msgid "Workflow Job Template Schedules" msgstr "" -#: awx/api/views.py:3657 awx/api/views.py:4233 +#: awx/api/views.py:3650 awx/api/views.py:4217 msgid "Superuser privileges needed." msgstr "" -#: awx/api/views.py:3689 +#: awx/api/views.py:3682 msgid "System Job Template Schedules" msgstr "" -#: awx/api/views.py:3907 +#: awx/api/views.py:3891 msgid "Job Host Summaries List" msgstr "" -#: awx/api/views.py:3954 +#: awx/api/views.py:3938 msgid "Job Event Children List" msgstr "" -#: awx/api/views.py:3963 +#: awx/api/views.py:3947 msgid "Job Event Hosts List" msgstr "" -#: awx/api/views.py:3973 +#: awx/api/views.py:3957 msgid "Job Events List" msgstr "" -#: awx/api/views.py:4187 +#: awx/api/views.py:4171 msgid "Ad Hoc Command Events List" msgstr "" -#: awx/api/views.py:4395 +#: awx/api/views.py:4386 msgid "Error generating stdout download file: {}" msgstr "" -#: awx/api/views.py:4408 +#: awx/api/views.py:4399 #, python-format msgid "Error generating stdout download file: %s" msgstr "" -#: awx/api/views.py:4453 +#: awx/api/views.py:4444 msgid "Delete not allowed while there are pending notifications" msgstr "" -#: awx/api/views.py:4460 +#: awx/api/views.py:4451 msgid "Notification Template Test" msgstr "" @@ -1175,7 +1179,7 @@ msgstr "" msgid "User-Defaults" msgstr "" -#: awx/conf/registry.py:150 +#: awx/conf/registry.py:151 msgid "This value has been set manually in a settings file." msgstr "" @@ -1218,8 +1222,9 @@ msgstr "" #: awx/conf/tests/unit/test_settings.py:360 #: awx/conf/tests/unit/test_settings.py:374 #: awx/conf/tests/unit/test_settings.py:398 -#: awx/conf/tests/unit/test_settings.py:412 -#: awx/conf/tests/unit/test_settings.py:448 awx/main/conf.py:22 +#: awx/conf/tests/unit/test_settings.py:411 +#: awx/conf/tests/unit/test_settings.py:430 +#: awx/conf/tests/unit/test_settings.py:466 awx/main/conf.py:22 #: awx/main/conf.py:32 awx/main/conf.py:42 awx/main/conf.py:51 #: awx/main/conf.py:63 awx/main/conf.py:81 awx/main/conf.py:96 #: awx/main/conf.py:121 @@ -1242,7 +1247,7 @@ msgstr "" msgid "Setting Detail" msgstr "" -#: awx/conf/views.py:166 +#: awx/conf/views.py:168 msgid "Logging Connectivity Test" msgstr "" @@ -1282,57 +1287,57 @@ msgstr "" msgid "Features not found in active license." msgstr "" -#: awx/main/access.py:534 awx/main/access.py:617 awx/main/access.py:746 -#: awx/main/access.py:803 awx/main/access.py:1065 awx/main/access.py:1265 -#: awx/main/access.py:1708 +#: awx/main/access.py:534 awx/main/access.py:619 awx/main/access.py:748 +#: awx/main/access.py:801 awx/main/access.py:1063 awx/main/access.py:1263 +#: awx/main/access.py:1725 msgid "Resource is being used by running jobs" msgstr "" -#: awx/main/access.py:673 +#: awx/main/access.py:675 msgid "Unable to change inventory on a host." msgstr "" -#: awx/main/access.py:690 awx/main/access.py:735 +#: awx/main/access.py:692 awx/main/access.py:737 msgid "Cannot associate two items from different inventories." msgstr "" -#: awx/main/access.py:723 +#: awx/main/access.py:725 msgid "Unable to change inventory on a group." msgstr "" -#: awx/main/access.py:985 +#: awx/main/access.py:983 msgid "Unable to change organization on a team." msgstr "" -#: awx/main/access.py:998 +#: awx/main/access.py:996 msgid "The {} role cannot be assigned to a team" msgstr "" -#: awx/main/access.py:1000 +#: awx/main/access.py:998 msgid "The admin_role for a User cannot be assigned to a team" msgstr "" -#: awx/main/access.py:1426 +#: awx/main/access.py:1443 msgid "Job has been orphaned from its job template." msgstr "" -#: awx/main/access.py:1428 +#: awx/main/access.py:1445 msgid "You do not have execute permission to related job template." msgstr "" -#: awx/main/access.py:1431 +#: awx/main/access.py:1448 msgid "Job was launched with prompted fields." msgstr "" -#: awx/main/access.py:1433 +#: awx/main/access.py:1450 msgid " Organization level permissions required." msgstr "" -#: awx/main/access.py:1435 +#: awx/main/access.py:1452 msgid " You do not have permission to related resources." msgstr "" -#: awx/main/access.py:1781 +#: awx/main/access.py:1798 msgid "" "You do not have permission to the workflow job resources required for " "relaunch." @@ -1444,10 +1449,10 @@ msgstr "" #: awx/main/conf.py:130 awx/main/conf.py:140 awx/main/conf.py:151 #: awx/main/conf.py:161 awx/main/conf.py:171 awx/main/conf.py:181 #: awx/main/conf.py:192 awx/main/conf.py:204 awx/main/conf.py:216 -#: awx/main/conf.py:227 awx/main/conf.py:237 awx/main/conf.py:248 -#: awx/main/conf.py:258 awx/main/conf.py:268 awx/main/conf.py:278 -#: awx/main/conf.py:290 awx/main/conf.py:302 awx/main/conf.py:314 -#: awx/main/conf.py:327 +#: awx/main/conf.py:229 awx/main/conf.py:241 awx/main/conf.py:251 +#: awx/main/conf.py:262 awx/main/conf.py:272 awx/main/conf.py:282 +#: awx/main/conf.py:292 awx/main/conf.py:304 awx/main/conf.py:316 +#: awx/main/conf.py:328 awx/main/conf.py:341 msgid "Jobs" msgstr "" @@ -1523,102 +1528,113 @@ msgid "" "network latency." msgstr "" -#: awx/main/conf.py:214 awx/main/conf.py:215 +#: awx/main/conf.py:212 +msgid "Generate RSA keys for isolated instances" +msgstr "" + +#: awx/main/conf.py:213 +msgid "" +"If set, a random RSA key will be generated and distributed to isolated " +"instances. To disable this behavior and manage authentication for isolated " +"instances outside of Tower, disable this setting." +msgstr "" + +#: awx/main/conf.py:227 awx/main/conf.py:228 msgid "The RSA private key for SSH traffic to isolated instances" msgstr "" -#: awx/main/conf.py:225 awx/main/conf.py:226 +#: awx/main/conf.py:239 awx/main/conf.py:240 msgid "The RSA public key for SSH traffic to isolated instances" msgstr "" -#: awx/main/conf.py:235 +#: awx/main/conf.py:249 msgid "Extra Environment Variables" msgstr "" -#: awx/main/conf.py:236 +#: awx/main/conf.py:250 msgid "" "Additional environment variables set for playbook runs, inventory updates, " "project updates, and notification sending." msgstr "" -#: awx/main/conf.py:246 +#: awx/main/conf.py:260 msgid "Standard Output Maximum Display Size" msgstr "" -#: awx/main/conf.py:247 +#: awx/main/conf.py:261 msgid "" "Maximum Size of Standard Output in bytes to display before requiring the " "output be downloaded." msgstr "" -#: awx/main/conf.py:256 +#: awx/main/conf.py:270 msgid "Job Event Standard Output Maximum Display Size" msgstr "" -#: awx/main/conf.py:257 +#: awx/main/conf.py:271 msgid "" "Maximum Size of Standard Output in bytes to display for a single job or ad " "hoc command event. `stdout` will end with `…` when truncated." msgstr "" -#: awx/main/conf.py:266 +#: awx/main/conf.py:280 msgid "Maximum Scheduled Jobs" msgstr "" -#: awx/main/conf.py:267 +#: awx/main/conf.py:281 msgid "" "Maximum number of the same job template that can be waiting to run when " "launching from a schedule before no more are created." msgstr "" -#: awx/main/conf.py:276 +#: awx/main/conf.py:290 msgid "Ansible Callback Plugins" msgstr "" -#: awx/main/conf.py:277 +#: awx/main/conf.py:291 msgid "" "List of paths to search for extra callback plugins to be used when running " "jobs. Enter one path per line." msgstr "" -#: awx/main/conf.py:287 +#: awx/main/conf.py:301 msgid "Default Job Timeout" msgstr "" -#: awx/main/conf.py:288 +#: awx/main/conf.py:302 msgid "" "Maximum time in seconds to allow jobs to run. Use value of 0 to indicate " "that no timeout should be imposed. A timeout set on an individual job " "template will override this." msgstr "" -#: awx/main/conf.py:299 +#: awx/main/conf.py:313 msgid "Default Inventory Update Timeout" msgstr "" -#: awx/main/conf.py:300 +#: awx/main/conf.py:314 msgid "" -"Maximum time to allow inventory updates to run. Use value of 0 to indicate " -"that no timeout should be imposed. A timeout set on an individual inventory " -"source will override this." +"Maximum time in seconds to allow inventory updates to run. Use value of 0 to " +"indicate that no timeout should be imposed. A timeout set on an individual " +"inventory source will override this." msgstr "" -#: awx/main/conf.py:311 +#: awx/main/conf.py:325 msgid "Default Project Update Timeout" msgstr "" -#: awx/main/conf.py:312 +#: awx/main/conf.py:326 msgid "" -"Maximum time to allow project updates to run. Use value of 0 to indicate " -"that no timeout should be imposed. A timeout set on an individual project " -"will override this." +"Maximum time in seconds to allow project updates to run. Use value of 0 to " +"indicate that no timeout should be imposed. A timeout set on an individual " +"project will override this." msgstr "" -#: awx/main/conf.py:323 +#: awx/main/conf.py:337 msgid "Per-Host Ansible Fact Cache Timeout" msgstr "" -#: awx/main/conf.py:324 +#: awx/main/conf.py:338 msgid "" "Maximum time, in seconds, that stored Ansible facts are considered valid " "since the last time they were modified. Only valid, non-stale, facts will be " @@ -1626,62 +1642,62 @@ msgid "" "ansible_facts from the database." msgstr "" -#: awx/main/conf.py:335 +#: awx/main/conf.py:350 msgid "Logging Aggregator" msgstr "" -#: awx/main/conf.py:336 +#: awx/main/conf.py:351 msgid "Hostname/IP where external logs will be sent to." msgstr "" -#: awx/main/conf.py:337 awx/main/conf.py:347 awx/main/conf.py:358 -#: awx/main/conf.py:368 awx/main/conf.py:380 awx/main/conf.py:395 -#: awx/main/conf.py:407 awx/main/conf.py:416 awx/main/conf.py:426 -#: awx/main/conf.py:436 awx/main/conf.py:447 awx/main/conf.py:459 -#: awx/main/conf.py:472 +#: awx/main/conf.py:352 awx/main/conf.py:363 awx/main/conf.py:375 +#: awx/main/conf.py:385 awx/main/conf.py:397 awx/main/conf.py:412 +#: awx/main/conf.py:424 awx/main/conf.py:433 awx/main/conf.py:443 +#: awx/main/conf.py:453 awx/main/conf.py:464 awx/main/conf.py:476 +#: awx/main/conf.py:489 msgid "Logging" msgstr "" -#: awx/main/conf.py:344 +#: awx/main/conf.py:360 msgid "Logging Aggregator Port" msgstr "" -#: awx/main/conf.py:345 +#: awx/main/conf.py:361 msgid "" "Port on Logging Aggregator to send logs to (if required and not provided in " "Logging Aggregator)." msgstr "" -#: awx/main/conf.py:356 +#: awx/main/conf.py:373 msgid "Logging Aggregator Type" msgstr "" -#: awx/main/conf.py:357 +#: awx/main/conf.py:374 msgid "Format messages for the chosen log aggregator." msgstr "" -#: awx/main/conf.py:366 +#: awx/main/conf.py:383 msgid "Logging Aggregator Username" msgstr "" -#: awx/main/conf.py:367 +#: awx/main/conf.py:384 msgid "Username for external log aggregator (if required)." msgstr "" -#: awx/main/conf.py:378 +#: awx/main/conf.py:395 msgid "Logging Aggregator Password/Token" msgstr "" -#: awx/main/conf.py:379 +#: awx/main/conf.py:396 msgid "" "Password or authentication token for external log aggregator (if required)." msgstr "" -#: awx/main/conf.py:388 +#: awx/main/conf.py:405 msgid "Loggers Sending Data to Log Aggregator Form" msgstr "" -#: awx/main/conf.py:389 +#: awx/main/conf.py:406 msgid "" "List of loggers that will send HTTP logs to the collector, these can include " "any or all of: \n" @@ -1691,11 +1707,11 @@ msgid "" "system_tracking - facts gathered from scan jobs." msgstr "" -#: awx/main/conf.py:402 +#: awx/main/conf.py:419 msgid "Log System Tracking Facts Individually" msgstr "" -#: awx/main/conf.py:403 +#: awx/main/conf.py:420 msgid "" "If set, system tracking facts will be sent for each package, service, " "orother item found in a scan, allowing for greater search query granularity. " @@ -1703,45 +1719,45 @@ msgid "" "efficiency in fact processing." msgstr "" -#: awx/main/conf.py:414 +#: awx/main/conf.py:431 msgid "Enable External Logging" msgstr "" -#: awx/main/conf.py:415 +#: awx/main/conf.py:432 msgid "Enable sending logs to external log aggregator." msgstr "" -#: awx/main/conf.py:424 +#: awx/main/conf.py:441 msgid "Cluster-wide Tower unique identifier." msgstr "" -#: awx/main/conf.py:425 +#: awx/main/conf.py:442 msgid "Useful to uniquely identify Tower instances." msgstr "" -#: awx/main/conf.py:434 +#: awx/main/conf.py:451 msgid "Logging Aggregator Protocol" msgstr "" -#: awx/main/conf.py:435 +#: awx/main/conf.py:452 msgid "Protocol used to communicate with log aggregator." msgstr "" -#: awx/main/conf.py:443 +#: awx/main/conf.py:460 msgid "TCP Connection Timeout" msgstr "" -#: awx/main/conf.py:444 +#: awx/main/conf.py:461 msgid "" "Number of seconds for a TCP connection to external log aggregator to " "timeout. Applies to HTTPS and TCP log aggregator protocols." msgstr "" -#: awx/main/conf.py:454 +#: awx/main/conf.py:471 msgid "Enable/disable HTTPS certificate verification" msgstr "" -#: awx/main/conf.py:455 +#: awx/main/conf.py:472 msgid "" "Flag to control enable/disable of certificate verification when " "LOG_AGGREGATOR_PROTOCOL is \"https\". If enabled, Tower's log handler will " @@ -1749,11 +1765,11 @@ msgid "" "connection." msgstr "" -#: awx/main/conf.py:467 +#: awx/main/conf.py:484 msgid "Logging Aggregator Level Threshold" msgstr "" -#: awx/main/conf.py:468 +#: awx/main/conf.py:485 msgid "" "Level threshold used by log handler. Severities from lowest to highest are " "DEBUG, INFO, WARNING, ERROR, CRITICAL. Messages less severe than the " @@ -1761,7 +1777,7 @@ msgid "" "anlytics ignore this setting)" msgstr "" -#: awx/main/conf.py:491 awx/sso/conf.py:1112 +#: awx/main/conf.py:508 awx/sso/conf.py:1105 msgid "\n" msgstr "" @@ -1793,43 +1809,48 @@ msgstr "" msgid "Runas" msgstr "" -#: awx/main/fields.py:55 +#: awx/main/fields.py:56 #, python-format msgid "'%s' is not one of ['%s']" msgstr "" -#: awx/main/fields.py:520 +#: awx/main/fields.py:531 +#, python-format +msgid "cannot be set unless \"%s\" is set" +msgstr "" + +#: awx/main/fields.py:547 #, python-format msgid "required for %s" msgstr "" -#: awx/main/fields.py:544 +#: awx/main/fields.py:571 msgid "must be set when SSH key is encrypted." msgstr "" -#: awx/main/fields.py:547 -msgid "should not be set when SSH key is empty." -msgstr "" - -#: awx/main/fields.py:549 +#: awx/main/fields.py:577 msgid "should not be set when SSH key is not encrypted." msgstr "" -#: awx/main/fields.py:613 +#: awx/main/fields.py:635 +msgid "'dependencies' is not supported for custom credentials." +msgstr "" + +#: awx/main/fields.py:649 msgid "\"tower\" is a reserved field name" msgstr "" -#: awx/main/fields.py:620 +#: awx/main/fields.py:656 #, python-format msgid "field IDs must be unique (%s)" msgstr "" -#: awx/main/fields.py:633 +#: awx/main/fields.py:669 #, python-format msgid "%s not allowed for %s type (%s)" msgstr "" -#: awx/main/fields.py:717 +#: awx/main/fields.py:753 #, python-format msgid "%s uses an undefined field (%s)" msgstr "" @@ -1928,44 +1949,44 @@ msgstr "" msgid "No argument passed to %s module." msgstr "" -#: awx/main/models/ad_hoc_commands.py:243 awx/main/models/jobs.py:900 +#: awx/main/models/ad_hoc_commands.py:245 awx/main/models/jobs.py:904 msgid "Host Failed" msgstr "" -#: awx/main/models/ad_hoc_commands.py:244 awx/main/models/jobs.py:901 +#: awx/main/models/ad_hoc_commands.py:246 awx/main/models/jobs.py:905 msgid "Host OK" msgstr "" -#: awx/main/models/ad_hoc_commands.py:245 awx/main/models/jobs.py:904 +#: awx/main/models/ad_hoc_commands.py:247 awx/main/models/jobs.py:908 msgid "Host Unreachable" msgstr "" -#: awx/main/models/ad_hoc_commands.py:250 awx/main/models/jobs.py:903 +#: awx/main/models/ad_hoc_commands.py:252 awx/main/models/jobs.py:907 msgid "Host Skipped" msgstr "" -#: awx/main/models/ad_hoc_commands.py:260 awx/main/models/jobs.py:931 +#: awx/main/models/ad_hoc_commands.py:262 awx/main/models/jobs.py:935 msgid "Debug" msgstr "" -#: awx/main/models/ad_hoc_commands.py:261 awx/main/models/jobs.py:932 +#: awx/main/models/ad_hoc_commands.py:263 awx/main/models/jobs.py:936 msgid "Verbose" msgstr "" -#: awx/main/models/ad_hoc_commands.py:262 awx/main/models/jobs.py:933 +#: awx/main/models/ad_hoc_commands.py:264 awx/main/models/jobs.py:937 msgid "Deprecated" msgstr "" -#: awx/main/models/ad_hoc_commands.py:263 awx/main/models/jobs.py:934 +#: awx/main/models/ad_hoc_commands.py:265 awx/main/models/jobs.py:938 msgid "Warning" msgstr "" -#: awx/main/models/ad_hoc_commands.py:264 awx/main/models/jobs.py:935 +#: awx/main/models/ad_hoc_commands.py:266 awx/main/models/jobs.py:939 msgid "System Warning" msgstr "" -#: awx/main/models/ad_hoc_commands.py:265 awx/main/models/jobs.py:936 -#: awx/main/models/unified_jobs.py:63 +#: awx/main/models/ad_hoc_commands.py:267 awx/main/models/jobs.py:940 +#: awx/main/models/unified_jobs.py:64 msgid "Error" msgstr "" @@ -2161,325 +2182,354 @@ msgstr "" msgid "Instance Group to remotely control this group." msgstr "" -#: awx/main/models/inventory.py:51 +#: awx/main/models/inventory.py:52 msgid "Hosts have a direct link to this inventory." msgstr "" -#: awx/main/models/inventory.py:52 +#: awx/main/models/inventory.py:53 msgid "Hosts for inventory generated using the host_filter property." msgstr "" -#: awx/main/models/inventory.py:57 +#: awx/main/models/inventory.py:58 msgid "inventories" msgstr "" -#: awx/main/models/inventory.py:64 +#: awx/main/models/inventory.py:65 msgid "Organization containing this inventory." msgstr "" -#: awx/main/models/inventory.py:71 +#: awx/main/models/inventory.py:72 msgid "Inventory variables in JSON or YAML format." msgstr "" -#: awx/main/models/inventory.py:76 +#: awx/main/models/inventory.py:77 msgid "Flag indicating whether any hosts in this inventory have failed." msgstr "" -#: awx/main/models/inventory.py:81 +#: awx/main/models/inventory.py:82 msgid "Total number of hosts in this inventory." msgstr "" -#: awx/main/models/inventory.py:86 +#: awx/main/models/inventory.py:87 msgid "Number of hosts in this inventory with active failures." msgstr "" -#: awx/main/models/inventory.py:91 +#: awx/main/models/inventory.py:92 msgid "Total number of groups in this inventory." msgstr "" -#: awx/main/models/inventory.py:96 +#: awx/main/models/inventory.py:97 msgid "Number of groups in this inventory with active failures." msgstr "" -#: awx/main/models/inventory.py:101 +#: awx/main/models/inventory.py:102 msgid "" "Flag indicating whether this inventory has any external inventory sources." msgstr "" -#: awx/main/models/inventory.py:106 +#: awx/main/models/inventory.py:107 msgid "" "Total number of external inventory sources configured within this inventory." msgstr "" -#: awx/main/models/inventory.py:111 +#: awx/main/models/inventory.py:112 msgid "Number of external inventory sources in this inventory with failures." msgstr "" -#: awx/main/models/inventory.py:118 +#: awx/main/models/inventory.py:119 msgid "Kind of inventory being represented." msgstr "" -#: awx/main/models/inventory.py:124 +#: awx/main/models/inventory.py:125 msgid "Filter that will be applied to the hosts of this inventory." msgstr "" -#: awx/main/models/inventory.py:151 +#: awx/main/models/inventory.py:152 msgid "" "Credentials to be used by hosts belonging to this inventory when accessing " "Red Hat Insights API." msgstr "" -#: awx/main/models/inventory.py:160 +#: awx/main/models/inventory.py:161 msgid "Flag indicating the inventory is being deleted." msgstr "" -#: awx/main/models/inventory.py:373 +#: awx/main/models/inventory.py:374 msgid "Assignment not allowed for Smart Inventory" msgstr "" -#: awx/main/models/inventory.py:375 awx/main/models/projects.py:148 +#: awx/main/models/inventory.py:376 awx/main/models/projects.py:148 msgid "Credential kind must be 'insights'." msgstr "" -#: awx/main/models/inventory.py:439 +#: awx/main/models/inventory.py:443 msgid "Is this host online and available for running jobs?" msgstr "" -#: awx/main/models/inventory.py:445 +#: awx/main/models/inventory.py:449 msgid "" "The value used by the remote inventory source to uniquely identify the host" msgstr "" -#: awx/main/models/inventory.py:450 +#: awx/main/models/inventory.py:454 msgid "Host variables in JSON or YAML format." msgstr "" -#: awx/main/models/inventory.py:472 +#: awx/main/models/inventory.py:476 msgid "Flag indicating whether the last job failed for this host." msgstr "" -#: awx/main/models/inventory.py:477 +#: awx/main/models/inventory.py:481 msgid "" "Flag indicating whether this host was created/updated from any external " "inventory sources." msgstr "" -#: awx/main/models/inventory.py:483 +#: awx/main/models/inventory.py:487 msgid "Inventory source(s) that created or modified this host." msgstr "" -#: awx/main/models/inventory.py:488 +#: awx/main/models/inventory.py:492 msgid "Arbitrary JSON structure of most recent ansible_facts, per-host." msgstr "" -#: awx/main/models/inventory.py:494 +#: awx/main/models/inventory.py:498 msgid "The date and time ansible_facts was last modified." msgstr "" -#: awx/main/models/inventory.py:501 +#: awx/main/models/inventory.py:505 msgid "Red Hat Insights host unique identifier." msgstr "" -#: awx/main/models/inventory.py:629 +#: awx/main/models/inventory.py:633 msgid "Group variables in JSON or YAML format." msgstr "" -#: awx/main/models/inventory.py:635 +#: awx/main/models/inventory.py:639 msgid "Hosts associated directly with this group." msgstr "" -#: awx/main/models/inventory.py:640 +#: awx/main/models/inventory.py:644 msgid "Total number of hosts directly or indirectly in this group." msgstr "" -#: awx/main/models/inventory.py:645 +#: awx/main/models/inventory.py:649 msgid "Flag indicating whether this group has any hosts with active failures." msgstr "" -#: awx/main/models/inventory.py:650 +#: awx/main/models/inventory.py:654 msgid "Number of hosts in this group with active failures." msgstr "" -#: awx/main/models/inventory.py:655 +#: awx/main/models/inventory.py:659 msgid "Total number of child groups contained within this group." msgstr "" -#: awx/main/models/inventory.py:660 +#: awx/main/models/inventory.py:664 msgid "Number of child groups within this group that have active failures." msgstr "" -#: awx/main/models/inventory.py:665 +#: awx/main/models/inventory.py:669 msgid "" "Flag indicating whether this group was created/updated from any external " "inventory sources." msgstr "" -#: awx/main/models/inventory.py:671 +#: awx/main/models/inventory.py:675 msgid "Inventory source(s) that created or modified this group." msgstr "" -#: awx/main/models/inventory.py:861 awx/main/models/projects.py:42 -#: awx/main/models/unified_jobs.py:427 +#: awx/main/models/inventory.py:865 awx/main/models/projects.py:42 +#: awx/main/models/unified_jobs.py:428 msgid "Manual" msgstr "" -#: awx/main/models/inventory.py:862 +#: awx/main/models/inventory.py:866 msgid "File, Directory or Script" msgstr "" -#: awx/main/models/inventory.py:863 +#: awx/main/models/inventory.py:867 msgid "Sourced from a Project" msgstr "" -#: awx/main/models/inventory.py:864 +#: awx/main/models/inventory.py:868 msgid "Amazon EC2" msgstr "" -#: awx/main/models/inventory.py:865 +#: awx/main/models/inventory.py:869 msgid "Google Compute Engine" msgstr "" -#: awx/main/models/inventory.py:866 +#: awx/main/models/inventory.py:870 msgid "Microsoft Azure Classic (deprecated)" msgstr "" -#: awx/main/models/inventory.py:867 +#: awx/main/models/inventory.py:871 msgid "Microsoft Azure Resource Manager" msgstr "" -#: awx/main/models/inventory.py:868 +#: awx/main/models/inventory.py:872 msgid "VMware vCenter" msgstr "" -#: awx/main/models/inventory.py:869 +#: awx/main/models/inventory.py:873 msgid "Red Hat Satellite 6" msgstr "" -#: awx/main/models/inventory.py:870 +#: awx/main/models/inventory.py:874 msgid "Red Hat CloudForms" msgstr "" -#: awx/main/models/inventory.py:871 +#: awx/main/models/inventory.py:875 msgid "OpenStack" msgstr "" -#: awx/main/models/inventory.py:872 +#: awx/main/models/inventory.py:876 msgid "Custom Script" msgstr "" -#: awx/main/models/inventory.py:989 +#: awx/main/models/inventory.py:993 msgid "Inventory source variables in YAML or JSON format." msgstr "" -#: awx/main/models/inventory.py:1008 +#: awx/main/models/inventory.py:1012 msgid "" "Comma-separated list of filter expressions (EC2 only). Hosts are imported " "when ANY of the filters match." msgstr "" -#: awx/main/models/inventory.py:1014 +#: awx/main/models/inventory.py:1018 msgid "Limit groups automatically created from inventory source (EC2 only)." msgstr "" -#: awx/main/models/inventory.py:1018 +#: awx/main/models/inventory.py:1022 msgid "Overwrite local groups and hosts from remote inventory source." msgstr "" -#: awx/main/models/inventory.py:1022 +#: awx/main/models/inventory.py:1026 msgid "Overwrite local variables from remote inventory source." msgstr "" -#: awx/main/models/inventory.py:1027 awx/main/models/jobs.py:159 +#: awx/main/models/inventory.py:1031 awx/main/models/jobs.py:159 #: awx/main/models/projects.py:117 msgid "The amount of time (in seconds) to run before the task is canceled." msgstr "" -#: awx/main/models/inventory.py:1060 -msgid "Availability Zone" -msgstr "" - -#: awx/main/models/inventory.py:1061 +#: awx/main/models/inventory.py:1064 msgid "Image ID" msgstr "" -#: awx/main/models/inventory.py:1062 -msgid "Instance ID" -msgstr "" - -#: awx/main/models/inventory.py:1063 -msgid "Instance Type" -msgstr "" - -#: awx/main/models/inventory.py:1064 -msgid "Key Name" -msgstr "" - #: awx/main/models/inventory.py:1065 -msgid "Region" +msgid "Availability Zone" msgstr "" #: awx/main/models/inventory.py:1066 -msgid "Security Group" +msgid "Account" msgstr "" #: awx/main/models/inventory.py:1067 -msgid "Tags" +msgid "Instance ID" msgstr "" #: awx/main/models/inventory.py:1068 -msgid "VPC ID" +msgid "Instance State" msgstr "" #: awx/main/models/inventory.py:1069 +msgid "Instance Type" +msgstr "" + +#: awx/main/models/inventory.py:1070 +msgid "Key Name" +msgstr "" + +#: awx/main/models/inventory.py:1071 +msgid "Region" +msgstr "" + +#: awx/main/models/inventory.py:1072 +msgid "Security Group" +msgstr "" + +#: awx/main/models/inventory.py:1073 +msgid "Tags" +msgstr "" + +#: awx/main/models/inventory.py:1074 msgid "Tag None" msgstr "" -#: awx/main/models/inventory.py:1132 +#: awx/main/models/inventory.py:1075 +msgid "VPC ID" +msgstr "" + +#: awx/main/models/inventory.py:1138 #, python-format msgid "" "Cloud-based inventory sources (such as %s) require credentials for the " "matching cloud service." msgstr "" -#: awx/main/models/inventory.py:1139 +#: awx/main/models/inventory.py:1145 msgid "Credential is required for a cloud source." msgstr "" -#: awx/main/models/inventory.py:1161 +#: awx/main/models/inventory.py:1167 #, python-format msgid "Invalid %(source)s region: %(region)s" msgstr "" -#: awx/main/models/inventory.py:1185 +#: awx/main/models/inventory.py:1191 #, python-format msgid "Invalid filter expression: %(filter)s" msgstr "" -#: awx/main/models/inventory.py:1206 +#: awx/main/models/inventory.py:1212 #, python-format msgid "Invalid group by choice: %(choice)s" msgstr "" -#: awx/main/models/inventory.py:1241 +#: awx/main/models/inventory.py:1247 msgid "Project containing inventory file used as source." msgstr "" -#: awx/main/models/inventory.py:1389 +#: awx/main/models/inventory.py:1395 #, python-format msgid "" "Unable to configure this item for cloud sync. It is already managed by %s." msgstr "" -#: awx/main/models/inventory.py:1414 +#: awx/main/models/inventory.py:1405 +msgid "" +"More than one SCM-based inventory source with update on project update per-" +"inventory not allowed." +msgstr "" + +#: awx/main/models/inventory.py:1412 +msgid "" +"Cannot update SCM-based inventory source on launch if set to update on " +"project update. Instead, configure the corresponding source project to " +"update on launch." +msgstr "" + +#: awx/main/models/inventory.py:1418 +msgid "SCM type sources must set `overwrite_vars` to `true`." +msgstr "" + +#: awx/main/models/inventory.py:1423 +msgid "Cannot set source_path if not SCM type." +msgstr "" + +#: awx/main/models/inventory.py:1448 msgid "" "Inventory files from this Project Update were used for the inventory update." msgstr "" -#: awx/main/models/inventory.py:1528 +#: awx/main/models/inventory.py:1561 msgid "Inventory script contents" msgstr "" -#: awx/main/models/inventory.py:1533 +#: awx/main/models/inventory.py:1566 msgid "Organization owning this inventory script" msgstr "" @@ -2512,121 +2562,121 @@ msgstr "" msgid "Job Template must provide 'credential' or allow prompting for it." msgstr "" -#: awx/main/models/jobs.py:421 +#: awx/main/models/jobs.py:422 msgid "Cannot override job_type to or from a scan job." msgstr "" -#: awx/main/models/jobs.py:487 awx/main/models/projects.py:263 +#: awx/main/models/jobs.py:488 awx/main/models/projects.py:263 msgid "SCM Revision" msgstr "" -#: awx/main/models/jobs.py:488 +#: awx/main/models/jobs.py:489 msgid "The SCM Revision from the Project used for this job, if available" msgstr "" -#: awx/main/models/jobs.py:496 +#: awx/main/models/jobs.py:497 msgid "" "The SCM Refresh task used to make sure the playbooks were available for the " "job run" msgstr "" -#: awx/main/models/jobs.py:799 +#: awx/main/models/jobs.py:802 msgid "job host summaries" msgstr "" -#: awx/main/models/jobs.py:902 +#: awx/main/models/jobs.py:906 msgid "Host Failure" msgstr "" -#: awx/main/models/jobs.py:905 awx/main/models/jobs.py:919 +#: awx/main/models/jobs.py:909 awx/main/models/jobs.py:923 msgid "No Hosts Remaining" msgstr "" -#: awx/main/models/jobs.py:906 +#: awx/main/models/jobs.py:910 msgid "Host Polling" msgstr "" -#: awx/main/models/jobs.py:907 +#: awx/main/models/jobs.py:911 msgid "Host Async OK" msgstr "" -#: awx/main/models/jobs.py:908 +#: awx/main/models/jobs.py:912 msgid "Host Async Failure" msgstr "" -#: awx/main/models/jobs.py:909 +#: awx/main/models/jobs.py:913 msgid "Item OK" msgstr "" -#: awx/main/models/jobs.py:910 +#: awx/main/models/jobs.py:914 msgid "Item Failed" msgstr "" -#: awx/main/models/jobs.py:911 +#: awx/main/models/jobs.py:915 msgid "Item Skipped" msgstr "" -#: awx/main/models/jobs.py:912 +#: awx/main/models/jobs.py:916 msgid "Host Retry" msgstr "" -#: awx/main/models/jobs.py:914 +#: awx/main/models/jobs.py:918 msgid "File Difference" msgstr "" -#: awx/main/models/jobs.py:915 +#: awx/main/models/jobs.py:919 msgid "Playbook Started" msgstr "" -#: awx/main/models/jobs.py:916 +#: awx/main/models/jobs.py:920 msgid "Running Handlers" msgstr "" -#: awx/main/models/jobs.py:917 +#: awx/main/models/jobs.py:921 msgid "Including File" msgstr "" -#: awx/main/models/jobs.py:918 +#: awx/main/models/jobs.py:922 msgid "No Hosts Matched" msgstr "" -#: awx/main/models/jobs.py:920 +#: awx/main/models/jobs.py:924 msgid "Task Started" msgstr "" -#: awx/main/models/jobs.py:922 +#: awx/main/models/jobs.py:926 msgid "Variables Prompted" msgstr "" -#: awx/main/models/jobs.py:923 +#: awx/main/models/jobs.py:927 msgid "Gathering Facts" msgstr "" -#: awx/main/models/jobs.py:924 +#: awx/main/models/jobs.py:928 msgid "internal: on Import for Host" msgstr "" -#: awx/main/models/jobs.py:925 +#: awx/main/models/jobs.py:929 msgid "internal: on Not Import for Host" msgstr "" -#: awx/main/models/jobs.py:926 +#: awx/main/models/jobs.py:930 msgid "Play Started" msgstr "" -#: awx/main/models/jobs.py:927 +#: awx/main/models/jobs.py:931 msgid "Playbook Complete" msgstr "" -#: awx/main/models/jobs.py:1337 +#: awx/main/models/jobs.py:1363 msgid "Remove jobs older than a certain number of days" msgstr "" -#: awx/main/models/jobs.py:1338 +#: awx/main/models/jobs.py:1364 msgid "Remove activity stream entries older than a certain number of days" msgstr "" -#: awx/main/models/jobs.py:1339 +#: awx/main/models/jobs.py:1365 msgid "Purge and/or reduce the granularity of system tracking data" msgstr "" @@ -2634,15 +2684,15 @@ msgstr "" msgid "Organization this label belongs to." msgstr "" -#: awx/main/models/notifications.py:138 awx/main/models/unified_jobs.py:58 +#: awx/main/models/notifications.py:138 awx/main/models/unified_jobs.py:59 msgid "Pending" msgstr "" -#: awx/main/models/notifications.py:139 awx/main/models/unified_jobs.py:61 +#: awx/main/models/notifications.py:139 awx/main/models/unified_jobs.py:62 msgid "Successful" msgstr "" -#: awx/main/models/notifications.py:140 awx/main/models/unified_jobs.py:62 +#: awx/main/models/notifications.py:140 awx/main/models/unified_jobs.py:63 msgid "Failed" msgstr "" @@ -2901,102 +2951,97 @@ msgstr "" msgid "days must be a positive integer." msgstr "" -#: awx/main/models/unified_jobs.py:57 +#: awx/main/models/unified_jobs.py:58 msgid "New" msgstr "" -#: awx/main/models/unified_jobs.py:59 +#: awx/main/models/unified_jobs.py:60 msgid "Waiting" msgstr "" -#: awx/main/models/unified_jobs.py:60 +#: awx/main/models/unified_jobs.py:61 msgid "Running" msgstr "" -#: awx/main/models/unified_jobs.py:64 +#: awx/main/models/unified_jobs.py:65 msgid "Canceled" msgstr "" -#: awx/main/models/unified_jobs.py:68 +#: awx/main/models/unified_jobs.py:69 msgid "Never Updated" msgstr "" -#: awx/main/models/unified_jobs.py:72 awx/ui/templates/ui/index.html:67 +#: awx/main/models/unified_jobs.py:73 awx/ui/templates/ui/index.html:67 #: awx/ui/templates/ui/index.html.py:86 msgid "OK" msgstr "" -#: awx/main/models/unified_jobs.py:73 +#: awx/main/models/unified_jobs.py:74 msgid "Missing" msgstr "" -#: awx/main/models/unified_jobs.py:77 +#: awx/main/models/unified_jobs.py:78 msgid "No External Source" msgstr "" -#: awx/main/models/unified_jobs.py:84 +#: awx/main/models/unified_jobs.py:85 msgid "Updating" msgstr "" -#: awx/main/models/unified_jobs.py:428 +#: awx/main/models/unified_jobs.py:429 msgid "Relaunch" msgstr "" -#: awx/main/models/unified_jobs.py:429 +#: awx/main/models/unified_jobs.py:430 msgid "Callback" msgstr "" -#: awx/main/models/unified_jobs.py:430 +#: awx/main/models/unified_jobs.py:431 msgid "Scheduled" msgstr "" -#: awx/main/models/unified_jobs.py:431 +#: awx/main/models/unified_jobs.py:432 msgid "Dependency" msgstr "" -#: awx/main/models/unified_jobs.py:432 +#: awx/main/models/unified_jobs.py:433 msgid "Workflow" msgstr "" -#: awx/main/models/unified_jobs.py:433 +#: awx/main/models/unified_jobs.py:434 msgid "Sync" msgstr "" -#: awx/main/models/unified_jobs.py:480 +#: awx/main/models/unified_jobs.py:481 msgid "The node the job executed on." msgstr "" -#: awx/main/models/unified_jobs.py:506 +#: awx/main/models/unified_jobs.py:507 msgid "The date and time the job was queued for starting." msgstr "" -#: awx/main/models/unified_jobs.py:512 +#: awx/main/models/unified_jobs.py:513 msgid "The date and time the job finished execution." msgstr "" -#: awx/main/models/unified_jobs.py:518 +#: awx/main/models/unified_jobs.py:519 msgid "Elapsed time in seconds that the job ran." msgstr "" -#: awx/main/models/unified_jobs.py:540 +#: awx/main/models/unified_jobs.py:541 msgid "" "A status field to indicate the state of the job if it wasn't able to run and " "capture stdout" msgstr "" -#: awx/main/models/unified_jobs.py:579 +#: awx/main/models/unified_jobs.py:580 msgid "The Rampart/Instance group the job was run under" msgstr "" #: awx/main/notifications/base.py:17 -msgid "" -"{} #{} had status {}, view details at {}\n" -"\n" -msgstr "" - #: awx/main/notifications/email_backend.py:28 msgid "" -"{} #{} had status {} on Ansible Tower, view details at {}\n" +"{} #{} had status {}, view details at {}\n" "\n" msgstr "" @@ -3031,31 +3076,31 @@ msgstr "" msgid "Error sending notification webhook: {}" msgstr "" -#: awx/main/scheduler/__init__.py:153 +#: awx/main/scheduler/__init__.py:184 msgid "" "Job spawned from workflow could not start because it was not in the right " "state or required manual credentials" msgstr "" -#: awx/main/scheduler/__init__.py:157 +#: awx/main/scheduler/__init__.py:188 msgid "" "Job spawned from workflow could not start because it was missing a related " "resource such as project or inventory" msgstr "" -#: awx/main/tasks.py:175 +#: awx/main/tasks.py:184 msgid "Ansible Tower host usage over 90%" msgstr "" -#: awx/main/tasks.py:180 +#: awx/main/tasks.py:189 msgid "Ansible Tower license will expire soon" msgstr "" -#: awx/main/tasks.py:308 +#: awx/main/tasks.py:318 msgid "status_str must be either succeeded or failed" msgstr "" -#: awx/main/tasks.py:1498 +#: awx/main/tasks.py:1531 msgid "Dependent inventory update {} was canceled." msgstr "" @@ -3206,287 +3251,287 @@ msgstr "" msgid "A server error has occurred." msgstr "" -#: awx/settings/defaults.py:663 +#: awx/settings/defaults.py:664 msgid "US East (Northern Virginia)" msgstr "" -#: awx/settings/defaults.py:664 +#: awx/settings/defaults.py:665 msgid "US East (Ohio)" msgstr "" -#: awx/settings/defaults.py:665 +#: awx/settings/defaults.py:666 msgid "US West (Oregon)" msgstr "" -#: awx/settings/defaults.py:666 +#: awx/settings/defaults.py:667 msgid "US West (Northern California)" msgstr "" -#: awx/settings/defaults.py:667 +#: awx/settings/defaults.py:668 msgid "Canada (Central)" msgstr "" -#: awx/settings/defaults.py:668 +#: awx/settings/defaults.py:669 msgid "EU (Frankfurt)" msgstr "" -#: awx/settings/defaults.py:669 +#: awx/settings/defaults.py:670 msgid "EU (Ireland)" msgstr "" -#: awx/settings/defaults.py:670 +#: awx/settings/defaults.py:671 msgid "EU (London)" msgstr "" -#: awx/settings/defaults.py:671 +#: awx/settings/defaults.py:672 msgid "Asia Pacific (Singapore)" msgstr "" -#: awx/settings/defaults.py:672 +#: awx/settings/defaults.py:673 msgid "Asia Pacific (Sydney)" msgstr "" -#: awx/settings/defaults.py:673 +#: awx/settings/defaults.py:674 msgid "Asia Pacific (Tokyo)" msgstr "" -#: awx/settings/defaults.py:674 +#: awx/settings/defaults.py:675 msgid "Asia Pacific (Seoul)" msgstr "" -#: awx/settings/defaults.py:675 +#: awx/settings/defaults.py:676 msgid "Asia Pacific (Mumbai)" msgstr "" -#: awx/settings/defaults.py:676 +#: awx/settings/defaults.py:677 msgid "South America (Sao Paulo)" msgstr "" -#: awx/settings/defaults.py:677 +#: awx/settings/defaults.py:678 msgid "US West (GovCloud)" msgstr "" -#: awx/settings/defaults.py:678 +#: awx/settings/defaults.py:679 msgid "China (Beijing)" msgstr "" -#: awx/settings/defaults.py:727 +#: awx/settings/defaults.py:728 msgid "US East 1 (B)" msgstr "" -#: awx/settings/defaults.py:728 +#: awx/settings/defaults.py:729 msgid "US East 1 (C)" msgstr "" -#: awx/settings/defaults.py:729 +#: awx/settings/defaults.py:730 msgid "US East 1 (D)" msgstr "" -#: awx/settings/defaults.py:730 +#: awx/settings/defaults.py:731 msgid "US East 4 (A)" msgstr "" -#: awx/settings/defaults.py:731 +#: awx/settings/defaults.py:732 msgid "US East 4 (B)" msgstr "" -#: awx/settings/defaults.py:732 +#: awx/settings/defaults.py:733 msgid "US East 4 (C)" msgstr "" -#: awx/settings/defaults.py:733 +#: awx/settings/defaults.py:734 msgid "US Central (A)" msgstr "" -#: awx/settings/defaults.py:734 +#: awx/settings/defaults.py:735 msgid "US Central (B)" msgstr "" -#: awx/settings/defaults.py:735 +#: awx/settings/defaults.py:736 msgid "US Central (C)" msgstr "" -#: awx/settings/defaults.py:736 +#: awx/settings/defaults.py:737 msgid "US Central (F)" msgstr "" -#: awx/settings/defaults.py:737 +#: awx/settings/defaults.py:738 msgid "US West (A)" msgstr "" -#: awx/settings/defaults.py:738 +#: awx/settings/defaults.py:739 msgid "US West (B)" msgstr "" -#: awx/settings/defaults.py:739 +#: awx/settings/defaults.py:740 msgid "US West (C)" msgstr "" -#: awx/settings/defaults.py:740 +#: awx/settings/defaults.py:741 msgid "Europe West 1 (B)" msgstr "" -#: awx/settings/defaults.py:741 +#: awx/settings/defaults.py:742 msgid "Europe West 1 (C)" msgstr "" -#: awx/settings/defaults.py:742 +#: awx/settings/defaults.py:743 msgid "Europe West 1 (D)" msgstr "" -#: awx/settings/defaults.py:743 +#: awx/settings/defaults.py:744 msgid "Europe West 2 (A)" msgstr "" -#: awx/settings/defaults.py:744 +#: awx/settings/defaults.py:745 msgid "Europe West 2 (B)" msgstr "" -#: awx/settings/defaults.py:745 +#: awx/settings/defaults.py:746 msgid "Europe West 2 (C)" msgstr "" -#: awx/settings/defaults.py:746 +#: awx/settings/defaults.py:747 msgid "Asia East (A)" msgstr "" -#: awx/settings/defaults.py:747 +#: awx/settings/defaults.py:748 msgid "Asia East (B)" msgstr "" -#: awx/settings/defaults.py:748 +#: awx/settings/defaults.py:749 msgid "Asia East (C)" msgstr "" -#: awx/settings/defaults.py:749 +#: awx/settings/defaults.py:750 msgid "Asia Southeast (A)" msgstr "" -#: awx/settings/defaults.py:750 +#: awx/settings/defaults.py:751 msgid "Asia Southeast (B)" msgstr "" -#: awx/settings/defaults.py:751 +#: awx/settings/defaults.py:752 msgid "Asia Northeast (A)" msgstr "" -#: awx/settings/defaults.py:752 +#: awx/settings/defaults.py:753 msgid "Asia Northeast (B)" msgstr "" -#: awx/settings/defaults.py:753 +#: awx/settings/defaults.py:754 msgid "Asia Northeast (C)" msgstr "" -#: awx/settings/defaults.py:754 +#: awx/settings/defaults.py:755 msgid "Australia Southeast (A)" msgstr "" -#: awx/settings/defaults.py:755 +#: awx/settings/defaults.py:756 msgid "Australia Southeast (B)" msgstr "" -#: awx/settings/defaults.py:756 +#: awx/settings/defaults.py:757 msgid "Australia Southeast (C)" msgstr "" -#: awx/settings/defaults.py:780 +#: awx/settings/defaults.py:781 msgid "US East" msgstr "" -#: awx/settings/defaults.py:781 +#: awx/settings/defaults.py:782 msgid "US East 2" msgstr "" -#: awx/settings/defaults.py:782 +#: awx/settings/defaults.py:783 msgid "US Central" msgstr "" -#: awx/settings/defaults.py:783 +#: awx/settings/defaults.py:784 msgid "US North Central" msgstr "" -#: awx/settings/defaults.py:784 +#: awx/settings/defaults.py:785 msgid "US South Central" msgstr "" -#: awx/settings/defaults.py:785 +#: awx/settings/defaults.py:786 msgid "US West Central" msgstr "" -#: awx/settings/defaults.py:786 +#: awx/settings/defaults.py:787 msgid "US West" msgstr "" -#: awx/settings/defaults.py:787 +#: awx/settings/defaults.py:788 msgid "US West 2" msgstr "" -#: awx/settings/defaults.py:788 +#: awx/settings/defaults.py:789 msgid "Canada East" msgstr "" -#: awx/settings/defaults.py:789 +#: awx/settings/defaults.py:790 msgid "Canada Central" msgstr "" -#: awx/settings/defaults.py:790 +#: awx/settings/defaults.py:791 msgid "Brazil South" msgstr "" -#: awx/settings/defaults.py:791 +#: awx/settings/defaults.py:792 msgid "Europe North" msgstr "" -#: awx/settings/defaults.py:792 +#: awx/settings/defaults.py:793 msgid "Europe West" msgstr "" -#: awx/settings/defaults.py:793 +#: awx/settings/defaults.py:794 msgid "UK West" msgstr "" -#: awx/settings/defaults.py:794 +#: awx/settings/defaults.py:795 msgid "UK South" msgstr "" -#: awx/settings/defaults.py:795 +#: awx/settings/defaults.py:796 msgid "Asia East" msgstr "" -#: awx/settings/defaults.py:796 +#: awx/settings/defaults.py:797 msgid "Asia Southeast" msgstr "" -#: awx/settings/defaults.py:797 +#: awx/settings/defaults.py:798 msgid "Australia East" msgstr "" -#: awx/settings/defaults.py:798 +#: awx/settings/defaults.py:799 msgid "Australia Southeast" msgstr "" -#: awx/settings/defaults.py:799 +#: awx/settings/defaults.py:800 msgid "India West" msgstr "" -#: awx/settings/defaults.py:800 +#: awx/settings/defaults.py:801 msgid "India South" msgstr "" -#: awx/settings/defaults.py:801 +#: awx/settings/defaults.py:802 msgid "Japan East" msgstr "" -#: awx/settings/defaults.py:802 +#: awx/settings/defaults.py:803 msgid "Japan West" msgstr "" -#: awx/settings/defaults.py:803 +#: awx/settings/defaults.py:804 msgid "Korea Central" msgstr "" -#: awx/settings/defaults.py:804 +#: awx/settings/defaults.py:805 msgid "Korea South" msgstr "" @@ -3498,9 +3543,11 @@ msgstr "" msgid "" "Mapping to organization admins/users from social auth accounts. This " "setting\n" -"controls which users are placed into which Tower organizations based on\n" -"their username and email address. Configuration details are available in\n" -"Tower documentation." +"controls which users are placed into which Tower organizations based on " +"their\n" +"username and email address. Configuration details are available in the " +"Ansible\n" +"Tower documentation.'" msgstr "" #: awx/sso/conf.py:55 @@ -3550,11 +3597,11 @@ msgid "" "disabled if this parameter is empty." msgstr "" -#: awx/sso/conf.py:142 awx/sso/conf.py:160 awx/sso/conf.py:172 -#: awx/sso/conf.py:184 awx/sso/conf.py:200 awx/sso/conf.py:220 -#: awx/sso/conf.py:242 awx/sso/conf.py:258 awx/sso/conf.py:277 -#: awx/sso/conf.py:294 awx/sso/conf.py:311 awx/sso/conf.py:327 -#: awx/sso/conf.py:344 awx/sso/conf.py:361 awx/sso/conf.py:387 +#: awx/sso/conf.py:142 awx/sso/conf.py:158 awx/sso/conf.py:170 +#: awx/sso/conf.py:182 awx/sso/conf.py:198 awx/sso/conf.py:218 +#: awx/sso/conf.py:240 awx/sso/conf.py:255 awx/sso/conf.py:273 +#: awx/sso/conf.py:290 awx/sso/conf.py:307 awx/sso/conf.py:323 +#: awx/sso/conf.py:337 awx/sso/conf.py:354 awx/sso/conf.py:380 msgid "LDAP" msgstr "" @@ -3564,33 +3611,32 @@ msgstr "" #: awx/sso/conf.py:155 msgid "" -"DN (Distinguished Name) of user to bind for all search queries. Normally in " -"the format \"CN=Some User,OU=Users,DC=example,DC=com\" but may also be " -"specified as \"DOMAIN\\username\" for Active Directory. This is the system " -"user account we will use to login to query LDAP for other user information." +"DN (Distinguished Name) of user to bind for all search queries. This is the " +"system user account we will use to login to query LDAP for other user " +"information. Refer to the Ansible Tower documentation for example syntax." msgstr "" -#: awx/sso/conf.py:170 +#: awx/sso/conf.py:168 msgid "LDAP Bind Password" msgstr "" -#: awx/sso/conf.py:171 +#: awx/sso/conf.py:169 msgid "Password used to bind LDAP user account." msgstr "" -#: awx/sso/conf.py:182 +#: awx/sso/conf.py:180 msgid "LDAP Start TLS" msgstr "" -#: awx/sso/conf.py:183 +#: awx/sso/conf.py:181 msgid "Whether to enable TLS when the LDAP connection is not using SSL." msgstr "" -#: awx/sso/conf.py:193 +#: awx/sso/conf.py:191 msgid "LDAP Connection Options" msgstr "" -#: awx/sso/conf.py:194 +#: awx/sso/conf.py:192 msgid "" "Additional options to set for the LDAP connection. LDAP referrals are " "disabled by default (to prevent certain LDAP queries from hanging with AD). " @@ -3599,310 +3645,340 @@ msgid "" "values that can be set." msgstr "" -#: awx/sso/conf.py:213 +#: awx/sso/conf.py:211 msgid "LDAP User Search" msgstr "" -#: awx/sso/conf.py:214 +#: awx/sso/conf.py:212 msgid "" "LDAP search query to find users. Any user that matches the given pattern " -"will be able to login to Tower. The user should also be mapped into an " -"Tower organization (as defined in the AUTH_LDAP_ORGANIZATION_MAP setting). " -"If multiple search queries need to be supported use of \"LDAPUnion\" is " +"will be able to login to Tower. The user should also be mapped into a Tower " +"organization (as defined in the AUTH_LDAP_ORGANIZATION_MAP setting). If " +"multiple search queries need to be supported use of \"LDAPUnion\" is " "possible. See Tower documentation for details." msgstr "" -#: awx/sso/conf.py:236 +#: awx/sso/conf.py:234 msgid "LDAP User DN Template" msgstr "" -#: awx/sso/conf.py:237 +#: awx/sso/conf.py:235 msgid "" "Alternative to user search, if user DNs are all of the same format. This " -"approach will be more efficient for user lookups than searching if it is " -"usable in your organizational environment. If this setting has a value it " -"will be used instead of AUTH_LDAP_USER_SEARCH." +"approach is more efficient for user lookups than searching if it is usable " +"in your organizational environment. If this setting has a value it will be " +"used instead of AUTH_LDAP_USER_SEARCH." msgstr "" -#: awx/sso/conf.py:252 +#: awx/sso/conf.py:250 msgid "LDAP User Attribute Map" msgstr "" -#: awx/sso/conf.py:253 +#: awx/sso/conf.py:251 msgid "" -"Mapping of LDAP user schema to Tower API user attributes (key is user " -"attribute name, value is LDAP attribute name). The default setting is valid " -"for ActiveDirectory but users with other LDAP configurations may need to " -"change the values (not the keys) of the dictionary/hash-table." +"Mapping of LDAP user schema to Tower API user attributes. The default " +"setting is valid for ActiveDirectory but users with other LDAP " +"configurations may need to change the values. Refer to the Ansible Tower " +"documentation for additonal details." msgstr "" -#: awx/sso/conf.py:272 +#: awx/sso/conf.py:269 msgid "LDAP Group Search" msgstr "" -#: awx/sso/conf.py:273 +#: awx/sso/conf.py:270 msgid "" "Users are mapped to organizations based on their membership in LDAP groups. " -"This setting defines the LDAP search query to find groups. Note that this, " -"unlike the user search above, does not support LDAPSearchUnion." +"This setting defines the LDAP search query to find groups. Unlike the user " +"search, group search does not support LDAPSearchUnion." msgstr "" -#: awx/sso/conf.py:290 +#: awx/sso/conf.py:286 msgid "LDAP Group Type" msgstr "" -#: awx/sso/conf.py:291 +#: awx/sso/conf.py:287 msgid "" "The group type may need to be changed based on the type of the LDAP server. " "Values are listed at: http://pythonhosted.org/django-auth-ldap/groups." "html#types-of-groups" msgstr "" -#: awx/sso/conf.py:306 +#: awx/sso/conf.py:302 msgid "LDAP Require Group" msgstr "" -#: awx/sso/conf.py:307 +#: awx/sso/conf.py:303 msgid "" "Group DN required to login. If specified, user must be a member of this " "group to login via LDAP. If not set, everyone in LDAP that matches the user " "search will be able to login via Tower. Only one require group is supported." msgstr "" -#: awx/sso/conf.py:323 +#: awx/sso/conf.py:319 msgid "LDAP Deny Group" msgstr "" -#: awx/sso/conf.py:324 +#: awx/sso/conf.py:320 msgid "" "Group DN denied from login. If specified, user will not be allowed to login " "if a member of this group. Only one deny group is supported." msgstr "" -#: awx/sso/conf.py:337 +#: awx/sso/conf.py:333 msgid "LDAP User Flags By Group" msgstr "" -#: awx/sso/conf.py:338 +#: awx/sso/conf.py:334 msgid "" -"User profile flags updated from group membership (key is user attribute " -"name, value is group DN). These are boolean fields that are matched based " -"on whether the user is a member of the given group. So far only " -"is_superuser and is_system_auditor are settable via this method. This flag " -"is set both true and false at login time based on current LDAP settings." +"Retrieve users from a given group. At this time, superuser and system " +"auditors are the only groups supported. Refer to the Ansible Tower " +"documentation for more detail." msgstr "" -#: awx/sso/conf.py:356 +#: awx/sso/conf.py:349 msgid "LDAP Organization Map" msgstr "" -#: awx/sso/conf.py:357 +#: awx/sso/conf.py:350 msgid "" "Mapping between organization admins/users and LDAP groups. This controls " -"what users are placed into what Tower organizations relative to their LDAP " -"group memberships. Configuration details are available in Tower " +"which users are placed into which Tower organizations relative to their LDAP " +"group memberships. Configuration details are available in the Ansible Tower " "documentation." msgstr "" -#: awx/sso/conf.py:384 +#: awx/sso/conf.py:377 msgid "LDAP Team Map" msgstr "" -#: awx/sso/conf.py:385 +#: awx/sso/conf.py:378 msgid "" -"Mapping between team members (users) and LDAP groups.Configuration details " -"are available in Tower documentation." +"Mapping between team members (users) and LDAP groups. Configuration details " +"are available in the Ansible Tower documentation." msgstr "" -#: awx/sso/conf.py:413 +#: awx/sso/conf.py:406 msgid "RADIUS Server" msgstr "" -#: awx/sso/conf.py:414 +#: awx/sso/conf.py:407 msgid "" -"Hostname/IP of RADIUS server. RADIUS authentication will be disabled if this " +"Hostname/IP of RADIUS server. RADIUS authentication is disabled if this " "setting is empty." msgstr "" -#: awx/sso/conf.py:416 awx/sso/conf.py:430 awx/sso/conf.py:442 +#: awx/sso/conf.py:409 awx/sso/conf.py:423 awx/sso/conf.py:435 #: awx/sso/models.py:14 msgid "RADIUS" msgstr "" -#: awx/sso/conf.py:428 +#: awx/sso/conf.py:421 msgid "RADIUS Port" msgstr "" -#: awx/sso/conf.py:429 +#: awx/sso/conf.py:422 msgid "Port of RADIUS server." msgstr "" -#: awx/sso/conf.py:440 +#: awx/sso/conf.py:433 msgid "RADIUS Secret" msgstr "" -#: awx/sso/conf.py:441 +#: awx/sso/conf.py:434 msgid "Shared secret for authenticating to RADIUS server." msgstr "" -#: awx/sso/conf.py:457 +#: awx/sso/conf.py:450 msgid "TACACS+ Server" msgstr "" -#: awx/sso/conf.py:458 +#: awx/sso/conf.py:451 msgid "Hostname of TACACS+ server." msgstr "" -#: awx/sso/conf.py:459 awx/sso/conf.py:472 awx/sso/conf.py:485 -#: awx/sso/conf.py:498 awx/sso/conf.py:510 awx/sso/models.py:15 +#: awx/sso/conf.py:452 awx/sso/conf.py:465 awx/sso/conf.py:478 +#: awx/sso/conf.py:491 awx/sso/conf.py:503 awx/sso/models.py:15 msgid "TACACS+" msgstr "" -#: awx/sso/conf.py:470 +#: awx/sso/conf.py:463 msgid "TACACS+ Port" msgstr "" -#: awx/sso/conf.py:471 +#: awx/sso/conf.py:464 msgid "Port number of TACACS+ server." msgstr "" -#: awx/sso/conf.py:483 +#: awx/sso/conf.py:476 msgid "TACACS+ Secret" msgstr "" -#: awx/sso/conf.py:484 +#: awx/sso/conf.py:477 msgid "Shared secret for authenticating to TACACS+ server." msgstr "" -#: awx/sso/conf.py:496 +#: awx/sso/conf.py:489 msgid "TACACS+ Auth Session Timeout" msgstr "" -#: awx/sso/conf.py:497 +#: awx/sso/conf.py:490 msgid "TACACS+ session timeout value in seconds, 0 disables timeout." msgstr "" -#: awx/sso/conf.py:508 +#: awx/sso/conf.py:501 msgid "TACACS+ Authentication Protocol" msgstr "" -#: awx/sso/conf.py:509 +#: awx/sso/conf.py:502 msgid "Choose the authentication protocol used by TACACS+ client." msgstr "" -#: awx/sso/conf.py:524 +#: awx/sso/conf.py:517 msgid "Google OAuth2 Callback URL" msgstr "" -#: awx/sso/conf.py:525 +#: awx/sso/conf.py:518 awx/sso/conf.py:611 awx/sso/conf.py:676 msgid "" -"Create a project at https://console.developers.google.com/ to obtain an " -"OAuth2 key and secret for a web application. Ensure that the Google+ API is " -"enabled. Provide this URL as the callback URL for your application." +"Provide this URL as the callback URL for your application as part of your " +"registration process. Refer to the Ansible Tower documentation for more " +"detail." msgstr "" -#: awx/sso/conf.py:529 awx/sso/conf.py:540 awx/sso/conf.py:551 -#: awx/sso/conf.py:564 awx/sso/conf.py:578 awx/sso/conf.py:590 -#: awx/sso/conf.py:602 +#: awx/sso/conf.py:521 awx/sso/conf.py:533 awx/sso/conf.py:545 +#: awx/sso/conf.py:558 awx/sso/conf.py:572 awx/sso/conf.py:584 +#: awx/sso/conf.py:596 msgid "Google OAuth2" msgstr "" -#: awx/sso/conf.py:538 +#: awx/sso/conf.py:531 msgid "Google OAuth2 Key" msgstr "" -#: awx/sso/conf.py:539 -msgid "" -"The OAuth2 key from your web application at https://console.developers." -"google.com/." +#: awx/sso/conf.py:532 +msgid "The OAuth2 key from your web application." msgstr "" -#: awx/sso/conf.py:549 +#: awx/sso/conf.py:543 msgid "Google OAuth2 Secret" msgstr "" -#: awx/sso/conf.py:550 -msgid "" -"The OAuth2 secret from your web application at https://console.developers." -"google.com/." +#: awx/sso/conf.py:544 +msgid "The OAuth2 secret from your web application." msgstr "" -#: awx/sso/conf.py:561 +#: awx/sso/conf.py:555 msgid "Google OAuth2 Whitelisted Domains" msgstr "" -#: awx/sso/conf.py:562 +#: awx/sso/conf.py:556 msgid "" "Update this setting to restrict the domains who are allowed to login using " "Google OAuth2." msgstr "" -#: awx/sso/conf.py:573 +#: awx/sso/conf.py:567 msgid "Google OAuth2 Extra Arguments" msgstr "" -#: awx/sso/conf.py:574 +#: awx/sso/conf.py:568 msgid "" -"Extra arguments for Google OAuth2 login. When only allowing a single domain " -"to authenticate, set to `{\"hd\": \"yourdomain.com\"}` and Google will not " -"display any other accounts even if the user is logged in with multiple " -"Google accounts." +"Extra arguments for Google OAuth2 login. You can restrict it to only allow a " +"single domain to authenticate, even if the user is logged in with multple " +"Google accounts. Refer to the Ansible Tower documentation for more detail." msgstr "" -#: awx/sso/conf.py:588 +#: awx/sso/conf.py:582 msgid "Google OAuth2 Organization Map" msgstr "" -#: awx/sso/conf.py:600 +#: awx/sso/conf.py:594 msgid "Google OAuth2 Team Map" msgstr "" -#: awx/sso/conf.py:616 +#: awx/sso/conf.py:610 msgid "GitHub OAuth2 Callback URL" msgstr "" -#: awx/sso/conf.py:617 -msgid "" -"Create a developer application at https://github.com/settings/developers to " -"obtain an OAuth2 key (Client ID) and secret (Client Secret). Provide this " -"URL as the callback URL for your application." -msgstr "" - -#: awx/sso/conf.py:621 awx/sso/conf.py:632 awx/sso/conf.py:642 -#: awx/sso/conf.py:654 awx/sso/conf.py:666 +#: awx/sso/conf.py:614 awx/sso/conf.py:626 awx/sso/conf.py:637 +#: awx/sso/conf.py:649 awx/sso/conf.py:661 msgid "GitHub OAuth2" msgstr "" -#: awx/sso/conf.py:630 +#: awx/sso/conf.py:624 msgid "GitHub OAuth2 Key" msgstr "" -#: awx/sso/conf.py:631 +#: awx/sso/conf.py:625 msgid "The OAuth2 key (Client ID) from your GitHub developer application." msgstr "" -#: awx/sso/conf.py:640 +#: awx/sso/conf.py:635 msgid "GitHub OAuth2 Secret" msgstr "" -#: awx/sso/conf.py:641 +#: awx/sso/conf.py:636 msgid "" "The OAuth2 secret (Client Secret) from your GitHub developer application." msgstr "" -#: awx/sso/conf.py:652 +#: awx/sso/conf.py:647 msgid "GitHub OAuth2 Organization Map" msgstr "" -#: awx/sso/conf.py:664 +#: awx/sso/conf.py:659 msgid "GitHub OAuth2 Team Map" msgstr "" -#: awx/sso/conf.py:680 +#: awx/sso/conf.py:675 msgid "GitHub Organization OAuth2 Callback URL" msgstr "" -#: awx/sso/conf.py:681 awx/sso/conf.py:756 +#: awx/sso/conf.py:679 awx/sso/conf.py:691 awx/sso/conf.py:702 +#: awx/sso/conf.py:715 awx/sso/conf.py:726 awx/sso/conf.py:738 +msgid "GitHub Organization OAuth2" +msgstr "" + +#: awx/sso/conf.py:689 +msgid "GitHub Organization OAuth2 Key" +msgstr "" + +#: awx/sso/conf.py:690 awx/sso/conf.py:768 +msgid "The OAuth2 key (Client ID) from your GitHub organization application." +msgstr "" + +#: awx/sso/conf.py:700 +msgid "GitHub Organization OAuth2 Secret" +msgstr "" + +#: awx/sso/conf.py:701 awx/sso/conf.py:779 +msgid "" +"The OAuth2 secret (Client Secret) from your GitHub organization application." +msgstr "" + +#: awx/sso/conf.py:712 +msgid "GitHub Organization Name" +msgstr "" + +#: awx/sso/conf.py:713 +msgid "" +"The name of your GitHub organization, as used in your organization's URL: " +"https://github.com//." +msgstr "" + +#: awx/sso/conf.py:724 +msgid "GitHub Organization OAuth2 Organization Map" +msgstr "" + +#: awx/sso/conf.py:736 +msgid "GitHub Organization OAuth2 Team Map" +msgstr "" + +#: awx/sso/conf.py:752 +msgid "GitHub Team OAuth2 Callback URL" +msgstr "" + +#: awx/sso/conf.py:753 msgid "" "Create an organization-owned application at https://github.com/organizations/" "/settings/applications and obtain an OAuth2 key (Client ID) and " @@ -3910,60 +3986,16 @@ msgid "" "application." msgstr "" -#: awx/sso/conf.py:685 awx/sso/conf.py:696 awx/sso/conf.py:706 -#: awx/sso/conf.py:718 awx/sso/conf.py:729 awx/sso/conf.py:741 -msgid "GitHub Organization OAuth2" -msgstr "" - -#: awx/sso/conf.py:694 -msgid "GitHub Organization OAuth2 Key" -msgstr "" - -#: awx/sso/conf.py:695 awx/sso/conf.py:770 -msgid "The OAuth2 key (Client ID) from your GitHub organization application." -msgstr "" - -#: awx/sso/conf.py:704 -msgid "GitHub Organization OAuth2 Secret" -msgstr "" - -#: awx/sso/conf.py:705 awx/sso/conf.py:780 -msgid "" -"The OAuth2 secret (Client Secret) from your GitHub organization application." -msgstr "" - -#: awx/sso/conf.py:715 -msgid "GitHub Organization Name" -msgstr "" - -#: awx/sso/conf.py:716 -msgid "" -"The name of your GitHub organization, as used in your organization's URL: " -"https://github.com//." -msgstr "" - -#: awx/sso/conf.py:727 -msgid "GitHub Organization OAuth2 Organization Map" -msgstr "" - -#: awx/sso/conf.py:739 -msgid "GitHub Organization OAuth2 Team Map" -msgstr "" - -#: awx/sso/conf.py:755 -msgid "GitHub Team OAuth2 Callback URL" -msgstr "" - -#: awx/sso/conf.py:760 awx/sso/conf.py:771 awx/sso/conf.py:781 +#: awx/sso/conf.py:757 awx/sso/conf.py:769 awx/sso/conf.py:780 #: awx/sso/conf.py:793 awx/sso/conf.py:804 awx/sso/conf.py:816 msgid "GitHub Team OAuth2" msgstr "" -#: awx/sso/conf.py:769 +#: awx/sso/conf.py:767 msgid "GitHub Team OAuth2 Key" msgstr "" -#: awx/sso/conf.py:779 +#: awx/sso/conf.py:778 msgid "GitHub Team OAuth2 Secret" msgstr "" @@ -3991,14 +4023,13 @@ msgstr "" #: awx/sso/conf.py:831 msgid "" -"Register an Azure AD application as described by https://msdn.microsoft.com/" -"en-us/library/azure/dn132599.aspx and obtain an OAuth2 key (Client ID) and " -"secret (Client Secret). Provide this URL as the callback URL for your " -"application." +"Provide this URL as the callback URL for your application as part of your " +"registration process. Refer to the Ansible Tower documentation for more " +"detail. " msgstr "" -#: awx/sso/conf.py:835 awx/sso/conf.py:846 awx/sso/conf.py:856 -#: awx/sso/conf.py:868 awx/sso/conf.py:880 +#: awx/sso/conf.py:834 awx/sso/conf.py:846 awx/sso/conf.py:857 +#: awx/sso/conf.py:869 awx/sso/conf.py:881 msgid "Azure AD OAuth2" msgstr "" @@ -4010,118 +4041,128 @@ msgstr "" msgid "The OAuth2 key (Client ID) from your Azure AD application." msgstr "" -#: awx/sso/conf.py:854 +#: awx/sso/conf.py:855 msgid "Azure AD OAuth2 Secret" msgstr "" -#: awx/sso/conf.py:855 +#: awx/sso/conf.py:856 msgid "The OAuth2 secret (Client Secret) from your Azure AD application." msgstr "" -#: awx/sso/conf.py:866 +#: awx/sso/conf.py:867 msgid "Azure AD OAuth2 Organization Map" msgstr "" -#: awx/sso/conf.py:878 +#: awx/sso/conf.py:879 msgid "Azure AD OAuth2 Team Map" msgstr "" -#: awx/sso/conf.py:903 +#: awx/sso/conf.py:904 msgid "SAML Assertion Consumer Service (ACS) URL" msgstr "" -#: awx/sso/conf.py:904 +#: awx/sso/conf.py:905 msgid "" "Register Tower as a service provider (SP) with each identity provider (IdP) " "you have configured. Provide your SP Entity ID and this ACS URL for your " "application." msgstr "" -#: awx/sso/conf.py:907 awx/sso/conf.py:921 awx/sso/conf.py:935 -#: awx/sso/conf.py:950 awx/sso/conf.py:964 awx/sso/conf.py:982 -#: awx/sso/conf.py:1004 awx/sso/conf.py:1023 awx/sso/conf.py:1043 -#: awx/sso/conf.py:1077 awx/sso/conf.py:1090 awx/sso/models.py:16 +#: awx/sso/conf.py:908 awx/sso/conf.py:922 awx/sso/conf.py:936 +#: awx/sso/conf.py:951 awx/sso/conf.py:965 awx/sso/conf.py:978 +#: awx/sso/conf.py:999 awx/sso/conf.py:1017 awx/sso/conf.py:1036 +#: awx/sso/conf.py:1070 awx/sso/conf.py:1083 awx/sso/models.py:16 msgid "SAML" msgstr "" -#: awx/sso/conf.py:918 +#: awx/sso/conf.py:919 msgid "SAML Service Provider Metadata URL" msgstr "" -#: awx/sso/conf.py:919 +#: awx/sso/conf.py:920 msgid "" "If your identity provider (IdP) allows uploading an XML metadata file, you " "can download one from this URL." msgstr "" -#: awx/sso/conf.py:931 +#: awx/sso/conf.py:932 msgid "SAML Service Provider Entity ID" msgstr "" -#: awx/sso/conf.py:932 +#: awx/sso/conf.py:933 msgid "" "The application-defined unique identifier used as the audience of the SAML " "service provider (SP) configuration. This is usually the URL for Tower." msgstr "" -#: awx/sso/conf.py:947 +#: awx/sso/conf.py:948 msgid "SAML Service Provider Public Certificate" msgstr "" -#: awx/sso/conf.py:948 +#: awx/sso/conf.py:949 msgid "" "Create a keypair for Tower to use as a service provider (SP) and include the " "certificate content here." msgstr "" -#: awx/sso/conf.py:961 +#: awx/sso/conf.py:962 msgid "SAML Service Provider Private Key" msgstr "" -#: awx/sso/conf.py:962 +#: awx/sso/conf.py:963 msgid "" "Create a keypair for Tower to use as a service provider (SP) and include the " "private key content here." msgstr "" -#: awx/sso/conf.py:980 +#: awx/sso/conf.py:975 msgid "SAML Service Provider Organization Info" msgstr "" -#: awx/sso/conf.py:981 -msgid "Configure this setting with information about your app." +#: awx/sso/conf.py:976 +msgid "" +"Provide the URL, display name, and the name of your app. Refer to the " +"Ansible Tower documentation for example syntax." msgstr "" -#: awx/sso/conf.py:1002 +#: awx/sso/conf.py:995 msgid "SAML Service Provider Technical Contact" msgstr "" -#: awx/sso/conf.py:1003 awx/sso/conf.py:1022 -msgid "Configure this setting with your contact information." +#: awx/sso/conf.py:996 +msgid "" +"Provide the name and email address of the technical contact for your service " +"provider. Refer to the Ansible Tower documentation for example syntax." msgstr "" -#: awx/sso/conf.py:1021 +#: awx/sso/conf.py:1013 msgid "SAML Service Provider Support Contact" msgstr "" -#: awx/sso/conf.py:1036 +#: awx/sso/conf.py:1014 +msgid "" +"Provide the name and email address of the support contact for your service " +"provider. Refer to the Ansible Tower documentation for example syntax." +msgstr "" + +#: awx/sso/conf.py:1030 msgid "SAML Enabled Identity Providers" msgstr "" -#: awx/sso/conf.py:1037 +#: awx/sso/conf.py:1031 msgid "" "Configure the Entity ID, SSO URL and certificate for each identity provider " "(IdP) in use. Multiple SAML IdPs are supported. Some IdPs may provide user " -"data using attribute names that differ from the default OIDs (https://github." -"com/omab/python-social-auth/blob/master/social/backends/saml.py#L16). " -"Attribute names may be overridden for each IdP." +"data using attribute names that differ from the default OIDs. Attribute " +"names may be overridden for each IdP. Refer to the Ansible documentation for " +"additional details and syntax." msgstr "" -#: awx/sso/conf.py:1075 +#: awx/sso/conf.py:1068 msgid "SAML Organization Map" msgstr "" -#: awx/sso/conf.py:1088 +#: awx/sso/conf.py:1081 msgid "SAML Team Map" msgstr "" @@ -4244,10 +4285,6 @@ msgstr "" msgid "AWX" msgstr "" -#: awx/templates/rest_framework/api.html:4 -msgid "AWX REST API" -msgstr "" - #: awx/templates/rest_framework/api.html:39 msgid "Ansible Tower API Guide" msgstr "" @@ -4308,7 +4345,7 @@ msgstr "" msgid "Make a PATCH request on the %(name)s resource" msgstr "" -#: awx/ui/apps.py:9 awx/ui/conf.py:22 awx/ui/conf.py:38 awx/ui/conf.py:53 +#: awx/ui/apps.py:9 awx/ui/conf.py:22 awx/ui/conf.py:36 awx/ui/conf.py:51 msgid "UI" msgstr "" @@ -4341,15 +4378,14 @@ msgid "" "If needed, you can add specific information (such as a legal notice or a " "disclaimer) to a text box in the login modal using this setting. Any content " "added must be in plain text, as custom HTML or other markup languages are " -"not supported. If multiple paragraphs of text are needed, new lines " -"(paragraphs) must be escaped as `\\n` within the block of text." +"not supported." msgstr "" -#: awx/ui/conf.py:48 +#: awx/ui/conf.py:46 msgid "Custom Logo" msgstr "" -#: awx/ui/conf.py:49 +#: awx/ui/conf.py:47 msgid "" "To set up a custom logo, provide a file that you create. For the custom logo " "to look its best, use a .png file with a transparent background. GIF, PNG " diff --git a/awx/locale/es/LC_MESSAGES/django.po b/awx/locale/es/LC_MESSAGES/django.po index 0f24d87b55..6e26752ef1 100644 --- a/awx/locale/es/LC_MESSAGES/django.po +++ b/awx/locale/es/LC_MESSAGES/django.po @@ -4,15 +4,17 @@ # FIRST AUTHOR , YEAR. # Carlos Munoz , 2017. #zanata # Froebel Flores , 2017. #zanata +# edrh01 , 2017. #zanata # mkim , 2017. #zanata # plocatelli , 2017. #zanata +# trh01 , 2017. #zanata msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-28 18:57+0000\n" -"PO-Revision-Date: 2017-08-03 04:07+0000\n" -"Last-Translator: plocatelli \n" +"POT-Creation-Date: 2017-08-27 19:27+0000\n" +"PO-Revision-Date: 2017-09-01 06:52+0000\n" +"Last-Translator: edrh01 \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -167,7 +169,7 @@ msgstr "Ejecutar Playbook" msgid "Command" msgstr "Comando" -#: awx/api/serializers.py:270 awx/main/models/unified_jobs.py:434 +#: awx/api/serializers.py:270 awx/main/models/unified_jobs.py:435 msgid "SCM Update" msgstr "Actualización SCM" @@ -187,7 +189,7 @@ msgstr "Tarea en flujo de trabajo" msgid "Workflow Template" msgstr "Plantilla de flujo de trabajo" -#: awx/api/serializers.py:697 awx/api/serializers.py:755 awx/api/views.py:4330 +#: awx/api/serializers.py:697 awx/api/serializers.py:755 awx/api/views.py:4314 #, python-format msgid "" "Standard Output too large to display (%(text_size)d bytes), only download " @@ -236,59 +238,67 @@ msgstr "" "Colección de archivos de inventario y directorios disponibles dentro de este" " proyecto, no global." -#: awx/api/serializers.py:1283 +#: awx/api/serializers.py:1282 #, python-format msgid "Invalid port specification: %s" msgstr "Especificación de puerto inválido: %s" -#: awx/api/serializers.py:1311 awx/api/serializers.py:3208 -#: awx/api/serializers.py:3293 awx/main/validators.py:198 +#: awx/api/serializers.py:1293 +msgid "Cannot create Host for Smart Inventory" +msgstr "No es posible crear un host para el Inventario inteligente" + +#: awx/api/serializers.py:1315 awx/api/serializers.py:3218 +#: awx/api/serializers.py:3303 awx/main/validators.py:198 msgid "Must be valid JSON or YAML." msgstr "Debe ser un válido JSON o YAML." -#: awx/api/serializers.py:1407 +#: awx/api/serializers.py:1411 msgid "Invalid group name." msgstr "Nombre de grupo inválido." -#: awx/api/serializers.py:1479 +#: awx/api/serializers.py:1416 +msgid "Cannot create Group for Smart Inventory" +msgstr "No es posible crear un grupo para el Inventario inteligente" + +#: awx/api/serializers.py:1488 msgid "" "Script must begin with a hashbang sequence: i.e.... #!/usr/bin/env python" msgstr "" "El script debe empezar con una secuencia hashbang, p.e.... #!/usr/bin/env " "python" -#: awx/api/serializers.py:1525 +#: awx/api/serializers.py:1534 msgid "`{}` is a prohibited environment variable" msgstr "`{}` es una variable de entorno prohibida" -#: awx/api/serializers.py:1536 +#: awx/api/serializers.py:1545 msgid "If 'source' is 'custom', 'source_script' must be provided." msgstr "Si 'source' es 'custom', 'source_script' debe ser especificado." -#: awx/api/serializers.py:1542 +#: awx/api/serializers.py:1551 msgid "Must provide an inventory." msgstr "Debe proporcionar un inventario." -#: awx/api/serializers.py:1546 +#: awx/api/serializers.py:1555 msgid "" "The 'source_script' does not belong to the same organization as the " "inventory." msgstr "" "El 'source_script' no pertenece a la misma organización que el inventario." -#: awx/api/serializers.py:1548 +#: awx/api/serializers.py:1557 msgid "'source_script' doesn't exist." msgstr "'source_script' no existe." -#: awx/api/serializers.py:1572 +#: awx/api/serializers.py:1581 msgid "Automatic group relationship, will be removed in 3.3" msgstr "Relación de grupo automática; se eliminará en 3.3" -#: awx/api/serializers.py:1649 +#: awx/api/serializers.py:1658 msgid "Cannot use manual project for SCM-based inventory." msgstr "No se puede usar el proyecto manual para el inventario basado en SCM." -#: awx/api/serializers.py:1655 +#: awx/api/serializers.py:1664 msgid "" "Manual inventory sources are created automatically when a group is created " "in the v1 API." @@ -296,66 +306,53 @@ msgstr "" "Las fuentes de inventario manuales se crean automáticamente cuando se crea " "un grupo en la API v1." -#: awx/api/serializers.py:1660 +#: awx/api/serializers.py:1669 msgid "Setting not compatible with existing schedules." msgstr "Configuración no compatible con programaciones existentes." -#: awx/api/serializers.py:1673 -msgid "Cannot set source_path if not SCM type." -msgstr "No se puede configurar source_path si no es del tipo SCM." - -#: awx/api/serializers.py:1676 -msgid "" -"Cannot update SCM-based inventory source on launch if set to update on " -"project update. Instead, configure the corresponding source project to " -"update on launch." +#: awx/api/serializers.py:1674 +msgid "Cannot create Inventory Source for Smart Inventory" msgstr "" -"No se puede actualizar la fuente de inventario basada en SCM en la ejecución" -" si está configurada para actualizarse en la actualización del proyecto. En " -"su lugar, configure el proyecto de fuente correspondiente para actualizar en" -" la ejecución." +"No es posible crear una fuente de inventarios para el Inventario inteligente" -#: awx/api/serializers.py:1680 -msgid "Inventory controlled by project-following SCM." -msgstr "Inventario controlado por SCM del proyecto." +#: awx/api/serializers.py:1688 +#, python-format +msgid "Cannot set %s if not SCM type." +msgstr "No es posible definir %s si no es de tipo SCM." -#: awx/api/serializers.py:1683 -msgid "SCM type sources must set `overwrite_vars` to `true`." -msgstr "Las fuentes de tipo SCM deben configurar `overwrite_vars` en `true`." - -#: awx/api/serializers.py:1925 +#: awx/api/serializers.py:1929 msgid "Modifications not allowed for managed credential types" msgstr "" "Modificaciones no permitidas para los tipos de credenciales administradas" -#: awx/api/serializers.py:1930 +#: awx/api/serializers.py:1934 msgid "" "Modifications to inputs are not allowed for credential types that are in use" msgstr "" "No se permiten las modificaciones a entradas para los tipos de credenciales " "que están en uso" -#: awx/api/serializers.py:1936 +#: awx/api/serializers.py:1940 #, python-format msgid "Must be 'cloud' or 'net', not %s" msgstr "Debe ser 'cloud' o 'net', no %s" -#: awx/api/serializers.py:1942 +#: awx/api/serializers.py:1946 msgid "'ask_at_runtime' is not supported for custom credentials." msgstr "" "'ask_at_runtime' no es compatible con las credenciales personalizadas." -#: awx/api/serializers.py:2115 +#: awx/api/serializers.py:2119 #, python-format msgid "\"%s\" is not a valid choice" msgstr "\"%s\" no es una opción válida" -#: awx/api/serializers.py:2134 +#: awx/api/serializers.py:2138 #, python-format msgid "'%s' is not a valid field for %s" msgstr "'%s' no es un campo válido para %s" -#: awx/api/serializers.py:2146 +#: awx/api/serializers.py:2150 msgid "" "Write-only field used to add user to owner role. If provided, do not give " "either team or organization. Only valid for creation." @@ -363,7 +360,7 @@ msgstr "" "Campo de sólo escritura utilizado para añadir usuario a rol de propietario. " "Si se indica, no otorgar equipo u organización. Sólo válido para creación." -#: awx/api/serializers.py:2151 +#: awx/api/serializers.py:2155 msgid "" "Write-only field used to add team to owner role. If provided, do not give " "either user or organization. Only valid for creation." @@ -371,7 +368,7 @@ msgstr "" "Campo de sólo escritura para añadir equipo a un rol propietario.Si se " "indica, no otorgar usuario u organización. Sólo válido para creación." -#: awx/api/serializers.py:2156 +#: awx/api/serializers.py:2160 msgid "" "Inherit permissions from organization roles. If provided on creation, do not" " give either user or team." @@ -379,125 +376,125 @@ msgstr "" "Permisos heredados desde roles de organización. Si se indica, no otorgar " "usuario o equipo." -#: awx/api/serializers.py:2172 +#: awx/api/serializers.py:2176 msgid "Missing 'user', 'team', or 'organization'." msgstr "No encontrado 'user', 'team' u 'organization'" -#: awx/api/serializers.py:2212 +#: awx/api/serializers.py:2216 msgid "" "Credential organization must be set and match before assigning to a team" msgstr "" "Credenciales de organización deben ser establecidas y coincidir antes de ser" " asignadas a un equipo" -#: awx/api/serializers.py:2374 +#: awx/api/serializers.py:2378 msgid "You must provide a cloud credential." msgstr "Debe proporcionar una credencial de nube." -#: awx/api/serializers.py:2375 +#: awx/api/serializers.py:2379 msgid "You must provide a network credential." msgstr "Debe indicar un credencial de red." -#: awx/api/serializers.py:2391 +#: awx/api/serializers.py:2395 msgid "This field is required." msgstr "Este campo es obligatorio." -#: awx/api/serializers.py:2393 awx/api/serializers.py:2395 +#: awx/api/serializers.py:2397 awx/api/serializers.py:2399 msgid "Playbook not found for project." msgstr "Playbook no encontrado para el proyecto." -#: awx/api/serializers.py:2397 +#: awx/api/serializers.py:2401 msgid "Must select playbook for project." msgstr "Debe seleccionar un playbook para el proyecto." -#: awx/api/serializers.py:2466 +#: awx/api/serializers.py:2476 msgid "Must either set a default value or ask to prompt on launch." msgstr "" "Debe establecer un valor por defecto o preguntar por valor al ejecutar." -#: awx/api/serializers.py:2468 awx/main/models/jobs.py:325 +#: awx/api/serializers.py:2478 awx/main/models/jobs.py:325 msgid "Job types 'run' and 'check' must have assigned a project." msgstr "Tipos de trabajo 'run' y 'check' deben tener asignado un proyecto." -#: awx/api/serializers.py:2539 +#: awx/api/serializers.py:2549 msgid "Invalid job template." msgstr "Plantilla de trabajo inválida" -#: awx/api/serializers.py:2620 +#: awx/api/serializers.py:2630 msgid "Credential not found or deleted." msgstr "Credencial no encontrado o eliminado." -#: awx/api/serializers.py:2622 +#: awx/api/serializers.py:2632 msgid "Job Template Project is missing or undefined." msgstr "Proyecto en la plantilla de trabajo no encontrado o no definido." -#: awx/api/serializers.py:2624 +#: awx/api/serializers.py:2634 msgid "Job Template Inventory is missing or undefined." msgstr "Inventario en la plantilla de trabajo no encontrado o no definido." -#: awx/api/serializers.py:2911 +#: awx/api/serializers.py:2921 #, python-format msgid "%(job_type)s is not a valid job type. The choices are %(choices)s." msgstr "" "j%(job_type)s no es un tipo de trabajo válido. Las opciones son %(choices)s." -#: awx/api/serializers.py:2916 +#: awx/api/serializers.py:2926 msgid "Workflow job template is missing during creation." msgstr "" "Plantilla de tarea en el flujo de trabajo no encontrada durante la creación." -#: awx/api/serializers.py:2921 +#: awx/api/serializers.py:2931 #, python-format msgid "Cannot nest a %s inside a WorkflowJobTemplate" msgstr "No es posible anidar un %s dentro de un WorkflowJobTemplate" -#: awx/api/serializers.py:3178 +#: awx/api/serializers.py:3188 #, python-format msgid "Job Template '%s' is missing or undefined." msgstr "Plantilla de trabajo '%s' no encontrada o no definida." -#: awx/api/serializers.py:3181 +#: awx/api/serializers.py:3191 msgid "The inventory associated with this Job Template is being deleted." msgstr "" "Se está eliminando el inventario asociado con esta plantilla de trabajo." -#: awx/api/serializers.py:3222 awx/api/views.py:2998 +#: awx/api/serializers.py:3232 awx/api/views.py:2991 #, python-format msgid "Cannot assign multiple %s credentials." msgstr "No se pueden asignar múltiples credenciales %s." -#: awx/api/serializers.py:3224 awx/api/views.py:3001 +#: awx/api/serializers.py:3234 awx/api/views.py:2994 msgid "Extra credentials must be network or cloud." msgstr "Las credenciales adicionales deben ser red o nube." -#: awx/api/serializers.py:3361 +#: awx/api/serializers.py:3371 msgid "" "Missing required fields for Notification Configuration: notification_type" msgstr "" "Campos obligatorios no definidos para la configuración de notificación: " "notification_type" -#: awx/api/serializers.py:3384 +#: awx/api/serializers.py:3394 msgid "No values specified for field '{}'" msgstr "Ningún valor especificado para el campo '{}'" -#: awx/api/serializers.py:3389 +#: awx/api/serializers.py:3399 msgid "Missing required fields for Notification Configuration: {}." msgstr "Campos no definidos para la configuración de notificación: {}." -#: awx/api/serializers.py:3392 +#: awx/api/serializers.py:3402 msgid "Configuration field '{}' incorrect type, expected {}." msgstr "Tipo incorrecto en la configuración del campo '{} ', esperado {}." -#: awx/api/serializers.py:3445 +#: awx/api/serializers.py:3455 msgid "Inventory Source must be a cloud resource." msgstr "Fuente del inventario debe ser un recurso cloud." -#: awx/api/serializers.py:3447 +#: awx/api/serializers.py:3457 msgid "Manual Project cannot have a schedule set." msgstr "El proyecto manual no puede tener una programación establecida." -#: awx/api/serializers.py:3450 +#: awx/api/serializers.py:3460 msgid "" "Inventory sources with `update_on_project_update` cannot be scheduled. " "Schedule its source project `{}` instead." @@ -505,72 +502,72 @@ msgstr "" "No se pueden programar las fuentes de inventario con " "`update_on_project_update. En su lugar, programe su proyecto fuente `{}`." -#: awx/api/serializers.py:3469 +#: awx/api/serializers.py:3479 msgid "Projects and inventory updates cannot accept extra variables." msgstr "" "Las actualizaciones de inventarios y proyectos no pueden aceptar variables " "adicionales." -#: awx/api/serializers.py:3491 +#: awx/api/serializers.py:3501 msgid "" "DTSTART required in rrule. Value should match: DTSTART:YYYYMMDDTHHMMSSZ" msgstr "" "DTSTART necesario en 'rrule'. El valor debe coincidir: " "DTSTART:YYYYMMDDTHHMMSSZ" -#: awx/api/serializers.py:3493 +#: awx/api/serializers.py:3503 msgid "Multiple DTSTART is not supported." msgstr "Múltiple DTSTART no está soportado." -#: awx/api/serializers.py:3495 +#: awx/api/serializers.py:3505 msgid "RRULE require in rrule." msgstr "RRULE requerido en rrule" -#: awx/api/serializers.py:3497 +#: awx/api/serializers.py:3507 msgid "Multiple RRULE is not supported." msgstr "Múltiple RRULE no está soportado." -#: awx/api/serializers.py:3499 +#: awx/api/serializers.py:3509 msgid "INTERVAL required in rrule." msgstr "INTERVAL requerido en 'rrule'." -#: awx/api/serializers.py:3501 +#: awx/api/serializers.py:3511 msgid "TZID is not supported." msgstr "TZID no está soportado." -#: awx/api/serializers.py:3503 +#: awx/api/serializers.py:3513 msgid "SECONDLY is not supported." msgstr "SECONDLY no está soportado." -#: awx/api/serializers.py:3505 +#: awx/api/serializers.py:3515 msgid "Multiple BYMONTHDAYs not supported." msgstr "Multiple BYMONTHDAYs no soportado." -#: awx/api/serializers.py:3507 +#: awx/api/serializers.py:3517 msgid "Multiple BYMONTHs not supported." msgstr "Multiple BYMONTHs no soportado." -#: awx/api/serializers.py:3509 +#: awx/api/serializers.py:3519 msgid "BYDAY with numeric prefix not supported." msgstr "BYDAY con prefijo numérico no soportado." -#: awx/api/serializers.py:3511 +#: awx/api/serializers.py:3521 msgid "BYYEARDAY not supported." msgstr "BYYEARDAY no soportado." -#: awx/api/serializers.py:3513 +#: awx/api/serializers.py:3523 msgid "BYWEEKNO not supported." msgstr "BYWEEKNO no soportado." -#: awx/api/serializers.py:3517 +#: awx/api/serializers.py:3527 msgid "COUNT > 999 is unsupported." msgstr "COUNT > 999 no está soportada." -#: awx/api/serializers.py:3521 +#: awx/api/serializers.py:3531 msgid "rrule parsing failed validation." msgstr "Validación fallida analizando 'rrule'" -#: awx/api/serializers.py:3621 +#: awx/api/serializers.py:3631 msgid "" "A summary of the new and changed values when an object is created, updated, " "or deleted" @@ -578,7 +575,7 @@ msgstr "" "Un resumen de los valores nuevos y cambiados cuando un objeto es creado, " "actualizado o eliminado." -#: awx/api/serializers.py:3623 +#: awx/api/serializers.py:3633 msgid "" "For create, update, and delete events this is the object type that was " "affected. For associate and disassociate events this is the object type " @@ -588,7 +585,7 @@ msgstr "" "afectado. Para asociar o desasociar eventos éste es el tipo de objeto " "asociado o desasociado con object2." -#: awx/api/serializers.py:3626 +#: awx/api/serializers.py:3636 msgid "" "Unpopulated for create, update, and delete events. For associate and " "disassociate events this is the object type that object1 is being associated" @@ -597,153 +594,163 @@ msgstr "" "Vacío para crear, actualizar y eliminar eventos. Para asociar y desasociar " "eventos éste es el tipo de objetos que object1 con el está asociado." -#: awx/api/serializers.py:3629 +#: awx/api/serializers.py:3639 msgid "The action taken with respect to the given object(s)." msgstr "La acción tomada al respeto al/los especificado(s) objeto(s)." -#: awx/api/serializers.py:3732 +#: awx/api/serializers.py:3749 msgid "Unable to login with provided credentials." msgstr "Incapaz de iniciar sesión con los credenciales indicados." -#: awx/api/serializers.py:3734 +#: awx/api/serializers.py:3751 msgid "Must include \"username\" and \"password\"." msgstr "Debe incluir \"usuario\" y \"contraseña\"." -#: awx/api/views.py:107 +#: awx/api/views.py:106 msgid "Your license does not allow use of the activity stream." msgstr "Su licencia no permite el uso de flujo de actividad." -#: awx/api/views.py:117 +#: awx/api/views.py:116 msgid "Your license does not permit use of system tracking." msgstr "Su licencia no permite el uso de sistema de rastreo." -#: awx/api/views.py:127 +#: awx/api/views.py:126 msgid "Your license does not allow use of workflows." msgstr "Su licencia no permite el uso de flujos de trabajo." -#: awx/api/views.py:135 awx/templates/rest_framework/api.html:28 +#: awx/api/views.py:140 +msgid "Cannot delete job resource when associated workflow job is running." +msgstr "" +"No es posible eliminar un recurso de trabajo cuando la tarea del flujo de " +"trabajo está en ejecución." + +#: awx/api/views.py:144 +msgid "Cannot delete running job resource." +msgstr "No es posible eliminar el recurso de trabajo en ejecución." + +#: awx/api/views.py:153 awx/templates/rest_framework/api.html:28 msgid "REST API" msgstr "REST API" -#: awx/api/views.py:144 -msgid "Ansible Tower REST API" -msgstr "Ansible Tower REST API" +#: awx/api/views.py:162 awx/templates/rest_framework/api.html:4 +msgid "AWX REST API" +msgstr "API REST de AWX" -#: awx/api/views.py:206 +#: awx/api/views.py:224 msgid "Version 1" msgstr "Version 1" -#: awx/api/views.py:210 +#: awx/api/views.py:228 msgid "Version 2" msgstr "Versión 2" -#: awx/api/views.py:221 +#: awx/api/views.py:239 msgid "Ping" msgstr "Ping" -#: awx/api/views.py:256 awx/conf/apps.py:12 +#: awx/api/views.py:270 awx/conf/apps.py:12 msgid "Configuration" msgstr "Configuración" -#: awx/api/views.py:309 +#: awx/api/views.py:323 msgid "Invalid license data" msgstr "Datos de licencia inválidos." -#: awx/api/views.py:311 +#: awx/api/views.py:325 msgid "Missing 'eula_accepted' property" msgstr "Propiedad 'eula_accepted' no encontrada" -#: awx/api/views.py:315 +#: awx/api/views.py:329 msgid "'eula_accepted' value is invalid" msgstr "Valor 'eula_accepted' no es válido" -#: awx/api/views.py:318 +#: awx/api/views.py:332 msgid "'eula_accepted' must be True" msgstr "'eula_accepted' debe ser True" -#: awx/api/views.py:325 +#: awx/api/views.py:339 msgid "Invalid JSON" msgstr "JSON inválido" -#: awx/api/views.py:333 +#: awx/api/views.py:347 msgid "Invalid License" msgstr "Licencia inválida" -#: awx/api/views.py:343 +#: awx/api/views.py:357 msgid "Invalid license" msgstr "Licencia inválida" -#: awx/api/views.py:351 +#: awx/api/views.py:365 #, python-format msgid "Failed to remove license (%s)" msgstr "Error al eliminar licencia (%s)" -#: awx/api/views.py:356 +#: awx/api/views.py:370 msgid "Dashboard" msgstr "Panel de control" -#: awx/api/views.py:455 +#: awx/api/views.py:469 msgid "Dashboard Jobs Graphs" msgstr "Panel de control de gráficas de trabajo" -#: awx/api/views.py:491 +#: awx/api/views.py:505 #, python-format msgid "Unknown period \"%s\"" msgstr "Periodo desconocido \"%s\"" -#: awx/api/views.py:505 +#: awx/api/views.py:519 msgid "Instances" msgstr "Instancias" -#: awx/api/views.py:513 +#: awx/api/views.py:527 msgid "Instance Detail" msgstr "Detalle de la instancia" -#: awx/api/views.py:521 +#: awx/api/views.py:535 msgid "Instance Running Jobs" msgstr "Tareas en ejecución de la instancia" -#: awx/api/views.py:536 +#: awx/api/views.py:550 msgid "Instance's Instance Groups" msgstr "Grupos de instancias de la instancia" -#: awx/api/views.py:546 +#: awx/api/views.py:560 msgid "Instance Groups" msgstr "Grupos de instancias" -#: awx/api/views.py:554 +#: awx/api/views.py:568 msgid "Instance Group Detail" msgstr "Detalle del grupo de instancias" -#: awx/api/views.py:562 +#: awx/api/views.py:576 msgid "Instance Group Running Jobs" msgstr "Tareas en ejecución del grupo de instancias" -#: awx/api/views.py:572 +#: awx/api/views.py:586 msgid "Instance Group's Instances" msgstr "Instancias del grupo de instancias" -#: awx/api/views.py:582 +#: awx/api/views.py:596 msgid "Schedules" msgstr "Programaciones" -#: awx/api/views.py:601 +#: awx/api/views.py:615 msgid "Schedule Jobs List" msgstr "Lista de trabajos programados" -#: awx/api/views.py:825 +#: awx/api/views.py:841 msgid "Your license only permits a single organization to exist." msgstr "Su licencia solo permite que exista una organización." -#: awx/api/views.py:1061 awx/api/views.py:4624 +#: awx/api/views.py:1077 awx/api/views.py:4615 msgid "You cannot assign an Organization role as a child role for a Team." msgstr "No puede asignar un rol de organización como rol hijo para un equipo." -#: awx/api/views.py:1065 awx/api/views.py:4638 +#: awx/api/views.py:1081 awx/api/views.py:4629 msgid "You cannot grant system-level permissions to a team." msgstr "No puede asignar permisos de nivel de sistema a un equipo." -#: awx/api/views.py:1072 awx/api/views.py:4630 +#: awx/api/views.py:1088 awx/api/views.py:4621 msgid "" "You cannot grant credential access to a team when the Organization field " "isn't set, or belongs to a different organization" @@ -751,41 +758,35 @@ msgstr "" "No puede asignar credenciales de acceso a un equipo cuando el campo de " "organización no está establecido o pertenezca a una organización diferente." -#: awx/api/views.py:1162 +#: awx/api/views.py:1178 msgid "Cannot delete project." msgstr "No se puede eliminar el proyecto." -#: awx/api/views.py:1197 +#: awx/api/views.py:1213 msgid "Project Schedules" msgstr "Programación del proyecto" -#: awx/api/views.py:1209 +#: awx/api/views.py:1225 msgid "Project SCM Inventory Sources" msgstr "Fuentes de inventario SCM del proyecto" -#: awx/api/views.py:1312 awx/api/views.py:2685 awx/api/views.py:3767 -msgid "Cannot delete job resource when associated workflow job is running." -msgstr "" -"No es posible eliminar un recurso de trabajo cuando la tarea del flujo de " -"trabajo está en ejecución." - -#: awx/api/views.py:1345 +#: awx/api/views.py:1352 msgid "Project Update SCM Inventory Updates" msgstr "Actualizaciones de inventario SCM de la actualización del proyecto" -#: awx/api/views.py:1400 +#: awx/api/views.py:1407 msgid "Me" msgstr "Yo" -#: awx/api/views.py:1444 awx/api/views.py:4581 +#: awx/api/views.py:1451 awx/api/views.py:4572 msgid "You may not perform any action with your own admin_role." msgstr "No puede realizar ninguna acción con su admin_role." -#: awx/api/views.py:1450 awx/api/views.py:4585 +#: awx/api/views.py:1457 awx/api/views.py:4576 msgid "You may not change the membership of a users admin_role" msgstr "No puede cambiar la pertenencia a usuarios admin_role" -#: awx/api/views.py:1455 awx/api/views.py:4590 +#: awx/api/views.py:1462 awx/api/views.py:4581 msgid "" "You cannot grant credential access to a user not in the credentials' " "organization" @@ -793,53 +794,61 @@ msgstr "" "No puede conceder credenciales de acceso a un usuario que no está en la " "organización del credencial." -#: awx/api/views.py:1459 awx/api/views.py:4594 +#: awx/api/views.py:1466 awx/api/views.py:4585 msgid "You cannot grant private credential access to another user" msgstr "No puede conceder acceso a un credencial privado a otro usuario" -#: awx/api/views.py:1557 +#: awx/api/views.py:1564 #, python-format msgid "Cannot change %s." msgstr "No se puede cambiar %s." -#: awx/api/views.py:1563 +#: awx/api/views.py:1570 msgid "Cannot delete user." msgstr "No se puede eliminar usuario." -#: awx/api/views.py:1592 +#: awx/api/views.py:1599 msgid "Deletion not allowed for managed credential types" msgstr "" "No se permite la eliminación para los tipos de credenciales administradas" -#: awx/api/views.py:1594 +#: awx/api/views.py:1601 msgid "Credential types that are in use cannot be deleted" msgstr "No se pueden eliminar los tipos de credenciales en uso" -#: awx/api/views.py:1772 +#: awx/api/views.py:1779 msgid "Cannot delete inventory script." msgstr "No se puede eliminar script de inventario." -#: awx/api/views.py:1857 +#: awx/api/views.py:1864 msgid "{0}" msgstr "{0}" -#: awx/api/views.py:2078 +#: awx/api/views.py:2089 msgid "Fact not found." msgstr "Fact no encontrado." -#: awx/api/views.py:2102 +#: awx/api/views.py:2113 msgid "SSLError while trying to connect to {}" msgstr "SSLError al intentar conectarse a {}" -#: awx/api/views.py:2104 +#: awx/api/views.py:2115 msgid "Request to {} timed out." msgstr "El tiempo de solicitud {} caducó." -#: awx/api/views.py:2106 +#: awx/api/views.py:2117 msgid "Unkown exception {} while trying to GET {}" msgstr "Excepción desconocida {} al intentar OBTENER {}" -#: awx/api/views.py:2109 +#: awx/api/views.py:2120 +msgid "" +"Unauthorized access. Please check your Insights Credential username and " +"password." +msgstr "" +"Acceso no autorizado. Verifique su nombre de usuario y contraseña de " +"Insights." + +#: awx/api/views.py:2122 msgid "" "Failed to gather reports and maintenance plans from Insights API at URL {}. " "Server responded with {} status code and message {}" @@ -848,116 +857,112 @@ msgstr "" " de Insights en la dirección URL {}. El servidor respondió con el código de " "estado {} y el mensaje {}" -#: awx/api/views.py:2115 +#: awx/api/views.py:2128 msgid "Expected JSON response from Insights but instead got {}" msgstr "Respuesta JSON esperada de Insights; en cambio, se recibió {}" -#: awx/api/views.py:2122 +#: awx/api/views.py:2135 msgid "This host is not recognized as an Insights host." msgstr "Este host no se reconoce como un host de Insights." -#: awx/api/views.py:2127 +#: awx/api/views.py:2140 msgid "The Insights Credential for \"{}\" was not found." msgstr "No se encontró la credencial de Insights para \"{}\"." -#: awx/api/views.py:2196 +#: awx/api/views.py:2209 msgid "Cyclical Group association." msgstr "Asociación de grupos cíclica." -#: awx/api/views.py:2473 +#: awx/api/views.py:2482 msgid "Inventory Source List" msgstr "Listado de fuentes del inventario" -#: awx/api/views.py:2486 +#: awx/api/views.py:2495 msgid "Inventory Sources Update" msgstr "Actualización de fuentes de inventario" -#: awx/api/views.py:2514 -msgid "You do not have permission to update project `{}`" -msgstr "No tiene permisos para actualizar el proyecto `{}`" - -#: awx/api/views.py:2526 +#: awx/api/views.py:2525 msgid "Could not start because `can_update` returned False" msgstr "No se pudo iniciar porque `can_update` devolvió False" -#: awx/api/views.py:2534 +#: awx/api/views.py:2533 msgid "No inventory sources to update." msgstr "No hay fuentes de inventario para actualizar." -#: awx/api/views.py:2566 +#: awx/api/views.py:2565 msgid "Cannot delete inventory source." msgstr "No se puede eliminar la fuente del inventario." -#: awx/api/views.py:2574 +#: awx/api/views.py:2573 msgid "Inventory Source Schedules" msgstr "Programaciones de la fuente del inventario" -#: awx/api/views.py:2604 +#: awx/api/views.py:2603 msgid "Notification Templates can only be assigned when source is one of {}." msgstr "" "Plantillas de notificación pueden ser sólo asignadas cuando la fuente es una" " de estas {}." -#: awx/api/views.py:2833 +#: awx/api/views.py:2826 msgid "Job Template Schedules" msgstr "Programación plantilla de trabajo" -#: awx/api/views.py:2853 awx/api/views.py:2869 +#: awx/api/views.py:2846 awx/api/views.py:2862 msgid "Your license does not allow adding surveys." msgstr "Su licencia no permite añadir cuestionarios." -#: awx/api/views.py:2876 +#: awx/api/views.py:2869 msgid "'name' missing from survey spec." msgstr "'name' no encontrado en el especificado cuestionario." -#: awx/api/views.py:2878 +#: awx/api/views.py:2871 msgid "'description' missing from survey spec." msgstr "'description' no encontrado en el especificado cuestionario." -#: awx/api/views.py:2880 +#: awx/api/views.py:2873 msgid "'spec' missing from survey spec." msgstr "'spec' no encontrado en el especificado cuestionario." -#: awx/api/views.py:2882 +#: awx/api/views.py:2875 msgid "'spec' must be a list of items." msgstr "'spec' debe ser una lista de elementos." -#: awx/api/views.py:2884 +#: awx/api/views.py:2877 msgid "'spec' doesn't contain any items." msgstr "'spec' no contiene ningún elemento." -#: awx/api/views.py:2890 +#: awx/api/views.py:2883 #, python-format msgid "Survey question %s is not a json object." msgstr "Pregunta de cuestionario %s no es un objeto JSON." -#: awx/api/views.py:2892 +#: awx/api/views.py:2885 #, python-format msgid "'type' missing from survey question %s." msgstr "'type' no encontrado en la pregunta de cuestionario %s." -#: awx/api/views.py:2894 +#: awx/api/views.py:2887 #, python-format msgid "'question_name' missing from survey question %s." msgstr "'question_name' no aparece en la pregunta de cuestionario %s." -#: awx/api/views.py:2896 +#: awx/api/views.py:2889 #, python-format msgid "'variable' missing from survey question %s." msgstr "'variable' no encontrado en la pregunta de cuestionario %s." -#: awx/api/views.py:2898 +#: awx/api/views.py:2891 #, python-format msgid "'variable' '%(item)s' duplicated in survey question %(survey)s." msgstr "" "'variable' '%(item)s' repetida en la pregunta de cuestionario %(survey)s." -#: awx/api/views.py:2903 +#: awx/api/views.py:2896 #, python-format msgid "'required' missing from survey question %s." msgstr "'required' no encontrado en la pregunta de cuestionario %s." -#: awx/api/views.py:2908 +#: awx/api/views.py:2901 msgid "" "$encrypted$ is reserved keyword and may not be used as a default for " "password {}." @@ -965,89 +970,89 @@ msgstr "" "$encrypted$ es una palabra clave reservada y no puede utilizarse como un " "valor predeterminado para la contraseña {}." -#: awx/api/views.py:3024 +#: awx/api/views.py:3017 msgid "Maximum number of labels for {} reached." msgstr "Número máximo de etiquetas para {} alcanzado." -#: awx/api/views.py:3143 +#: awx/api/views.py:3136 msgid "No matching host could be found!" msgstr "¡Ningún servidor indicado pudo ser encontrado!" -#: awx/api/views.py:3146 +#: awx/api/views.py:3139 msgid "Multiple hosts matched the request!" msgstr "¡Varios servidores corresponden a la petición!" -#: awx/api/views.py:3151 +#: awx/api/views.py:3144 msgid "Cannot start automatically, user input required!" msgstr "" "No se puede iniciar automáticamente, !Entrada de datos de usuario necesaria!" -#: awx/api/views.py:3158 +#: awx/api/views.py:3151 msgid "Host callback job already pending." msgstr "Trabajo de callback para el servidor ya está pendiente." -#: awx/api/views.py:3171 +#: awx/api/views.py:3164 msgid "Error starting job!" msgstr "¡Error iniciando trabajo!" -#: awx/api/views.py:3278 +#: awx/api/views.py:3271 msgid "Cannot associate {0} when {1} have been associated." msgstr "No se puede asociar {0} cuando se ha asociado {1}." -#: awx/api/views.py:3303 +#: awx/api/views.py:3296 msgid "Multiple parent relationship not allowed." msgstr "No se permiten múltiples relaciones primarias." -#: awx/api/views.py:3308 +#: awx/api/views.py:3301 msgid "Cycle detected." msgstr "Ciclo detectado." -#: awx/api/views.py:3512 +#: awx/api/views.py:3505 msgid "Workflow Job Template Schedules" msgstr "Programaciones de plantilla de tareas de flujo de trabajo" -#: awx/api/views.py:3657 awx/api/views.py:4233 +#: awx/api/views.py:3650 awx/api/views.py:4217 msgid "Superuser privileges needed." msgstr "Privilegios de superusuario necesarios." -#: awx/api/views.py:3689 +#: awx/api/views.py:3682 msgid "System Job Template Schedules" msgstr "Programación de plantilla de trabajos de sistema." -#: awx/api/views.py:3907 +#: awx/api/views.py:3891 msgid "Job Host Summaries List" msgstr "Lista resumida de trabajos de servidor" -#: awx/api/views.py:3954 +#: awx/api/views.py:3938 msgid "Job Event Children List" msgstr "LIsta de hijos de eventos de trabajo" -#: awx/api/views.py:3963 +#: awx/api/views.py:3947 msgid "Job Event Hosts List" msgstr "Lista de eventos de trabajos de servidor." -#: awx/api/views.py:3973 +#: awx/api/views.py:3957 msgid "Job Events List" msgstr "Lista de eventos de trabajo" -#: awx/api/views.py:4187 +#: awx/api/views.py:4171 msgid "Ad Hoc Command Events List" msgstr "Lista de eventos para comando Ad Hoc" -#: awx/api/views.py:4395 +#: awx/api/views.py:4386 msgid "Error generating stdout download file: {}" msgstr "Error generando la descarga del fichero de salida estándar: {}" -#: awx/api/views.py:4408 +#: awx/api/views.py:4399 #, python-format msgid "Error generating stdout download file: %s" msgstr "Error generando la descarga del fichero de salida estándar: %s" -#: awx/api/views.py:4453 +#: awx/api/views.py:4444 msgid "Delete not allowed while there are pending notifications" msgstr "Eliminar no está permitido mientras existan notificaciones pendientes" -#: awx/api/views.py:4460 +#: awx/api/views.py:4451 msgid "Notification Template Test" msgstr "Prueba de plantilla de notificación" @@ -1256,7 +1261,7 @@ msgstr "Cambiado" msgid "User-Defaults" msgstr "Parámetros de usuario por defecto" -#: awx/conf/registry.py:150 +#: awx/conf/registry.py:151 msgid "This value has been set manually in a settings file." msgstr "" "Este valor ha sido establecido manualmente en el fichero de configuración." @@ -1300,8 +1305,9 @@ msgstr "" #: awx/conf/tests/unit/test_settings.py:360 #: awx/conf/tests/unit/test_settings.py:374 #: awx/conf/tests/unit/test_settings.py:398 -#: awx/conf/tests/unit/test_settings.py:412 -#: awx/conf/tests/unit/test_settings.py:448 awx/main/conf.py:22 +#: awx/conf/tests/unit/test_settings.py:411 +#: awx/conf/tests/unit/test_settings.py:430 +#: awx/conf/tests/unit/test_settings.py:466 awx/main/conf.py:22 #: awx/main/conf.py:32 awx/main/conf.py:42 awx/main/conf.py:51 #: awx/main/conf.py:63 awx/main/conf.py:81 awx/main/conf.py:96 #: awx/main/conf.py:121 @@ -1324,7 +1330,7 @@ msgstr "Categorías de ajustes" msgid "Setting Detail" msgstr "Detalles del ajuste" -#: awx/conf/views.py:166 +#: awx/conf/views.py:168 msgid "Logging Connectivity Test" msgstr "Registrando prueba de conectividad" @@ -1364,58 +1370,58 @@ msgstr "Funcionalidad %s no está habilitada en la licencia activa." msgid "Features not found in active license." msgstr "Funcionalidades no encontradas en la licencia activa." -#: awx/main/access.py:534 awx/main/access.py:617 awx/main/access.py:746 -#: awx/main/access.py:803 awx/main/access.py:1065 awx/main/access.py:1265 -#: awx/main/access.py:1708 +#: awx/main/access.py:534 awx/main/access.py:619 awx/main/access.py:748 +#: awx/main/access.py:801 awx/main/access.py:1063 awx/main/access.py:1263 +#: awx/main/access.py:1725 msgid "Resource is being used by running jobs" msgstr "Recurso está siendo usado por trabajos en ejecución" -#: awx/main/access.py:673 +#: awx/main/access.py:675 msgid "Unable to change inventory on a host." msgstr "Imposible modificar el inventario en un servidor." -#: awx/main/access.py:690 awx/main/access.py:735 +#: awx/main/access.py:692 awx/main/access.py:737 msgid "Cannot associate two items from different inventories." msgstr "No es posible asociar dos elementos de diferentes inventarios." -#: awx/main/access.py:723 +#: awx/main/access.py:725 msgid "Unable to change inventory on a group." msgstr "Imposible cambiar el inventario en un grupo." -#: awx/main/access.py:985 +#: awx/main/access.py:983 msgid "Unable to change organization on a team." msgstr "Imposible cambiar la organización en un equipo." -#: awx/main/access.py:998 +#: awx/main/access.py:996 msgid "The {} role cannot be assigned to a team" msgstr "El rol {} no puede ser asignado a un equipo." -#: awx/main/access.py:1000 +#: awx/main/access.py:998 msgid "The admin_role for a User cannot be assigned to a team" msgstr "El admin_role para un usuario no puede ser asignado a un equipo" -#: awx/main/access.py:1426 +#: awx/main/access.py:1443 msgid "Job has been orphaned from its job template." msgstr "Se ha eliminado la plantilla de trabajo de la tarea." -#: awx/main/access.py:1428 +#: awx/main/access.py:1445 msgid "You do not have execute permission to related job template." msgstr "" "No tiene permiso de ejecución para la plantilla de trabajo relacionada." -#: awx/main/access.py:1431 +#: awx/main/access.py:1448 msgid "Job was launched with prompted fields." msgstr "La tarea se ejecutó con campos completados." -#: awx/main/access.py:1433 +#: awx/main/access.py:1450 msgid " Organization level permissions required." msgstr "Se requieren permisos de nivel de organización." -#: awx/main/access.py:1435 +#: awx/main/access.py:1452 msgid " You do not have permission to related resources." msgstr "No tiene permisos para los recursos relacionados." -#: awx/main/access.py:1781 +#: awx/main/access.py:1798 msgid "" "You do not have permission to the workflow job resources required for " "relaunch." @@ -1546,10 +1552,10 @@ msgstr "Lista de módulos permitidos para su uso con trabajos ad-hoc." #: awx/main/conf.py:130 awx/main/conf.py:140 awx/main/conf.py:151 #: awx/main/conf.py:161 awx/main/conf.py:171 awx/main/conf.py:181 #: awx/main/conf.py:192 awx/main/conf.py:204 awx/main/conf.py:216 -#: awx/main/conf.py:227 awx/main/conf.py:237 awx/main/conf.py:248 -#: awx/main/conf.py:258 awx/main/conf.py:268 awx/main/conf.py:278 -#: awx/main/conf.py:290 awx/main/conf.py:302 awx/main/conf.py:314 -#: awx/main/conf.py:327 +#: awx/main/conf.py:229 awx/main/conf.py:241 awx/main/conf.py:251 +#: awx/main/conf.py:262 awx/main/conf.py:272 awx/main/conf.py:282 +#: awx/main/conf.py:292 awx/main/conf.py:304 awx/main/conf.py:316 +#: awx/main/conf.py:328 awx/main/conf.py:341 msgid "Jobs" msgstr "Trabajos" @@ -1642,19 +1648,34 @@ msgstr "" "cuando se comunica con instancias aisladas. El valor debe ser " "considerablemente superior a la latencia de red esperada." -#: awx/main/conf.py:214 awx/main/conf.py:215 +#: awx/main/conf.py:212 +msgid "Generate RSA keys for isolated instances" +msgstr "Genere claves de RSA para instancias aisladas" + +#: awx/main/conf.py:213 +msgid "" +"If set, a random RSA key will be generated and distributed to isolated " +"instances. To disable this behavior and manage authentication for isolated " +"instances outside of Tower, disable this setting." +msgstr "" +"En caso de estar definida, se generará una clave de RSA y se distribuirá a " +"instancias aisladas. Para desactivar este comportamiento y administrar la " +"autenticación para instancias aisladas fuera de Tower, desactive esta " +"configuración." + +#: awx/main/conf.py:227 awx/main/conf.py:228 msgid "The RSA private key for SSH traffic to isolated instances" msgstr "La clave privada RSA para el tráfico SSH en instancias aisladas" -#: awx/main/conf.py:225 awx/main/conf.py:226 +#: awx/main/conf.py:239 awx/main/conf.py:240 msgid "The RSA public key for SSH traffic to isolated instances" msgstr "La clave pública RSA para el tráfico SSH en instancias aisladas" -#: awx/main/conf.py:235 +#: awx/main/conf.py:249 msgid "Extra Environment Variables" msgstr "Variables de entorno adicionales" -#: awx/main/conf.py:236 +#: awx/main/conf.py:250 msgid "" "Additional environment variables set for playbook runs, inventory updates, " "project updates, and notification sending." @@ -1663,11 +1684,11 @@ msgstr "" "playbook, actualizaciones de inventarios, actualizaciones de proyectos y " "envío de notificaciones." -#: awx/main/conf.py:246 +#: awx/main/conf.py:260 msgid "Standard Output Maximum Display Size" msgstr "Tamaño máximo a mostrar para la salida estándar." -#: awx/main/conf.py:247 +#: awx/main/conf.py:261 msgid "" "Maximum Size of Standard Output in bytes to display before requiring the " "output be downloaded." @@ -1675,12 +1696,12 @@ msgstr "" "Tamaño máximo de la salida estándar en bytes para mostrar antes de obligar a" " que la salida sea descargada." -#: awx/main/conf.py:256 +#: awx/main/conf.py:270 msgid "Job Event Standard Output Maximum Display Size" msgstr "" "Tamaño máximo de la salida estándar para mostrar del evento del trabajo." -#: awx/main/conf.py:257 +#: awx/main/conf.py:271 msgid "" "Maximum Size of Standard Output in bytes to display for a single job or ad " "hoc command event. `stdout` will end with `…` when truncated." @@ -1689,11 +1710,11 @@ msgstr "" " o evento del comando ad hoc. `stdout` terminará con `...` cuando sea " "truncado." -#: awx/main/conf.py:266 +#: awx/main/conf.py:280 msgid "Maximum Scheduled Jobs" msgstr "Máximo número de trabajos programados" -#: awx/main/conf.py:267 +#: awx/main/conf.py:281 msgid "" "Maximum number of the same job template that can be waiting to run when " "launching from a schedule before no more are created." @@ -1702,11 +1723,11 @@ msgstr "" "para ser ejecutado cuando se lanzan desde una programación antes de que no " "se creen más." -#: awx/main/conf.py:276 +#: awx/main/conf.py:290 msgid "Ansible Callback Plugins" msgstr "Plugins de Ansible callback" -#: awx/main/conf.py:277 +#: awx/main/conf.py:291 msgid "" "List of paths to search for extra callback plugins to be used when running " "jobs. Enter one path per line." @@ -1714,11 +1735,11 @@ msgstr "" "Lista de rutas para buscar complementos adicionales de retorno de llamada " "que se utilizan cuando se ejecutan tareas. Ingrese una ruta por línea." -#: awx/main/conf.py:287 +#: awx/main/conf.py:301 msgid "Default Job Timeout" msgstr "Tiempo de espera por defecto para el trabajo" -#: awx/main/conf.py:288 +#: awx/main/conf.py:302 msgid "" "Maximum time in seconds to allow jobs to run. Use value of 0 to indicate " "that no timeout should be imposed. A timeout set on an individual job " @@ -1729,41 +1750,41 @@ msgstr "" "de espera establecido en una plantilla de trabajo individual reemplazará " "este." -#: awx/main/conf.py:299 +#: awx/main/conf.py:313 msgid "Default Inventory Update Timeout" msgstr "Tiempo de espera por defecto para la actualización del inventario" -#: awx/main/conf.py:300 +#: awx/main/conf.py:314 msgid "" -"Maximum time to allow inventory updates to run. Use value of 0 to indicate " -"that no timeout should be imposed. A timeout set on an individual inventory " -"source will override this." +"Maximum time in seconds to allow inventory updates to run. Use value of 0 to" +" indicate that no timeout should be imposed. A timeout set on an individual " +"inventory source will override this." msgstr "" -"Tiempo máximo a permitir la ejecución de una actualización del inventario. " -"Utilice el valor 0 para indicar que ningún tiempo de espera será impuesto. " -"Un tiempo de espera establecido en una fuente de inventario individual " -"reemplazará éste." +"Tiempo máximo en segundos para permitir la ejecución de actualizaciones de " +"inventario. Utilice el valor 0 para indicar que no debería señalarse ningún " +"tipo de tiempo de expiración. El tiempo de expiración definido para una " +"fuente de inventario individual debería anularlo." -#: awx/main/conf.py:311 +#: awx/main/conf.py:325 msgid "Default Project Update Timeout" msgstr "Tiempo de espera por defecto para la actualización de un proyecto" -#: awx/main/conf.py:312 +#: awx/main/conf.py:326 msgid "" -"Maximum time to allow project updates to run. Use value of 0 to indicate " -"that no timeout should be imposed. A timeout set on an individual project " -"will override this." +"Maximum time in seconds to allow project updates to run. Use value of 0 to " +"indicate that no timeout should be imposed. A timeout set on an individual " +"project will override this." msgstr "" -"Tiempo máximo a permitir la ejecución de una actualización del proyecto. " -"Utilice el valor 0 para indicar que ningún tiempo de espera será impuesto. " -"Un tiempo de espera establecido en una plantilla individual reemplazará " -"éste." +"Tiempo máximo en segundos para permitir que se ejecuten las actualizaciones " +"de los proyectos. Utilice un valor de 0 para indicar que no debería " +"definirse ningún tipo de tiempo de expiración. El tiempo de expiración " +"definido para una fuente de inventario individual debería anularlo." -#: awx/main/conf.py:323 +#: awx/main/conf.py:337 msgid "Per-Host Ansible Fact Cache Timeout" msgstr "Tiempo de espera de la caché de eventos Ansible por host" -#: awx/main/conf.py:324 +#: awx/main/conf.py:338 msgid "" "Maximum time, in seconds, that stored Ansible facts are considered valid " "since the last time they were modified. Only valid, non-stale, facts will be" @@ -1776,27 +1797,27 @@ msgstr "" "Tenga en cuenta que esto no influye en la eliminación de ansible_facts de la" " base de datos." -#: awx/main/conf.py:335 +#: awx/main/conf.py:350 msgid "Logging Aggregator" msgstr "Agregación de registros" -#: awx/main/conf.py:336 +#: awx/main/conf.py:351 msgid "Hostname/IP where external logs will be sent to." msgstr "Hostname/IP donde los logs externos serán enviados." -#: awx/main/conf.py:337 awx/main/conf.py:347 awx/main/conf.py:358 -#: awx/main/conf.py:368 awx/main/conf.py:380 awx/main/conf.py:395 -#: awx/main/conf.py:407 awx/main/conf.py:416 awx/main/conf.py:426 -#: awx/main/conf.py:436 awx/main/conf.py:447 awx/main/conf.py:459 -#: awx/main/conf.py:472 +#: awx/main/conf.py:352 awx/main/conf.py:363 awx/main/conf.py:375 +#: awx/main/conf.py:385 awx/main/conf.py:397 awx/main/conf.py:412 +#: awx/main/conf.py:424 awx/main/conf.py:433 awx/main/conf.py:443 +#: awx/main/conf.py:453 awx/main/conf.py:464 awx/main/conf.py:476 +#: awx/main/conf.py:489 msgid "Logging" msgstr "Registros" -#: awx/main/conf.py:344 +#: awx/main/conf.py:360 msgid "Logging Aggregator Port" msgstr "Puerto de agregación de registros" -#: awx/main/conf.py:345 +#: awx/main/conf.py:361 msgid "" "Port on Logging Aggregator to send logs to (if required and not provided in " "Logging Aggregator)." @@ -1804,39 +1825,39 @@ msgstr "" "El puerto del Agregador de Logs al cual enviar logs (si es requerido y no " "está definido en el Agregador de Logs)." -#: awx/main/conf.py:356 +#: awx/main/conf.py:373 msgid "Logging Aggregator Type" msgstr "Tipo de agregación de registros." -#: awx/main/conf.py:357 +#: awx/main/conf.py:374 msgid "Format messages for the chosen log aggregator." msgstr "Formato de mensajes para el agregador de registros escogidos." -#: awx/main/conf.py:366 +#: awx/main/conf.py:383 msgid "Logging Aggregator Username" msgstr "Usuario del agregador de registros" -#: awx/main/conf.py:367 +#: awx/main/conf.py:384 msgid "Username for external log aggregator (if required)." msgstr "Usuario para el agregador de registros externo (si es necesario)." -#: awx/main/conf.py:378 +#: awx/main/conf.py:395 msgid "Logging Aggregator Password/Token" msgstr "Contraseña/Token del agregador de registros" -#: awx/main/conf.py:379 +#: awx/main/conf.py:396 msgid "" "Password or authentication token for external log aggregator (if required)." msgstr "" "Contraseña o token de autentificación para el agregador de registros externo" " (si es necesario)." -#: awx/main/conf.py:388 +#: awx/main/conf.py:405 msgid "Loggers Sending Data to Log Aggregator Form" msgstr "" "Registradores que envían datos al formulario de agregadores de registros" -#: awx/main/conf.py:389 +#: awx/main/conf.py:406 msgid "" "List of loggers that will send HTTP logs to the collector, these can include any or all of: \n" "awx - service logs\n" @@ -1850,11 +1871,11 @@ msgstr "" "job_events - datos de retorno de llamada de eventos de tareas Ansible\n" "system_tracking - información obtenida de tareas de análisis" -#: awx/main/conf.py:402 +#: awx/main/conf.py:419 msgid "Log System Tracking Facts Individually" msgstr "Sistema de registros tratará los facts individualmente." -#: awx/main/conf.py:403 +#: awx/main/conf.py:420 msgid "" "If set, system tracking facts will be sent for each package, service, " "orother item found in a scan, allowing for greater search query granularity." @@ -1867,35 +1888,35 @@ msgstr "" "serán enviados como un único diccionario, permitiendo mayor eficiencia en el" " proceso de facts." -#: awx/main/conf.py:414 +#: awx/main/conf.py:431 msgid "Enable External Logging" msgstr "Habilitar registro externo" -#: awx/main/conf.py:415 +#: awx/main/conf.py:432 msgid "Enable sending logs to external log aggregator." msgstr "Habilitar el envío de registros a un agregador de registros externo." -#: awx/main/conf.py:424 +#: awx/main/conf.py:441 msgid "Cluster-wide Tower unique identifier." msgstr "Indentificador de Torre único a través del cluster." -#: awx/main/conf.py:425 +#: awx/main/conf.py:442 msgid "Useful to uniquely identify Tower instances." msgstr "Útil para identificar instancias de Torre." -#: awx/main/conf.py:434 +#: awx/main/conf.py:451 msgid "Logging Aggregator Protocol" msgstr "Registrando protocolo de agregador" -#: awx/main/conf.py:435 +#: awx/main/conf.py:452 msgid "Protocol used to communicate with log aggregator." msgstr "Protocolo utilizado para comunicarse con el agregador de registros." -#: awx/main/conf.py:443 +#: awx/main/conf.py:460 msgid "TCP Connection Timeout" msgstr "Tiempo de espera para la conexión TCP" -#: awx/main/conf.py:444 +#: awx/main/conf.py:461 msgid "" "Number of seconds for a TCP connection to external log aggregator to " "timeout. Applies to HTTPS and TCP log aggregator protocols." @@ -1904,11 +1925,11 @@ msgstr "" "externo caduque. Aplica a protocolos de agregadores de registros HTTPS y " "TCP." -#: awx/main/conf.py:454 +#: awx/main/conf.py:471 msgid "Enable/disable HTTPS certificate verification" msgstr "Habilitar/deshabilitar verificación de certificado HTTPS" -#: awx/main/conf.py:455 +#: awx/main/conf.py:472 msgid "" "Flag to control enable/disable of certificate verification when " "LOG_AGGREGATOR_PROTOCOL is \"https\". If enabled, Tower's log handler will " @@ -1921,11 +1942,11 @@ msgstr "" " de registros externo haya enviado el certificado antes de establecer la " "conexión." -#: awx/main/conf.py:467 +#: awx/main/conf.py:484 msgid "Logging Aggregator Level Threshold" msgstr "Umbral de nivel del agregador de registros" -#: awx/main/conf.py:468 +#: awx/main/conf.py:485 msgid "" "Level threshold used by log handler. Severities from lowest to highest are " "DEBUG, INFO, WARNING, ERROR, CRITICAL. Messages less severe than the " @@ -1937,7 +1958,7 @@ msgstr "" "CRITICAL. El controlador de registros ignorará los mensajes menos graves que" " el umbral (los mensajes de la categoría awx.anlytics omiten este ajuste)." -#: awx/main/conf.py:491 awx/sso/conf.py:1112 +#: awx/main/conf.py:508 awx/sso/conf.py:1105 msgid "\n" msgstr "\n" @@ -1969,43 +1990,48 @@ msgstr "Pmrun" msgid "Runas" msgstr "Runas" -#: awx/main/fields.py:55 +#: awx/main/fields.py:56 #, python-format msgid "'%s' is not one of ['%s']" msgstr "'%s' no es uno de ['%s']" -#: awx/main/fields.py:520 +#: awx/main/fields.py:531 +#, python-format +msgid "cannot be set unless \"%s\" is set" +msgstr "no puede establecerse excepto que se defina \"%s\"" + +#: awx/main/fields.py:547 #, python-format msgid "required for %s" msgstr "requerido para %s" -#: awx/main/fields.py:544 +#: awx/main/fields.py:571 msgid "must be set when SSH key is encrypted." msgstr "se debe establecer cuando la clave SSH está cifrada." -#: awx/main/fields.py:547 -msgid "should not be set when SSH key is empty." -msgstr "no se debe establecer cuando la clave SSH está vacía." - -#: awx/main/fields.py:549 +#: awx/main/fields.py:577 msgid "should not be set when SSH key is not encrypted." msgstr "no se debe establecer cuando la clave SSH no está cifrada." -#: awx/main/fields.py:613 +#: awx/main/fields.py:635 +msgid "'dependencies' is not supported for custom credentials." +msgstr "'dependencias' no es compatible con las credenciales personalizadas." + +#: awx/main/fields.py:649 msgid "\"tower\" is a reserved field name" msgstr "\"tower\" es un nombre de campo reservado" -#: awx/main/fields.py:620 +#: awx/main/fields.py:656 #, python-format msgid "field IDs must be unique (%s)" msgstr "los ID de campo deben ser únicos (%s)" -#: awx/main/fields.py:633 +#: awx/main/fields.py:669 #, python-format msgid "%s not allowed for %s type (%s)" msgstr "%s no está permitido para el tipo %s (%s)" -#: awx/main/fields.py:717 +#: awx/main/fields.py:753 #, python-format msgid "%s uses an undefined field (%s)" msgstr "%s usa un campo indefinido (%s)" @@ -2109,44 +2135,44 @@ msgstr "Módulo no soportado para comandos ad hoc." msgid "No argument passed to %s module." msgstr "Ningún argumento pasado al módulo %s." -#: awx/main/models/ad_hoc_commands.py:243 awx/main/models/jobs.py:900 +#: awx/main/models/ad_hoc_commands.py:245 awx/main/models/jobs.py:904 msgid "Host Failed" msgstr "Servidor fallido" -#: awx/main/models/ad_hoc_commands.py:244 awx/main/models/jobs.py:901 +#: awx/main/models/ad_hoc_commands.py:246 awx/main/models/jobs.py:905 msgid "Host OK" msgstr "Servidor OK" -#: awx/main/models/ad_hoc_commands.py:245 awx/main/models/jobs.py:904 +#: awx/main/models/ad_hoc_commands.py:247 awx/main/models/jobs.py:908 msgid "Host Unreachable" msgstr "Servidor no alcanzable" -#: awx/main/models/ad_hoc_commands.py:250 awx/main/models/jobs.py:903 +#: awx/main/models/ad_hoc_commands.py:252 awx/main/models/jobs.py:907 msgid "Host Skipped" msgstr "Servidor omitido" -#: awx/main/models/ad_hoc_commands.py:260 awx/main/models/jobs.py:931 +#: awx/main/models/ad_hoc_commands.py:262 awx/main/models/jobs.py:935 msgid "Debug" msgstr "Debug" -#: awx/main/models/ad_hoc_commands.py:261 awx/main/models/jobs.py:932 +#: awx/main/models/ad_hoc_commands.py:263 awx/main/models/jobs.py:936 msgid "Verbose" msgstr "Nivel de detalle" -#: awx/main/models/ad_hoc_commands.py:262 awx/main/models/jobs.py:933 +#: awx/main/models/ad_hoc_commands.py:264 awx/main/models/jobs.py:937 msgid "Deprecated" msgstr "Obsoleto" -#: awx/main/models/ad_hoc_commands.py:263 awx/main/models/jobs.py:934 +#: awx/main/models/ad_hoc_commands.py:265 awx/main/models/jobs.py:938 msgid "Warning" msgstr "Advertencia" -#: awx/main/models/ad_hoc_commands.py:264 awx/main/models/jobs.py:935 +#: awx/main/models/ad_hoc_commands.py:266 awx/main/models/jobs.py:939 msgid "System Warning" msgstr "Advertencia del sistema" -#: awx/main/models/ad_hoc_commands.py:265 awx/main/models/jobs.py:936 -#: awx/main/models/unified_jobs.py:63 +#: awx/main/models/ad_hoc_commands.py:267 awx/main/models/jobs.py:940 +#: awx/main/models/unified_jobs.py:64 msgid "Error" msgstr "Error" @@ -2358,75 +2384,75 @@ msgstr "Las instancias que son miembros de este grupo de instancias" msgid "Instance Group to remotely control this group." msgstr "Grupo de instancias para controlar remotamente este grupo." -#: awx/main/models/inventory.py:51 +#: awx/main/models/inventory.py:52 msgid "Hosts have a direct link to this inventory." msgstr "Los hosts tienen un enlace directo a este inventario." -#: awx/main/models/inventory.py:52 +#: awx/main/models/inventory.py:53 msgid "Hosts for inventory generated using the host_filter property." msgstr "Hosts para inventario generado a través de la propiedad host_filter." -#: awx/main/models/inventory.py:57 +#: awx/main/models/inventory.py:58 msgid "inventories" msgstr "inventarios" -#: awx/main/models/inventory.py:64 +#: awx/main/models/inventory.py:65 msgid "Organization containing this inventory." msgstr "Organización que contiene este inventario." -#: awx/main/models/inventory.py:71 +#: awx/main/models/inventory.py:72 msgid "Inventory variables in JSON or YAML format." msgstr "Variables de inventario en formato JSON o YAML." -#: awx/main/models/inventory.py:76 +#: awx/main/models/inventory.py:77 msgid "Flag indicating whether any hosts in this inventory have failed." msgstr "" "Indicador que establece si algún servidor en este inventario ha fallado." -#: awx/main/models/inventory.py:81 +#: awx/main/models/inventory.py:82 msgid "Total number of hosts in this inventory." msgstr "Número total de servidores en este inventario." -#: awx/main/models/inventory.py:86 +#: awx/main/models/inventory.py:87 msgid "Number of hosts in this inventory with active failures." msgstr "Número de servidores en este inventario con fallos actuales." -#: awx/main/models/inventory.py:91 +#: awx/main/models/inventory.py:92 msgid "Total number of groups in this inventory." msgstr "Número total de grupos en este inventario." -#: awx/main/models/inventory.py:96 +#: awx/main/models/inventory.py:97 msgid "Number of groups in this inventory with active failures." msgstr "Número de grupos en este inventario con fallos actuales." -#: awx/main/models/inventory.py:101 +#: awx/main/models/inventory.py:102 msgid "" "Flag indicating whether this inventory has any external inventory sources." msgstr "" "Indicador que establece si el inventario tiene alguna fuente de externa de " "inventario." -#: awx/main/models/inventory.py:106 +#: awx/main/models/inventory.py:107 msgid "" "Total number of external inventory sources configured within this inventory." msgstr "" "Número total de inventarios de origen externo configurado dentro de este " "inventario." -#: awx/main/models/inventory.py:111 +#: awx/main/models/inventory.py:112 msgid "Number of external inventory sources in this inventory with failures." msgstr "" "Número de inventarios de origen externo en este inventario con errores." -#: awx/main/models/inventory.py:118 +#: awx/main/models/inventory.py:119 msgid "Kind of inventory being represented." msgstr "Tipo de inventario que se representa." -#: awx/main/models/inventory.py:124 +#: awx/main/models/inventory.py:125 msgid "Filter that will be applied to the hosts of this inventory." msgstr "Filtro que se aplicará a los hosts de este inventario." -#: awx/main/models/inventory.py:151 +#: awx/main/models/inventory.py:152 msgid "" "Credentials to be used by hosts belonging to this inventory when accessing " "Red Hat Insights API." @@ -2434,39 +2460,39 @@ msgstr "" "Credenciales que utilizarán los hosts que pertenecen a este inventario " "cuando accedan a la API de Red Hat Insights." -#: awx/main/models/inventory.py:160 +#: awx/main/models/inventory.py:161 msgid "Flag indicating the inventory is being deleted." msgstr "Indicador que muestra que el inventario se eliminará." -#: awx/main/models/inventory.py:373 +#: awx/main/models/inventory.py:374 msgid "Assignment not allowed for Smart Inventory" msgstr "Tarea no permitida para el inventario inteligente" -#: awx/main/models/inventory.py:375 awx/main/models/projects.py:148 +#: awx/main/models/inventory.py:376 awx/main/models/projects.py:148 msgid "Credential kind must be 'insights'." msgstr "Tipo de credencial debe ser 'insights'." -#: awx/main/models/inventory.py:439 +#: awx/main/models/inventory.py:443 msgid "Is this host online and available for running jobs?" msgstr "¿Está este servidor funcionando y disponible para ejecutar trabajos?" -#: awx/main/models/inventory.py:445 +#: awx/main/models/inventory.py:449 msgid "" "The value used by the remote inventory source to uniquely identify the host" msgstr "" "El valor usado por el inventario de fuente remota para identificar de forma " "única el servidor" -#: awx/main/models/inventory.py:450 +#: awx/main/models/inventory.py:454 msgid "Host variables in JSON or YAML format." msgstr "Variables del servidor en formato JSON o YAML." -#: awx/main/models/inventory.py:472 +#: awx/main/models/inventory.py:476 msgid "Flag indicating whether the last job failed for this host." msgstr "" "Indicador que establece si el último trabajo ha fallado para este servidor." -#: awx/main/models/inventory.py:477 +#: awx/main/models/inventory.py:481 msgid "" "Flag indicating whether this host was created/updated from any external " "inventory sources." @@ -2474,55 +2500,55 @@ msgstr "" "Indicador que establece si este servidor fue creado/actualizado desde algún " "inventario de fuente externa." -#: awx/main/models/inventory.py:483 +#: awx/main/models/inventory.py:487 msgid "Inventory source(s) that created or modified this host." msgstr "Fuente(s) del inventario que crearon o modificaron este servidor." -#: awx/main/models/inventory.py:488 +#: awx/main/models/inventory.py:492 msgid "Arbitrary JSON structure of most recent ansible_facts, per-host." msgstr "Estructura de JSON arbitraria de ansible_facts por host más reciente." -#: awx/main/models/inventory.py:494 +#: awx/main/models/inventory.py:498 msgid "The date and time ansible_facts was last modified." msgstr "La fecha y hora en las que se modificó ansible_facts por última vez." -#: awx/main/models/inventory.py:501 +#: awx/main/models/inventory.py:505 msgid "Red Hat Insights host unique identifier." msgstr "Identificador único de host de Red Hat Insights." -#: awx/main/models/inventory.py:629 +#: awx/main/models/inventory.py:633 msgid "Group variables in JSON or YAML format." msgstr "Grupo de variables en formato JSON o YAML." -#: awx/main/models/inventory.py:635 +#: awx/main/models/inventory.py:639 msgid "Hosts associated directly with this group." msgstr "Hosts associated directly with this group." -#: awx/main/models/inventory.py:640 +#: awx/main/models/inventory.py:644 msgid "Total number of hosts directly or indirectly in this group." msgstr "" "Número total de servidores directamente o indirectamente en este grupo." -#: awx/main/models/inventory.py:645 +#: awx/main/models/inventory.py:649 msgid "Flag indicating whether this group has any hosts with active failures." msgstr "" "Indicador que establece si este grupo tiene algunos servidores con fallos " "actuales." -#: awx/main/models/inventory.py:650 +#: awx/main/models/inventory.py:654 msgid "Number of hosts in this group with active failures." msgstr "Número de servidores en este grupo con fallos actuales." -#: awx/main/models/inventory.py:655 +#: awx/main/models/inventory.py:659 msgid "Total number of child groups contained within this group." msgstr "Número total de grupos hijo dentro de este grupo." -#: awx/main/models/inventory.py:660 +#: awx/main/models/inventory.py:664 msgid "Number of child groups within this group that have active failures." msgstr "" "Número de grupos hijo dentro de este grupo que tienen fallos actuales." -#: awx/main/models/inventory.py:665 +#: awx/main/models/inventory.py:669 msgid "" "Flag indicating whether this group was created/updated from any external " "inventory sources." @@ -2530,64 +2556,64 @@ msgstr "" "Indicador que establece si este grupo fue creado/actualizado desde un " "inventario de fuente externa." -#: awx/main/models/inventory.py:671 +#: awx/main/models/inventory.py:675 msgid "Inventory source(s) that created or modified this group." msgstr "Fuente(s) de inventario que crearon o modificaron este grupo." -#: awx/main/models/inventory.py:861 awx/main/models/projects.py:42 -#: awx/main/models/unified_jobs.py:427 +#: awx/main/models/inventory.py:865 awx/main/models/projects.py:42 +#: awx/main/models/unified_jobs.py:428 msgid "Manual" msgstr "Manual" -#: awx/main/models/inventory.py:862 +#: awx/main/models/inventory.py:866 msgid "File, Directory or Script" msgstr "Archivo, directorio o script" -#: awx/main/models/inventory.py:863 +#: awx/main/models/inventory.py:867 msgid "Sourced from a Project" msgstr "Extraído de un proyecto" -#: awx/main/models/inventory.py:864 +#: awx/main/models/inventory.py:868 msgid "Amazon EC2" msgstr "Amazon EC2" -#: awx/main/models/inventory.py:865 +#: awx/main/models/inventory.py:869 msgid "Google Compute Engine" msgstr "Google Compute Engine" -#: awx/main/models/inventory.py:866 +#: awx/main/models/inventory.py:870 msgid "Microsoft Azure Classic (deprecated)" msgstr "Microsoft Azure Classic (obsoleto)" -#: awx/main/models/inventory.py:867 +#: awx/main/models/inventory.py:871 msgid "Microsoft Azure Resource Manager" msgstr "Microsoft Azure Resource Manager" -#: awx/main/models/inventory.py:868 +#: awx/main/models/inventory.py:872 msgid "VMware vCenter" msgstr "VMware vCenter" -#: awx/main/models/inventory.py:869 +#: awx/main/models/inventory.py:873 msgid "Red Hat Satellite 6" msgstr "Red Hat Satellite 6" -#: awx/main/models/inventory.py:870 +#: awx/main/models/inventory.py:874 msgid "Red Hat CloudForms" msgstr "Red Hat CloudForms" -#: awx/main/models/inventory.py:871 +#: awx/main/models/inventory.py:875 msgid "OpenStack" msgstr "OpenStack" -#: awx/main/models/inventory.py:872 +#: awx/main/models/inventory.py:876 msgid "Custom Script" msgstr "Script personalizado" -#: awx/main/models/inventory.py:989 +#: awx/main/models/inventory.py:993 msgid "Inventory source variables in YAML or JSON format." msgstr "Variables para la fuente del inventario en formato YAML o JSON." -#: awx/main/models/inventory.py:1008 +#: awx/main/models/inventory.py:1012 msgid "" "Comma-separated list of filter expressions (EC2 only). Hosts are imported " "when ANY of the filters match." @@ -2595,71 +2621,79 @@ msgstr "" "Lista de expresiones de filtrado separadas por coma (sólo EC2). Servidores " "son importados cuando ALGÚN filtro coincide." -#: awx/main/models/inventory.py:1014 +#: awx/main/models/inventory.py:1018 msgid "Limit groups automatically created from inventory source (EC2 only)." msgstr "" "Limitar grupos creados automáticamente desde la fuente del inventario (sólo " "EC2)" -#: awx/main/models/inventory.py:1018 +#: awx/main/models/inventory.py:1022 msgid "Overwrite local groups and hosts from remote inventory source." msgstr "" "Sobrescribir grupos locales y servidores desde una fuente remota del " "inventario." -#: awx/main/models/inventory.py:1022 +#: awx/main/models/inventory.py:1026 msgid "Overwrite local variables from remote inventory source." msgstr "" "Sobrescribir las variables locales desde una fuente remota del inventario." -#: awx/main/models/inventory.py:1027 awx/main/models/jobs.py:159 +#: awx/main/models/inventory.py:1031 awx/main/models/jobs.py:159 #: awx/main/models/projects.py:117 msgid "The amount of time (in seconds) to run before the task is canceled." msgstr "" "La cantidad de tiempo (en segundos) para ejecutar antes de que se cancele la" " tarea." -#: awx/main/models/inventory.py:1060 -msgid "Availability Zone" -msgstr "Zona de disponibilidad" - -#: awx/main/models/inventory.py:1061 +#: awx/main/models/inventory.py:1064 msgid "Image ID" msgstr "Id de imagen" -#: awx/main/models/inventory.py:1062 +#: awx/main/models/inventory.py:1065 +msgid "Availability Zone" +msgstr "Zona de disponibilidad" + +#: awx/main/models/inventory.py:1066 +msgid "Account" +msgstr "Cuenta" + +#: awx/main/models/inventory.py:1067 msgid "Instance ID" msgstr "ID de instancia" -#: awx/main/models/inventory.py:1063 +#: awx/main/models/inventory.py:1068 +msgid "Instance State" +msgstr "Estado de la instancia" + +#: awx/main/models/inventory.py:1069 msgid "Instance Type" msgstr "Tipo de instancia" -#: awx/main/models/inventory.py:1064 +#: awx/main/models/inventory.py:1070 msgid "Key Name" msgstr "Nombre clave" -#: awx/main/models/inventory.py:1065 +#: awx/main/models/inventory.py:1071 msgid "Region" msgstr "Región" -#: awx/main/models/inventory.py:1066 +#: awx/main/models/inventory.py:1072 msgid "Security Group" msgstr "Grupo de seguridad" -#: awx/main/models/inventory.py:1067 +#: awx/main/models/inventory.py:1073 msgid "Tags" msgstr "Etiquetas" -#: awx/main/models/inventory.py:1068 -msgid "VPC ID" -msgstr "VPC ID" - -#: awx/main/models/inventory.py:1069 +#: awx/main/models/inventory.py:1074 msgid "Tag None" msgstr "Etiqueta ninguna" -#: awx/main/models/inventory.py:1132 +#: awx/main/models/inventory.py:1075 +msgid "VPC ID" +msgstr "VPC ID" + +#: awx/main/models/inventory.py:1138 #, python-format msgid "" "Cloud-based inventory sources (such as %s) require credentials for the " @@ -2668,30 +2702,30 @@ msgstr "" "Fuentes de inventario basados en Cloud (como %s) requieren credenciales para" " identificar los correspondientes servicios cloud." -#: awx/main/models/inventory.py:1139 +#: awx/main/models/inventory.py:1145 msgid "Credential is required for a cloud source." msgstr "Un credencial es necesario para una fuente cloud." -#: awx/main/models/inventory.py:1161 +#: awx/main/models/inventory.py:1167 #, python-format msgid "Invalid %(source)s region: %(region)s" msgstr "Región %(source)s inválida: %(region)s" -#: awx/main/models/inventory.py:1185 +#: awx/main/models/inventory.py:1191 #, python-format msgid "Invalid filter expression: %(filter)s" msgstr "Expresión de filtro inválida: %(filter)s" -#: awx/main/models/inventory.py:1206 +#: awx/main/models/inventory.py:1212 #, python-format msgid "Invalid group by choice: %(choice)s" msgstr "Grupo escogido inválido: %(choice)s" -#: awx/main/models/inventory.py:1241 +#: awx/main/models/inventory.py:1247 msgid "Project containing inventory file used as source." msgstr "Proyecto que contiene el archivo de inventario usado como fuente." -#: awx/main/models/inventory.py:1389 +#: awx/main/models/inventory.py:1395 #, python-format msgid "" "Unable to configure this item for cloud sync. It is already managed by %s." @@ -2699,18 +2733,45 @@ msgstr "" "Imposible configurar este elemento para sincronización cloud. Está " "administrado actualmente por %s." -#: awx/main/models/inventory.py:1414 +#: awx/main/models/inventory.py:1405 +msgid "" +"More than one SCM-based inventory source with update on project update per-" +"inventory not allowed." +msgstr "" +"No se permite más de una fuente de inventario basada en SCM con " +"actualización en la actualización del proyecto por inventario." + +#: awx/main/models/inventory.py:1412 +msgid "" +"Cannot update SCM-based inventory source on launch if set to update on " +"project update. Instead, configure the corresponding source project to " +"update on launch." +msgstr "" +"No se puede actualizar la fuente de inventario basada en SCM en la ejecución" +" si está configurada para actualizarse en la actualización del proyecto. En " +"su lugar, configure el proyecto de fuente correspondiente para actualizar en" +" la ejecución." + +#: awx/main/models/inventory.py:1418 +msgid "SCM type sources must set `overwrite_vars` to `true`." +msgstr "Las fuentes de tipo SCM deben configurar `overwrite_vars` en `true`." + +#: awx/main/models/inventory.py:1423 +msgid "Cannot set source_path if not SCM type." +msgstr "No se puede configurar source_path si no es del tipo SCM." + +#: awx/main/models/inventory.py:1448 msgid "" "Inventory files from this Project Update were used for the inventory update." msgstr "" "Los archivos de inventario de esta actualización de proyecto se utilizaron " "para la actualización del inventario." -#: awx/main/models/inventory.py:1528 +#: awx/main/models/inventory.py:1561 msgid "Inventory script contents" msgstr "Contenido del script de inventario" -#: awx/main/models/inventory.py:1533 +#: awx/main/models/inventory.py:1566 msgid "Organization owning this inventory script" msgstr "Organización propietario de este script de inventario" @@ -2753,21 +2814,21 @@ msgstr "" "La plantilla de trabajo debe proporcionar 'inventory' o permitir " "solicitarlo." -#: awx/main/models/jobs.py:421 +#: awx/main/models/jobs.py:422 msgid "Cannot override job_type to or from a scan job." msgstr "No se puede sustituir job_type a o desde un trabajo de escaneo." -#: awx/main/models/jobs.py:487 awx/main/models/projects.py:263 +#: awx/main/models/jobs.py:488 awx/main/models/projects.py:263 msgid "SCM Revision" msgstr "Revisión SCM" -#: awx/main/models/jobs.py:488 +#: awx/main/models/jobs.py:489 msgid "The SCM Revision from the Project used for this job, if available" msgstr "" "La revisión SCM desde el proyecto usado para este trabajo, si está " "disponible" -#: awx/main/models/jobs.py:496 +#: awx/main/models/jobs.py:497 msgid "" "The SCM Refresh task used to make sure the playbooks were available for the " "job run" @@ -2775,105 +2836,105 @@ msgstr "" "La tarea de actualización de SCM utilizado para asegurarse que los playbooks" " estaban disponibles para la ejecución del trabajo" -#: awx/main/models/jobs.py:799 +#: awx/main/models/jobs.py:802 msgid "job host summaries" msgstr "Resumen de trabajos de servidor" -#: awx/main/models/jobs.py:902 +#: awx/main/models/jobs.py:906 msgid "Host Failure" msgstr "Fallo del servidor" -#: awx/main/models/jobs.py:905 awx/main/models/jobs.py:919 +#: awx/main/models/jobs.py:909 awx/main/models/jobs.py:923 msgid "No Hosts Remaining" msgstr "No más servidores" -#: awx/main/models/jobs.py:906 +#: awx/main/models/jobs.py:910 msgid "Host Polling" msgstr "Sondeo al servidor" -#: awx/main/models/jobs.py:907 +#: awx/main/models/jobs.py:911 msgid "Host Async OK" msgstr "Servidor Async OK" -#: awx/main/models/jobs.py:908 +#: awx/main/models/jobs.py:912 msgid "Host Async Failure" msgstr "Servidor Async fallido" -#: awx/main/models/jobs.py:909 +#: awx/main/models/jobs.py:913 msgid "Item OK" msgstr "Elemento OK" -#: awx/main/models/jobs.py:910 +#: awx/main/models/jobs.py:914 msgid "Item Failed" msgstr "Elemento fallido" -#: awx/main/models/jobs.py:911 +#: awx/main/models/jobs.py:915 msgid "Item Skipped" msgstr "Elemento omitido" -#: awx/main/models/jobs.py:912 +#: awx/main/models/jobs.py:916 msgid "Host Retry" msgstr "Reintentar servidor" -#: awx/main/models/jobs.py:914 +#: awx/main/models/jobs.py:918 msgid "File Difference" msgstr "Diferencias del fichero" -#: awx/main/models/jobs.py:915 +#: awx/main/models/jobs.py:919 msgid "Playbook Started" msgstr "Playbook iniciado" -#: awx/main/models/jobs.py:916 +#: awx/main/models/jobs.py:920 msgid "Running Handlers" msgstr "Handlers ejecutándose" -#: awx/main/models/jobs.py:917 +#: awx/main/models/jobs.py:921 msgid "Including File" msgstr "Incluyendo fichero" -#: awx/main/models/jobs.py:918 +#: awx/main/models/jobs.py:922 msgid "No Hosts Matched" msgstr "Ningún servidor corresponde" -#: awx/main/models/jobs.py:920 +#: awx/main/models/jobs.py:924 msgid "Task Started" msgstr "Tarea iniciada" -#: awx/main/models/jobs.py:922 +#: awx/main/models/jobs.py:926 msgid "Variables Prompted" msgstr "Variables solicitadas" -#: awx/main/models/jobs.py:923 +#: awx/main/models/jobs.py:927 msgid "Gathering Facts" msgstr "Obteniendo facts" -#: awx/main/models/jobs.py:924 +#: awx/main/models/jobs.py:928 msgid "internal: on Import for Host" msgstr "internal: en la importación para el servidor" -#: awx/main/models/jobs.py:925 +#: awx/main/models/jobs.py:929 msgid "internal: on Not Import for Host" msgstr "internal: en la no importación para el servidor" -#: awx/main/models/jobs.py:926 +#: awx/main/models/jobs.py:930 msgid "Play Started" msgstr "Jugada iniciada" -#: awx/main/models/jobs.py:927 +#: awx/main/models/jobs.py:931 msgid "Playbook Complete" msgstr "Playbook terminado" -#: awx/main/models/jobs.py:1337 +#: awx/main/models/jobs.py:1363 msgid "Remove jobs older than a certain number of days" msgstr "Eliminar trabajos más antiguos que el ńumero de días especificado" -#: awx/main/models/jobs.py:1338 +#: awx/main/models/jobs.py:1364 msgid "Remove activity stream entries older than a certain number of days" msgstr "" "Eliminar entradas del flujo de actividad más antiguos que el número de días " "especificado" -#: awx/main/models/jobs.py:1339 +#: awx/main/models/jobs.py:1365 msgid "Purge and/or reduce the granularity of system tracking data" msgstr "" "Limpiar y/o reducir la granularidad de los datos del sistema de rastreo" @@ -2882,15 +2943,15 @@ msgstr "" msgid "Organization this label belongs to." msgstr "Organización a la que esta etiqueta pertenece." -#: awx/main/models/notifications.py:138 awx/main/models/unified_jobs.py:58 +#: awx/main/models/notifications.py:138 awx/main/models/unified_jobs.py:59 msgid "Pending" msgstr "Pendiente" -#: awx/main/models/notifications.py:139 awx/main/models/unified_jobs.py:61 +#: awx/main/models/notifications.py:139 awx/main/models/unified_jobs.py:62 msgid "Successful" msgstr "Correctamente" -#: awx/main/models/notifications.py:140 awx/main/models/unified_jobs.py:62 +#: awx/main/models/notifications.py:140 awx/main/models/unified_jobs.py:63 msgid "Failed" msgstr "Fallido" @@ -3168,84 +3229,84 @@ msgstr "JSON esperado" msgid "days must be a positive integer." msgstr "días debe ser un número entero." -#: awx/main/models/unified_jobs.py:57 +#: awx/main/models/unified_jobs.py:58 msgid "New" msgstr "Nuevo" -#: awx/main/models/unified_jobs.py:59 +#: awx/main/models/unified_jobs.py:60 msgid "Waiting" msgstr "Esperando" -#: awx/main/models/unified_jobs.py:60 +#: awx/main/models/unified_jobs.py:61 msgid "Running" msgstr "Ejecutándose" -#: awx/main/models/unified_jobs.py:64 +#: awx/main/models/unified_jobs.py:65 msgid "Canceled" msgstr "Cancelado" -#: awx/main/models/unified_jobs.py:68 +#: awx/main/models/unified_jobs.py:69 msgid "Never Updated" msgstr "Nunca actualizado" -#: awx/main/models/unified_jobs.py:72 awx/ui/templates/ui/index.html:67 +#: awx/main/models/unified_jobs.py:73 awx/ui/templates/ui/index.html:67 #: awx/ui/templates/ui/index.html.py:86 msgid "OK" msgstr "OK" -#: awx/main/models/unified_jobs.py:73 +#: awx/main/models/unified_jobs.py:74 msgid "Missing" msgstr "No encontrado" -#: awx/main/models/unified_jobs.py:77 +#: awx/main/models/unified_jobs.py:78 msgid "No External Source" msgstr "Sin fuente externa" -#: awx/main/models/unified_jobs.py:84 +#: awx/main/models/unified_jobs.py:85 msgid "Updating" msgstr "Actualizando" -#: awx/main/models/unified_jobs.py:428 +#: awx/main/models/unified_jobs.py:429 msgid "Relaunch" msgstr "Relanzar" -#: awx/main/models/unified_jobs.py:429 +#: awx/main/models/unified_jobs.py:430 msgid "Callback" msgstr "Callback" -#: awx/main/models/unified_jobs.py:430 +#: awx/main/models/unified_jobs.py:431 msgid "Scheduled" msgstr "Programado" -#: awx/main/models/unified_jobs.py:431 +#: awx/main/models/unified_jobs.py:432 msgid "Dependency" msgstr "Dependencia" -#: awx/main/models/unified_jobs.py:432 +#: awx/main/models/unified_jobs.py:433 msgid "Workflow" msgstr "Flujo de trabajo" -#: awx/main/models/unified_jobs.py:433 +#: awx/main/models/unified_jobs.py:434 msgid "Sync" msgstr "Sincronizar" -#: awx/main/models/unified_jobs.py:480 +#: awx/main/models/unified_jobs.py:481 msgid "The node the job executed on." msgstr "El nodo en el que se ejecutó la tarea." -#: awx/main/models/unified_jobs.py:506 +#: awx/main/models/unified_jobs.py:507 msgid "The date and time the job was queued for starting." msgstr "La fecha y hora que el trabajo fue puesto en la cola para iniciarse." -#: awx/main/models/unified_jobs.py:512 +#: awx/main/models/unified_jobs.py:513 msgid "The date and time the job finished execution." msgstr "La fecha y hora en la que el trabajo finalizó su ejecución." -#: awx/main/models/unified_jobs.py:518 +#: awx/main/models/unified_jobs.py:519 msgid "Elapsed time in seconds that the job ran." msgstr "Tiempo transcurrido en segundos que el trabajo se ejecutó. " -#: awx/main/models/unified_jobs.py:540 +#: awx/main/models/unified_jobs.py:541 msgid "" "A status field to indicate the state of the job if it wasn't able to run and" " capture stdout" @@ -3253,11 +3314,12 @@ msgstr "" "Un campo de estado que indica el estado del trabajo si éste no fue capaz de " "ejecutarse y obtener la salida estándar." -#: awx/main/models/unified_jobs.py:579 +#: awx/main/models/unified_jobs.py:580 msgid "The Rampart/Instance group the job was run under" msgstr "El grupo Rampart/Instancia en el que se ejecutó la tarea" #: awx/main/notifications/base.py:17 +#: awx/main/notifications/email_backend.py:28 msgid "" "{} #{} had status {}, view details at {}\n" "\n" @@ -3265,14 +3327,6 @@ msgstr "" "{} #{} tenía el estado {}; ver detalles en {}\n" "\n" -#: awx/main/notifications/email_backend.py:28 -msgid "" -"{} #{} had status {} on Ansible Tower, view details at {}\n" -"\n" -msgstr "" -"{} #{} tuvo estado {} en Ansible Tower, ver detalles en {}\n" -"\n" - #: awx/main/notifications/hipchat_backend.py:47 msgid "Error sending messages: {}" msgstr "Error enviando mensajes: {}" @@ -3304,7 +3358,7 @@ msgstr "Excepción conectando a Twilio: {}" msgid "Error sending notification webhook: {}" msgstr "Error enviando notificación weebhook: {}" -#: awx/main/scheduler/__init__.py:153 +#: awx/main/scheduler/__init__.py:184 msgid "" "Job spawned from workflow could not start because it was not in the right " "state or required manual credentials" @@ -3312,7 +3366,7 @@ msgstr "" "Trabajo generado desde un flujo de trabajo no pudo ser iniciado porque no " "tenía el estado correcto o credenciales manuales eran solicitados." -#: awx/main/scheduler/__init__.py:157 +#: awx/main/scheduler/__init__.py:188 msgid "" "Job spawned from workflow could not start because it was missing a related " "resource such as project or inventory" @@ -3320,19 +3374,19 @@ msgstr "" "Trabajo generado desde un flujo de trabajo no pudo ser iniciado porque no se" " encontraron los recursos relacionados como un proyecto o un inventario." -#: awx/main/tasks.py:175 +#: awx/main/tasks.py:184 msgid "Ansible Tower host usage over 90%" msgstr "Ansible Tower uso de servidores por encima de 90%" -#: awx/main/tasks.py:180 +#: awx/main/tasks.py:189 msgid "Ansible Tower license will expire soon" msgstr "Licencia de Ansible Tower expirará pronto" -#: awx/main/tasks.py:308 +#: awx/main/tasks.py:318 msgid "status_str must be either succeeded or failed" msgstr "status_str debe ser 'succeeded' o 'failed'" -#: awx/main/tasks.py:1498 +#: awx/main/tasks.py:1531 msgid "Dependent inventory update {} was canceled." msgstr "Se canceló la actualización del inventario dependiente {}." @@ -3496,287 +3550,287 @@ msgstr "Error de servidor" msgid "A server error has occurred." msgstr "Un error en el servidor ha ocurrido." -#: awx/settings/defaults.py:663 +#: awx/settings/defaults.py:664 msgid "US East (Northern Virginia)" msgstr "Este de EE.UU. (Virginia del norte)" -#: awx/settings/defaults.py:664 +#: awx/settings/defaults.py:665 msgid "US East (Ohio)" msgstr "Este de EE.UU. (Ohio)" -#: awx/settings/defaults.py:665 +#: awx/settings/defaults.py:666 msgid "US West (Oregon)" msgstr "Oeste de EE.UU. (Oregón)" -#: awx/settings/defaults.py:666 +#: awx/settings/defaults.py:667 msgid "US West (Northern California)" msgstr "Oeste de EE.UU (California del norte)" -#: awx/settings/defaults.py:667 +#: awx/settings/defaults.py:668 msgid "Canada (Central)" msgstr "Canada (Central)" -#: awx/settings/defaults.py:668 +#: awx/settings/defaults.py:669 msgid "EU (Frankfurt)" msgstr "UE (Fráncfort)" -#: awx/settings/defaults.py:669 +#: awx/settings/defaults.py:670 msgid "EU (Ireland)" msgstr "UE (Irlanda)" -#: awx/settings/defaults.py:670 +#: awx/settings/defaults.py:671 msgid "EU (London)" msgstr "UE (Londres)" -#: awx/settings/defaults.py:671 +#: awx/settings/defaults.py:672 msgid "Asia Pacific (Singapore)" msgstr "Asia Pacífico (Singapur)" -#: awx/settings/defaults.py:672 +#: awx/settings/defaults.py:673 msgid "Asia Pacific (Sydney)" msgstr "Asia Pacífico (Sídney)" -#: awx/settings/defaults.py:673 +#: awx/settings/defaults.py:674 msgid "Asia Pacific (Tokyo)" msgstr "Asia Pacífico (Tokio)" -#: awx/settings/defaults.py:674 +#: awx/settings/defaults.py:675 msgid "Asia Pacific (Seoul)" msgstr "Asia Pacífico (Seúl)" -#: awx/settings/defaults.py:675 +#: awx/settings/defaults.py:676 msgid "Asia Pacific (Mumbai)" msgstr "Asia Pacífico (Bombay)" -#: awx/settings/defaults.py:676 +#: awx/settings/defaults.py:677 msgid "South America (Sao Paulo)" msgstr "América del sur (São Paulo)" -#: awx/settings/defaults.py:677 +#: awx/settings/defaults.py:678 msgid "US West (GovCloud)" msgstr "Oeste de EE.UU. (GovCloud)" -#: awx/settings/defaults.py:678 +#: awx/settings/defaults.py:679 msgid "China (Beijing)" msgstr "China (Pekín)" -#: awx/settings/defaults.py:727 +#: awx/settings/defaults.py:728 msgid "US East 1 (B)" msgstr "Este de EE. UU. 1 (B)" -#: awx/settings/defaults.py:728 +#: awx/settings/defaults.py:729 msgid "US East 1 (C)" msgstr "Este de EE. UU. 1 (C)" -#: awx/settings/defaults.py:729 +#: awx/settings/defaults.py:730 msgid "US East 1 (D)" msgstr "Este de EE. UU. 1 (D)" -#: awx/settings/defaults.py:730 +#: awx/settings/defaults.py:731 msgid "US East 4 (A)" msgstr "Este de EE. UU. 4 (A)" -#: awx/settings/defaults.py:731 +#: awx/settings/defaults.py:732 msgid "US East 4 (B)" msgstr "Este de EE. UU. 4 (B)" -#: awx/settings/defaults.py:732 +#: awx/settings/defaults.py:733 msgid "US East 4 (C)" msgstr "Este de EE. UU. 4 (C)" -#: awx/settings/defaults.py:733 +#: awx/settings/defaults.py:734 msgid "US Central (A)" msgstr "EE.UU. Central (A)" -#: awx/settings/defaults.py:734 +#: awx/settings/defaults.py:735 msgid "US Central (B)" msgstr "EE.UU. Central (B)" -#: awx/settings/defaults.py:735 +#: awx/settings/defaults.py:736 msgid "US Central (C)" msgstr "EE.UU. Central (C)" -#: awx/settings/defaults.py:736 +#: awx/settings/defaults.py:737 msgid "US Central (F)" msgstr "EE.UU. Central (F)" -#: awx/settings/defaults.py:737 +#: awx/settings/defaults.py:738 msgid "US West (A)" msgstr "Oeste de EE. UU. (A)" -#: awx/settings/defaults.py:738 +#: awx/settings/defaults.py:739 msgid "US West (B)" msgstr "Oeste de EE. UU. (B)" -#: awx/settings/defaults.py:739 +#: awx/settings/defaults.py:740 msgid "US West (C)" msgstr "Oeste de EE. UU. (C)" -#: awx/settings/defaults.py:740 +#: awx/settings/defaults.py:741 msgid "Europe West 1 (B)" msgstr "Oeste de Europa 1 (B)" -#: awx/settings/defaults.py:741 +#: awx/settings/defaults.py:742 msgid "Europe West 1 (C)" msgstr "Oeste de Europa 1 (C)" -#: awx/settings/defaults.py:742 +#: awx/settings/defaults.py:743 msgid "Europe West 1 (D)" msgstr "Oeste de Europa 1 (D)" -#: awx/settings/defaults.py:743 +#: awx/settings/defaults.py:744 msgid "Europe West 2 (A)" msgstr "Oeste de Europa 2 (A)" -#: awx/settings/defaults.py:744 +#: awx/settings/defaults.py:745 msgid "Europe West 2 (B)" msgstr "Oeste de Europa 2 (B)" -#: awx/settings/defaults.py:745 +#: awx/settings/defaults.py:746 msgid "Europe West 2 (C)" msgstr "Oeste de Europa 2 (C)" -#: awx/settings/defaults.py:746 +#: awx/settings/defaults.py:747 msgid "Asia East (A)" msgstr "Este de Asia (A)" -#: awx/settings/defaults.py:747 +#: awx/settings/defaults.py:748 msgid "Asia East (B)" msgstr "Este de Asia (B)" -#: awx/settings/defaults.py:748 +#: awx/settings/defaults.py:749 msgid "Asia East (C)" msgstr "Este de Asia (C)" -#: awx/settings/defaults.py:749 +#: awx/settings/defaults.py:750 msgid "Asia Southeast (A)" msgstr "Sudeste de Asia (A)" -#: awx/settings/defaults.py:750 +#: awx/settings/defaults.py:751 msgid "Asia Southeast (B)" msgstr "Sudeste de Asia (B)" -#: awx/settings/defaults.py:751 +#: awx/settings/defaults.py:752 msgid "Asia Northeast (A)" msgstr "Noreste de Asia (A)" -#: awx/settings/defaults.py:752 +#: awx/settings/defaults.py:753 msgid "Asia Northeast (B)" msgstr "Noreste de Asia (B)" -#: awx/settings/defaults.py:753 +#: awx/settings/defaults.py:754 msgid "Asia Northeast (C)" msgstr "Noreste de Asia (C)" -#: awx/settings/defaults.py:754 +#: awx/settings/defaults.py:755 msgid "Australia Southeast (A)" msgstr "Sudeste de Australia (A)" -#: awx/settings/defaults.py:755 +#: awx/settings/defaults.py:756 msgid "Australia Southeast (B)" msgstr "Sudeste de Australia (B)" -#: awx/settings/defaults.py:756 +#: awx/settings/defaults.py:757 msgid "Australia Southeast (C)" msgstr "Sudeste de Australia (C)" -#: awx/settings/defaults.py:780 +#: awx/settings/defaults.py:781 msgid "US East" msgstr "Este de EE.UU." -#: awx/settings/defaults.py:781 +#: awx/settings/defaults.py:782 msgid "US East 2" msgstr "Este de EE.UU. 2" -#: awx/settings/defaults.py:782 +#: awx/settings/defaults.py:783 msgid "US Central" msgstr "EE.UU. Central" -#: awx/settings/defaults.py:783 +#: awx/settings/defaults.py:784 msgid "US North Central" msgstr "Norte-centro de EE.UU." -#: awx/settings/defaults.py:784 +#: awx/settings/defaults.py:785 msgid "US South Central" msgstr "Sur-Centro de EE.UU." -#: awx/settings/defaults.py:785 +#: awx/settings/defaults.py:786 msgid "US West Central" msgstr "Oeste central de EE. UU." -#: awx/settings/defaults.py:786 +#: awx/settings/defaults.py:787 msgid "US West" msgstr "Oeste de EE.UU." -#: awx/settings/defaults.py:787 +#: awx/settings/defaults.py:788 msgid "US West 2" msgstr "Oeste de EE. UU. 2" -#: awx/settings/defaults.py:788 +#: awx/settings/defaults.py:789 msgid "Canada East" msgstr "Este de Canadá" -#: awx/settings/defaults.py:789 +#: awx/settings/defaults.py:790 msgid "Canada Central" msgstr "Canadá Central" -#: awx/settings/defaults.py:790 +#: awx/settings/defaults.py:791 msgid "Brazil South" msgstr "Sur de Brasil" -#: awx/settings/defaults.py:791 +#: awx/settings/defaults.py:792 msgid "Europe North" msgstr "Norte de Europa" -#: awx/settings/defaults.py:792 +#: awx/settings/defaults.py:793 msgid "Europe West" msgstr "Oeste de Europa" -#: awx/settings/defaults.py:793 +#: awx/settings/defaults.py:794 msgid "UK West" msgstr "Oeste del Reino Unido" -#: awx/settings/defaults.py:794 +#: awx/settings/defaults.py:795 msgid "UK South" msgstr "Sur del Reino Unido" -#: awx/settings/defaults.py:795 +#: awx/settings/defaults.py:796 msgid "Asia East" msgstr "Este de Asia" -#: awx/settings/defaults.py:796 +#: awx/settings/defaults.py:797 msgid "Asia Southeast" msgstr "Sudeste de Asia" -#: awx/settings/defaults.py:797 +#: awx/settings/defaults.py:798 msgid "Australia East" msgstr "Este de Australia" -#: awx/settings/defaults.py:798 +#: awx/settings/defaults.py:799 msgid "Australia Southeast" msgstr "Sudeste de Australia" -#: awx/settings/defaults.py:799 +#: awx/settings/defaults.py:800 msgid "India West" msgstr "Oeste de India" -#: awx/settings/defaults.py:800 +#: awx/settings/defaults.py:801 msgid "India South" msgstr "Sur de India" -#: awx/settings/defaults.py:801 +#: awx/settings/defaults.py:802 msgid "Japan East" msgstr "Este de Japón" -#: awx/settings/defaults.py:802 +#: awx/settings/defaults.py:803 msgid "Japan West" msgstr "Oeste de Japón" -#: awx/settings/defaults.py:803 +#: awx/settings/defaults.py:804 msgid "Korea Central" msgstr "Corea central" -#: awx/settings/defaults.py:804 +#: awx/settings/defaults.py:805 msgid "Korea South" msgstr "Sur de Corea" @@ -3787,14 +3841,15 @@ msgstr "Inicio de sesión único (SSO)" #: awx/sso/conf.py:30 msgid "" "Mapping to organization admins/users from social auth accounts. This setting\n" -"controls which users are placed into which Tower organizations based on\n" -"their username and email address. Configuration details are available in\n" -"Tower documentation." +"controls which users are placed into which Tower organizations based on their\n" +"username and email address. Configuration details are available in the Ansible\n" +"Tower documentation.'" msgstr "" -"Asignación de administradores/usuarios de la organización desde cuentas de autenticación social. Este ajuste\n" -"controla los usuarios que se colocan en las organizaciones de Tower según\n" -"su nombre de usuario y dirección de correo electrónico. Los detalles de la configuración están disponibles en\n" -"la documentación de Tower." +"Mapeo de administradores o usuarios de la organización desde cuentas de " +"autorización social. Esta configuración controla qué usuarios se ubican en " +"qué organizaciones de Tower en función de su nombre de usuario y dirección " +"de correo electrónico. Detalles de configuración disponibles en la " +"documentación de Ansible Tower." #: awx/sso/conf.py:55 msgid "" @@ -3856,11 +3911,11 @@ msgstr "" "espacios o comandos. La autentificación LDAP está deshabilitado si este " "parámetro está vacío." -#: awx/sso/conf.py:142 awx/sso/conf.py:160 awx/sso/conf.py:172 -#: awx/sso/conf.py:184 awx/sso/conf.py:200 awx/sso/conf.py:220 -#: awx/sso/conf.py:242 awx/sso/conf.py:258 awx/sso/conf.py:277 -#: awx/sso/conf.py:294 awx/sso/conf.py:311 awx/sso/conf.py:327 -#: awx/sso/conf.py:344 awx/sso/conf.py:361 awx/sso/conf.py:387 +#: awx/sso/conf.py:142 awx/sso/conf.py:158 awx/sso/conf.py:170 +#: awx/sso/conf.py:182 awx/sso/conf.py:198 awx/sso/conf.py:218 +#: awx/sso/conf.py:240 awx/sso/conf.py:255 awx/sso/conf.py:273 +#: awx/sso/conf.py:290 awx/sso/conf.py:307 awx/sso/conf.py:323 +#: awx/sso/conf.py:337 awx/sso/conf.py:354 awx/sso/conf.py:380 msgid "LDAP" msgstr "LDAP" @@ -3870,39 +3925,37 @@ msgstr "DN para enlazar con LDAP" #: awx/sso/conf.py:155 msgid "" -"DN (Distinguished Name) of user to bind for all search queries. Normally in " -"the format \"CN=Some User,OU=Users,DC=example,DC=com\" but may also be " -"specified as \"DOMAIN\\username\" for Active Directory. This is the system " -"user account we will use to login to query LDAP for other user information." +"DN (Distinguished Name) of user to bind for all search queries. This is the " +"system user account we will use to login to query LDAP for other user " +"information. Refer to the Ansible Tower documentation for example syntax." msgstr "" -"DN (Distinguished Name) del usuario a enlazar para todas las consultas de " -"búsqueda. Normalmente en formato \"CN=Algun " -"usuario,OU=Usuarios,DC=ejemplo,DC=com\" pero podría ser también especificado" -" como \"DOMINIO\\usuario\" para Active Directory. Ésta es la cuenta de " -"usuario que será utilizada para iniciar sesión para consultar LDAP para la " -"información de otro usuario." +"DN (Distinguished Name) del usuario para vincular todas las búsquedas. Esta " +"es la cuenta de usuario del sistema que utilizaremos para iniciar sesión " +"para consultar a LDAP y obtener otro tipo de información sobre el usuario. " +"Consulte la documentación de Ansible Tower para acceder a ejemplos de " +"sintaxis." -#: awx/sso/conf.py:170 +#: awx/sso/conf.py:168 msgid "LDAP Bind Password" msgstr "Contraseña para enlazar con LDAP" -#: awx/sso/conf.py:171 +#: awx/sso/conf.py:169 msgid "Password used to bind LDAP user account." msgstr "Contraseña usada para enlazar a LDAP con la cuenta de usuario." -#: awx/sso/conf.py:182 +#: awx/sso/conf.py:180 msgid "LDAP Start TLS" msgstr "LDAP - Iniciar TLS" -#: awx/sso/conf.py:183 +#: awx/sso/conf.py:181 msgid "Whether to enable TLS when the LDAP connection is not using SSL." msgstr "Para activar o no TLS cuando la conexión LDAP no utilice SSL" -#: awx/sso/conf.py:193 +#: awx/sso/conf.py:191 msgid "LDAP Connection Options" msgstr "Opciones de conexión a LDAP" -#: awx/sso/conf.py:194 +#: awx/sso/conf.py:192 msgid "" "Additional options to set for the LDAP connection. LDAP referrals are " "disabled by default (to prevent certain LDAP queries from hanging with AD). " @@ -3917,78 +3970,79 @@ msgstr "" "ldap.org/doc/html/ldap.html#options para posibles opciones y valores que " "pueden ser establecidos." -#: awx/sso/conf.py:213 +#: awx/sso/conf.py:211 msgid "LDAP User Search" msgstr "Búsqueda de usuarios LDAP" -#: awx/sso/conf.py:214 +#: awx/sso/conf.py:212 msgid "" "LDAP search query to find users. Any user that matches the given pattern " -"will be able to login to Tower. The user should also be mapped into an " -"Tower organization (as defined in the AUTH_LDAP_ORGANIZATION_MAP setting). " -"If multiple search queries need to be supported use of \"LDAPUnion\" is " +"will be able to login to Tower. The user should also be mapped into a Tower" +" organization (as defined in the AUTH_LDAP_ORGANIZATION_MAP setting). If " +"multiple search queries need to be supported use of \"LDAPUnion\" is " "possible. See Tower documentation for details." msgstr "" -"Consulta de búsqueda LDAP para la búsqueda de usuarios. Cualquier usuario " -"que coincida con el patrón dado será capaz de iniciar sesión en Tower. El " -"usuario también debe ser asignado a una organización Tower (definida en la " -"opción AUTH_LDAP_ORGANIZATION_MAP). Si se deben admitir varias consultas de " -"búsqueda, es posible el uso de \"LDAPUnion\". Consulte la documentación de " -"Tower para obtener más información." +"Búsqueda en LDAP para encontrar usuarios. Cualquier usuario que se ajuste a " +"un patrón determinado podrá iniciar sesión en Tower. El usuario también " +"debería mapearse en una organización de Tower (conforme se define en la " +"configuración AUTH_LDAP_ORGANIZATION_MAP). Si es necesario respaldar varias " +"búsquedas, es posible utilizar \"LDAPUnion\". Consulte la documentación de " +"Tower para acceder a información detallada." -#: awx/sso/conf.py:236 +#: awx/sso/conf.py:234 msgid "LDAP User DN Template" msgstr "Plantilla de DN para el usuario LDAP" -#: awx/sso/conf.py:237 +#: awx/sso/conf.py:235 msgid "" "Alternative to user search, if user DNs are all of the same format. This " -"approach will be more efficient for user lookups than searching if it is " -"usable in your organizational environment. If this setting has a value it " -"will be used instead of AUTH_LDAP_USER_SEARCH." +"approach is more efficient for user lookups than searching if it is usable " +"in your organizational environment. If this setting has a value it will be " +"used instead of AUTH_LDAP_USER_SEARCH." msgstr "" -"Búsqueda alternativa de usuarios, si DNs de usuario están en el mismo " -"formato. Esta manera será más eficiente para encontrar usuarios que " -"buscándolos si es utilizable en su entorno organizacional. Si esta " -"configuración tiene un valor será usado en vez de AUTH_LDAP_USER_SEARCH." +"Alternativa a la búsqueda de usuarios, en caso de que los DN de los usuarios" +" tengan todos el mismo formato. Este enfoque es más efectivo para buscar " +"usuarios que las búsquedas, en caso de poder utilizarse en el entorno de su " +"organización. Si esta configuración tiene un valor, se utilizará en vez de " +"AUTH_LDAP_USER_SEARCH." -#: awx/sso/conf.py:252 +#: awx/sso/conf.py:250 msgid "LDAP User Attribute Map" msgstr "Mapa de atributos de usuario LDAP" -#: awx/sso/conf.py:253 +#: awx/sso/conf.py:251 msgid "" -"Mapping of LDAP user schema to Tower API user attributes (key is user " -"attribute name, value is LDAP attribute name). The default setting is valid" -" for ActiveDirectory but users with other LDAP configurations may need to " -"change the values (not the keys) of the dictionary/hash-table." +"Mapping of LDAP user schema to Tower API user attributes. The default " +"setting is valid for ActiveDirectory but users with other LDAP " +"configurations may need to change the values. Refer to the Ansible Tower " +"documentation for additonal details." msgstr "" -"Relación del esquema de usuarios LDAP a Atributos de usuario Tower API " -"(clave es el nombre del atributo del usuario, valor es el nombre del " -"atributo LDAP). La configuración por defecto es válida para ActiveDirectory " -"pero usuarios con otra configuración LDAP podrían necesitar cambiar los " -"valores (no las claves del diccionario/tabla-relaciones." +"Mapeo de esquemas de usuarios de LDAP con los atributos de usuario API de " +"Tower. La configuración predeterminada es válida para ActiveDirectory. Sin " +"embargo, los usuarios con otras configuraciones de LDAP tal vez necesiten " +"modificar los valores. Consulte la documentación de Ansible Tower para " +"acceder a información detallada." -#: awx/sso/conf.py:272 +#: awx/sso/conf.py:269 msgid "LDAP Group Search" msgstr "Búsqueda de grupos LDAP" -#: awx/sso/conf.py:273 +#: awx/sso/conf.py:270 msgid "" "Users are mapped to organizations based on their membership in LDAP groups. " -"This setting defines the LDAP search query to find groups. Note that this, " -"unlike the user search above, does not support LDAPSearchUnion." +"This setting defines the LDAP search query to find groups. Unlike the user " +"search, group search does not support LDAPSearchUnion." msgstr "" -"Los usuarios son asignados a organizaciones según su pertenencia a grupos " -"LDAP. En esta configuración se define la consulta de búsqueda LDAP para " -"encontrar grupos. Tenga en cuenta que esto, a diferencia de la búsqueda de " -"usuarios mencionada, no admite LDAPSearchUnion." +"Se mapea a los usuarios en las organizaciones en función de su membresía en " +"los grupos LDAP. Esta configuración define la búsqueda de LDAP para " +"encontrar grupos. A diferencia de la búsqueda de usuarios, la búsqueda de " +"grupos no es compatible con LDAPSearchUnion." -#: awx/sso/conf.py:290 +#: awx/sso/conf.py:286 msgid "LDAP Group Type" msgstr "Tipo de grupo LDAP" -#: awx/sso/conf.py:291 +#: awx/sso/conf.py:287 msgid "" "The group type may need to be changed based on the type of the LDAP server." " Values are listed at: http://pythonhosted.org/django-auth-ldap/groups.html" @@ -3998,11 +4052,11 @@ msgstr "" " LDAP. Valores posibles listados en: http://pythonhosted.org/django-auth-" "ldap/groups.html#types-of-groups" -#: awx/sso/conf.py:306 +#: awx/sso/conf.py:302 msgid "LDAP Require Group" msgstr "Grupo LDAP requerido" -#: awx/sso/conf.py:307 +#: awx/sso/conf.py:303 msgid "" "Group DN required to login. If specified, user must be a member of this " "group to login via LDAP. If not set, everyone in LDAP that matches the user " @@ -4014,11 +4068,11 @@ msgstr "" "será capaz de iniciar sesión en Tower. No es posible especificar varios " "grupos." -#: awx/sso/conf.py:323 +#: awx/sso/conf.py:319 msgid "LDAP Deny Group" msgstr "Grupo LDAP no permitido" -#: awx/sso/conf.py:324 +#: awx/sso/conf.py:320 msgid "" "Group DN denied from login. If specified, user will not be allowed to login " "if a member of this group. Only one deny group is supported." @@ -4027,185 +4081,170 @@ msgstr "" "podrá iniciar sesión si es miembro de este grupo. Sólo un grupo no permitido" " está soportado." -#: awx/sso/conf.py:337 +#: awx/sso/conf.py:333 msgid "LDAP User Flags By Group" msgstr "Indicadores de usuario LDAP por grupo" -#: awx/sso/conf.py:338 +#: awx/sso/conf.py:334 msgid "" -"User profile flags updated from group membership (key is user attribute " -"name, value is group DN). These are boolean fields that are matched based " -"on whether the user is a member of the given group. So far only " -"is_superuser and is_system_auditor are settable via this method. This flag " -"is set both true and false at login time based on current LDAP settings." +"Retrieve users from a given group. At this time, superuser and system " +"auditors are the only groups supported. Refer to the Ansible Tower " +"documentation for more detail." msgstr "" -"Indicadores del perfil de usuario actualizado desde la pertenencia del grupo" -" (clave es el nombre de atributo del usuario, valor es el grupo DN). Éstos " -"son campos booleanos en los que se basa si el usuario es miembro del grupo " -"especificado. Hasta ahora sólo is_superuser y is_system_auditor son " -"configurables utilizando este método. El indicador establece a verdadero o " -"falso en el momento de inicio de sesión basándose en la actual configuración" -" LDAP." +"Recuperar usuarios de un grupo determinado. En este momento, el superusuario" +" y los auditores del sistema son los únicos grupos que se admiten. Consulte " +"la documentación de Ansible Tower para obtener información detallada." -#: awx/sso/conf.py:356 +#: awx/sso/conf.py:349 msgid "LDAP Organization Map" msgstr "Mapa de organización LDAP" -#: awx/sso/conf.py:357 +#: awx/sso/conf.py:350 msgid "" "Mapping between organization admins/users and LDAP groups. This controls " -"what users are placed into what Tower organizations relative to their LDAP " -"group memberships. Configuration details are available in Tower " -"documentation." +"which users are placed into which Tower organizations relative to their LDAP" +" group memberships. Configuration details are available in the Ansible Tower" +" documentation." msgstr "" -"Asignación entre administradores/usuarios de la organización y grupos LDAP. " -"Este ajuste controla cuáles usuarios se colocan en cuáles organizaciones de " -"Tower, según su pertenencia a grupos LDAP. Los detalles de la configuración " -"están disponibles en la documentación de Tower." +"Mapear entre administradores/usuarios de las organizaciones y grupos de " +"LDAP. De esta manera, se controla qué usuarios se ubican en qué " +"organizaciones de Tower en función de sus membresías en grupos de LDAP. " +"Detalles de configuración disponibles en la documentación de Ansible Tower." -#: awx/sso/conf.py:384 +#: awx/sso/conf.py:377 msgid "LDAP Team Map" msgstr "Mapa de equipos LDAP" -#: awx/sso/conf.py:385 +#: awx/sso/conf.py:378 msgid "" -"Mapping between team members (users) and LDAP groups.Configuration details " -"are available in Tower documentation." +"Mapping between team members (users) and LDAP groups. Configuration details " +"are available in the Ansible Tower documentation." msgstr "" -"Asignación entre miembros del equipo (usuarios) y grupos LDAP. Los detalles " -"de la configuración están disponibles en la documentación de Tower." +"Mapear entre los miembros de equipos (usuarios) y grupos de LDAP. Detalles " +"de configuración disponibles en la documentación de Ansible Tower." -#: awx/sso/conf.py:413 +#: awx/sso/conf.py:406 msgid "RADIUS Server" msgstr "Servidor RADIUS" -#: awx/sso/conf.py:414 +#: awx/sso/conf.py:407 msgid "" -"Hostname/IP of RADIUS server. RADIUS authentication will be disabled if this" -" setting is empty." +"Hostname/IP of RADIUS server. RADIUS authentication is disabled if this " +"setting is empty." msgstr "" -"Hostname/IP del servidor RADIUS. La autentificación RADIUS se deshabilitará " -"si esta configuración está vacía." +"Hostname/IP del servidor RADIUS. La autenticación de RADIUS se desactiva si " +"esta configuración está vacía." -#: awx/sso/conf.py:416 awx/sso/conf.py:430 awx/sso/conf.py:442 +#: awx/sso/conf.py:409 awx/sso/conf.py:423 awx/sso/conf.py:435 #: awx/sso/models.py:14 msgid "RADIUS" msgstr "RADIUS" -#: awx/sso/conf.py:428 +#: awx/sso/conf.py:421 msgid "RADIUS Port" msgstr "Puerto RADIUS" -#: awx/sso/conf.py:429 +#: awx/sso/conf.py:422 msgid "Port of RADIUS server." msgstr "Puerto del servidor RADIUS" -#: awx/sso/conf.py:440 +#: awx/sso/conf.py:433 msgid "RADIUS Secret" msgstr "Clave secreta RADIUS" -#: awx/sso/conf.py:441 +#: awx/sso/conf.py:434 msgid "Shared secret for authenticating to RADIUS server." msgstr "Clave secreta compartida para autentificación a RADIUS." -#: awx/sso/conf.py:457 +#: awx/sso/conf.py:450 msgid "TACACS+ Server" msgstr "Servidor TACACS+" -#: awx/sso/conf.py:458 +#: awx/sso/conf.py:451 msgid "Hostname of TACACS+ server." msgstr "Nombre de host del servidor TACACS+." -#: awx/sso/conf.py:459 awx/sso/conf.py:472 awx/sso/conf.py:485 -#: awx/sso/conf.py:498 awx/sso/conf.py:510 awx/sso/models.py:15 +#: awx/sso/conf.py:452 awx/sso/conf.py:465 awx/sso/conf.py:478 +#: awx/sso/conf.py:491 awx/sso/conf.py:503 awx/sso/models.py:15 msgid "TACACS+" msgstr "TACACS+" -#: awx/sso/conf.py:470 +#: awx/sso/conf.py:463 msgid "TACACS+ Port" msgstr "Puerto TACACS+" -#: awx/sso/conf.py:471 +#: awx/sso/conf.py:464 msgid "Port number of TACACS+ server." msgstr "Número de puerto del servidor TACACS+." -#: awx/sso/conf.py:483 +#: awx/sso/conf.py:476 msgid "TACACS+ Secret" msgstr "Clave secreta TACACS+" -#: awx/sso/conf.py:484 +#: awx/sso/conf.py:477 msgid "Shared secret for authenticating to TACACS+ server." msgstr "" "Clave secreta compartida para la autentificación en el servidor TACACS+." -#: awx/sso/conf.py:496 +#: awx/sso/conf.py:489 msgid "TACACS+ Auth Session Timeout" msgstr "Tiempo de espera para la sesión de autenticación de TACACS+" -#: awx/sso/conf.py:497 +#: awx/sso/conf.py:490 msgid "TACACS+ session timeout value in seconds, 0 disables timeout." msgstr "" "Valor de tiempo de espera para la sesión TACACS+ en segundos. El valor 0 " "deshabilita el tiempo de espera." -#: awx/sso/conf.py:508 +#: awx/sso/conf.py:501 msgid "TACACS+ Authentication Protocol" msgstr "Protocolo de autenticación de TACACS+" -#: awx/sso/conf.py:509 +#: awx/sso/conf.py:502 msgid "Choose the authentication protocol used by TACACS+ client." msgstr "Elija el protocolo de autenticación utilizado por el cliente TACACS+." -#: awx/sso/conf.py:524 +#: awx/sso/conf.py:517 msgid "Google OAuth2 Callback URL" msgstr "Google OAuth2 Callback URL" -#: awx/sso/conf.py:525 +#: awx/sso/conf.py:518 awx/sso/conf.py:611 awx/sso/conf.py:676 msgid "" -"Create a project at https://console.developers.google.com/ to obtain an " -"OAuth2 key and secret for a web application. Ensure that the Google+ API is " -"enabled. Provide this URL as the callback URL for your application." +"Provide this URL as the callback URL for your application as part of your " +"registration process. Refer to the Ansible Tower documentation for more " +"detail." msgstr "" -"Crear un proyecto en https://console.developers.google.com/ para obtener una" -" clave OAuth2 y clave secreta para una aplicación web. Asegúrese que la API " -"de Google+ API está habilitada. Proporcione esta URL como URL callback para " -"su aplicación." +"Indique esta URL como URL de callback para su aplicación como parte del " +"proceso de registro. Consulte la documentación de Ansible Tower para obtener" +" información detallada." -#: awx/sso/conf.py:529 awx/sso/conf.py:540 awx/sso/conf.py:551 -#: awx/sso/conf.py:564 awx/sso/conf.py:578 awx/sso/conf.py:590 -#: awx/sso/conf.py:602 +#: awx/sso/conf.py:521 awx/sso/conf.py:533 awx/sso/conf.py:545 +#: awx/sso/conf.py:558 awx/sso/conf.py:572 awx/sso/conf.py:584 +#: awx/sso/conf.py:596 msgid "Google OAuth2" msgstr "Google OAuth2" -#: awx/sso/conf.py:538 +#: awx/sso/conf.py:531 msgid "Google OAuth2 Key" msgstr "Clave Google OAuth2" -#: awx/sso/conf.py:539 -msgid "" -"The OAuth2 key from your web application at " -"https://console.developers.google.com/." -msgstr "" -"La clave OAuth2 de su dirección web en " -"https://console.developers.google.com/." +#: awx/sso/conf.py:532 +msgid "The OAuth2 key from your web application." +msgstr "Clave OAuth2 de su aplicación web." -#: awx/sso/conf.py:549 +#: awx/sso/conf.py:543 msgid "Google OAuth2 Secret" msgstr "Clave secreta para Google OAuth2" -#: awx/sso/conf.py:550 -msgid "" -"The OAuth2 secret from your web application at " -"https://console.developers.google.com/." -msgstr "" -"La clave secreta OAuth2 de su dirección web en " -"https://console.developers.google.com/." +#: awx/sso/conf.py:544 +msgid "The OAuth2 secret from your web application." +msgstr "Secreto OAuth2 de su aplicación web." -#: awx/sso/conf.py:561 +#: awx/sso/conf.py:555 msgid "Google OAuth2 Whitelisted Domains" msgstr "Lista blanca de dominios para Google OAuth2" -#: awx/sso/conf.py:562 +#: awx/sso/conf.py:556 msgid "" "Update this setting to restrict the domains who are allowed to login using " "Google OAuth2." @@ -4213,82 +4252,120 @@ msgstr "" "Actualizar esta configuración para restringir los dominios que están " "permitidos para iniciar sesión utilizando Google OAuth2." -#: awx/sso/conf.py:573 +#: awx/sso/conf.py:567 msgid "Google OAuth2 Extra Arguments" msgstr "Argumentos adicionales para Google OAuth2" -#: awx/sso/conf.py:574 +#: awx/sso/conf.py:568 msgid "" -"Extra arguments for Google OAuth2 login. When only allowing a single domain " -"to authenticate, set to `{\"hd\": \"yourdomain.com\"}` and Google will not " -"display any other accounts even if the user is logged in with multiple " -"Google accounts." +"Extra arguments for Google OAuth2 login. You can restrict it to only allow a" +" single domain to authenticate, even if the user is logged in with multple " +"Google accounts. Refer to the Ansible Tower documentation for more detail." msgstr "" -"Argumentos adicionales para iniciar sesión con Google OAuth2. Cuando sólo se" -" permite un único dominio para autentificar, establecer a `{\"hd\": " -"\"sudominio.com\"}` y Google no mostrará otras cuentas incluso si el usuario" -" inició sesión en múltiple cuentas Google." +"Argumentos adicionales para el inicio de sesión en Google OAuth2. Puede " +"limitarlo para permitir la autenticación de un solo dominio, incluso si el " +"usuario ha iniciado sesión con varias cuentas de Google. Consulte la " +"documentación de Ansible Tower para obtener información detallada." -#: awx/sso/conf.py:588 +#: awx/sso/conf.py:582 msgid "Google OAuth2 Organization Map" msgstr "Mapa de organización para Google OAuth2" -#: awx/sso/conf.py:600 +#: awx/sso/conf.py:594 msgid "Google OAuth2 Team Map" msgstr "Mapa de equipo para Google OAuth2" -#: awx/sso/conf.py:616 +#: awx/sso/conf.py:610 msgid "GitHub OAuth2 Callback URL" msgstr "GitHub OAuth2 Callback URL" -#: awx/sso/conf.py:617 -msgid "" -"Create a developer application at https://github.com/settings/developers to " -"obtain an OAuth2 key (Client ID) and secret (Client Secret). Provide this " -"URL as the callback URL for your application." -msgstr "" -"Crear una aplicación de desarollo en https://github.com/settings/developers " -"para obtener una clave OAuth2 (ID del cliente) y clave secreta (Client " -"Secret). Proporcione esta URL como la URL callback para su aplicación." - -#: awx/sso/conf.py:621 awx/sso/conf.py:632 awx/sso/conf.py:642 -#: awx/sso/conf.py:654 awx/sso/conf.py:666 +#: awx/sso/conf.py:614 awx/sso/conf.py:626 awx/sso/conf.py:637 +#: awx/sso/conf.py:649 awx/sso/conf.py:661 msgid "GitHub OAuth2" msgstr "GitHub OAuth2" -#: awx/sso/conf.py:630 +#: awx/sso/conf.py:624 msgid "GitHub OAuth2 Key" msgstr "Clave para Github OAuth2" -#: awx/sso/conf.py:631 +#: awx/sso/conf.py:625 msgid "The OAuth2 key (Client ID) from your GitHub developer application." msgstr "" "La clave OAuth2 (ID del cliente) de su aplicación de desarrollo GitHub." -#: awx/sso/conf.py:640 +#: awx/sso/conf.py:635 msgid "GitHub OAuth2 Secret" msgstr "Clave secreta para GitHub OAuth2" -#: awx/sso/conf.py:641 +#: awx/sso/conf.py:636 msgid "" "The OAuth2 secret (Client Secret) from your GitHub developer application." msgstr "" "La clave secreta OAuth2 (Clave secreta del cliente) de su aplicación de " "desarrollo GitHub." -#: awx/sso/conf.py:652 +#: awx/sso/conf.py:647 msgid "GitHub OAuth2 Organization Map" msgstr "Mapa de organización para GitHub OAuth2" -#: awx/sso/conf.py:664 +#: awx/sso/conf.py:659 msgid "GitHub OAuth2 Team Map" msgstr "Mapa de equipo para GitHub OAuth2" -#: awx/sso/conf.py:680 +#: awx/sso/conf.py:675 msgid "GitHub Organization OAuth2 Callback URL" msgstr "OAuth2 URL Callback para organización Github" -#: awx/sso/conf.py:681 awx/sso/conf.py:756 +#: awx/sso/conf.py:679 awx/sso/conf.py:691 awx/sso/conf.py:702 +#: awx/sso/conf.py:715 awx/sso/conf.py:726 awx/sso/conf.py:738 +msgid "GitHub Organization OAuth2" +msgstr "OAuth2 para la organización Github" + +#: awx/sso/conf.py:689 +msgid "GitHub Organization OAuth2 Key" +msgstr "Clave OAuth2 para la organización Github" + +#: awx/sso/conf.py:690 awx/sso/conf.py:768 +msgid "The OAuth2 key (Client ID) from your GitHub organization application." +msgstr "" +"La clave OAuth2 (ID del cliente) de su aplicación de organización GitHub." + +#: awx/sso/conf.py:700 +msgid "GitHub Organization OAuth2 Secret" +msgstr "Clave secreta OAuth2 para la organización GitHub" + +#: awx/sso/conf.py:701 awx/sso/conf.py:779 +msgid "" +"The OAuth2 secret (Client Secret) from your GitHub organization application." +msgstr "" +"La clave secreta OAuth2 (Clave secreta del cliente) from your GitHub " +"organization application." + +#: awx/sso/conf.py:712 +msgid "GitHub Organization Name" +msgstr "Nombre para la organización GitHub" + +#: awx/sso/conf.py:713 +msgid "" +"The name of your GitHub organization, as used in your organization's URL: " +"https://github.com//." +msgstr "" +"El nombre de su organización de su GitHub, el utilizado en su URL de " +"organización: https://github.com//." + +#: awx/sso/conf.py:724 +msgid "GitHub Organization OAuth2 Organization Map" +msgstr "Mapa de organización OAuth2 para organizaciones GitHub" + +#: awx/sso/conf.py:736 +msgid "GitHub Organization OAuth2 Team Map" +msgstr "Mapa de equipos OAuth2 para equipos GitHub" + +#: awx/sso/conf.py:752 +msgid "GitHub Team OAuth2 Callback URL" +msgstr "URL callback OAuth2 para los equipos GitHub" + +#: awx/sso/conf.py:753 msgid "" "Create an organization-owned application at " "https://github.com/organizations//settings/applications and obtain " @@ -4300,65 +4377,16 @@ msgstr "" "obtener una clave OAuth2 (ID del cliente ) y clave secreta (Clave secreta " "del cliente). Proporcione esta URL como URL callback para su aplicación." -#: awx/sso/conf.py:685 awx/sso/conf.py:696 awx/sso/conf.py:706 -#: awx/sso/conf.py:718 awx/sso/conf.py:729 awx/sso/conf.py:741 -msgid "GitHub Organization OAuth2" -msgstr "OAuth2 para la organización Github" - -#: awx/sso/conf.py:694 -msgid "GitHub Organization OAuth2 Key" -msgstr "Clave OAuth2 para la organización Github" - -#: awx/sso/conf.py:695 awx/sso/conf.py:770 -msgid "The OAuth2 key (Client ID) from your GitHub organization application." -msgstr "" -"La clave OAuth2 (ID del cliente) de su aplicación de organización GitHub." - -#: awx/sso/conf.py:704 -msgid "GitHub Organization OAuth2 Secret" -msgstr "Clave secreta OAuth2 para la organización GitHub" - -#: awx/sso/conf.py:705 awx/sso/conf.py:780 -msgid "" -"The OAuth2 secret (Client Secret) from your GitHub organization application." -msgstr "" -"La clave secreta OAuth2 (Clave secreta del cliente) from your GitHub " -"organization application." - -#: awx/sso/conf.py:715 -msgid "GitHub Organization Name" -msgstr "Nombre para la organización GitHub" - -#: awx/sso/conf.py:716 -msgid "" -"The name of your GitHub organization, as used in your organization's URL: " -"https://github.com//." -msgstr "" -"El nombre de su organización de su GitHub, el utilizado en su URL de " -"organización: https://github.com//." - -#: awx/sso/conf.py:727 -msgid "GitHub Organization OAuth2 Organization Map" -msgstr "Mapa de organización OAuth2 para organizaciones GitHub" - -#: awx/sso/conf.py:739 -msgid "GitHub Organization OAuth2 Team Map" -msgstr "Mapa de equipos OAuth2 para equipos GitHub" - -#: awx/sso/conf.py:755 -msgid "GitHub Team OAuth2 Callback URL" -msgstr "URL callback OAuth2 para los equipos GitHub" - -#: awx/sso/conf.py:760 awx/sso/conf.py:771 awx/sso/conf.py:781 +#: awx/sso/conf.py:757 awx/sso/conf.py:769 awx/sso/conf.py:780 #: awx/sso/conf.py:793 awx/sso/conf.py:804 awx/sso/conf.py:816 msgid "GitHub Team OAuth2" msgstr "OAuth2 para equipos GitHub" -#: awx/sso/conf.py:769 +#: awx/sso/conf.py:767 msgid "GitHub Team OAuth2 Key" msgstr "Clave OAuth2 para equipos GitHub" -#: awx/sso/conf.py:779 +#: awx/sso/conf.py:778 msgid "GitHub Team OAuth2 Secret" msgstr "Clave secreta OAuth2 para equipos GitHub" @@ -4388,18 +4416,16 @@ msgstr "URL callback OAuth2 para Azure AD" #: awx/sso/conf.py:831 msgid "" -"Register an Azure AD application as described by https://msdn.microsoft.com" -"/en-us/library/azure/dn132599.aspx and obtain an OAuth2 key (Client ID) and " -"secret (Client Secret). Provide this URL as the callback URL for your " -"application." +"Provide this URL as the callback URL for your application as part of your " +"registration process. Refer to the Ansible Tower documentation for more " +"detail. " msgstr "" -"Registrar una aplicacción AZURE AD como es descrito en " -"https://msdn.microsoft.com/en-us/library/azure/dn132599.aspx y obtén una " -"clave OAuth2 (ID de client) y clave secreta (Clave secreta de cliente). " -"Proporcione esta URL como URL callback para su aplicación." +"Indique esta URL como URL de callback para su aplicación como parte del " +"proceso de registro. Consulte la documentación de Ansible Tower para obtener" +" información detallada." -#: awx/sso/conf.py:835 awx/sso/conf.py:846 awx/sso/conf.py:856 -#: awx/sso/conf.py:868 awx/sso/conf.py:880 +#: awx/sso/conf.py:834 awx/sso/conf.py:846 awx/sso/conf.py:857 +#: awx/sso/conf.py:869 awx/sso/conf.py:881 msgid "Azure AD OAuth2" msgstr "Azure AD OAuth2" @@ -4411,29 +4437,29 @@ msgstr "Clave OAuth2 para Azure AD" msgid "The OAuth2 key (Client ID) from your Azure AD application." msgstr "La clave OAuth2 (ID del cliente) de su aplicación en Azure AD." -#: awx/sso/conf.py:854 +#: awx/sso/conf.py:855 msgid "Azure AD OAuth2 Secret" msgstr "Clave secreta OAuth2 para Azure AD" -#: awx/sso/conf.py:855 +#: awx/sso/conf.py:856 msgid "The OAuth2 secret (Client Secret) from your Azure AD application." msgstr "" "La clave secreta OAuth2 (Clave secreta del cliente) de su aplicación Azure " "AD." -#: awx/sso/conf.py:866 +#: awx/sso/conf.py:867 msgid "Azure AD OAuth2 Organization Map" msgstr "Mapa de organizaciones OAuth2 para Azure AD" -#: awx/sso/conf.py:878 +#: awx/sso/conf.py:879 msgid "Azure AD OAuth2 Team Map" msgstr "Mapa de equipos OAuth2 para Azure AD" -#: awx/sso/conf.py:903 +#: awx/sso/conf.py:904 msgid "SAML Assertion Consumer Service (ACS) URL" msgstr "URL del Servicio de consumidor de aserciones (ACS) SAML" -#: awx/sso/conf.py:904 +#: awx/sso/conf.py:905 msgid "" "Register Tower as a service provider (SP) with each identity provider (IdP) " "you have configured. Provide your SP Entity ID and this ACS URL for your " @@ -4443,18 +4469,18 @@ msgstr "" "identidad (IdP) que ha configurado. Proporcione su ID de entidad SP y esta " "dirección URL ACS para su aplicación." -#: awx/sso/conf.py:907 awx/sso/conf.py:921 awx/sso/conf.py:935 -#: awx/sso/conf.py:950 awx/sso/conf.py:964 awx/sso/conf.py:982 -#: awx/sso/conf.py:1004 awx/sso/conf.py:1023 awx/sso/conf.py:1043 -#: awx/sso/conf.py:1077 awx/sso/conf.py:1090 awx/sso/models.py:16 +#: awx/sso/conf.py:908 awx/sso/conf.py:922 awx/sso/conf.py:936 +#: awx/sso/conf.py:951 awx/sso/conf.py:965 awx/sso/conf.py:978 +#: awx/sso/conf.py:999 awx/sso/conf.py:1017 awx/sso/conf.py:1036 +#: awx/sso/conf.py:1070 awx/sso/conf.py:1083 awx/sso/models.py:16 msgid "SAML" msgstr "SAML" -#: awx/sso/conf.py:918 +#: awx/sso/conf.py:919 msgid "SAML Service Provider Metadata URL" msgstr "URL de metadatos para el proveedor de servicios SAML" -#: awx/sso/conf.py:919 +#: awx/sso/conf.py:920 msgid "" "If your identity provider (IdP) allows uploading an XML metadata file, you " "can download one from this URL." @@ -4462,11 +4488,11 @@ msgstr "" "Si su proveedor de identidad (IdP) permite subir ficheros de metadatos en " "XML, puede descargarlo desde esta dirección." -#: awx/sso/conf.py:931 +#: awx/sso/conf.py:932 msgid "SAML Service Provider Entity ID" msgstr "ID de la entidad del proveedor de servicio SAML" -#: awx/sso/conf.py:932 +#: awx/sso/conf.py:933 msgid "" "The application-defined unique identifier used as the audience of the SAML " "service provider (SP) configuration. This is usually the URL for Tower." @@ -4475,11 +4501,11 @@ msgstr "" "configuración para la audiencia del proveedor de servicio (SP) SAML. Por lo " "general, es la URL para Tower." -#: awx/sso/conf.py:947 +#: awx/sso/conf.py:948 msgid "SAML Service Provider Public Certificate" msgstr "Certificado público del proveedor de servicio SAML" -#: awx/sso/conf.py:948 +#: awx/sso/conf.py:949 msgid "" "Create a keypair for Tower to use as a service provider (SP) and include the" " certificate content here." @@ -4487,11 +4513,11 @@ msgstr "" "Crear par de claves para Tower a usar como proveedor de servicio (SP) e " "incluir el contenido del certificado aquí." -#: awx/sso/conf.py:961 +#: awx/sso/conf.py:962 msgid "SAML Service Provider Private Key" msgstr "Clave privada del proveedor de servicio SAML" -#: awx/sso/conf.py:962 +#: awx/sso/conf.py:963 msgid "" "Create a keypair for Tower to use as a service provider (SP) and include the" " private key content here." @@ -4499,51 +4525,70 @@ msgstr "" "Crear par de claves para Tower a usar como proveedor de servicio (SP) e " "incluir el contenido de la clave privada aquí." -#: awx/sso/conf.py:980 +#: awx/sso/conf.py:975 msgid "SAML Service Provider Organization Info" msgstr "Información organizacional del proveedor de servicio SAML" -#: awx/sso/conf.py:981 -msgid "Configure this setting with information about your app." -msgstr "Configure esta configuración con la información de su aplicación." +#: awx/sso/conf.py:976 +msgid "" +"Provide the URL, display name, and the name of your app. Refer to the " +"Ansible Tower documentation for example syntax." +msgstr "" +"Indique la URL, el nombre de la pantalla y el nombre de la aplicación. " +"Consulte la documentación de Ansible Tower para acceder a ejemplos de " +"sintaxis." -#: awx/sso/conf.py:1002 +#: awx/sso/conf.py:995 msgid "SAML Service Provider Technical Contact" msgstr "Contacto técnico del proveedor de servicio SAML" -#: awx/sso/conf.py:1003 awx/sso/conf.py:1022 -msgid "Configure this setting with your contact information." -msgstr "Configure este configuración con su información de contacto." +#: awx/sso/conf.py:996 +msgid "" +"Provide the name and email address of the technical contact for your service" +" provider. Refer to the Ansible Tower documentation for example syntax." +msgstr "" +"Indique el nombre y la dirección de correo electrónico del contacto técnico" +" de su proveedor de servicios. Consulte la documentación de Ansible Tower " +"para obtener ejemplos de sintaxis." -#: awx/sso/conf.py:1021 +#: awx/sso/conf.py:1013 msgid "SAML Service Provider Support Contact" msgstr "Contacto de soporte del proveedor de servicio SAML" -#: awx/sso/conf.py:1036 +#: awx/sso/conf.py:1014 +msgid "" +"Provide the name and email address of the support contact for your service " +"provider. Refer to the Ansible Tower documentation for example syntax." +msgstr "" +"Indique el nombre y la dirección de correo electrónico del contacto de " +"soporte técnico de su proveedor de servicios. Consulte la documentación de " +"Ansible Tower para obtener ejemplos de sintaxis." + +#: awx/sso/conf.py:1030 msgid "SAML Enabled Identity Providers" msgstr "Proveedores de identidad habilitados SAML" -#: awx/sso/conf.py:1037 +#: awx/sso/conf.py:1031 msgid "" "Configure the Entity ID, SSO URL and certificate for each identity provider " "(IdP) in use. Multiple SAML IdPs are supported. Some IdPs may provide user " -"data using attribute names that differ from the default OIDs " -"(https://github.com/omab/python-social-" -"auth/blob/master/social/backends/saml.py#L16). Attribute names may be " -"overridden for each IdP." +"data using attribute names that differ from the default OIDs. Attribute " +"names may be overridden for each IdP. Refer to the Ansible documentation for" +" additional details and syntax." msgstr "" -"Configurar el ID de entidad, URL SSO y certificado para cada proveedor de " -"identidad (IdP) en uso. Varios IdPs SAML están soportadas. Algunos IdPs " -"pueden proporcionar datos de usuario usando nombres de atributos diferentes " -"a los valores por defecto OIDs (https://github.com/omab/python-social-" -"auth/blob/master/social/backends/saml.py#L16). Nombres de atributos pueden " -"ser redefinidos por cada IdP." +"Configure la ID de la entidad, la URL del acceso SSO y el certificado de " +"cada proveedor de identidad (IdP) en uso. Se admiten varios IdP de SAML. " +"Algunos IdP pueden proporcionar datos sobre los usuarios por medio del uso " +"de nombres de atributos que difieren de los OID predeterminados. Pueden " +"anularse los nombres de los atributos para cada IdP. Consulte la " +"documentación de Ansible Tower para obtener información detallada adicional " +"y ejemplos de sintaxis." -#: awx/sso/conf.py:1075 +#: awx/sso/conf.py:1068 msgid "SAML Organization Map" msgstr "Mapa de organización SAML" -#: awx/sso/conf.py:1088 +#: awx/sso/conf.py:1081 msgid "SAML Team Map" msgstr "Mapa de equipo SAML" @@ -4679,10 +4724,6 @@ msgstr "La clave secreta TACACS+ no permite caracteres no ascii" msgid "AWX" msgstr "AWX" -#: awx/templates/rest_framework/api.html:4 -msgid "AWX REST API" -msgstr "API REST de AWX" - #: awx/templates/rest_framework/api.html:39 msgid "Ansible Tower API Guide" msgstr "Guía de la API de Ansible Tower" @@ -4745,7 +4786,7 @@ msgstr "Realizar una petición PUT en el recurso %(name)s" msgid "Make a PATCH request on the %(name)s resource" msgstr "Realizar una petición PATCH en el recurso %(name)s" -#: awx/ui/apps.py:9 awx/ui/conf.py:22 awx/ui/conf.py:38 awx/ui/conf.py:53 +#: awx/ui/apps.py:9 awx/ui/conf.py:22 awx/ui/conf.py:36 awx/ui/conf.py:51 msgid "UI" msgstr "UI" @@ -4778,21 +4819,19 @@ msgid "" "If needed, you can add specific information (such as a legal notice or a " "disclaimer) to a text box in the login modal using this setting. Any content" " added must be in plain text, as custom HTML or other markup languages are " -"not supported. If multiple paragraphs of text are needed, new lines " -"(paragraphs) must be escaped as `\\n` within the block of text." +"not supported." msgstr "" -"Si es necesario, usted puede añadir información específica (como un aviso " -"legal o condiciones) a un cuadro de texto en el formulario de inicio de " -"sesión utilizando esta configuración. Todo contenido debe ser añadido en " -"texto plano: HTML personalizado u otros lenguajes markup no están " -"permitidos. Si varios párrafos de texto son necesarios, nuevas líneas " -"(párrafos) pueden ser indicados con `\\n` dentro del bloque de texto." +"En caso de ser necesario, puede agregar información específica (como avisos " +"legales o exenciones de responsabilidad) en un cuadro de texto en el modal " +"de inicio de sesión con esta configuración. Los contenidos que se agreguen " +"deberán ser texto simple, ya que las HTML personalizadas u otros lenguajes " +"de marcado no son compatibles." -#: awx/ui/conf.py:48 +#: awx/ui/conf.py:46 msgid "Custom Logo" msgstr "Logo personalizado" -#: awx/ui/conf.py:49 +#: awx/ui/conf.py:47 msgid "" "To set up a custom logo, provide a file that you create. For the custom logo" " to look its best, use a .png file with a transparent background. GIF, PNG " diff --git a/awx/locale/fr/LC_MESSAGES/django.po b/awx/locale/fr/LC_MESSAGES/django.po index f72c44c58e..f01606b74f 100644 --- a/awx/locale/fr/LC_MESSAGES/django.po +++ b/awx/locale/fr/LC_MESSAGES/django.po @@ -5,9 +5,9 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-28 18:57+0000\n" -"PO-Revision-Date: 2017-08-07 05:23+0000\n" -"Last-Translator: aude_stoquart \n" +"POT-Creation-Date: 2017-08-27 19:27+0000\n" +"PO-Revision-Date: 2017-08-28 04:18+0000\n" +"Last-Translator: croe \n" "Language-Team: French\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -162,7 +162,7 @@ msgstr "Exécution du playbook" msgid "Command" msgstr "Commande" -#: awx/api/serializers.py:270 awx/main/models/unified_jobs.py:434 +#: awx/api/serializers.py:270 awx/main/models/unified_jobs.py:435 msgid "SCM Update" msgstr "Mise à jour SCM" @@ -182,7 +182,7 @@ msgstr "Tâche de workflow" msgid "Workflow Template" msgstr "Modèle de workflow" -#: awx/api/serializers.py:697 awx/api/serializers.py:755 awx/api/views.py:4330 +#: awx/api/serializers.py:697 awx/api/serializers.py:755 awx/api/views.py:4314 #, python-format msgid "" "Standard Output too large to display (%(text_size)d bytes), only download " @@ -231,59 +231,67 @@ msgstr "" "Tableau des fichiers d'inventaires et des répertoires disponibles dans ce " "projet : incomplet." -#: awx/api/serializers.py:1283 +#: awx/api/serializers.py:1282 #, python-format msgid "Invalid port specification: %s" msgstr "Spécification de port non valide : %s" -#: awx/api/serializers.py:1311 awx/api/serializers.py:3208 -#: awx/api/serializers.py:3293 awx/main/validators.py:198 +#: awx/api/serializers.py:1293 +msgid "Cannot create Host for Smart Inventory" +msgstr "Impossible de créer un Hôte pour l' Inventaire Smart" + +#: awx/api/serializers.py:1315 awx/api/serializers.py:3218 +#: awx/api/serializers.py:3303 awx/main/validators.py:198 msgid "Must be valid JSON or YAML." msgstr "Syntaxe JSON ou YAML valide exigée." -#: awx/api/serializers.py:1407 +#: awx/api/serializers.py:1411 msgid "Invalid group name." msgstr "Nom de groupe incorrect." -#: awx/api/serializers.py:1479 +#: awx/api/serializers.py:1416 +msgid "Cannot create Group for Smart Inventory" +msgstr "Impossible de créer de Groupe pour l' Inventaire Smart" + +#: awx/api/serializers.py:1488 msgid "" "Script must begin with a hashbang sequence: i.e.... #!/usr/bin/env python" msgstr "" "Le script doit commencer par une séquence hashbang : c.-à-d. ... " "#!/usr/bin/env python" -#: awx/api/serializers.py:1525 +#: awx/api/serializers.py:1534 msgid "`{}` is a prohibited environment variable" msgstr "`{}`est une variable d'environnement interdite" -#: awx/api/serializers.py:1536 +#: awx/api/serializers.py:1545 msgid "If 'source' is 'custom', 'source_script' must be provided." msgstr "Si la valeur 'source' est 'custom', 'source_script' doit être défini." -#: awx/api/serializers.py:1542 +#: awx/api/serializers.py:1551 msgid "Must provide an inventory." msgstr "Vous devez fournir un inventaire." -#: awx/api/serializers.py:1546 +#: awx/api/serializers.py:1555 msgid "" "The 'source_script' does not belong to the same organization as the " "inventory." msgstr "" "Le 'source_script' n'appartient pas à la même organisation que l'inventaire." -#: awx/api/serializers.py:1548 +#: awx/api/serializers.py:1557 msgid "'source_script' doesn't exist." msgstr "'source_script' n'existe pas." -#: awx/api/serializers.py:1572 +#: awx/api/serializers.py:1581 msgid "Automatic group relationship, will be removed in 3.3" msgstr "Relation de groupe automatique, sera supprimée dans la version 3.3" -#: awx/api/serializers.py:1649 +#: awx/api/serializers.py:1658 msgid "Cannot use manual project for SCM-based inventory." msgstr "Impossible d'utiliser un projet manuel pour un inventaire SCM." -#: awx/api/serializers.py:1655 +#: awx/api/serializers.py:1664 msgid "" "Manual inventory sources are created automatically when a group is created " "in the v1 API." @@ -291,68 +299,54 @@ msgstr "" "Les sources d'inventaire manuel sont créées automatiquement lorsqu'un groupe" " est créé dans l'API v1." -#: awx/api/serializers.py:1660 +#: awx/api/serializers.py:1669 msgid "Setting not compatible with existing schedules." msgstr "Paramètre incompatible avec les planifications existantes." -#: awx/api/serializers.py:1673 -msgid "Cannot set source_path if not SCM type." -msgstr "Impossible de définir chemin_source si pas du type SCM." +#: awx/api/serializers.py:1674 +msgid "Cannot create Inventory Source for Smart Inventory" +msgstr "Impossible de créer une Source d'inventaire pour l' Inventaire Smart" -#: awx/api/serializers.py:1676 -msgid "" -"Cannot update SCM-based inventory source on launch if set to update on " -"project update. Instead, configure the corresponding source project to " -"update on launch." -msgstr "" -"Impossible de mettre à jour une source d'inventaire SCM lors du lancement si" -" elle est définie pour se mettre à jour lors de l'actualisation du projet. À" -" la place, configurez le projet source correspondant pour qu'il se mette à " -"jour au moment du lancement." +#: awx/api/serializers.py:1688 +#, python-format +msgid "Cannot set %s if not SCM type." +msgstr "Impossible de définir %s si pas du type SCM ." -#: awx/api/serializers.py:1680 -msgid "Inventory controlled by project-following SCM." -msgstr "Inventaire contrôlé par le SCM suivant le projet." - -#: awx/api/serializers.py:1683 -msgid "SCM type sources must set `overwrite_vars` to `true`." -msgstr "Les sources de type SCM doivent définir `overwrite_vars` sur`true`." - -#: awx/api/serializers.py:1925 +#: awx/api/serializers.py:1929 msgid "Modifications not allowed for managed credential types" msgstr "" "Modifications non autorisées pour les types d'informations d'identification " "gérés" -#: awx/api/serializers.py:1930 +#: awx/api/serializers.py:1934 msgid "" "Modifications to inputs are not allowed for credential types that are in use" msgstr "" "Modifications apportées aux entrées non autorisées pour les types " "d'informations d'identification en cours d'utilisation" -#: awx/api/serializers.py:1936 +#: awx/api/serializers.py:1940 #, python-format msgid "Must be 'cloud' or 'net', not %s" msgstr "Doit être 'cloud' ou 'net', pas %s" -#: awx/api/serializers.py:1942 +#: awx/api/serializers.py:1946 msgid "'ask_at_runtime' is not supported for custom credentials." msgstr "" "'ask_at_runtime' n'est pas pris en charge pour les informations " "d'identification personnalisées." -#: awx/api/serializers.py:2115 +#: awx/api/serializers.py:2119 #, python-format msgid "\"%s\" is not a valid choice" msgstr "\"%s\" n'est pas un choix valide." -#: awx/api/serializers.py:2134 +#: awx/api/serializers.py:2138 #, python-format msgid "'%s' is not a valid field for %s" msgstr "'%s' n'est pas un champ valide pour %s" -#: awx/api/serializers.py:2146 +#: awx/api/serializers.py:2150 msgid "" "Write-only field used to add user to owner role. If provided, do not give " "either team or organization. Only valid for creation." @@ -361,7 +355,7 @@ msgstr "" "propriétaire. Si vous le définissez, n'entrez ni équipe ni organisation. " "Seulement valable pour la création." -#: awx/api/serializers.py:2151 +#: awx/api/serializers.py:2155 msgid "" "Write-only field used to add team to owner role. If provided, do not give " "either user or organization. Only valid for creation." @@ -370,7 +364,7 @@ msgstr "" "propriétaire. Si vous le définissez, n'entrez ni utilisateur ni " "organisation. Seulement valable pour la création." -#: awx/api/serializers.py:2156 +#: awx/api/serializers.py:2160 msgid "" "Inherit permissions from organization roles. If provided on creation, do not" " give either user or team." @@ -378,128 +372,128 @@ msgstr "" "Hériter des permissions à partir des rôles d'organisation. Si vous le " "définissez lors de la création, n'entrez ni utilisateur ni équipe." -#: awx/api/serializers.py:2172 +#: awx/api/serializers.py:2176 msgid "Missing 'user', 'team', or 'organization'." msgstr "Valeur 'utilisateur', 'équipe' ou 'organisation' manquante." -#: awx/api/serializers.py:2212 +#: awx/api/serializers.py:2216 msgid "" "Credential organization must be set and match before assigning to a team" msgstr "" "L'organisation des informations d'identification doit être définie et mise " "en correspondance avant de l'attribuer à une équipe" -#: awx/api/serializers.py:2374 +#: awx/api/serializers.py:2378 msgid "You must provide a cloud credential." msgstr "Vous devez fournir une information d'identification cloud." -#: awx/api/serializers.py:2375 +#: awx/api/serializers.py:2379 msgid "You must provide a network credential." msgstr "Vous devez fournir des informations d'identification réseau." -#: awx/api/serializers.py:2391 +#: awx/api/serializers.py:2395 msgid "This field is required." msgstr "Ce champ est obligatoire." -#: awx/api/serializers.py:2393 awx/api/serializers.py:2395 +#: awx/api/serializers.py:2397 awx/api/serializers.py:2399 msgid "Playbook not found for project." msgstr "Playbook introuvable pour le projet." -#: awx/api/serializers.py:2397 +#: awx/api/serializers.py:2401 msgid "Must select playbook for project." msgstr "Un playbook doit être sélectionné pour le project." -#: awx/api/serializers.py:2466 +#: awx/api/serializers.py:2476 msgid "Must either set a default value or ask to prompt on launch." msgstr "" "Une valeur par défaut doit être définie ou bien demander une invite au " "moment du lancement." -#: awx/api/serializers.py:2468 awx/main/models/jobs.py:325 +#: awx/api/serializers.py:2478 awx/main/models/jobs.py:325 msgid "Job types 'run' and 'check' must have assigned a project." msgstr "Un projet doit être assigné aux types de tâche 'run' et 'check'." -#: awx/api/serializers.py:2539 +#: awx/api/serializers.py:2549 msgid "Invalid job template." msgstr "Modèle de tâche non valide." -#: awx/api/serializers.py:2620 +#: awx/api/serializers.py:2630 msgid "Credential not found or deleted." msgstr "Informations d'identification introuvables ou supprimées." -#: awx/api/serializers.py:2622 +#: awx/api/serializers.py:2632 msgid "Job Template Project is missing or undefined." msgstr "Le projet de modèle de tâche est manquant ou non défini." -#: awx/api/serializers.py:2624 +#: awx/api/serializers.py:2634 msgid "Job Template Inventory is missing or undefined." msgstr "Le projet de modèle d'inventaire est manquant ou non défini." -#: awx/api/serializers.py:2911 +#: awx/api/serializers.py:2921 #, python-format msgid "%(job_type)s is not a valid job type. The choices are %(choices)s." msgstr "" "%(job_type)s n'est pas un type de tâche valide. Les choix sont %(choices)s." -#: awx/api/serializers.py:2916 +#: awx/api/serializers.py:2926 msgid "Workflow job template is missing during creation." msgstr "Le modèle de tâche Workflow est manquant lors de la création." -#: awx/api/serializers.py:2921 +#: awx/api/serializers.py:2931 #, python-format msgid "Cannot nest a %s inside a WorkflowJobTemplate" msgstr "Impossible d'imbriquer %s dans un modèle de tâche Workflow." -#: awx/api/serializers.py:3178 +#: awx/api/serializers.py:3188 #, python-format msgid "Job Template '%s' is missing or undefined." msgstr "Le modèle de tâche '%s' est manquant ou non défini." -#: awx/api/serializers.py:3181 +#: awx/api/serializers.py:3191 msgid "The inventory associated with this Job Template is being deleted." msgstr "" "L'inventaire associé à ce modèle de tâche est en cours de suppression." -#: awx/api/serializers.py:3222 awx/api/views.py:2998 +#: awx/api/serializers.py:3232 awx/api/views.py:2991 #, python-format msgid "Cannot assign multiple %s credentials." msgstr "Impossible d'attribuer plusieurs informations d'identification %s ." -#: awx/api/serializers.py:3224 awx/api/views.py:3001 +#: awx/api/serializers.py:3234 awx/api/views.py:2994 msgid "Extra credentials must be network or cloud." msgstr "" "Les informations d'identification supplémentaires doivent être des " "identifiants réseau ou cloud." -#: awx/api/serializers.py:3361 +#: awx/api/serializers.py:3371 msgid "" "Missing required fields for Notification Configuration: notification_type" msgstr "" "Champs obligatoires manquants pour la configuration des notifications : " "notification_type" -#: awx/api/serializers.py:3384 +#: awx/api/serializers.py:3394 msgid "No values specified for field '{}'" msgstr "Aucune valeur spécifiée pour le champ '{}'" -#: awx/api/serializers.py:3389 +#: awx/api/serializers.py:3399 msgid "Missing required fields for Notification Configuration: {}." msgstr "" "Champs obligatoires manquants pour la configuration des notifications : {}." -#: awx/api/serializers.py:3392 +#: awx/api/serializers.py:3402 msgid "Configuration field '{}' incorrect type, expected {}." msgstr "Type de champ de configuration '{}' incorrect, {} attendu." -#: awx/api/serializers.py:3445 +#: awx/api/serializers.py:3455 msgid "Inventory Source must be a cloud resource." msgstr "La source d'inventaire doit être une ressource cloud." -#: awx/api/serializers.py:3447 +#: awx/api/serializers.py:3457 msgid "Manual Project cannot have a schedule set." msgstr "Le projet manuel ne peut pas avoir de calendrier défini." -#: awx/api/serializers.py:3450 +#: awx/api/serializers.py:3460 msgid "" "Inventory sources with `update_on_project_update` cannot be scheduled. " "Schedule its source project `{}` instead." @@ -507,72 +501,72 @@ msgstr "" "Impossible de planifier les sources d'inventaire avec " "`update_on_project_update`. Planifiez plutôt son projet source`{}`." -#: awx/api/serializers.py:3469 +#: awx/api/serializers.py:3479 msgid "Projects and inventory updates cannot accept extra variables." msgstr "" "Les projets et mises à jour d'inventaire ne peuvent pas accepter de " "variables supplémentaires." -#: awx/api/serializers.py:3491 +#: awx/api/serializers.py:3501 msgid "" "DTSTART required in rrule. Value should match: DTSTART:YYYYMMDDTHHMMSSZ" msgstr "" "DTSTART obligatoire dans rrule. La valeur doit correspondre à : " "DTSTART:YYYYMMDDTHHMMSSZ" -#: awx/api/serializers.py:3493 +#: awx/api/serializers.py:3503 msgid "Multiple DTSTART is not supported." msgstr "Une seule valeur DTSTART est prise en charge." -#: awx/api/serializers.py:3495 +#: awx/api/serializers.py:3505 msgid "RRULE require in rrule." msgstr "RRULE obligatoire dans rrule." -#: awx/api/serializers.py:3497 +#: awx/api/serializers.py:3507 msgid "Multiple RRULE is not supported." msgstr "Une seule valeur RRULE est prise en charge." -#: awx/api/serializers.py:3499 +#: awx/api/serializers.py:3509 msgid "INTERVAL required in rrule." msgstr "INTERVAL obligatoire dans rrule." -#: awx/api/serializers.py:3501 +#: awx/api/serializers.py:3511 msgid "TZID is not supported." msgstr "TZID n'est pas pris en charge." -#: awx/api/serializers.py:3503 +#: awx/api/serializers.py:3513 msgid "SECONDLY is not supported." msgstr "SECONDLY n'est pas pris en charge." -#: awx/api/serializers.py:3505 +#: awx/api/serializers.py:3515 msgid "Multiple BYMONTHDAYs not supported." msgstr "Une seule valeur BYMONTHDAY est prise en charge." -#: awx/api/serializers.py:3507 +#: awx/api/serializers.py:3517 msgid "Multiple BYMONTHs not supported." msgstr "Une seule valeur BYMONTH est prise en charge." -#: awx/api/serializers.py:3509 +#: awx/api/serializers.py:3519 msgid "BYDAY with numeric prefix not supported." msgstr "BYDAY avec un préfixe numérique non pris en charge." -#: awx/api/serializers.py:3511 +#: awx/api/serializers.py:3521 msgid "BYYEARDAY not supported." msgstr "BYYEARDAY non pris en charge." -#: awx/api/serializers.py:3513 +#: awx/api/serializers.py:3523 msgid "BYWEEKNO not supported." msgstr "BYWEEKNO non pris en charge." -#: awx/api/serializers.py:3517 +#: awx/api/serializers.py:3527 msgid "COUNT > 999 is unsupported." msgstr "COUNT > 999 non pris en charge." -#: awx/api/serializers.py:3521 +#: awx/api/serializers.py:3531 msgid "rrule parsing failed validation." msgstr "L'analyse rrule n'a pas pu être validée." -#: awx/api/serializers.py:3621 +#: awx/api/serializers.py:3631 msgid "" "A summary of the new and changed values when an object is created, updated, " "or deleted" @@ -580,7 +574,7 @@ msgstr "" "Un récapitulatif des valeurs nouvelles et modifiées lorsqu'un objet est " "créé, mis à jour ou supprimé" -#: awx/api/serializers.py:3623 +#: awx/api/serializers.py:3633 msgid "" "For create, update, and delete events this is the object type that was " "affected. For associate and disassociate events this is the object type " @@ -590,7 +584,7 @@ msgstr "" "d'objet qui a été affecté. Pour associer et dissocier des événements, il " "s'agit du type d'objet associé à ou dissocié de object2." -#: awx/api/serializers.py:3626 +#: awx/api/serializers.py:3636 msgid "" "Unpopulated for create, update, and delete events. For associate and " "disassociate events this is the object type that object1 is being associated" @@ -600,156 +594,166 @@ msgstr "" "associer et dissocier des événements, il s'agit du type d'objet auquel " "object1 est associé." -#: awx/api/serializers.py:3629 +#: awx/api/serializers.py:3639 msgid "The action taken with respect to the given object(s)." msgstr "Action appliquée par rapport à l'objet ou aux objets donnés." -#: awx/api/serializers.py:3732 +#: awx/api/serializers.py:3749 msgid "Unable to login with provided credentials." msgstr "Connexion impossible avec les informations d'identification fournies." -#: awx/api/serializers.py:3734 +#: awx/api/serializers.py:3751 msgid "Must include \"username\" and \"password\"." msgstr "Elles doivent inclure le nom d'utilisateur et le mot de passe." -#: awx/api/views.py:107 +#: awx/api/views.py:106 msgid "Your license does not allow use of the activity stream." msgstr "Votre licence ne permet pas l'utilisation du flux d'activité." -#: awx/api/views.py:117 +#: awx/api/views.py:116 msgid "Your license does not permit use of system tracking." msgstr "Votre licence ne permet pas l'utilisation du suivi du système." -#: awx/api/views.py:127 +#: awx/api/views.py:126 msgid "Your license does not allow use of workflows." msgstr "Votre licence ne permet pas l'utilisation de workflows." -#: awx/api/views.py:135 awx/templates/rest_framework/api.html:28 +#: awx/api/views.py:140 +msgid "Cannot delete job resource when associated workflow job is running." +msgstr "" +"Impossible de supprimer les ressources de tâche lorsqu'une tâche de workflow" +" associée est en cours d'exécution." + +#: awx/api/views.py:144 +msgid "Cannot delete running job resource." +msgstr "Impossible de supprimer la ressource de la tâche en cours." + +#: awx/api/views.py:153 awx/templates/rest_framework/api.html:28 msgid "REST API" msgstr "API REST" -#: awx/api/views.py:144 -msgid "Ansible Tower REST API" -msgstr "API REST Ansible Tower" +#: awx/api/views.py:162 awx/templates/rest_framework/api.html:4 +msgid "AWX REST API" +msgstr "API REST AWX" -#: awx/api/views.py:206 +#: awx/api/views.py:224 msgid "Version 1" msgstr "Version 1" -#: awx/api/views.py:210 +#: awx/api/views.py:228 msgid "Version 2" msgstr "Version 2" -#: awx/api/views.py:221 +#: awx/api/views.py:239 msgid "Ping" msgstr "Ping" -#: awx/api/views.py:256 awx/conf/apps.py:12 +#: awx/api/views.py:270 awx/conf/apps.py:12 msgid "Configuration" msgstr "Configuration" -#: awx/api/views.py:309 +#: awx/api/views.py:323 msgid "Invalid license data" msgstr "Données de licence non valides" -#: awx/api/views.py:311 +#: awx/api/views.py:325 msgid "Missing 'eula_accepted' property" msgstr "Propriété 'eula_accepted' manquante" -#: awx/api/views.py:315 +#: awx/api/views.py:329 msgid "'eula_accepted' value is invalid" msgstr "La valeur 'eula_accepted' n'est pas valide" -#: awx/api/views.py:318 +#: awx/api/views.py:332 msgid "'eula_accepted' must be True" msgstr "La valeur 'eula_accepted' doit être True" -#: awx/api/views.py:325 +#: awx/api/views.py:339 msgid "Invalid JSON" msgstr "Syntaxe JSON non valide" -#: awx/api/views.py:333 +#: awx/api/views.py:347 msgid "Invalid License" msgstr "Licence non valide" -#: awx/api/views.py:343 +#: awx/api/views.py:357 msgid "Invalid license" msgstr "Licence non valide" -#: awx/api/views.py:351 +#: awx/api/views.py:365 #, python-format msgid "Failed to remove license (%s)" msgstr "Suppression de la licence (%s) impossible" -#: awx/api/views.py:356 +#: awx/api/views.py:370 msgid "Dashboard" msgstr "Tableau de bord" -#: awx/api/views.py:455 +#: awx/api/views.py:469 msgid "Dashboard Jobs Graphs" msgstr "Graphiques de tâches du tableau de bord" -#: awx/api/views.py:491 +#: awx/api/views.py:505 #, python-format msgid "Unknown period \"%s\"" msgstr "Période \"%s\" inconnue" -#: awx/api/views.py:505 +#: awx/api/views.py:519 msgid "Instances" msgstr "Instances" -#: awx/api/views.py:513 +#: awx/api/views.py:527 msgid "Instance Detail" msgstr "Détail de l'instance" -#: awx/api/views.py:521 +#: awx/api/views.py:535 msgid "Instance Running Jobs" msgstr "Instance exécutant les tâches" -#: awx/api/views.py:536 +#: awx/api/views.py:550 msgid "Instance's Instance Groups" msgstr "Groupes d'instances de l'instance" -#: awx/api/views.py:546 +#: awx/api/views.py:560 msgid "Instance Groups" msgstr "Groupes d'instances" -#: awx/api/views.py:554 +#: awx/api/views.py:568 msgid "Instance Group Detail" msgstr "Détail du groupe d'instances" -#: awx/api/views.py:562 +#: awx/api/views.py:576 msgid "Instance Group Running Jobs" msgstr "Groupe d'instances exécutant les tâches" -#: awx/api/views.py:572 +#: awx/api/views.py:586 msgid "Instance Group's Instances" msgstr "Instances du groupe d'instances" -#: awx/api/views.py:582 +#: awx/api/views.py:596 msgid "Schedules" msgstr "Calendriers" -#: awx/api/views.py:601 +#: awx/api/views.py:615 msgid "Schedule Jobs List" msgstr "Listes des tâches de planification" -#: awx/api/views.py:825 +#: awx/api/views.py:841 msgid "Your license only permits a single organization to exist." msgstr "Votre licence permet uniquement l'existence d'une seule organisation." -#: awx/api/views.py:1061 awx/api/views.py:4624 +#: awx/api/views.py:1077 awx/api/views.py:4615 msgid "You cannot assign an Organization role as a child role for a Team." msgstr "" "Vous ne pouvez pas attribuer un rôle Organisation en tant que rôle enfant " "pour une équipe." -#: awx/api/views.py:1065 awx/api/views.py:4638 +#: awx/api/views.py:1081 awx/api/views.py:4629 msgid "You cannot grant system-level permissions to a team." msgstr "" "Vous ne pouvez pas accorder de permissions au niveau système à une équipe." -#: awx/api/views.py:1072 awx/api/views.py:4630 +#: awx/api/views.py:1088 awx/api/views.py:4621 msgid "" "You cannot grant credential access to a team when the Organization field " "isn't set, or belongs to a different organization" @@ -758,42 +762,36 @@ msgstr "" "équipe lorsque le champ Organisation n'est pas défini ou qu'elle appartient " "à une organisation différente" -#: awx/api/views.py:1162 +#: awx/api/views.py:1178 msgid "Cannot delete project." msgstr "Suppression du projet impossible." -#: awx/api/views.py:1197 +#: awx/api/views.py:1213 msgid "Project Schedules" msgstr "Calendriers des projets" -#: awx/api/views.py:1209 +#: awx/api/views.py:1225 msgid "Project SCM Inventory Sources" msgstr "Sources d'inventaire SCM du projet" -#: awx/api/views.py:1312 awx/api/views.py:2685 awx/api/views.py:3767 -msgid "Cannot delete job resource when associated workflow job is running." -msgstr "" -"Impossible de supprimer les ressources de tâche lorsqu'une tâche de workflow" -" associée est en cours d'exécution." - -#: awx/api/views.py:1345 +#: awx/api/views.py:1352 msgid "Project Update SCM Inventory Updates" msgstr "Mises à jour de l'inventaire SCM de la mise à jour du projet" -#: awx/api/views.py:1400 +#: awx/api/views.py:1407 msgid "Me" msgstr "Moi-même" -#: awx/api/views.py:1444 awx/api/views.py:4581 +#: awx/api/views.py:1451 awx/api/views.py:4572 msgid "You may not perform any action with your own admin_role." msgstr "Vous ne pouvez pas effectuer d'action avec votre propre admin_role." -#: awx/api/views.py:1450 awx/api/views.py:4585 +#: awx/api/views.py:1457 awx/api/views.py:4576 msgid "You may not change the membership of a users admin_role" msgstr "" "Vous ne pouvez pas modifier l'appartenance de l'admin_role d'un utilisateur" -#: awx/api/views.py:1455 awx/api/views.py:4590 +#: awx/api/views.py:1462 awx/api/views.py:4581 msgid "" "You cannot grant credential access to a user not in the credentials' " "organization" @@ -802,58 +800,64 @@ msgstr "" "utilisateur ne figurant pas dans l'organisation d'informations " "d'identification." -#: awx/api/views.py:1459 awx/api/views.py:4594 +#: awx/api/views.py:1466 awx/api/views.py:4585 msgid "You cannot grant private credential access to another user" msgstr "" "Vous ne pouvez pas accorder d'accès privé par informations d'identification " "à un autre utilisateur" -#: awx/api/views.py:1557 +#: awx/api/views.py:1564 #, python-format msgid "Cannot change %s." msgstr "Impossible de modifier %s." -#: awx/api/views.py:1563 +#: awx/api/views.py:1570 msgid "Cannot delete user." msgstr "Impossible de supprimer l'utilisateur." -#: awx/api/views.py:1592 +#: awx/api/views.py:1599 msgid "Deletion not allowed for managed credential types" msgstr "" "Suppression non autorisée pour les types d'informations d'identification " "gérés." -#: awx/api/views.py:1594 +#: awx/api/views.py:1601 msgid "Credential types that are in use cannot be deleted" msgstr "" "Les types d'informations d'identification utilisés ne peuvent pas être " "supprimés." -#: awx/api/views.py:1772 +#: awx/api/views.py:1779 msgid "Cannot delete inventory script." msgstr "Impossible de supprimer le script d'inventaire." -#: awx/api/views.py:1857 +#: awx/api/views.py:1864 msgid "{0}" msgstr "{0}" -#: awx/api/views.py:2078 +#: awx/api/views.py:2089 msgid "Fact not found." msgstr "Fait introuvable." -#: awx/api/views.py:2102 +#: awx/api/views.py:2113 msgid "SSLError while trying to connect to {}" msgstr "ErreurSSL lors de la tentative de connexion au {} " -#: awx/api/views.py:2104 +#: awx/api/views.py:2115 msgid "Request to {} timed out." msgstr "Délai de requête {} expiré." -#: awx/api/views.py:2106 +#: awx/api/views.py:2117 msgid "Unkown exception {} while trying to GET {}" msgstr "Exception inconnue {} lors de la tentative GET {}" -#: awx/api/views.py:2109 +#: awx/api/views.py:2120 +msgid "" +"Unauthorized access. Please check your Insights Credential username and " +"password." +msgstr "Accès non autorisé. Veuillez vérifier vos identifiants pour Insights." + +#: awx/api/views.py:2122 msgid "" "Failed to gather reports and maintenance plans from Insights API at URL {}. " "Server responded with {} status code and message {}" @@ -862,116 +866,112 @@ msgstr "" "sur l'URL {}. Le serveur a répondu avec un code de statut {} et un message " "{} " -#: awx/api/views.py:2115 +#: awx/api/views.py:2128 msgid "Expected JSON response from Insights but instead got {}" msgstr "" "Réponse JSON attendue de la part d'Insights, mais {} a été reçu à la place" -#: awx/api/views.py:2122 +#: awx/api/views.py:2135 msgid "This host is not recognized as an Insights host." msgstr "Cet hôte n'est pas reconnu comme hôte Insights." -#: awx/api/views.py:2127 +#: awx/api/views.py:2140 msgid "The Insights Credential for \"{}\" was not found." msgstr "Informations d'identification Insights pour \"{}\" introuvables." -#: awx/api/views.py:2196 +#: awx/api/views.py:2209 msgid "Cyclical Group association." msgstr "Association de groupe cyclique." -#: awx/api/views.py:2473 +#: awx/api/views.py:2482 msgid "Inventory Source List" msgstr "Liste des sources d'inventaire" -#: awx/api/views.py:2486 +#: awx/api/views.py:2495 msgid "Inventory Sources Update" msgstr "Mise à jour des sources d'inventaire" -#: awx/api/views.py:2514 -msgid "You do not have permission to update project `{}`" -msgstr "Vous n'avez pas la permission de mettre à jour le projet `{}`" - -#: awx/api/views.py:2526 +#: awx/api/views.py:2525 msgid "Could not start because `can_update` returned False" msgstr "Démarrage impossible car `can_update` a renvoyé False" -#: awx/api/views.py:2534 +#: awx/api/views.py:2533 msgid "No inventory sources to update." msgstr "Aucune source d'inventaire à actualiser." -#: awx/api/views.py:2566 +#: awx/api/views.py:2565 msgid "Cannot delete inventory source." msgstr "Impossible de supprimer la source d'inventaire." -#: awx/api/views.py:2574 +#: awx/api/views.py:2573 msgid "Inventory Source Schedules" msgstr "Calendriers des sources d'inventaire" -#: awx/api/views.py:2604 +#: awx/api/views.py:2603 msgid "Notification Templates can only be assigned when source is one of {}." msgstr "" "Les modèles de notification ne peuvent être attribués que lorsque la source " "est l'une des {}." -#: awx/api/views.py:2833 +#: awx/api/views.py:2826 msgid "Job Template Schedules" msgstr "Calendriers des modèles de tâche" -#: awx/api/views.py:2853 awx/api/views.py:2869 +#: awx/api/views.py:2846 awx/api/views.py:2862 msgid "Your license does not allow adding surveys." msgstr "Votre licence ne permet pas l'ajout de questionnaires." -#: awx/api/views.py:2876 +#: awx/api/views.py:2869 msgid "'name' missing from survey spec." msgstr "'name' manquant dans la spécification du questionnaire." -#: awx/api/views.py:2878 +#: awx/api/views.py:2871 msgid "'description' missing from survey spec." msgstr "'description' manquante dans la spécification du questionnaire." -#: awx/api/views.py:2880 +#: awx/api/views.py:2873 msgid "'spec' missing from survey spec." msgstr "'spec' manquante dans la spécification du questionnaire." -#: awx/api/views.py:2882 +#: awx/api/views.py:2875 msgid "'spec' must be a list of items." msgstr "'spec' doit être une liste d'éléments" -#: awx/api/views.py:2884 +#: awx/api/views.py:2877 msgid "'spec' doesn't contain any items." msgstr "'spec' ne contient aucun élément." -#: awx/api/views.py:2890 +#: awx/api/views.py:2883 #, python-format msgid "Survey question %s is not a json object." msgstr "La question %s n'est pas un objet json." -#: awx/api/views.py:2892 +#: awx/api/views.py:2885 #, python-format msgid "'type' missing from survey question %s." msgstr "'type' est manquant dans la question %s." -#: awx/api/views.py:2894 +#: awx/api/views.py:2887 #, python-format msgid "'question_name' missing from survey question %s." msgstr "'question_name' est manquant dans la question %s." -#: awx/api/views.py:2896 +#: awx/api/views.py:2889 #, python-format msgid "'variable' missing from survey question %s." msgstr "'variable' est manquant dans la question %s." -#: awx/api/views.py:2898 +#: awx/api/views.py:2891 #, python-format msgid "'variable' '%(item)s' duplicated in survey question %(survey)s." msgstr "'variable' '%(item)s' en double dans la question %(survey)s." -#: awx/api/views.py:2903 +#: awx/api/views.py:2896 #, python-format msgid "'required' missing from survey question %s." msgstr "'required' est manquant dans la question %s." -#: awx/api/views.py:2908 +#: awx/api/views.py:2901 msgid "" "$encrypted$ is reserved keyword and may not be used as a default for " "password {}." @@ -979,89 +979,89 @@ msgstr "" "$encrypted$ est un mot clé réservé et ne peut pas être utilisé comme valeur " "par défaut pour le mot de passe {}. " -#: awx/api/views.py:3024 +#: awx/api/views.py:3017 msgid "Maximum number of labels for {} reached." msgstr "Nombre maximum d'étiquettes {} atteint." -#: awx/api/views.py:3143 +#: awx/api/views.py:3136 msgid "No matching host could be found!" msgstr "Aucun hôte correspondant n'a été trouvé." -#: awx/api/views.py:3146 +#: awx/api/views.py:3139 msgid "Multiple hosts matched the request!" msgstr "Plusieurs hôtes correspondent à la requête." -#: awx/api/views.py:3151 +#: awx/api/views.py:3144 msgid "Cannot start automatically, user input required!" msgstr "" "Impossible de démarrer automatiquement, saisie de l'utilisateur obligatoire." -#: awx/api/views.py:3158 +#: awx/api/views.py:3151 msgid "Host callback job already pending." msgstr "La tâche de rappel de l'hôte est déjà en attente." -#: awx/api/views.py:3171 +#: awx/api/views.py:3164 msgid "Error starting job!" msgstr "Erreur lors du démarrage de la tâche." -#: awx/api/views.py:3278 +#: awx/api/views.py:3271 msgid "Cannot associate {0} when {1} have been associated." msgstr " {0} ne peut pas être associé lorsque {1} est associé." -#: awx/api/views.py:3303 +#: awx/api/views.py:3296 msgid "Multiple parent relationship not allowed." msgstr "Relation de parents multiples non autorisée." -#: awx/api/views.py:3308 +#: awx/api/views.py:3301 msgid "Cycle detected." msgstr "Cycle détecté." -#: awx/api/views.py:3512 +#: awx/api/views.py:3505 msgid "Workflow Job Template Schedules" msgstr "Calendriers des modèles de tâche Workflow" -#: awx/api/views.py:3657 awx/api/views.py:4233 +#: awx/api/views.py:3650 awx/api/views.py:4217 msgid "Superuser privileges needed." msgstr "Privilèges de superutilisateur requis." -#: awx/api/views.py:3689 +#: awx/api/views.py:3682 msgid "System Job Template Schedules" msgstr "Calendriers des modèles de tâche Système" -#: awx/api/views.py:3907 +#: awx/api/views.py:3891 msgid "Job Host Summaries List" msgstr "Liste récapitulative des hôtes de la tâche" -#: awx/api/views.py:3954 +#: awx/api/views.py:3938 msgid "Job Event Children List" msgstr "Liste des enfants d'événement de la tâche" -#: awx/api/views.py:3963 +#: awx/api/views.py:3947 msgid "Job Event Hosts List" msgstr "Liste des hôtes d'événement de la tâche" -#: awx/api/views.py:3973 +#: awx/api/views.py:3957 msgid "Job Events List" msgstr "Liste des événements de la tâche" -#: awx/api/views.py:4187 +#: awx/api/views.py:4171 msgid "Ad Hoc Command Events List" msgstr "Liste d'événements de la commande ad hoc" -#: awx/api/views.py:4395 +#: awx/api/views.py:4386 msgid "Error generating stdout download file: {}" msgstr "Erreur lors de la génération du fichier de téléchargement stdout : {}" -#: awx/api/views.py:4408 +#: awx/api/views.py:4399 #, python-format msgid "Error generating stdout download file: %s" msgstr "Erreur lors de la génération du fichier de téléchargement stdout : %s" -#: awx/api/views.py:4453 +#: awx/api/views.py:4444 msgid "Delete not allowed while there are pending notifications" msgstr "Suppression non autorisée tant que des notifications sont en attente" -#: awx/api/views.py:4460 +#: awx/api/views.py:4451 msgid "Notification Template Test" msgstr "Test de modèle de notification" @@ -1270,7 +1270,7 @@ msgstr "Modifié" msgid "User-Defaults" msgstr "Paramètres utilisateur par défaut" -#: awx/conf/registry.py:150 +#: awx/conf/registry.py:151 msgid "This value has been set manually in a settings file." msgstr "" "Cette valeur a été définie manuellement dans un fichier de configuration." @@ -1314,8 +1314,9 @@ msgstr "" #: awx/conf/tests/unit/test_settings.py:360 #: awx/conf/tests/unit/test_settings.py:374 #: awx/conf/tests/unit/test_settings.py:398 -#: awx/conf/tests/unit/test_settings.py:412 -#: awx/conf/tests/unit/test_settings.py:448 awx/main/conf.py:22 +#: awx/conf/tests/unit/test_settings.py:411 +#: awx/conf/tests/unit/test_settings.py:430 +#: awx/conf/tests/unit/test_settings.py:466 awx/main/conf.py:22 #: awx/main/conf.py:32 awx/main/conf.py:42 awx/main/conf.py:51 #: awx/main/conf.py:63 awx/main/conf.py:81 awx/main/conf.py:96 #: awx/main/conf.py:121 @@ -1338,7 +1339,7 @@ msgstr "Catégories de paramètre" msgid "Setting Detail" msgstr "Détails du paramètre" -#: awx/conf/views.py:166 +#: awx/conf/views.py:168 msgid "Logging Connectivity Test" msgstr "Journalisation du test de connectivité" @@ -1378,58 +1379,58 @@ msgstr "La fonctionnalité %s n'est pas activée dans la licence active." msgid "Features not found in active license." msgstr "Fonctionnalités introuvables dans la licence active." -#: awx/main/access.py:534 awx/main/access.py:617 awx/main/access.py:746 -#: awx/main/access.py:803 awx/main/access.py:1065 awx/main/access.py:1265 -#: awx/main/access.py:1708 +#: awx/main/access.py:534 awx/main/access.py:619 awx/main/access.py:748 +#: awx/main/access.py:801 awx/main/access.py:1063 awx/main/access.py:1263 +#: awx/main/access.py:1725 msgid "Resource is being used by running jobs" msgstr "La ressource est utilisée par des tâches en cours d'exécution" -#: awx/main/access.py:673 +#: awx/main/access.py:675 msgid "Unable to change inventory on a host." msgstr "Impossible de modifier l'inventaire sur un hôte." -#: awx/main/access.py:690 awx/main/access.py:735 +#: awx/main/access.py:692 awx/main/access.py:737 msgid "Cannot associate two items from different inventories." msgstr "Impossible d'associer deux éléments d'inventaires différents." -#: awx/main/access.py:723 +#: awx/main/access.py:725 msgid "Unable to change inventory on a group." msgstr "Impossible de modifier l'inventaire sur un groupe." -#: awx/main/access.py:985 +#: awx/main/access.py:983 msgid "Unable to change organization on a team." msgstr "Impossible de modifier l'organisation d'une équipe." -#: awx/main/access.py:998 +#: awx/main/access.py:996 msgid "The {} role cannot be assigned to a team" msgstr "Le rôle {} ne peut pas être attribué à une équipe" -#: awx/main/access.py:1000 +#: awx/main/access.py:998 msgid "The admin_role for a User cannot be assigned to a team" msgstr "L'admin_role d'un utilisateur ne peut pas être attribué à une équipe" -#: awx/main/access.py:1426 +#: awx/main/access.py:1443 msgid "Job has been orphaned from its job template." msgstr "La tâche est orpheline de son modèle de tâche." -#: awx/main/access.py:1428 +#: awx/main/access.py:1445 msgid "You do not have execute permission to related job template." msgstr "" "Vous n'avez pas de permission d'exécution pour le modèle de tâche lié." -#: awx/main/access.py:1431 +#: awx/main/access.py:1448 msgid "Job was launched with prompted fields." msgstr "La tâche a été lancée avec les champs d'invite." -#: awx/main/access.py:1433 +#: awx/main/access.py:1450 msgid " Organization level permissions required." msgstr "Permissions au niveau de l'organisation requises." -#: awx/main/access.py:1435 +#: awx/main/access.py:1452 msgid " You do not have permission to related resources." msgstr "Vous n'avez pas de permission vers les ressources liées." -#: awx/main/access.py:1781 +#: awx/main/access.py:1798 msgid "" "You do not have permission to the workflow job resources required for " "relaunch." @@ -1559,10 +1560,10 @@ msgstr "Liste des modules que des tâches ad hoc sont autorisées à utiliser." #: awx/main/conf.py:130 awx/main/conf.py:140 awx/main/conf.py:151 #: awx/main/conf.py:161 awx/main/conf.py:171 awx/main/conf.py:181 #: awx/main/conf.py:192 awx/main/conf.py:204 awx/main/conf.py:216 -#: awx/main/conf.py:227 awx/main/conf.py:237 awx/main/conf.py:248 -#: awx/main/conf.py:258 awx/main/conf.py:268 awx/main/conf.py:278 -#: awx/main/conf.py:290 awx/main/conf.py:302 awx/main/conf.py:314 -#: awx/main/conf.py:327 +#: awx/main/conf.py:229 awx/main/conf.py:241 awx/main/conf.py:251 +#: awx/main/conf.py:262 awx/main/conf.py:272 awx/main/conf.py:282 +#: awx/main/conf.py:292 awx/main/conf.py:304 awx/main/conf.py:316 +#: awx/main/conf.py:328 awx/main/conf.py:341 msgid "Jobs" msgstr "Tâches" @@ -1655,19 +1656,34 @@ msgstr "" " communication avec des instances isolées. La valeur doit être nettement " "supérieure à la latence du réseau attendue." -#: awx/main/conf.py:214 awx/main/conf.py:215 +#: awx/main/conf.py:212 +msgid "Generate RSA keys for isolated instances" +msgstr "Génère des clés RSA pour les instances isolées" + +#: awx/main/conf.py:213 +msgid "" +"If set, a random RSA key will be generated and distributed to isolated " +"instances. To disable this behavior and manage authentication for isolated " +"instances outside of Tower, disable this setting." +msgstr "" +"Si définie, une clé RSA sera générée de manière aléatoire et distribuée aux " +"instances isolées. Pour désactiver ce comportement, et gérer " +"l'authentification pour les instances isolées en dehors de Tower, désactiver" +" ce paramètre." + +#: awx/main/conf.py:227 awx/main/conf.py:228 msgid "The RSA private key for SSH traffic to isolated instances" msgstr "Clé privée RSA pour le trafic SSH vers des instances isolées" -#: awx/main/conf.py:225 awx/main/conf.py:226 +#: awx/main/conf.py:239 awx/main/conf.py:240 msgid "The RSA public key for SSH traffic to isolated instances" msgstr "Clé publique RSA pour le trafic SSH vers des instances isolées" -#: awx/main/conf.py:235 +#: awx/main/conf.py:249 msgid "Extra Environment Variables" msgstr "Variables d'environnement supplémentaires" -#: awx/main/conf.py:236 +#: awx/main/conf.py:250 msgid "" "Additional environment variables set for playbook runs, inventory updates, " "project updates, and notification sending." @@ -1675,11 +1691,11 @@ msgstr "" "Variables d'environnement supplémentaires définies pour les exécutions de " "Playbook, les mises à jour de projet et l'envoi de notifications." -#: awx/main/conf.py:246 +#: awx/main/conf.py:260 msgid "Standard Output Maximum Display Size" msgstr "Taille d'affichage maximale pour une sortie standard" -#: awx/main/conf.py:247 +#: awx/main/conf.py:261 msgid "" "Maximum Size of Standard Output in bytes to display before requiring the " "output be downloaded." @@ -1687,12 +1703,12 @@ msgstr "" "Taille maximale d'une sortie standard en octets à afficher avant de demander" " le téléchargement de la sortie." -#: awx/main/conf.py:256 +#: awx/main/conf.py:270 msgid "Job Event Standard Output Maximum Display Size" msgstr "" "Taille d'affichage maximale pour une sortie standard d'événement de tâche" -#: awx/main/conf.py:257 +#: awx/main/conf.py:271 msgid "" "Maximum Size of Standard Output in bytes to display for a single job or ad " "hoc command event. `stdout` will end with `…` when truncated." @@ -1701,11 +1717,11 @@ msgstr "" "tâche ou pour un seul événement de commande ad hoc. `stdout` se terminera " "par `...` quand il sera tronqué." -#: awx/main/conf.py:266 +#: awx/main/conf.py:280 msgid "Maximum Scheduled Jobs" msgstr "Nombre max. de tâches planifiées" -#: awx/main/conf.py:267 +#: awx/main/conf.py:281 msgid "" "Maximum number of the same job template that can be waiting to run when " "launching from a schedule before no more are created." @@ -1714,11 +1730,11 @@ msgstr "" "d'exécution lors de son lancement à partir d'un calendrier, avant que " "d'autres ne soient créés." -#: awx/main/conf.py:276 +#: awx/main/conf.py:290 msgid "Ansible Callback Plugins" msgstr "Plug-ins de rappel Ansible" -#: awx/main/conf.py:277 +#: awx/main/conf.py:291 msgid "" "List of paths to search for extra callback plugins to be used when running " "jobs. Enter one path per line." @@ -1726,11 +1742,11 @@ msgstr "" "Liste des chemins servant à rechercher d'autres plug-ins de rappel qui " "serviront lors de l'exécution de tâches. Saisissez un chemin par ligne." -#: awx/main/conf.py:287 +#: awx/main/conf.py:301 msgid "Default Job Timeout" msgstr "Délai d'attente par défaut des tâches" -#: awx/main/conf.py:288 +#: awx/main/conf.py:302 msgid "" "Maximum time in seconds to allow jobs to run. Use value of 0 to indicate " "that no timeout should be imposed. A timeout set on an individual job " @@ -1740,39 +1756,40 @@ msgstr "" "pour indiquer qu'aucun délai ne doit être imposé. Un délai d'attente défini " "sur celui d'un modèle de tâche précis écrasera cette valeur." -#: awx/main/conf.py:299 +#: awx/main/conf.py:313 msgid "Default Inventory Update Timeout" msgstr "Délai d'attente par défaut pour la mise à jour d'inventaire" -#: awx/main/conf.py:300 +#: awx/main/conf.py:314 msgid "" -"Maximum time to allow inventory updates to run. Use value of 0 to indicate " -"that no timeout should be imposed. A timeout set on an individual inventory " -"source will override this." +"Maximum time in seconds to allow inventory updates to run. Use value of 0 to" +" indicate that no timeout should be imposed. A timeout set on an individual " +"inventory source will override this." msgstr "" -"Délai maximal d'exécution des mises à jour d'inventaire. Utilisez la valeur " -"0 pour indiquer qu'aucun délai ne doit être imposé. Un délai d'attente " -"défini sur celui d'une source d'inventaire précise écrasera cette valeur." +"Délai maximal en secondes d'exécution des mises à jour d'inventaire. " +"Utilisez la valeur 0 pour indiquer qu'aucun délai ne doit être imposé. Un " +"délai d'attente défini sur celui d'une source d'inventaire précise écrasera " +"cette valeur." -#: awx/main/conf.py:311 +#: awx/main/conf.py:325 msgid "Default Project Update Timeout" msgstr "Délai d'attente par défaut pour la mise à jour de projet" -#: awx/main/conf.py:312 +#: awx/main/conf.py:326 msgid "" -"Maximum time to allow project updates to run. Use value of 0 to indicate " -"that no timeout should be imposed. A timeout set on an individual project " -"will override this." +"Maximum time in seconds to allow project updates to run. Use value of 0 to " +"indicate that no timeout should be imposed. A timeout set on an individual " +"project will override this." msgstr "" -"Délai maximal d'exécution des mises à jour de projet. Utilisez la valeur 0 " -"pour indiquer qu'aucun délai ne doit être imposé. Un délai d'attente défini " -"sur celui d'un projet précis écrasera cette valeur." +"Délai maximal en secondes d'exécution des mises à jour de projet. Utilisez " +"la valeur 0 pour indiquer qu'aucun délai ne doit être imposé. Un délai " +"d'attente défini sur celui d'un projet précis écrasera cette valeur." -#: awx/main/conf.py:323 +#: awx/main/conf.py:337 msgid "Per-Host Ansible Fact Cache Timeout" msgstr "Expiration du délai d’attente du cache Ansible Fact Cache par hôte" -#: awx/main/conf.py:324 +#: awx/main/conf.py:338 msgid "" "Maximum time, in seconds, that stored Ansible facts are considered valid " "since the last time they were modified. Only valid, non-stale, facts will be" @@ -1785,27 +1802,27 @@ msgstr "" "cela n'a aucune incidence sur la suppression d'ansible_facts de la base de " "données." -#: awx/main/conf.py:335 +#: awx/main/conf.py:350 msgid "Logging Aggregator" msgstr "Agrégateur de journalisation" -#: awx/main/conf.py:336 +#: awx/main/conf.py:351 msgid "Hostname/IP where external logs will be sent to." msgstr "Nom d'hôte / IP où les journaux externes seront envoyés." -#: awx/main/conf.py:337 awx/main/conf.py:347 awx/main/conf.py:358 -#: awx/main/conf.py:368 awx/main/conf.py:380 awx/main/conf.py:395 -#: awx/main/conf.py:407 awx/main/conf.py:416 awx/main/conf.py:426 -#: awx/main/conf.py:436 awx/main/conf.py:447 awx/main/conf.py:459 -#: awx/main/conf.py:472 +#: awx/main/conf.py:352 awx/main/conf.py:363 awx/main/conf.py:375 +#: awx/main/conf.py:385 awx/main/conf.py:397 awx/main/conf.py:412 +#: awx/main/conf.py:424 awx/main/conf.py:433 awx/main/conf.py:443 +#: awx/main/conf.py:453 awx/main/conf.py:464 awx/main/conf.py:476 +#: awx/main/conf.py:489 msgid "Logging" msgstr "Journalisation" -#: awx/main/conf.py:344 +#: awx/main/conf.py:360 msgid "Logging Aggregator Port" msgstr "Port d'agrégateur de journalisation" -#: awx/main/conf.py:345 +#: awx/main/conf.py:361 msgid "" "Port on Logging Aggregator to send logs to (if required and not provided in " "Logging Aggregator)." @@ -1813,43 +1830,43 @@ msgstr "" "Port d'agrégateur de journalisation où envoyer les journaux (le cas échéant " "ou si non fourni dans l'agrégateur de journalisation)." -#: awx/main/conf.py:356 +#: awx/main/conf.py:373 msgid "Logging Aggregator Type" msgstr "Type d'agrégateur de journalisation" -#: awx/main/conf.py:357 +#: awx/main/conf.py:374 msgid "Format messages for the chosen log aggregator." msgstr "" "Formater les messages pour l'agrégateur de journalisation que vous aurez " "choisi." -#: awx/main/conf.py:366 +#: awx/main/conf.py:383 msgid "Logging Aggregator Username" msgstr "Nom d'utilisateur de l'agrégateur de journalisation" -#: awx/main/conf.py:367 +#: awx/main/conf.py:384 msgid "Username for external log aggregator (if required)." msgstr "" "Nom d'utilisateur pour agrégateur de journalisation externe (le cas " "échéant)." -#: awx/main/conf.py:378 +#: awx/main/conf.py:395 msgid "Logging Aggregator Password/Token" msgstr "Mot de passe / Jeton d'agrégateur de journalisation" -#: awx/main/conf.py:379 +#: awx/main/conf.py:396 msgid "" "Password or authentication token for external log aggregator (if required)." msgstr "" "Mot de passe ou jeton d'authentification d'agrégateur de journalisation " "externe (le cas échéant)." -#: awx/main/conf.py:388 +#: awx/main/conf.py:405 msgid "Loggers Sending Data to Log Aggregator Form" msgstr "" "Journaliseurs à l'origine des envois de données à l'agrégateur de journaux" -#: awx/main/conf.py:389 +#: awx/main/conf.py:406 msgid "" "List of loggers that will send HTTP logs to the collector, these can include any or all of: \n" "awx - service logs\n" @@ -1863,11 +1880,11 @@ msgstr "" "job_events - données de rappel issues d'événements de tâche Ansible\n" "system_tracking - données générées par des tâches de scan." -#: awx/main/conf.py:402 +#: awx/main/conf.py:419 msgid "Log System Tracking Facts Individually" msgstr "Système de journalisation traçant des facts individuellement" -#: awx/main/conf.py:403 +#: awx/main/conf.py:420 msgid "" "If set, system tracking facts will be sent for each package, service, " "orother item found in a scan, allowing for greater search query granularity." @@ -1880,36 +1897,36 @@ msgstr "" " sous forme de dictionnaire unique, ce qui permet une meilleure efficacité " "du processus pour les facts." -#: awx/main/conf.py:414 +#: awx/main/conf.py:431 msgid "Enable External Logging" msgstr "Activer la journalisation externe" -#: awx/main/conf.py:415 +#: awx/main/conf.py:432 msgid "Enable sending logs to external log aggregator." msgstr "Activer l'envoi de journaux à un agrégateur de journaux externe." -#: awx/main/conf.py:424 +#: awx/main/conf.py:441 msgid "Cluster-wide Tower unique identifier." msgstr "Identificateur unique Tower" -#: awx/main/conf.py:425 +#: awx/main/conf.py:442 msgid "Useful to uniquely identify Tower instances." msgstr "Utile pour identifier les instances Tower spécifiquement." -#: awx/main/conf.py:434 +#: awx/main/conf.py:451 msgid "Logging Aggregator Protocol" msgstr "Protocole de l'agrégateur de journalisation" -#: awx/main/conf.py:435 +#: awx/main/conf.py:452 msgid "Protocol used to communicate with log aggregator." msgstr "" "Protocole utilisé pour communiquer avec l'agrégateur de journalisation." -#: awx/main/conf.py:443 +#: awx/main/conf.py:460 msgid "TCP Connection Timeout" msgstr "Expiration du délai d'attente de connexion TCP" -#: awx/main/conf.py:444 +#: awx/main/conf.py:461 msgid "" "Number of seconds for a TCP connection to external log aggregator to " "timeout. Applies to HTTPS and TCP log aggregator protocols." @@ -1918,11 +1935,11 @@ msgstr "" "agrégateur de journalisation externe. S'applique aux protocoles des " "agrégateurs de journalisation HTTPS et TCP." -#: awx/main/conf.py:454 +#: awx/main/conf.py:471 msgid "Enable/disable HTTPS certificate verification" msgstr "Activer/désactiver la vérification de certificat HTTPS" -#: awx/main/conf.py:455 +#: awx/main/conf.py:472 msgid "" "Flag to control enable/disable of certificate verification when " "LOG_AGGREGATOR_PROTOCOL is \"https\". If enabled, Tower's log handler will " @@ -1935,11 +1952,11 @@ msgstr "" " envoyé par l'agrégateur de journalisation externe avant d'établir la " "connexion." -#: awx/main/conf.py:467 +#: awx/main/conf.py:484 msgid "Logging Aggregator Level Threshold" msgstr "Seuil du niveau de l'agrégateur de journalisation" -#: awx/main/conf.py:468 +#: awx/main/conf.py:485 msgid "" "Level threshold used by log handler. Severities from lowest to highest are " "DEBUG, INFO, WARNING, ERROR, CRITICAL. Messages less severe than the " @@ -1953,7 +1970,7 @@ msgstr "" "gestionnaire de journal. (les messages sous la catégorie awx.anlytics " "ignorent ce paramètre)" -#: awx/main/conf.py:491 awx/sso/conf.py:1112 +#: awx/main/conf.py:508 awx/sso/conf.py:1105 msgid "\n" msgstr "\n" @@ -1985,43 +2002,50 @@ msgstr "Pmrun" msgid "Runas" msgstr "Runas" -#: awx/main/fields.py:55 +#: awx/main/fields.py:56 #, python-format msgid "'%s' is not one of ['%s']" msgstr "'%s' ne fait pas partie des ['%s']" -#: awx/main/fields.py:520 +#: awx/main/fields.py:531 +#, python-format +msgid "cannot be set unless \"%s\" is set" +msgstr "ne peut être défini à moins que \"%s\" soit défini" + +#: awx/main/fields.py:547 #, python-format msgid "required for %s" msgstr "requis pour %s" -#: awx/main/fields.py:544 +#: awx/main/fields.py:571 msgid "must be set when SSH key is encrypted." msgstr "doit être défini lorsque la clé SSH est chiffrée." -#: awx/main/fields.py:547 -msgid "should not be set when SSH key is empty." -msgstr "ne doit pas être défini lorsque la clé SSH est vide." - -#: awx/main/fields.py:549 +#: awx/main/fields.py:577 msgid "should not be set when SSH key is not encrypted." msgstr "ne doit pas être défini lorsque la clé SSH n'est pas chiffrée." -#: awx/main/fields.py:613 +#: awx/main/fields.py:635 +msgid "'dependencies' is not supported for custom credentials." +msgstr "" +"les dépendances ne sont pas prises en charge pour les identifiants " +"personnalisés." + +#: awx/main/fields.py:649 msgid "\"tower\" is a reserved field name" msgstr "\"tower\" est un nom de champ réservé" -#: awx/main/fields.py:620 +#: awx/main/fields.py:656 #, python-format msgid "field IDs must be unique (%s)" msgstr "Les ID de champ doivent être uniques (%s)" -#: awx/main/fields.py:633 +#: awx/main/fields.py:669 #, python-format msgid "%s not allowed for %s type (%s)" msgstr "%s non autorisé pour le type %s (%s)" -#: awx/main/fields.py:717 +#: awx/main/fields.py:753 #, python-format msgid "%s uses an undefined field (%s)" msgstr "%s utilise un champ non défini (%s)" @@ -2125,44 +2149,44 @@ msgstr "Module non pris en charge pour les commandes ad hoc." msgid "No argument passed to %s module." msgstr "Aucun argument transmis au module %s." -#: awx/main/models/ad_hoc_commands.py:243 awx/main/models/jobs.py:900 +#: awx/main/models/ad_hoc_commands.py:245 awx/main/models/jobs.py:904 msgid "Host Failed" msgstr "Échec de l'hôte" -#: awx/main/models/ad_hoc_commands.py:244 awx/main/models/jobs.py:901 +#: awx/main/models/ad_hoc_commands.py:246 awx/main/models/jobs.py:905 msgid "Host OK" msgstr "Hôte OK" -#: awx/main/models/ad_hoc_commands.py:245 awx/main/models/jobs.py:904 +#: awx/main/models/ad_hoc_commands.py:247 awx/main/models/jobs.py:908 msgid "Host Unreachable" msgstr "Hôte inaccessible" -#: awx/main/models/ad_hoc_commands.py:250 awx/main/models/jobs.py:903 +#: awx/main/models/ad_hoc_commands.py:252 awx/main/models/jobs.py:907 msgid "Host Skipped" msgstr "Hôte ignoré" -#: awx/main/models/ad_hoc_commands.py:260 awx/main/models/jobs.py:931 +#: awx/main/models/ad_hoc_commands.py:262 awx/main/models/jobs.py:935 msgid "Debug" msgstr "Déboguer" -#: awx/main/models/ad_hoc_commands.py:261 awx/main/models/jobs.py:932 +#: awx/main/models/ad_hoc_commands.py:263 awx/main/models/jobs.py:936 msgid "Verbose" msgstr "Verbeux" -#: awx/main/models/ad_hoc_commands.py:262 awx/main/models/jobs.py:933 +#: awx/main/models/ad_hoc_commands.py:264 awx/main/models/jobs.py:937 msgid "Deprecated" msgstr "Obsolète" -#: awx/main/models/ad_hoc_commands.py:263 awx/main/models/jobs.py:934 +#: awx/main/models/ad_hoc_commands.py:265 awx/main/models/jobs.py:938 msgid "Warning" msgstr "Avertissement" -#: awx/main/models/ad_hoc_commands.py:264 awx/main/models/jobs.py:935 +#: awx/main/models/ad_hoc_commands.py:266 awx/main/models/jobs.py:939 msgid "System Warning" msgstr "Avertissement système" -#: awx/main/models/ad_hoc_commands.py:265 awx/main/models/jobs.py:936 -#: awx/main/models/unified_jobs.py:63 +#: awx/main/models/ad_hoc_commands.py:267 awx/main/models/jobs.py:940 +#: awx/main/models/unified_jobs.py:64 msgid "Error" msgstr "Erreur" @@ -2376,74 +2400,74 @@ msgstr "Instances membres de ce GroupeInstances." msgid "Instance Group to remotely control this group." msgstr "Groupe d'instances pour contrôler ce groupe à distance." -#: awx/main/models/inventory.py:51 +#: awx/main/models/inventory.py:52 msgid "Hosts have a direct link to this inventory." msgstr "Les hôtes ont un lien direct vers cet inventaire." -#: awx/main/models/inventory.py:52 +#: awx/main/models/inventory.py:53 msgid "Hosts for inventory generated using the host_filter property." msgstr "Hôtes pour inventaire générés avec la propriété host_filter." -#: awx/main/models/inventory.py:57 +#: awx/main/models/inventory.py:58 msgid "inventories" msgstr "inventaires" -#: awx/main/models/inventory.py:64 +#: awx/main/models/inventory.py:65 msgid "Organization containing this inventory." msgstr "Organisation contenant cet inventaire." -#: awx/main/models/inventory.py:71 +#: awx/main/models/inventory.py:72 msgid "Inventory variables in JSON or YAML format." msgstr "Variables d'inventaire au format JSON ou YAML." -#: awx/main/models/inventory.py:76 +#: awx/main/models/inventory.py:77 msgid "Flag indicating whether any hosts in this inventory have failed." msgstr "Marqueur indiquant si les hôtes de cet inventaire ont échoué." -#: awx/main/models/inventory.py:81 +#: awx/main/models/inventory.py:82 msgid "Total number of hosts in this inventory." msgstr "Nombre total d'hôtes dans cet inventaire." -#: awx/main/models/inventory.py:86 +#: awx/main/models/inventory.py:87 msgid "Number of hosts in this inventory with active failures." msgstr "Nombre d'hôtes dans cet inventaire avec des échecs non résolus." -#: awx/main/models/inventory.py:91 +#: awx/main/models/inventory.py:92 msgid "Total number of groups in this inventory." msgstr "Nombre total de groupes dans cet inventaire." -#: awx/main/models/inventory.py:96 +#: awx/main/models/inventory.py:97 msgid "Number of groups in this inventory with active failures." msgstr "Nombre de groupes dans cet inventaire avec des échecs non résolus." -#: awx/main/models/inventory.py:101 +#: awx/main/models/inventory.py:102 msgid "" "Flag indicating whether this inventory has any external inventory sources." msgstr "" "Marqueur indiquant si cet inventaire contient des sources d'inventaire " "externes." -#: awx/main/models/inventory.py:106 +#: awx/main/models/inventory.py:107 msgid "" "Total number of external inventory sources configured within this inventory." msgstr "" "Nombre total de sources d'inventaire externes configurées dans cet " "inventaire." -#: awx/main/models/inventory.py:111 +#: awx/main/models/inventory.py:112 msgid "Number of external inventory sources in this inventory with failures." msgstr "" "Nombre total de sources d'inventaire externes en échec dans cet inventaire." -#: awx/main/models/inventory.py:118 +#: awx/main/models/inventory.py:119 msgid "Kind of inventory being represented." msgstr "Genre d'inventaire représenté." -#: awx/main/models/inventory.py:124 +#: awx/main/models/inventory.py:125 msgid "Filter that will be applied to the hosts of this inventory." msgstr "Filtre appliqué aux hôtes de cet inventaire." -#: awx/main/models/inventory.py:151 +#: awx/main/models/inventory.py:152 msgid "" "Credentials to be used by hosts belonging to this inventory when accessing " "Red Hat Insights API." @@ -2451,38 +2475,38 @@ msgstr "" "Informations d'identification à utiliser par les hôtes appartenant à cet " "inventaire lors de l'accès à l'API Red Hat Insights ." -#: awx/main/models/inventory.py:160 +#: awx/main/models/inventory.py:161 msgid "Flag indicating the inventory is being deleted." msgstr "Marqueur indiquant que cet inventaire est en cours de suppression." -#: awx/main/models/inventory.py:373 +#: awx/main/models/inventory.py:374 msgid "Assignment not allowed for Smart Inventory" msgstr "Attribution non autorisée pour un inventaire Smart" -#: awx/main/models/inventory.py:375 awx/main/models/projects.py:148 +#: awx/main/models/inventory.py:376 awx/main/models/projects.py:148 msgid "Credential kind must be 'insights'." msgstr "Le genre d'informations d'identification doit être 'insights'." -#: awx/main/models/inventory.py:439 +#: awx/main/models/inventory.py:443 msgid "Is this host online and available for running jobs?" msgstr "Cet hôte est-il en ligne et disponible pour exécuter des tâches ?" -#: awx/main/models/inventory.py:445 +#: awx/main/models/inventory.py:449 msgid "" "The value used by the remote inventory source to uniquely identify the host" msgstr "" "Valeur utilisée par la source d'inventaire distante pour identifier l'hôte " "de façon unique" -#: awx/main/models/inventory.py:450 +#: awx/main/models/inventory.py:454 msgid "Host variables in JSON or YAML format." msgstr "Variables d'hôte au format JSON ou YAML." -#: awx/main/models/inventory.py:472 +#: awx/main/models/inventory.py:476 msgid "Flag indicating whether the last job failed for this host." msgstr "Marqueur indiquant si la dernière tâche a échoué pour cet hôte." -#: awx/main/models/inventory.py:477 +#: awx/main/models/inventory.py:481 msgid "" "Flag indicating whether this host was created/updated from any external " "inventory sources." @@ -2490,55 +2514,55 @@ msgstr "" "Marqueur indiquant si cet hôte a été créé/mis à jour à partir de sources " "d'inventaire externes." -#: awx/main/models/inventory.py:483 +#: awx/main/models/inventory.py:487 msgid "Inventory source(s) that created or modified this host." msgstr "Sources d'inventaire qui ont créé ou modifié cet hôte." -#: awx/main/models/inventory.py:488 +#: awx/main/models/inventory.py:492 msgid "Arbitrary JSON structure of most recent ansible_facts, per-host." msgstr "" "Structure JSON arbitraire des faits ansible les plus récents, par hôte." -#: awx/main/models/inventory.py:494 +#: awx/main/models/inventory.py:498 msgid "The date and time ansible_facts was last modified." msgstr "Date et heure de la dernière modification apportée à ansible_facts." -#: awx/main/models/inventory.py:501 +#: awx/main/models/inventory.py:505 msgid "Red Hat Insights host unique identifier." msgstr "Identifiant unique de l'hôte de Red Hat Insights." -#: awx/main/models/inventory.py:629 +#: awx/main/models/inventory.py:633 msgid "Group variables in JSON or YAML format." msgstr "Variables de groupe au format JSON ou YAML." -#: awx/main/models/inventory.py:635 +#: awx/main/models/inventory.py:639 msgid "Hosts associated directly with this group." msgstr "Hôtes associés directement à ce groupe." -#: awx/main/models/inventory.py:640 +#: awx/main/models/inventory.py:644 msgid "Total number of hosts directly or indirectly in this group." msgstr "" "Nombre total d'hôtes associés directement ou indirectement à ce groupe." -#: awx/main/models/inventory.py:645 +#: awx/main/models/inventory.py:649 msgid "Flag indicating whether this group has any hosts with active failures." msgstr "" "Marqueur indiquant si ce groupe possède ou non des hôtes avec des échecs non" " résolus." -#: awx/main/models/inventory.py:650 +#: awx/main/models/inventory.py:654 msgid "Number of hosts in this group with active failures." msgstr "Nombre d'hôtes dans ce groupe avec des échecs non résolus." -#: awx/main/models/inventory.py:655 +#: awx/main/models/inventory.py:659 msgid "Total number of child groups contained within this group." msgstr "Nombre total de groupes enfants compris dans ce groupe." -#: awx/main/models/inventory.py:660 +#: awx/main/models/inventory.py:664 msgid "Number of child groups within this group that have active failures." msgstr "Nombre de groupes enfants dans ce groupe avec des échecs non résolus." -#: awx/main/models/inventory.py:665 +#: awx/main/models/inventory.py:669 msgid "" "Flag indicating whether this group was created/updated from any external " "inventory sources." @@ -2546,64 +2570,64 @@ msgstr "" "Marqueur indiquant si ce groupe a été créé/mis à jour à partir de sources " "d'inventaire externes." -#: awx/main/models/inventory.py:671 +#: awx/main/models/inventory.py:675 msgid "Inventory source(s) that created or modified this group." msgstr "Sources d'inventaire qui ont créé ou modifié ce groupe." -#: awx/main/models/inventory.py:861 awx/main/models/projects.py:42 -#: awx/main/models/unified_jobs.py:427 +#: awx/main/models/inventory.py:865 awx/main/models/projects.py:42 +#: awx/main/models/unified_jobs.py:428 msgid "Manual" msgstr "Manuel" -#: awx/main/models/inventory.py:862 +#: awx/main/models/inventory.py:866 msgid "File, Directory or Script" msgstr "Fichier, répertoire ou script" -#: awx/main/models/inventory.py:863 +#: awx/main/models/inventory.py:867 msgid "Sourced from a Project" msgstr "Provenance d'un projet" -#: awx/main/models/inventory.py:864 +#: awx/main/models/inventory.py:868 msgid "Amazon EC2" msgstr "Amazon EC2" -#: awx/main/models/inventory.py:865 +#: awx/main/models/inventory.py:869 msgid "Google Compute Engine" msgstr "Google Compute Engine" -#: awx/main/models/inventory.py:866 +#: awx/main/models/inventory.py:870 msgid "Microsoft Azure Classic (deprecated)" msgstr "Microsoft Azure Classic (obsolète)" -#: awx/main/models/inventory.py:867 +#: awx/main/models/inventory.py:871 msgid "Microsoft Azure Resource Manager" msgstr "Microsoft Azure Resource Manager" -#: awx/main/models/inventory.py:868 +#: awx/main/models/inventory.py:872 msgid "VMware vCenter" msgstr "VMware vCenter" -#: awx/main/models/inventory.py:869 +#: awx/main/models/inventory.py:873 msgid "Red Hat Satellite 6" msgstr "Red Hat Satellite 6" -#: awx/main/models/inventory.py:870 +#: awx/main/models/inventory.py:874 msgid "Red Hat CloudForms" msgstr "Red Hat CloudForms" -#: awx/main/models/inventory.py:871 +#: awx/main/models/inventory.py:875 msgid "OpenStack" msgstr "OpenStack" -#: awx/main/models/inventory.py:872 +#: awx/main/models/inventory.py:876 msgid "Custom Script" msgstr "Script personnalisé" -#: awx/main/models/inventory.py:989 +#: awx/main/models/inventory.py:993 msgid "Inventory source variables in YAML or JSON format." msgstr "Variables de source d'inventaire au format JSON ou YAML." -#: awx/main/models/inventory.py:1008 +#: awx/main/models/inventory.py:1012 msgid "" "Comma-separated list of filter expressions (EC2 only). Hosts are imported " "when ANY of the filters match." @@ -2611,67 +2635,75 @@ msgstr "" "Liste d'expressions de filtre séparées par des virgules (EC2 uniquement). " "Les hôtes sont importés lorsque l'UN des filtres correspondent." -#: awx/main/models/inventory.py:1014 +#: awx/main/models/inventory.py:1018 msgid "Limit groups automatically created from inventory source (EC2 only)." msgstr "" "Limiter automatiquement les groupes créés à partir de la source d'inventaire" " (EC2 uniquement)." -#: awx/main/models/inventory.py:1018 +#: awx/main/models/inventory.py:1022 msgid "Overwrite local groups and hosts from remote inventory source." msgstr "" "Écraser les groupes locaux et les hôtes de la source d'inventaire distante." -#: awx/main/models/inventory.py:1022 +#: awx/main/models/inventory.py:1026 msgid "Overwrite local variables from remote inventory source." msgstr "Écraser les variables locales de la source d'inventaire distante." -#: awx/main/models/inventory.py:1027 awx/main/models/jobs.py:159 +#: awx/main/models/inventory.py:1031 awx/main/models/jobs.py:159 #: awx/main/models/projects.py:117 msgid "The amount of time (in seconds) to run before the task is canceled." msgstr "Délai écoulé (en secondes) avant que la tâche ne soit annulée." -#: awx/main/models/inventory.py:1060 -msgid "Availability Zone" -msgstr "Zone de disponibilité" - -#: awx/main/models/inventory.py:1061 +#: awx/main/models/inventory.py:1064 msgid "Image ID" msgstr "ID d'image" -#: awx/main/models/inventory.py:1062 +#: awx/main/models/inventory.py:1065 +msgid "Availability Zone" +msgstr "Zone de disponibilité" + +#: awx/main/models/inventory.py:1066 +msgid "Account" +msgstr "Compte" + +#: awx/main/models/inventory.py:1067 msgid "Instance ID" msgstr "ID d'instance" -#: awx/main/models/inventory.py:1063 +#: awx/main/models/inventory.py:1068 +msgid "Instance State" +msgstr "État de l'instance" + +#: awx/main/models/inventory.py:1069 msgid "Instance Type" msgstr "Type d'instance" -#: awx/main/models/inventory.py:1064 +#: awx/main/models/inventory.py:1070 msgid "Key Name" msgstr "Nom de la clé" -#: awx/main/models/inventory.py:1065 +#: awx/main/models/inventory.py:1071 msgid "Region" msgstr "Région" -#: awx/main/models/inventory.py:1066 +#: awx/main/models/inventory.py:1072 msgid "Security Group" msgstr "Groupe de sécurité" -#: awx/main/models/inventory.py:1067 +#: awx/main/models/inventory.py:1073 msgid "Tags" msgstr "Balises" -#: awx/main/models/inventory.py:1068 -msgid "VPC ID" -msgstr "ID VPC" - -#: awx/main/models/inventory.py:1069 +#: awx/main/models/inventory.py:1074 msgid "Tag None" msgstr "Ne rien baliser" -#: awx/main/models/inventory.py:1132 +#: awx/main/models/inventory.py:1075 +msgid "VPC ID" +msgstr "ID VPC" + +#: awx/main/models/inventory.py:1138 #, python-format msgid "" "Cloud-based inventory sources (such as %s) require credentials for the " @@ -2680,31 +2712,31 @@ msgstr "" "Les sources d'inventaire cloud (telles que %s) requièrent des informations " "d'identification pour le service cloud correspondant." -#: awx/main/models/inventory.py:1139 +#: awx/main/models/inventory.py:1145 msgid "Credential is required for a cloud source." msgstr "" "Les informations d'identification sont requises pour une source cloud." -#: awx/main/models/inventory.py:1161 +#: awx/main/models/inventory.py:1167 #, python-format msgid "Invalid %(source)s region: %(region)s" msgstr "Région %(source)s non valide : %(region)s" -#: awx/main/models/inventory.py:1185 +#: awx/main/models/inventory.py:1191 #, python-format msgid "Invalid filter expression: %(filter)s" msgstr "Expression de filtre non valide : %(filter)s" -#: awx/main/models/inventory.py:1206 +#: awx/main/models/inventory.py:1212 #, python-format msgid "Invalid group by choice: %(choice)s" msgstr "Choix de regroupement non valide : %(choice)s" -#: awx/main/models/inventory.py:1241 +#: awx/main/models/inventory.py:1247 msgid "Project containing inventory file used as source." msgstr "Projet contenant le fichier d'inventaire utilisé comme source." -#: awx/main/models/inventory.py:1389 +#: awx/main/models/inventory.py:1395 #, python-format msgid "" "Unable to configure this item for cloud sync. It is already managed by %s." @@ -2712,18 +2744,45 @@ msgstr "" "Impossible de configurer cet élément pour la synchronisation dans le cloud. " "Il est déjà géré par %s." -#: awx/main/models/inventory.py:1414 +#: awx/main/models/inventory.py:1405 +msgid "" +"More than one SCM-based inventory source with update on project update per-" +"inventory not allowed." +msgstr "" +"On n'autorise pas plus d'une source d'inventaire basé SCM avec mise à jour " +"pré-inventaire ou mise à jour projet." + +#: awx/main/models/inventory.py:1412 +msgid "" +"Cannot update SCM-based inventory source on launch if set to update on " +"project update. Instead, configure the corresponding source project to " +"update on launch." +msgstr "" +"Impossible de mettre à jour une source d'inventaire SCM lors du lancement si" +" elle est définie pour se mettre à jour lors de l'actualisation du projet. À" +" la place, configurez le projet source correspondant pour qu'il se mette à " +"jour au moment du lancement." + +#: awx/main/models/inventory.py:1418 +msgid "SCM type sources must set `overwrite_vars` to `true`." +msgstr "Les sources de type SCM doivent définir `overwrite_vars` sur`true`." + +#: awx/main/models/inventory.py:1423 +msgid "Cannot set source_path if not SCM type." +msgstr "Impossible de définir chemin_source si pas du type SCM." + +#: awx/main/models/inventory.py:1448 msgid "" "Inventory files from this Project Update were used for the inventory update." msgstr "" "Les fichiers d'inventaire de cette mise à jour de projet ont été utilisés " "pour la mise à jour de l'inventaire." -#: awx/main/models/inventory.py:1528 +#: awx/main/models/inventory.py:1561 msgid "Inventory script contents" msgstr "Contenus des scripts d'inventaire" -#: awx/main/models/inventory.py:1533 +#: awx/main/models/inventory.py:1566 msgid "Organization owning this inventory script" msgstr "Organisation propriétaire de ce script d'inventaire." @@ -2765,19 +2824,19 @@ msgstr "" "Le modèle de tâche doit fournir des informations d'identification ou " "permettre d'en demander." -#: awx/main/models/jobs.py:421 +#: awx/main/models/jobs.py:422 msgid "Cannot override job_type to or from a scan job." msgstr "Impossible de remplacer job_type vers ou depuis une tâche de scan." -#: awx/main/models/jobs.py:487 awx/main/models/projects.py:263 +#: awx/main/models/jobs.py:488 awx/main/models/projects.py:263 msgid "SCM Revision" msgstr "Révision SCM" -#: awx/main/models/jobs.py:488 +#: awx/main/models/jobs.py:489 msgid "The SCM Revision from the Project used for this job, if available" msgstr "Révision SCM du projet utilisé pour cette tâche, le cas échéant" -#: awx/main/models/jobs.py:496 +#: awx/main/models/jobs.py:497 msgid "" "The SCM Refresh task used to make sure the playbooks were available for the " "job run" @@ -2785,105 +2844,105 @@ msgstr "" "Activité d'actualisation du SCM qui permet de s'assurer que les playbooks " "étaient disponibles pour l'exécution de la tâche" -#: awx/main/models/jobs.py:799 +#: awx/main/models/jobs.py:802 msgid "job host summaries" msgstr "récapitulatifs des hôtes pour la tâche" -#: awx/main/models/jobs.py:902 +#: awx/main/models/jobs.py:906 msgid "Host Failure" msgstr "Échec de l'hôte" -#: awx/main/models/jobs.py:905 awx/main/models/jobs.py:919 +#: awx/main/models/jobs.py:909 awx/main/models/jobs.py:923 msgid "No Hosts Remaining" msgstr "Aucun hôte restant" -#: awx/main/models/jobs.py:906 +#: awx/main/models/jobs.py:910 msgid "Host Polling" msgstr "Interrogation de l'hôte" -#: awx/main/models/jobs.py:907 +#: awx/main/models/jobs.py:911 msgid "Host Async OK" msgstr "Désynchronisation des hôtes OK" -#: awx/main/models/jobs.py:908 +#: awx/main/models/jobs.py:912 msgid "Host Async Failure" msgstr "Échec de désynchronisation des hôtes" -#: awx/main/models/jobs.py:909 +#: awx/main/models/jobs.py:913 msgid "Item OK" msgstr "Élément OK" -#: awx/main/models/jobs.py:910 +#: awx/main/models/jobs.py:914 msgid "Item Failed" msgstr "Échec de l'élément" -#: awx/main/models/jobs.py:911 +#: awx/main/models/jobs.py:915 msgid "Item Skipped" msgstr "Élément ignoré" -#: awx/main/models/jobs.py:912 +#: awx/main/models/jobs.py:916 msgid "Host Retry" msgstr "Nouvel essai de l'hôte" -#: awx/main/models/jobs.py:914 +#: awx/main/models/jobs.py:918 msgid "File Difference" msgstr "Écart entre les fichiers" -#: awx/main/models/jobs.py:915 +#: awx/main/models/jobs.py:919 msgid "Playbook Started" msgstr "Playbook démarré" -#: awx/main/models/jobs.py:916 +#: awx/main/models/jobs.py:920 msgid "Running Handlers" msgstr "Descripteurs d'exécution" -#: awx/main/models/jobs.py:917 +#: awx/main/models/jobs.py:921 msgid "Including File" msgstr "Ajout de fichier" -#: awx/main/models/jobs.py:918 +#: awx/main/models/jobs.py:922 msgid "No Hosts Matched" msgstr "Aucun hôte correspondant" -#: awx/main/models/jobs.py:920 +#: awx/main/models/jobs.py:924 msgid "Task Started" msgstr "Tâche démarrée" -#: awx/main/models/jobs.py:922 +#: awx/main/models/jobs.py:926 msgid "Variables Prompted" msgstr "Variables demandées" -#: awx/main/models/jobs.py:923 +#: awx/main/models/jobs.py:927 msgid "Gathering Facts" msgstr "Collecte des faits" -#: awx/main/models/jobs.py:924 +#: awx/main/models/jobs.py:928 msgid "internal: on Import for Host" msgstr "interne : à l'importation pour l'hôte" -#: awx/main/models/jobs.py:925 +#: awx/main/models/jobs.py:929 msgid "internal: on Not Import for Host" msgstr "interne : à la non-importation pour l'hôte" -#: awx/main/models/jobs.py:926 +#: awx/main/models/jobs.py:930 msgid "Play Started" msgstr "Scène démarrée" -#: awx/main/models/jobs.py:927 +#: awx/main/models/jobs.py:931 msgid "Playbook Complete" msgstr "Playbook terminé" -#: awx/main/models/jobs.py:1337 +#: awx/main/models/jobs.py:1363 msgid "Remove jobs older than a certain number of days" msgstr "Supprimer les tâches plus anciennes qu'un certain nombre de jours" -#: awx/main/models/jobs.py:1338 +#: awx/main/models/jobs.py:1364 msgid "Remove activity stream entries older than a certain number of days" msgstr "" "Supprimer les entrées du flux d'activité plus anciennes qu'un certain nombre" " de jours" -#: awx/main/models/jobs.py:1339 +#: awx/main/models/jobs.py:1365 msgid "Purge and/or reduce the granularity of system tracking data" msgstr "Purger et/ou réduire la granularité des données de suivi du système" @@ -2891,15 +2950,15 @@ msgstr "Purger et/ou réduire la granularité des données de suivi du système" msgid "Organization this label belongs to." msgstr "Organisation à laquelle appartient ce libellé." -#: awx/main/models/notifications.py:138 awx/main/models/unified_jobs.py:58 +#: awx/main/models/notifications.py:138 awx/main/models/unified_jobs.py:59 msgid "Pending" msgstr "En attente" -#: awx/main/models/notifications.py:139 awx/main/models/unified_jobs.py:61 +#: awx/main/models/notifications.py:139 awx/main/models/unified_jobs.py:62 msgid "Successful" msgstr "Réussi" -#: awx/main/models/notifications.py:140 awx/main/models/unified_jobs.py:62 +#: awx/main/models/notifications.py:140 awx/main/models/unified_jobs.py:63 msgid "Failed" msgstr "Échec" @@ -3176,86 +3235,86 @@ msgstr "JSON attendu" msgid "days must be a positive integer." msgstr "jours doit être un entier positif." -#: awx/main/models/unified_jobs.py:57 +#: awx/main/models/unified_jobs.py:58 msgid "New" msgstr "Nouveau" -#: awx/main/models/unified_jobs.py:59 +#: awx/main/models/unified_jobs.py:60 msgid "Waiting" msgstr "En attente" -#: awx/main/models/unified_jobs.py:60 +#: awx/main/models/unified_jobs.py:61 msgid "Running" msgstr "En cours d'exécution" -#: awx/main/models/unified_jobs.py:64 +#: awx/main/models/unified_jobs.py:65 msgid "Canceled" msgstr "Annulé" -#: awx/main/models/unified_jobs.py:68 +#: awx/main/models/unified_jobs.py:69 msgid "Never Updated" msgstr "Jamais mis à jour" -#: awx/main/models/unified_jobs.py:72 awx/ui/templates/ui/index.html:67 +#: awx/main/models/unified_jobs.py:73 awx/ui/templates/ui/index.html:67 #: awx/ui/templates/ui/index.html.py:86 msgid "OK" msgstr "OK" -#: awx/main/models/unified_jobs.py:73 +#: awx/main/models/unified_jobs.py:74 msgid "Missing" msgstr "Manquant" -#: awx/main/models/unified_jobs.py:77 +#: awx/main/models/unified_jobs.py:78 msgid "No External Source" msgstr "Aucune source externe" -#: awx/main/models/unified_jobs.py:84 +#: awx/main/models/unified_jobs.py:85 msgid "Updating" msgstr "Mise à jour en cours" -#: awx/main/models/unified_jobs.py:428 +#: awx/main/models/unified_jobs.py:429 msgid "Relaunch" msgstr "Relancer" -#: awx/main/models/unified_jobs.py:429 +#: awx/main/models/unified_jobs.py:430 msgid "Callback" msgstr "Rappeler" -#: awx/main/models/unified_jobs.py:430 +#: awx/main/models/unified_jobs.py:431 msgid "Scheduled" msgstr "Planifié" -#: awx/main/models/unified_jobs.py:431 +#: awx/main/models/unified_jobs.py:432 msgid "Dependency" msgstr "Dépendance" -#: awx/main/models/unified_jobs.py:432 +#: awx/main/models/unified_jobs.py:433 msgid "Workflow" msgstr "Workflow" -#: awx/main/models/unified_jobs.py:433 +#: awx/main/models/unified_jobs.py:434 msgid "Sync" msgstr "Sync" -#: awx/main/models/unified_jobs.py:480 +#: awx/main/models/unified_jobs.py:481 msgid "The node the job executed on." msgstr "Nœud sur lequel la tâche s'est exécutée." -#: awx/main/models/unified_jobs.py:506 +#: awx/main/models/unified_jobs.py:507 msgid "The date and time the job was queued for starting." msgstr "" "Date et heure auxquelles la tâche a été mise en file d'attente pour le " "démarrage." -#: awx/main/models/unified_jobs.py:512 +#: awx/main/models/unified_jobs.py:513 msgid "The date and time the job finished execution." msgstr "Date et heure de fin d'exécution de la tâche." -#: awx/main/models/unified_jobs.py:518 +#: awx/main/models/unified_jobs.py:519 msgid "Elapsed time in seconds that the job ran." msgstr "Délai écoulé (en secondes) pendant lequel la tâche s'est exécutée." -#: awx/main/models/unified_jobs.py:540 +#: awx/main/models/unified_jobs.py:541 msgid "" "A status field to indicate the state of the job if it wasn't able to run and" " capture stdout" @@ -3263,11 +3322,12 @@ msgstr "" "Champ d'état indiquant l'état de la tâche si elle n'a pas pu s'exécuter et " "capturer stdout" -#: awx/main/models/unified_jobs.py:579 +#: awx/main/models/unified_jobs.py:580 msgid "The Rampart/Instance group the job was run under" msgstr "Groupe d'instance/Rampart sous lequel la tâche a été exécutée." #: awx/main/notifications/base.py:17 +#: awx/main/notifications/email_backend.py:28 msgid "" "{} #{} had status {}, view details at {}\n" "\n" @@ -3275,14 +3335,6 @@ msgstr "" "{} #{} était à l'état {}, voir les détails sur {}\n" "\n" -#: awx/main/notifications/email_backend.py:28 -msgid "" -"{} #{} had status {} on Ansible Tower, view details at {}\n" -"\n" -msgstr "" -"{} #{} était à l'état {} sur Ansible Tower, voir les détails sur {}\n" -"\n" - #: awx/main/notifications/hipchat_backend.py:47 msgid "Error sending messages: {}" msgstr "Erreur lors de l'envoi de messages : {}" @@ -3314,7 +3366,7 @@ msgstr "Exception lors de la connexion à Twilio : {}" msgid "Error sending notification webhook: {}" msgstr "Erreur lors de l'envoi d'un webhook de notification : {}" -#: awx/main/scheduler/__init__.py:153 +#: awx/main/scheduler/__init__.py:184 msgid "" "Job spawned from workflow could not start because it was not in the right " "state or required manual credentials" @@ -3323,7 +3375,7 @@ msgstr "" "dans l'état qui convient ou nécessitant des informations d'identification " "manuelles adéquates." -#: awx/main/scheduler/__init__.py:157 +#: awx/main/scheduler/__init__.py:188 msgid "" "Job spawned from workflow could not start because it was missing a related " "resource such as project or inventory" @@ -3331,19 +3383,19 @@ msgstr "" "Tâche, lancée à partir du workflow, ne pouvant démarrer, pour cause de " "ressource manquante, tel un projet ou inventaire" -#: awx/main/tasks.py:175 +#: awx/main/tasks.py:184 msgid "Ansible Tower host usage over 90%" msgstr "Utilisation d'hôtes Ansible Tower supérieure à 90 %" -#: awx/main/tasks.py:180 +#: awx/main/tasks.py:189 msgid "Ansible Tower license will expire soon" msgstr "La licence Ansible Tower expirera bientôt" -#: awx/main/tasks.py:308 +#: awx/main/tasks.py:318 msgid "status_str must be either succeeded or failed" msgstr "status_str doit être une réussite ou un échec" -#: awx/main/tasks.py:1498 +#: awx/main/tasks.py:1531 msgid "Dependent inventory update {} was canceled." msgstr "La mise à jour d'inventaire dépendante {} a été annulée." @@ -3504,287 +3556,287 @@ msgstr "Erreur serveur" msgid "A server error has occurred." msgstr "Une erreur serveur s'est produite." -#: awx/settings/defaults.py:663 +#: awx/settings/defaults.py:664 msgid "US East (Northern Virginia)" msgstr "Est des États-Unis (Virginie du Nord)" -#: awx/settings/defaults.py:664 +#: awx/settings/defaults.py:665 msgid "US East (Ohio)" msgstr "Est des États-Unis (Ohio)" -#: awx/settings/defaults.py:665 +#: awx/settings/defaults.py:666 msgid "US West (Oregon)" msgstr "Ouest des États-Unis (Oregon)" -#: awx/settings/defaults.py:666 +#: awx/settings/defaults.py:667 msgid "US West (Northern California)" msgstr "Ouest des États-Unis (Nord de la Californie)" -#: awx/settings/defaults.py:667 +#: awx/settings/defaults.py:668 msgid "Canada (Central)" msgstr "Canada (Central)" -#: awx/settings/defaults.py:668 +#: awx/settings/defaults.py:669 msgid "EU (Frankfurt)" msgstr "UE (Francfort)" -#: awx/settings/defaults.py:669 +#: awx/settings/defaults.py:670 msgid "EU (Ireland)" msgstr "UE (Irlande)" -#: awx/settings/defaults.py:670 +#: awx/settings/defaults.py:671 msgid "EU (London)" msgstr "UE (Londres)" -#: awx/settings/defaults.py:671 +#: awx/settings/defaults.py:672 msgid "Asia Pacific (Singapore)" msgstr "Asie-Pacifique (Singapour)" -#: awx/settings/defaults.py:672 +#: awx/settings/defaults.py:673 msgid "Asia Pacific (Sydney)" msgstr "Asie-Pacifique (Sydney)" -#: awx/settings/defaults.py:673 +#: awx/settings/defaults.py:674 msgid "Asia Pacific (Tokyo)" msgstr "Asie-Pacifique (Tokyo)" -#: awx/settings/defaults.py:674 +#: awx/settings/defaults.py:675 msgid "Asia Pacific (Seoul)" msgstr "Asie-Pacifique (Séoul)" -#: awx/settings/defaults.py:675 +#: awx/settings/defaults.py:676 msgid "Asia Pacific (Mumbai)" msgstr "Asie-Pacifique (Mumbai)" -#: awx/settings/defaults.py:676 +#: awx/settings/defaults.py:677 msgid "South America (Sao Paulo)" msgstr "Amérique du Sud (Sao Paulo)" -#: awx/settings/defaults.py:677 +#: awx/settings/defaults.py:678 msgid "US West (GovCloud)" msgstr "Ouest des États-Unis (GovCloud)" -#: awx/settings/defaults.py:678 +#: awx/settings/defaults.py:679 msgid "China (Beijing)" msgstr "Chine (Pékin)" -#: awx/settings/defaults.py:727 +#: awx/settings/defaults.py:728 msgid "US East 1 (B)" msgstr "Est des États-Unis 1 (B)" -#: awx/settings/defaults.py:728 +#: awx/settings/defaults.py:729 msgid "US East 1 (C)" msgstr "Est des États-Unis 1 (C)" -#: awx/settings/defaults.py:729 +#: awx/settings/defaults.py:730 msgid "US East 1 (D)" msgstr "Est des États-Unis 1 (D)" -#: awx/settings/defaults.py:730 +#: awx/settings/defaults.py:731 msgid "US East 4 (A)" msgstr "Est des États-Unis 4 (A)" -#: awx/settings/defaults.py:731 +#: awx/settings/defaults.py:732 msgid "US East 4 (B)" msgstr "Est des États-Unis 4 (B)" -#: awx/settings/defaults.py:732 +#: awx/settings/defaults.py:733 msgid "US East 4 (C)" msgstr "Est des États-Unis 4 (C)" -#: awx/settings/defaults.py:733 +#: awx/settings/defaults.py:734 msgid "US Central (A)" msgstr "Centre des États-Unis (A)" -#: awx/settings/defaults.py:734 +#: awx/settings/defaults.py:735 msgid "US Central (B)" msgstr "Centre des États-Unis (B)" -#: awx/settings/defaults.py:735 +#: awx/settings/defaults.py:736 msgid "US Central (C)" msgstr "Centre des États-Unis (C)" -#: awx/settings/defaults.py:736 +#: awx/settings/defaults.py:737 msgid "US Central (F)" msgstr "Centre des États-Unis (F)" -#: awx/settings/defaults.py:737 +#: awx/settings/defaults.py:738 msgid "US West (A)" msgstr "Ouest des États-Unis (A)" -#: awx/settings/defaults.py:738 +#: awx/settings/defaults.py:739 msgid "US West (B)" msgstr "Ouest des États-Unis (B)" -#: awx/settings/defaults.py:739 +#: awx/settings/defaults.py:740 msgid "US West (C)" msgstr "Ouest des États-Unis (C)" -#: awx/settings/defaults.py:740 +#: awx/settings/defaults.py:741 msgid "Europe West 1 (B)" msgstr "Europe de l'Ouest 1 (B)" -#: awx/settings/defaults.py:741 +#: awx/settings/defaults.py:742 msgid "Europe West 1 (C)" msgstr "Europe de l'Ouest 1 (C)" -#: awx/settings/defaults.py:742 +#: awx/settings/defaults.py:743 msgid "Europe West 1 (D)" msgstr "Europe de l'Ouest 1 (D)" -#: awx/settings/defaults.py:743 +#: awx/settings/defaults.py:744 msgid "Europe West 2 (A)" msgstr "Europe de l'Ouest 2 (A)" -#: awx/settings/defaults.py:744 +#: awx/settings/defaults.py:745 msgid "Europe West 2 (B)" msgstr "Europe de l'Ouest 2 (B)" -#: awx/settings/defaults.py:745 +#: awx/settings/defaults.py:746 msgid "Europe West 2 (C)" msgstr "Europe de l'Ouest 2 (C)" -#: awx/settings/defaults.py:746 +#: awx/settings/defaults.py:747 msgid "Asia East (A)" msgstr "Asie de l'Est (A)" -#: awx/settings/defaults.py:747 +#: awx/settings/defaults.py:748 msgid "Asia East (B)" msgstr "Asie de l'Est (B)" -#: awx/settings/defaults.py:748 +#: awx/settings/defaults.py:749 msgid "Asia East (C)" msgstr "Asie de l'Est (C)" -#: awx/settings/defaults.py:749 +#: awx/settings/defaults.py:750 msgid "Asia Southeast (A)" msgstr "Asie du Sud-Est (A)" -#: awx/settings/defaults.py:750 +#: awx/settings/defaults.py:751 msgid "Asia Southeast (B)" msgstr "Asie du Sud-Est (B)" -#: awx/settings/defaults.py:751 +#: awx/settings/defaults.py:752 msgid "Asia Northeast (A)" msgstr "Asie du Nord-Est (A)" -#: awx/settings/defaults.py:752 +#: awx/settings/defaults.py:753 msgid "Asia Northeast (B)" msgstr "Asie du Nord-Est (B)" -#: awx/settings/defaults.py:753 +#: awx/settings/defaults.py:754 msgid "Asia Northeast (C)" msgstr "Asie du Nord-Est (C)" -#: awx/settings/defaults.py:754 +#: awx/settings/defaults.py:755 msgid "Australia Southeast (A)" msgstr "Sud-est de l'Australie (A)" -#: awx/settings/defaults.py:755 +#: awx/settings/defaults.py:756 msgid "Australia Southeast (B)" msgstr "Sud-est de l'Australie (B)" -#: awx/settings/defaults.py:756 +#: awx/settings/defaults.py:757 msgid "Australia Southeast (C)" msgstr "Sud-est de l'Australie (C)" -#: awx/settings/defaults.py:780 +#: awx/settings/defaults.py:781 msgid "US East" msgstr "Est des États-Unis" -#: awx/settings/defaults.py:781 +#: awx/settings/defaults.py:782 msgid "US East 2" msgstr "Est des États-Unis 2" -#: awx/settings/defaults.py:782 +#: awx/settings/defaults.py:783 msgid "US Central" msgstr "Centre des États-Unis" -#: awx/settings/defaults.py:783 +#: awx/settings/defaults.py:784 msgid "US North Central" msgstr "Centre-Nord des États-Unis" -#: awx/settings/defaults.py:784 +#: awx/settings/defaults.py:785 msgid "US South Central" msgstr "Centre-Sud des États-Unis" -#: awx/settings/defaults.py:785 +#: awx/settings/defaults.py:786 msgid "US West Central" msgstr "Centre-Ouest des États-Unis" -#: awx/settings/defaults.py:786 +#: awx/settings/defaults.py:787 msgid "US West" msgstr "Ouest des États-Unis" -#: awx/settings/defaults.py:787 +#: awx/settings/defaults.py:788 msgid "US West 2" msgstr "Ouest des États-Unis 2" -#: awx/settings/defaults.py:788 +#: awx/settings/defaults.py:789 msgid "Canada East" msgstr "Est du Canada" -#: awx/settings/defaults.py:789 +#: awx/settings/defaults.py:790 msgid "Canada Central" msgstr "Centre du Canada" -#: awx/settings/defaults.py:790 +#: awx/settings/defaults.py:791 msgid "Brazil South" msgstr "Sud du Brésil" -#: awx/settings/defaults.py:791 +#: awx/settings/defaults.py:792 msgid "Europe North" msgstr "Europe du Nord" -#: awx/settings/defaults.py:792 +#: awx/settings/defaults.py:793 msgid "Europe West" msgstr "Europe de l'Ouest" -#: awx/settings/defaults.py:793 +#: awx/settings/defaults.py:794 msgid "UK West" msgstr "Ouest du Royaume-Uni" -#: awx/settings/defaults.py:794 +#: awx/settings/defaults.py:795 msgid "UK South" msgstr "Sud du Royaume-Uni" -#: awx/settings/defaults.py:795 +#: awx/settings/defaults.py:796 msgid "Asia East" msgstr "Asie de l'Est" -#: awx/settings/defaults.py:796 +#: awx/settings/defaults.py:797 msgid "Asia Southeast" msgstr "Asie du Sud-Est" -#: awx/settings/defaults.py:797 +#: awx/settings/defaults.py:798 msgid "Australia East" msgstr "Est de l'Australie" -#: awx/settings/defaults.py:798 +#: awx/settings/defaults.py:799 msgid "Australia Southeast" msgstr "Sud-Est de l'Australie" -#: awx/settings/defaults.py:799 +#: awx/settings/defaults.py:800 msgid "India West" msgstr "Ouest de l'Inde" -#: awx/settings/defaults.py:800 +#: awx/settings/defaults.py:801 msgid "India South" msgstr "Sud de l'Inde" -#: awx/settings/defaults.py:801 +#: awx/settings/defaults.py:802 msgid "Japan East" msgstr "Est du Japon" -#: awx/settings/defaults.py:802 +#: awx/settings/defaults.py:803 msgid "Japan West" msgstr "Ouest du Japon" -#: awx/settings/defaults.py:803 +#: awx/settings/defaults.py:804 msgid "Korea Central" msgstr "Centre de la Corée" -#: awx/settings/defaults.py:804 +#: awx/settings/defaults.py:805 msgid "Korea South" msgstr "Sud de la Corée" @@ -3795,13 +3847,13 @@ msgstr "Single Sign-On" #: awx/sso/conf.py:30 msgid "" "Mapping to organization admins/users from social auth accounts. This setting\n" -"controls which users are placed into which Tower organizations based on\n" -"their username and email address. Configuration details are available in\n" -"Tower documentation." +"controls which users are placed into which Tower organizations based on their\n" +"username and email address. Configuration details are available in the Ansible\n" +"Tower documentation.'" msgstr "" "Mappage avec des administrateurs/utilisateurs d'organisation appartenant à des comptes d'authentification sociale. Ce paramètre\n" "contrôle les utilisateurs placés dans les organisations Tower en fonction de\n" -"leur nom d'utilisateur et adresse électronique. Les informations de configuration sont disponibles dans la documentation Tower." +"leur nom d'utilisateur et adresse électronique. Les informations de configuration sont disponibles dans la documentation Ansible." #: awx/sso/conf.py:55 msgid "" @@ -3864,11 +3916,11 @@ msgstr "" " peuvent être définis en les séparant par des espaces ou des virgules. " "L'authentification LDAP est désactivée si ce paramètre est vide." -#: awx/sso/conf.py:142 awx/sso/conf.py:160 awx/sso/conf.py:172 -#: awx/sso/conf.py:184 awx/sso/conf.py:200 awx/sso/conf.py:220 -#: awx/sso/conf.py:242 awx/sso/conf.py:258 awx/sso/conf.py:277 -#: awx/sso/conf.py:294 awx/sso/conf.py:311 awx/sso/conf.py:327 -#: awx/sso/conf.py:344 awx/sso/conf.py:361 awx/sso/conf.py:387 +#: awx/sso/conf.py:142 awx/sso/conf.py:158 awx/sso/conf.py:170 +#: awx/sso/conf.py:182 awx/sso/conf.py:198 awx/sso/conf.py:218 +#: awx/sso/conf.py:240 awx/sso/conf.py:255 awx/sso/conf.py:273 +#: awx/sso/conf.py:290 awx/sso/conf.py:307 awx/sso/conf.py:323 +#: awx/sso/conf.py:337 awx/sso/conf.py:354 awx/sso/conf.py:380 msgid "LDAP" msgstr "LDAP" @@ -3878,39 +3930,37 @@ msgstr "ND de la liaison LDAP" #: awx/sso/conf.py:155 msgid "" -"DN (Distinguished Name) of user to bind for all search queries. Normally in " -"the format \"CN=Some User,OU=Users,DC=example,DC=com\" but may also be " -"specified as \"DOMAIN\\username\" for Active Directory. This is the system " -"user account we will use to login to query LDAP for other user information." +"DN (Distinguished Name) of user to bind for all search queries. This is the " +"system user account we will use to login to query LDAP for other user " +"information. Refer to the Ansible Tower documentation for example syntax." msgstr "" "ND (nom distinctif) de l'utilisateur à lier pour toutes les requêtes de " -"recherche. Normalement, au format \"CN = Certains utilisateurs, OU = " -"Utilisateurs, DC = exemple, DC = com\" mais peut aussi être entré au format " -"\"DOMAINE\\nom d'utilisateur\" pour Active Directory. Il s'agit du compte " -"utilisateur système que nous utiliserons pour nous connecter afin " -"d'interroger LDAP et obtenir d'autres informations utilisateur." +"recherche. Il s'agit du compte utilisateur système que nous utiliserons pour" +" nous connecter afin d'interroger LDAP et obtenir d'autres informations " +"utilisateur. Voir la documentation Ansible Tower pour obtenir des exemples " +"de syntaxe." -#: awx/sso/conf.py:170 +#: awx/sso/conf.py:168 msgid "LDAP Bind Password" msgstr "Mot de passe de la liaison LDAP" -#: awx/sso/conf.py:171 +#: awx/sso/conf.py:169 msgid "Password used to bind LDAP user account." msgstr "Mot de passe utilisé pour lier le compte utilisateur LDAP." -#: awx/sso/conf.py:182 +#: awx/sso/conf.py:180 msgid "LDAP Start TLS" msgstr "LDAP - Lancer TLS" -#: awx/sso/conf.py:183 +#: awx/sso/conf.py:181 msgid "Whether to enable TLS when the LDAP connection is not using SSL." msgstr "Pour activer ou non TLS lorsque la connexion LDAP n'utilise pas SSL." -#: awx/sso/conf.py:193 +#: awx/sso/conf.py:191 msgid "LDAP Connection Options" msgstr "Options de connexion à LDAP" -#: awx/sso/conf.py:194 +#: awx/sso/conf.py:192 msgid "" "Additional options to set for the LDAP connection. LDAP referrals are " "disabled by default (to prevent certain LDAP queries from hanging with AD). " @@ -3925,16 +3975,16 @@ msgstr "" "ldap.org/doc/html/ldap.html#options afin de connaître les options possibles " "et les valeurs que vous pouvez définir." -#: awx/sso/conf.py:213 +#: awx/sso/conf.py:211 msgid "LDAP User Search" msgstr "Recherche d'utilisateurs LDAP" -#: awx/sso/conf.py:214 +#: awx/sso/conf.py:212 msgid "" "LDAP search query to find users. Any user that matches the given pattern " -"will be able to login to Tower. The user should also be mapped into an " -"Tower organization (as defined in the AUTH_LDAP_ORGANIZATION_MAP setting). " -"If multiple search queries need to be supported use of \"LDAPUnion\" is " +"will be able to login to Tower. The user should also be mapped into a Tower" +" organization (as defined in the AUTH_LDAP_ORGANIZATION_MAP setting). If " +"multiple search queries need to be supported use of \"LDAPUnion\" is " "possible. See Tower documentation for details." msgstr "" "Requête de recherche LDAP servant à retrouver des utilisateurs. Tout " @@ -3944,16 +3994,16 @@ msgstr "" " de recherche doivent être prises en charge, l'utilisation de \"LDAPUnion\" " "est possible. Se reporter à la documentation Tower pour plus d'informations." -#: awx/sso/conf.py:236 +#: awx/sso/conf.py:234 msgid "LDAP User DN Template" msgstr "Modèle de ND pour les utilisateurs LDAP" -#: awx/sso/conf.py:237 +#: awx/sso/conf.py:235 msgid "" "Alternative to user search, if user DNs are all of the same format. This " -"approach will be more efficient for user lookups than searching if it is " -"usable in your organizational environment. If this setting has a value it " -"will be used instead of AUTH_LDAP_USER_SEARCH." +"approach is more efficient for user lookups than searching if it is usable " +"in your organizational environment. If this setting has a value it will be " +"used instead of AUTH_LDAP_USER_SEARCH." msgstr "" "Autre méthode de recherche d'utilisateurs, si les ND d'utilisateur se " "présentent tous au même format. Cette approche est plus efficace qu'une " @@ -3961,45 +4011,44 @@ msgstr "" "organisationnel. Si ce paramètre est défini, sa valeur sera utilisée à la " "place de AUTH_LDAP_USER_SEARCH." -#: awx/sso/conf.py:252 +#: awx/sso/conf.py:250 msgid "LDAP User Attribute Map" msgstr "Mappe des attributs d'utilisateurs LDAP" -#: awx/sso/conf.py:253 +#: awx/sso/conf.py:251 msgid "" -"Mapping of LDAP user schema to Tower API user attributes (key is user " -"attribute name, value is LDAP attribute name). The default setting is valid" -" for ActiveDirectory but users with other LDAP configurations may need to " -"change the values (not the keys) of the dictionary/hash-table." +"Mapping of LDAP user schema to Tower API user attributes. The default " +"setting is valid for ActiveDirectory but users with other LDAP " +"configurations may need to change the values. Refer to the Ansible Tower " +"documentation for additonal details." msgstr "" "Mappage du schéma utilisateur LDAP avec les attributs utilisateur d'API " -"Tower (la clé est le nom de l'attribut utilisateur, la valeur est le nom de " -"l'attribut LDAP). Le paramètre par défaut est valide pour ActiveDirectory, " -"mais les utilisateurs ayant d'autres configurations LDAP peuvent être amenés" -" à modifier les valeurs (et non les clés) du dictionnaire/de la table de " -"hachage." +"Tower. Le paramètre par défaut est valide pour ActiveDirectory, mais les " +"utilisateurs ayant d'autres configurations LDAP peuvent être amenés à " +"modifier les valeurs. Voir la documentation Ansible Tower pour obtenir des " +"détails supplémentaires." -#: awx/sso/conf.py:272 +#: awx/sso/conf.py:269 msgid "LDAP Group Search" msgstr "Recherche de groupes LDAP" -#: awx/sso/conf.py:273 +#: awx/sso/conf.py:270 msgid "" "Users are mapped to organizations based on their membership in LDAP groups. " -"This setting defines the LDAP search query to find groups. Note that this, " -"unlike the user search above, does not support LDAPSearchUnion." +"This setting defines the LDAP search query to find groups. Unlike the user " +"search, group search does not support LDAPSearchUnion." msgstr "" "Les utilisateurs de Tower sont mappés à des organisations en fonction de " "leur appartenance à des groupes LDAP. Ce paramètre définit la requête de " "recherche LDAP servant à rechercher des groupes. Notez que cette méthode, " -"contrairement à la recherche d'utilisateurs LDAP, ne prend pas en charge " -"LDAPSearchUnion." +"contrairement à la recherche d'utilisateurs LDAP, la recherche des groupes " +"ne prend pas en charge LDAPSearchUnion." -#: awx/sso/conf.py:290 +#: awx/sso/conf.py:286 msgid "LDAP Group Type" msgstr "Type de groupe LDAP" -#: awx/sso/conf.py:291 +#: awx/sso/conf.py:287 msgid "" "The group type may need to be changed based on the type of the LDAP server." " Values are listed at: http://pythonhosted.org/django-auth-ldap/groups.html" @@ -4009,11 +4058,11 @@ msgstr "" "serveur LDAP. Les valeurs sont répertoriées à l'adresse suivante : " "http://pythonhosted.org/django-auth-ldap/groups.html#types-of-groups" -#: awx/sso/conf.py:306 +#: awx/sso/conf.py:302 msgid "LDAP Require Group" msgstr "Groupe LDAP obligatoire" -#: awx/sso/conf.py:307 +#: awx/sso/conf.py:303 msgid "" "Group DN required to login. If specified, user must be a member of this " "group to login via LDAP. If not set, everyone in LDAP that matches the user " @@ -4025,11 +4074,11 @@ msgstr "" "recherche d'utilisateurs pourra se connecter via Tower. Un seul groupe est " "pris en charge." -#: awx/sso/conf.py:323 +#: awx/sso/conf.py:319 msgid "LDAP Deny Group" msgstr "Groupe LDAP refusé" -#: awx/sso/conf.py:324 +#: awx/sso/conf.py:320 msgid "" "Group DN denied from login. If specified, user will not be allowed to login " "if a member of this group. Only one deny group is supported." @@ -4038,186 +4087,172 @@ msgstr "" " n'est pas autorisé à se connecter s'il est membre de ce groupe. Un seul " "groupe refusé est pris en charge." -#: awx/sso/conf.py:337 +#: awx/sso/conf.py:333 msgid "LDAP User Flags By Group" msgstr "Marqueurs d'utilisateur LDAP par groupe" -#: awx/sso/conf.py:338 +#: awx/sso/conf.py:334 msgid "" -"User profile flags updated from group membership (key is user attribute " -"name, value is group DN). These are boolean fields that are matched based " -"on whether the user is a member of the given group. So far only " -"is_superuser and is_system_auditor are settable via this method. This flag " -"is set both true and false at login time based on current LDAP settings." +"Retrieve users from a given group. At this time, superuser and system " +"auditors are the only groups supported. Refer to the Ansible Tower " +"documentation for more detail." msgstr "" -"Marqueurs de profil utilisateur mis à jour selon l'appartenance au groupe " -"(la clé est le nom de l'attribut utilisateur, la valeur est le ND du " -"groupe). Il s'agit de champs booléens qui sont associés selon que " -"l'utilisateur est ou non membre du groupe donné. Jusqu'à présent, seul " -"is_superuser and is_system_auditor peut être défini avec cette méthode. Ce " -"marqueur est défini à la fois sur True et False au moment de la connexion, " -"en fonction des paramètres LDAP actifs." +"Extraire les utilisateurs d'un groupe donné. Actuellement, le " +"superutilisateur et les auditeurs de systèmes sont les seuls groupes pris en" +" charge. Voir la documentation Ansible Tower pour obtenir plus " +"d'informations." -#: awx/sso/conf.py:356 +#: awx/sso/conf.py:349 msgid "LDAP Organization Map" msgstr "Mappe d'organisations LDAP" -#: awx/sso/conf.py:357 +#: awx/sso/conf.py:350 msgid "" "Mapping between organization admins/users and LDAP groups. This controls " -"what users are placed into what Tower organizations relative to their LDAP " -"group memberships. Configuration details are available in Tower " -"documentation." +"which users are placed into which Tower organizations relative to their LDAP" +" group memberships. Configuration details are available in the Ansible Tower" +" documentation." msgstr "" "Mappage entre les administrateurs/utilisateurs de l'organisation et les " "groupes LDAP. Ce paramètre détermine les utilisateurs qui sont placés dans " "les organisations Tower par rapport à leurs appartenances à un groupe LDAP." " Les informations de configuration sont disponibles dans la documentation " -"Tower." +"Ansible Tower." -#: awx/sso/conf.py:384 +#: awx/sso/conf.py:377 msgid "LDAP Team Map" msgstr "Mappe d'équipes LDAP" -#: awx/sso/conf.py:385 +#: awx/sso/conf.py:378 msgid "" -"Mapping between team members (users) and LDAP groups.Configuration details " -"are available in Tower documentation." +"Mapping between team members (users) and LDAP groups. Configuration details " +"are available in the Ansible Tower documentation." msgstr "" "Mappage entre des membres de l'équipe (utilisateurs) et des groupes LDAP. Les informations\n" -" de configuration sont disponibles dans la documentation Tower." +" de configuration sont disponibles dans la documentation Ansible Tower." -#: awx/sso/conf.py:413 +#: awx/sso/conf.py:406 msgid "RADIUS Server" msgstr "Serveur RADIUS" -#: awx/sso/conf.py:414 +#: awx/sso/conf.py:407 msgid "" -"Hostname/IP of RADIUS server. RADIUS authentication will be disabled if this" -" setting is empty." +"Hostname/IP of RADIUS server. RADIUS authentication is disabled if this " +"setting is empty." msgstr "" "Nom d'hôte/IP du serveur RADIUS. L'authentification RADIUS est désactivée si" " ce paramètre est vide." -#: awx/sso/conf.py:416 awx/sso/conf.py:430 awx/sso/conf.py:442 +#: awx/sso/conf.py:409 awx/sso/conf.py:423 awx/sso/conf.py:435 #: awx/sso/models.py:14 msgid "RADIUS" msgstr "RADIUS" -#: awx/sso/conf.py:428 +#: awx/sso/conf.py:421 msgid "RADIUS Port" msgstr "Port RADIUS" -#: awx/sso/conf.py:429 +#: awx/sso/conf.py:422 msgid "Port of RADIUS server." msgstr "Port du serveur RADIUS." -#: awx/sso/conf.py:440 +#: awx/sso/conf.py:433 msgid "RADIUS Secret" msgstr "Secret RADIUS" -#: awx/sso/conf.py:441 +#: awx/sso/conf.py:434 msgid "Shared secret for authenticating to RADIUS server." msgstr "Secret partagé pour l'authentification sur le serveur RADIUS." -#: awx/sso/conf.py:457 +#: awx/sso/conf.py:450 msgid "TACACS+ Server" msgstr "Serveur TACACS+" -#: awx/sso/conf.py:458 +#: awx/sso/conf.py:451 msgid "Hostname of TACACS+ server." msgstr "Nom d'hôte du serveur TACACS+" -#: awx/sso/conf.py:459 awx/sso/conf.py:472 awx/sso/conf.py:485 -#: awx/sso/conf.py:498 awx/sso/conf.py:510 awx/sso/models.py:15 +#: awx/sso/conf.py:452 awx/sso/conf.py:465 awx/sso/conf.py:478 +#: awx/sso/conf.py:491 awx/sso/conf.py:503 awx/sso/models.py:15 msgid "TACACS+" msgstr "TACACS+" -#: awx/sso/conf.py:470 +#: awx/sso/conf.py:463 msgid "TACACS+ Port" msgstr "Port TACACS+" -#: awx/sso/conf.py:471 +#: awx/sso/conf.py:464 msgid "Port number of TACACS+ server." msgstr "Numéro de port du serveur TACACS+" -#: awx/sso/conf.py:483 +#: awx/sso/conf.py:476 msgid "TACACS+ Secret" msgstr "Secret TACACS+" -#: awx/sso/conf.py:484 +#: awx/sso/conf.py:477 msgid "Shared secret for authenticating to TACACS+ server." msgstr "Secret partagé pour l'authentification sur le serveur TACACS+." -#: awx/sso/conf.py:496 +#: awx/sso/conf.py:489 msgid "TACACS+ Auth Session Timeout" msgstr "Expiration du délai d'attente d'autorisation de la session TACACS+." -#: awx/sso/conf.py:497 +#: awx/sso/conf.py:490 msgid "TACACS+ session timeout value in seconds, 0 disables timeout." msgstr "" "Valeur du délai d'attente de la session TACACS+ en secondes, 0 désactive le " "délai d'attente." -#: awx/sso/conf.py:508 +#: awx/sso/conf.py:501 msgid "TACACS+ Authentication Protocol" msgstr "Protocole d'autorisation TACACS+" -#: awx/sso/conf.py:509 +#: awx/sso/conf.py:502 msgid "Choose the authentication protocol used by TACACS+ client." msgstr "" "Choisissez le protocole d'authentification utilisé par le client TACACS+." -#: awx/sso/conf.py:524 +#: awx/sso/conf.py:517 msgid "Google OAuth2 Callback URL" msgstr "URL de rappel OAuth2 pour Google" -#: awx/sso/conf.py:525 +#: awx/sso/conf.py:518 awx/sso/conf.py:611 awx/sso/conf.py:676 msgid "" -"Create a project at https://console.developers.google.com/ to obtain an " -"OAuth2 key and secret for a web application. Ensure that the Google+ API is " -"enabled. Provide this URL as the callback URL for your application." +"Provide this URL as the callback URL for your application as part of your " +"registration process. Refer to the Ansible Tower documentation for more " +"detail." msgstr "" -"Créez un projet sur https://console.developers.google.com/ afin d'obtenir " -"une clé OAuth2 et un secret pour une application Web. Assurez-vous que l'API" -" Google+ est activée. Entrez cette URL comme URL de rappel de votre " -"application." +"Fournir cette URL comme URL d'appel pour votre application dans le cadre de " +"votre processus d'enregistrement. Voir la documentation Ansible Tower pour " +"obtenir plus d'informations." -#: awx/sso/conf.py:529 awx/sso/conf.py:540 awx/sso/conf.py:551 -#: awx/sso/conf.py:564 awx/sso/conf.py:578 awx/sso/conf.py:590 -#: awx/sso/conf.py:602 +#: awx/sso/conf.py:521 awx/sso/conf.py:533 awx/sso/conf.py:545 +#: awx/sso/conf.py:558 awx/sso/conf.py:572 awx/sso/conf.py:584 +#: awx/sso/conf.py:596 msgid "Google OAuth2" msgstr "OAuth2 pour Google" -#: awx/sso/conf.py:538 +#: awx/sso/conf.py:531 msgid "Google OAuth2 Key" msgstr "Clé OAuth2 pour Google" -#: awx/sso/conf.py:539 -msgid "" -"The OAuth2 key from your web application at " -"https://console.developers.google.com/." -msgstr "" -"Clé OAuth2 de votre application Web sur " -"https://console.developers.google.com/." +#: awx/sso/conf.py:532 +msgid "The OAuth2 key from your web application." +msgstr "Clé OAuth2 de votre application Web." -#: awx/sso/conf.py:549 +#: awx/sso/conf.py:543 msgid "Google OAuth2 Secret" msgstr "Secret OAuth2 pour Google" -#: awx/sso/conf.py:550 -msgid "" -"The OAuth2 secret from your web application at " -"https://console.developers.google.com/." -msgstr "" -"Secret OAuth2 de votre application Web sur " -"https://console.developers.google.com/." +#: awx/sso/conf.py:544 +msgid "The OAuth2 secret from your web application." +msgstr "Secret OAuth2 de votre application Web." -#: awx/sso/conf.py:561 +#: awx/sso/conf.py:555 msgid "Google OAuth2 Whitelisted Domains" msgstr "Domaines sur liste blanche OAuth2 pour Google" -#: awx/sso/conf.py:562 +#: awx/sso/conf.py:556 msgid "" "Update this setting to restrict the domains who are allowed to login using " "Google OAuth2." @@ -4225,82 +4260,116 @@ msgstr "" "Mettez à jour ce paramètre pour limiter les domaines qui sont autorisés à se" " connecter à l'aide de l'authentification OAuth2 avec un compte Google." -#: awx/sso/conf.py:573 +#: awx/sso/conf.py:567 msgid "Google OAuth2 Extra Arguments" msgstr "Arguments OAuth2 supplémentaires pour Google" -#: awx/sso/conf.py:574 +#: awx/sso/conf.py:568 msgid "" -"Extra arguments for Google OAuth2 login. When only allowing a single domain " -"to authenticate, set to `{\"hd\": \"yourdomain.com\"}` and Google will not " -"display any other accounts even if the user is logged in with multiple " -"Google accounts." +"Extra arguments for Google OAuth2 login. You can restrict it to only allow a" +" single domain to authenticate, even if the user is logged in with multple " +"Google accounts. Refer to the Ansible Tower documentation for more detail." msgstr "" -"Arguments supplémentaires pour l'authentification OAuth2 avec un compte " -"Google. Lorsque vous autorisez un seul domaine à s'authentifier, définissez " -"ce paramètre sur {{\"hd\": \"votredomaine.com\"}. Google n'affichera aucun " -"autre compte même si l'utilisateur est connecté avec plusieurs comptes " -"Google." +"Arguments supplémentaires pour l'authentification OAuth2. Vous pouvez " +"autoriser un seul domaine à s'authentifier, même si l'utilisateur est " +"connecté avec plusieurs comptes Google. Voir la documentation Ansible Tower " +"pour obtenir plus d'informations." -#: awx/sso/conf.py:588 +#: awx/sso/conf.py:582 msgid "Google OAuth2 Organization Map" msgstr "Mappe d'organisations OAuth2 pour Google" -#: awx/sso/conf.py:600 +#: awx/sso/conf.py:594 msgid "Google OAuth2 Team Map" msgstr "Mappe d'équipes OAuth2 pour Google" -#: awx/sso/conf.py:616 +#: awx/sso/conf.py:610 msgid "GitHub OAuth2 Callback URL" msgstr "URL de rappel OAuth2 pour GitHub" -#: awx/sso/conf.py:617 -msgid "" -"Create a developer application at https://github.com/settings/developers to " -"obtain an OAuth2 key (Client ID) and secret (Client Secret). Provide this " -"URL as the callback URL for your application." -msgstr "" -"Créez une application de développeur sur " -"https://github.com/settings/developers pour obtenir une clé OAuth2 (ID " -"client) et un secret (secret client). Entrez cette URL comme URL de rappel " -"de votre application." - -#: awx/sso/conf.py:621 awx/sso/conf.py:632 awx/sso/conf.py:642 -#: awx/sso/conf.py:654 awx/sso/conf.py:666 +#: awx/sso/conf.py:614 awx/sso/conf.py:626 awx/sso/conf.py:637 +#: awx/sso/conf.py:649 awx/sso/conf.py:661 msgid "GitHub OAuth2" msgstr "OAuth2 pour GitHub" -#: awx/sso/conf.py:630 +#: awx/sso/conf.py:624 msgid "GitHub OAuth2 Key" msgstr "Clé OAuth2 pour GitHub" -#: awx/sso/conf.py:631 +#: awx/sso/conf.py:625 msgid "The OAuth2 key (Client ID) from your GitHub developer application." msgstr "Clé OAuth2 (ID client) de votre application de développeur GitHub." -#: awx/sso/conf.py:640 +#: awx/sso/conf.py:635 msgid "GitHub OAuth2 Secret" msgstr "Secret OAuth2 pour GitHub" -#: awx/sso/conf.py:641 +#: awx/sso/conf.py:636 msgid "" "The OAuth2 secret (Client Secret) from your GitHub developer application." msgstr "" "Secret OAuth2 (secret client) de votre application de développeur GitHub." -#: awx/sso/conf.py:652 +#: awx/sso/conf.py:647 msgid "GitHub OAuth2 Organization Map" msgstr "Mappe d'organisations OAuth2 pour GitHub" -#: awx/sso/conf.py:664 +#: awx/sso/conf.py:659 msgid "GitHub OAuth2 Team Map" msgstr "Mappe d'équipes OAuth2 pour GitHub" -#: awx/sso/conf.py:680 +#: awx/sso/conf.py:675 msgid "GitHub Organization OAuth2 Callback URL" msgstr "URL de rappel OAuth2 pour les organisations GitHub" -#: awx/sso/conf.py:681 awx/sso/conf.py:756 +#: awx/sso/conf.py:679 awx/sso/conf.py:691 awx/sso/conf.py:702 +#: awx/sso/conf.py:715 awx/sso/conf.py:726 awx/sso/conf.py:738 +msgid "GitHub Organization OAuth2" +msgstr "OAuth2 pour les organisations GitHub" + +#: awx/sso/conf.py:689 +msgid "GitHub Organization OAuth2 Key" +msgstr "Clé OAuth2 pour les organisations GitHub" + +#: awx/sso/conf.py:690 awx/sso/conf.py:768 +msgid "The OAuth2 key (Client ID) from your GitHub organization application." +msgstr "Clé OAuth2 (ID client) de votre application d'organisation GitHub." + +#: awx/sso/conf.py:700 +msgid "GitHub Organization OAuth2 Secret" +msgstr "Secret OAuth2 pour les organisations GitHub" + +#: awx/sso/conf.py:701 awx/sso/conf.py:779 +msgid "" +"The OAuth2 secret (Client Secret) from your GitHub organization application." +msgstr "" +"Secret OAuth2 (secret client) de votre application d'organisation GitHub." + +#: awx/sso/conf.py:712 +msgid "GitHub Organization Name" +msgstr "Nom de l'organisation GitHub" + +#: awx/sso/conf.py:713 +msgid "" +"The name of your GitHub organization, as used in your organization's URL: " +"https://github.com//." +msgstr "" +"Nom de votre organisation GitHub, tel qu'utilisé dans l'URL de votre " +"organisation : https://github.com//." + +#: awx/sso/conf.py:724 +msgid "GitHub Organization OAuth2 Organization Map" +msgstr "Mappe d'organisations OAuth2 pour les organisations GitHub" + +#: awx/sso/conf.py:736 +msgid "GitHub Organization OAuth2 Team Map" +msgstr "Mappe d'équipes OAuth2 pour les organisations GitHub" + +#: awx/sso/conf.py:752 +msgid "GitHub Team OAuth2 Callback URL" +msgstr "URL de rappel OAuth2 pour les équipes GitHub" + +#: awx/sso/conf.py:753 msgid "" "Create an organization-owned application at " "https://github.com/organizations//settings/applications and obtain " @@ -4312,63 +4381,16 @@ msgstr "" " une clé OAuth2 (ID client) et un secret (secret client). Entrez cette URL " "comme URL de rappel de votre application." -#: awx/sso/conf.py:685 awx/sso/conf.py:696 awx/sso/conf.py:706 -#: awx/sso/conf.py:718 awx/sso/conf.py:729 awx/sso/conf.py:741 -msgid "GitHub Organization OAuth2" -msgstr "OAuth2 pour les organisations GitHub" - -#: awx/sso/conf.py:694 -msgid "GitHub Organization OAuth2 Key" -msgstr "Clé OAuth2 pour les organisations GitHub" - -#: awx/sso/conf.py:695 awx/sso/conf.py:770 -msgid "The OAuth2 key (Client ID) from your GitHub organization application." -msgstr "Clé OAuth2 (ID client) de votre application d'organisation GitHub." - -#: awx/sso/conf.py:704 -msgid "GitHub Organization OAuth2 Secret" -msgstr "Secret OAuth2 pour les organisations GitHub" - -#: awx/sso/conf.py:705 awx/sso/conf.py:780 -msgid "" -"The OAuth2 secret (Client Secret) from your GitHub organization application." -msgstr "" -"Secret OAuth2 (secret client) de votre application d'organisation GitHub." - -#: awx/sso/conf.py:715 -msgid "GitHub Organization Name" -msgstr "Nom de l'organisation GitHub" - -#: awx/sso/conf.py:716 -msgid "" -"The name of your GitHub organization, as used in your organization's URL: " -"https://github.com//." -msgstr "" -"Nom de votre organisation GitHub, tel qu'utilisé dans l'URL de votre " -"organisation : https://github.com//." - -#: awx/sso/conf.py:727 -msgid "GitHub Organization OAuth2 Organization Map" -msgstr "Mappe d'organisations OAuth2 pour les organisations GitHub" - -#: awx/sso/conf.py:739 -msgid "GitHub Organization OAuth2 Team Map" -msgstr "Mappe d'équipes OAuth2 pour les organisations GitHub" - -#: awx/sso/conf.py:755 -msgid "GitHub Team OAuth2 Callback URL" -msgstr "URL de rappel OAuth2 pour les équipes GitHub" - -#: awx/sso/conf.py:760 awx/sso/conf.py:771 awx/sso/conf.py:781 +#: awx/sso/conf.py:757 awx/sso/conf.py:769 awx/sso/conf.py:780 #: awx/sso/conf.py:793 awx/sso/conf.py:804 awx/sso/conf.py:816 msgid "GitHub Team OAuth2" msgstr "OAuth2 pour les équipes GitHub" -#: awx/sso/conf.py:769 +#: awx/sso/conf.py:767 msgid "GitHub Team OAuth2 Key" msgstr "Clé OAuth2 pour les équipes GitHub" -#: awx/sso/conf.py:779 +#: awx/sso/conf.py:778 msgid "GitHub Team OAuth2 Secret" msgstr "Secret OAuth2 pour les équipes GitHub" @@ -4398,18 +4420,16 @@ msgstr "URL de rappel OAuth2 pour Azure AD" #: awx/sso/conf.py:831 msgid "" -"Register an Azure AD application as described by https://msdn.microsoft.com" -"/en-us/library/azure/dn132599.aspx and obtain an OAuth2 key (Client ID) and " -"secret (Client Secret). Provide this URL as the callback URL for your " -"application." +"Provide this URL as the callback URL for your application as part of your " +"registration process. Refer to the Ansible Tower documentation for more " +"detail. " msgstr "" -"Enregistrez une application AD Azure selon la procédure décrite sur " -"https://msdn.microsoft.com/en-us/library/azure/dn132599.aspx et obtenez une " -"clé OAuth2 (ID client) et un secret (secret client). Entrez cette URL comme " -"URL de rappel de votre application." +"Fournir cette URL comme URL d'appel pour votre application dans le cadre de " +"votre processus d'enregistrement. Voir la documentation Ansible Tower pour " +"plus de détails." -#: awx/sso/conf.py:835 awx/sso/conf.py:846 awx/sso/conf.py:856 -#: awx/sso/conf.py:868 awx/sso/conf.py:880 +#: awx/sso/conf.py:834 awx/sso/conf.py:846 awx/sso/conf.py:857 +#: awx/sso/conf.py:869 awx/sso/conf.py:881 msgid "Azure AD OAuth2" msgstr "OAuth2 pour Azure AD" @@ -4421,27 +4441,27 @@ msgstr "Clé OAuth2 pour Azure AD" msgid "The OAuth2 key (Client ID) from your Azure AD application." msgstr "Clé OAuth2 (ID client) de votre application Azure AD." -#: awx/sso/conf.py:854 +#: awx/sso/conf.py:855 msgid "Azure AD OAuth2 Secret" msgstr "Secret OAuth2 pour Azure AD" -#: awx/sso/conf.py:855 +#: awx/sso/conf.py:856 msgid "The OAuth2 secret (Client Secret) from your Azure AD application." msgstr "Secret OAuth2 (secret client) de votre application Azure AD." -#: awx/sso/conf.py:866 +#: awx/sso/conf.py:867 msgid "Azure AD OAuth2 Organization Map" msgstr "Mappe d'organisations OAuth2 pour Azure AD" -#: awx/sso/conf.py:878 +#: awx/sso/conf.py:879 msgid "Azure AD OAuth2 Team Map" msgstr "Mappe d'équipes OAuth2 pour Azure AD" -#: awx/sso/conf.py:903 +#: awx/sso/conf.py:904 msgid "SAML Assertion Consumer Service (ACS) URL" msgstr "URL ACS (Assertion Consumer Service) SAML" -#: awx/sso/conf.py:904 +#: awx/sso/conf.py:905 msgid "" "Register Tower as a service provider (SP) with each identity provider (IdP) " "you have configured. Provide your SP Entity ID and this ACS URL for your " @@ -4451,18 +4471,18 @@ msgstr "" "fournisseur d'identité (IdP) configuré. Entrez votre ID d'entité SP et cette" " URL ACS pour votre application." -#: awx/sso/conf.py:907 awx/sso/conf.py:921 awx/sso/conf.py:935 -#: awx/sso/conf.py:950 awx/sso/conf.py:964 awx/sso/conf.py:982 -#: awx/sso/conf.py:1004 awx/sso/conf.py:1023 awx/sso/conf.py:1043 -#: awx/sso/conf.py:1077 awx/sso/conf.py:1090 awx/sso/models.py:16 +#: awx/sso/conf.py:908 awx/sso/conf.py:922 awx/sso/conf.py:936 +#: awx/sso/conf.py:951 awx/sso/conf.py:965 awx/sso/conf.py:978 +#: awx/sso/conf.py:999 awx/sso/conf.py:1017 awx/sso/conf.py:1036 +#: awx/sso/conf.py:1070 awx/sso/conf.py:1083 awx/sso/models.py:16 msgid "SAML" msgstr "SAML" -#: awx/sso/conf.py:918 +#: awx/sso/conf.py:919 msgid "SAML Service Provider Metadata URL" msgstr "URL de métadonnées du fournisseur de services SAML" -#: awx/sso/conf.py:919 +#: awx/sso/conf.py:920 msgid "" "If your identity provider (IdP) allows uploading an XML metadata file, you " "can download one from this URL." @@ -4470,11 +4490,11 @@ msgstr "" "Si votre fournisseur d'identité (IdP) permet de télécharger un fichier de " "métadonnées XML, vous pouvez le faire à partir de cette URL." -#: awx/sso/conf.py:931 +#: awx/sso/conf.py:932 msgid "SAML Service Provider Entity ID" msgstr "ID d'entité du fournisseur de services SAML" -#: awx/sso/conf.py:932 +#: awx/sso/conf.py:933 msgid "" "The application-defined unique identifier used as the audience of the SAML " "service provider (SP) configuration. This is usually the URL for Tower." @@ -4483,11 +4503,11 @@ msgstr "" "configuration du fournisseur de services (SP) SAML. Il s'agit généralement " "de l'URL de Tower." -#: awx/sso/conf.py:947 +#: awx/sso/conf.py:948 msgid "SAML Service Provider Public Certificate" msgstr "Certificat public du fournisseur de services SAML" -#: awx/sso/conf.py:948 +#: awx/sso/conf.py:949 msgid "" "Create a keypair for Tower to use as a service provider (SP) and include the" " certificate content here." @@ -4495,11 +4515,11 @@ msgstr "" "Créez une paire de clés pour que Tower puisse être utilisé comme fournisseur" " de services (SP) et entrez le contenu du certificat ici." -#: awx/sso/conf.py:961 +#: awx/sso/conf.py:962 msgid "SAML Service Provider Private Key" msgstr "Clé privée du fournisseur de services SAML" -#: awx/sso/conf.py:962 +#: awx/sso/conf.py:963 msgid "" "Create a keypair for Tower to use as a service provider (SP) and include the" " private key content here." @@ -4507,53 +4527,68 @@ msgstr "" "Créez une paire de clés pour que Tower puisse être utilisé comme fournisseur" " de services (SP) et entrez le contenu de la clé privée ici." -#: awx/sso/conf.py:980 +#: awx/sso/conf.py:975 msgid "SAML Service Provider Organization Info" msgstr "Infos organisationnelles du fournisseur de services SAML" -#: awx/sso/conf.py:981 -msgid "Configure this setting with information about your app." +#: awx/sso/conf.py:976 +msgid "" +"Provide the URL, display name, and the name of your app. Refer to the " +"Ansible Tower documentation for example syntax." msgstr "" -"Configurez ce paramètre en vous servant des informations de votre " -"application." +"Fournir cette URL, le nom d'affichage, le nom de votre app. Voir la " +"documentation Ansible Tower pour obtenir des exemples de syntaxe." -#: awx/sso/conf.py:1002 +#: awx/sso/conf.py:995 msgid "SAML Service Provider Technical Contact" msgstr "Contact technique du fournisseur de services SAML" -#: awx/sso/conf.py:1003 awx/sso/conf.py:1022 -msgid "Configure this setting with your contact information." -msgstr "Configurez ce paramètre en vous servant de vos coordonnées." +#: awx/sso/conf.py:996 +msgid "" +"Provide the name and email address of the technical contact for your service" +" provider. Refer to the Ansible Tower documentation for example syntax." +msgstr "" +"Fournir le nom et l'adresse email d'un contact Technique pour le fournisseur" +" de services. Voir la documentation Ansible Tower pour obtenir des exemples " +"de syntaxe." -#: awx/sso/conf.py:1021 +#: awx/sso/conf.py:1013 msgid "SAML Service Provider Support Contact" msgstr "Contact support du fournisseur de services SAML" -#: awx/sso/conf.py:1036 +#: awx/sso/conf.py:1014 +msgid "" +"Provide the name and email address of the support contact for your service " +"provider. Refer to the Ansible Tower documentation for example syntax." +msgstr "" +"Fournir le nom et l'adresse email d'un contact Support pour le fournisseur " +"de services. Voir la documentation Ansible Tower pour obtenir des exemples " +"de syntaxe." + +#: awx/sso/conf.py:1030 msgid "SAML Enabled Identity Providers" msgstr "Fournisseurs d'identité compatibles SAML" -#: awx/sso/conf.py:1037 +#: awx/sso/conf.py:1031 msgid "" "Configure the Entity ID, SSO URL and certificate for each identity provider " "(IdP) in use. Multiple SAML IdPs are supported. Some IdPs may provide user " -"data using attribute names that differ from the default OIDs " -"(https://github.com/omab/python-social-" -"auth/blob/master/social/backends/saml.py#L16). Attribute names may be " -"overridden for each IdP." +"data using attribute names that differ from the default OIDs. Attribute " +"names may be overridden for each IdP. Refer to the Ansible documentation for" +" additional details and syntax." msgstr "" "Configurez l'ID d'entité, l'URL SSO et le certificat pour chaque fournisseur" " d'identité (IdP) utilisé. Plusieurs IdP SAML sont pris en charge. Certains " "IdP peuvent fournir des données utilisateur à l'aide de noms d'attributs qui" -" diffèrent des OID par défaut (https://github.com/omab/python-social-" -"auth/blob/master/social/backends/saml.py#L16). Les noms d'attributs peuvent " -"être remplacés pour chaque IdP." +" diffèrent des OID par défaut. Les noms d'attributs peuvent être remplacés " +"pour chaque IdP. Voir la documentation Ansible Tower pour obtenir des " +"exemples de syntaxe." -#: awx/sso/conf.py:1075 +#: awx/sso/conf.py:1068 msgid "SAML Organization Map" msgstr "Mappe d'organisations SAML" -#: awx/sso/conf.py:1088 +#: awx/sso/conf.py:1081 msgid "SAML Team Map" msgstr "Mappe d'équipes SAML" @@ -4692,10 +4727,6 @@ msgstr "Le secret TACACS+ ne permet pas l'utilisation de caractères non-ascii" msgid "AWX" msgstr "AWX" -#: awx/templates/rest_framework/api.html:4 -msgid "AWX REST API" -msgstr "API REST AWX" - #: awx/templates/rest_framework/api.html:39 msgid "Ansible Tower API Guide" msgstr "Guide pour les API d'Ansible Tower" @@ -4758,7 +4789,7 @@ msgstr "Appliquez une requête PUT sur la ressource %(name)s" msgid "Make a PATCH request on the %(name)s resource" msgstr "Appliquez une requête PATCH sur la ressource %(name)s" -#: awx/ui/apps.py:9 awx/ui/conf.py:22 awx/ui/conf.py:38 awx/ui/conf.py:53 +#: awx/ui/apps.py:9 awx/ui/conf.py:22 awx/ui/conf.py:36 awx/ui/conf.py:51 msgid "UI" msgstr "IU" @@ -4791,23 +4822,19 @@ msgid "" "If needed, you can add specific information (such as a legal notice or a " "disclaimer) to a text box in the login modal using this setting. Any content" " added must be in plain text, as custom HTML or other markup languages are " -"not supported. If multiple paragraphs of text are needed, new lines " -"(paragraphs) must be escaped as `\\n` within the block of text." +"not supported." msgstr "" "Si nécessaire, vous pouvez ajouter des informations particulières (telles " "qu'une mention légale ou une clause de non-responsabilité) à une zone de " "texte dans la fenêtre modale de connexion, grâce à ce paramètre. Tout " "contenu ajouté doit l'être en texte brut, dans la mesure où le langage HTML " -"personnalisé et les autres langages de balisage ne sont pas pris en charge. " -"Si plusieurs paragraphes de texte sont nécessaires, les nouvelles lignes " -"(paragraphes) doivent être échappées sous la forme `\\n` dans le bloc de " -"texte." +"personnalisé et les autres langages de balisage ne sont pas pris en charge." -#: awx/ui/conf.py:48 +#: awx/ui/conf.py:46 msgid "Custom Logo" msgstr "Logo personnalisé" -#: awx/ui/conf.py:49 +#: awx/ui/conf.py:47 msgid "" "To set up a custom logo, provide a file that you create. For the custom logo" " to look its best, use a .png file with a transparent background. GIF, PNG " diff --git a/awx/locale/ja/LC_MESSAGES/django.po b/awx/locale/ja/LC_MESSAGES/django.po index 2d12cb962f..1d3dfb67d7 100644 --- a/awx/locale/ja/LC_MESSAGES/django.po +++ b/awx/locale/ja/LC_MESSAGES/django.po @@ -4,8 +4,8 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-28 18:57+0000\n" -"PO-Revision-Date: 2017-08-08 10:55+0000\n" +"POT-Creation-Date: 2017-08-27 19:27+0000\n" +"PO-Revision-Date: 2017-08-29 04:04+0000\n" "Last-Translator: asasaki \n" "Language-Team: Japanese\n" "MIME-Version: 1.0\n" @@ -155,7 +155,7 @@ msgstr "Playbook 実行" msgid "Command" msgstr "コマンド" -#: awx/api/serializers.py:270 awx/main/models/unified_jobs.py:434 +#: awx/api/serializers.py:270 awx/main/models/unified_jobs.py:435 msgid "SCM Update" msgstr "SCM 更新" @@ -175,7 +175,7 @@ msgstr "ワークフロージョブ" msgid "Workflow Template" msgstr "ワークフローテンプレート" -#: awx/api/serializers.py:697 awx/api/serializers.py:755 awx/api/views.py:4330 +#: awx/api/serializers.py:697 awx/api/serializers.py:755 awx/api/views.py:4314 #, python-format msgid "" "Standard Output too large to display (%(text_size)d bytes), only download " @@ -219,245 +219,241 @@ msgid "" "comprehensive." msgstr "このプロジェクト内で利用可能な一連のインベントリーファイルおよびディレクトリー (包括的な一覧ではありません)。" -#: awx/api/serializers.py:1283 +#: awx/api/serializers.py:1282 #, python-format msgid "Invalid port specification: %s" msgstr "無効なポート指定: %s" -#: awx/api/serializers.py:1311 awx/api/serializers.py:3208 -#: awx/api/serializers.py:3293 awx/main/validators.py:198 +#: awx/api/serializers.py:1293 +msgid "Cannot create Host for Smart Inventory" +msgstr "スマートインベントリーのホストを作成できません" + +#: awx/api/serializers.py:1315 awx/api/serializers.py:3218 +#: awx/api/serializers.py:3303 awx/main/validators.py:198 msgid "Must be valid JSON or YAML." msgstr "有効な JSON または YAML である必要があります。" -#: awx/api/serializers.py:1407 +#: awx/api/serializers.py:1411 msgid "Invalid group name." msgstr "無効なグループ名。" -#: awx/api/serializers.py:1479 +#: awx/api/serializers.py:1416 +msgid "Cannot create Group for Smart Inventory" +msgstr "スマートインベントリーのグループを作成できません" + +#: awx/api/serializers.py:1488 msgid "" "Script must begin with a hashbang sequence: i.e.... #!/usr/bin/env python" msgstr "スクリプトは hashbang シーケンスで開始する必要があります (例: .... #!/usr/bin/env python)" -#: awx/api/serializers.py:1525 +#: awx/api/serializers.py:1534 msgid "`{}` is a prohibited environment variable" msgstr "`{}` は禁止されている環境変数です" -#: awx/api/serializers.py:1536 +#: awx/api/serializers.py:1545 msgid "If 'source' is 'custom', 'source_script' must be provided." msgstr "「source」が「custom」である場合、「source_script」を指定する必要があります。" -#: awx/api/serializers.py:1542 +#: awx/api/serializers.py:1551 msgid "Must provide an inventory." msgstr "インベントリーを指定する必要があります。" -#: awx/api/serializers.py:1546 +#: awx/api/serializers.py:1555 msgid "" "The 'source_script' does not belong to the same organization as the " "inventory." msgstr "「source_script」はインベントリーと同じ組織に属しません。" -#: awx/api/serializers.py:1548 +#: awx/api/serializers.py:1557 msgid "'source_script' doesn't exist." msgstr "「source_script」は存在しません。" -#: awx/api/serializers.py:1572 +#: awx/api/serializers.py:1581 msgid "Automatic group relationship, will be removed in 3.3" msgstr "自動的なグループ関係は 3.3 で削除されます" -#: awx/api/serializers.py:1649 +#: awx/api/serializers.py:1658 msgid "Cannot use manual project for SCM-based inventory." msgstr "SCM ベースのインベントリーの手動プロジェクトを使用できません。" -#: awx/api/serializers.py:1655 +#: awx/api/serializers.py:1664 msgid "" "Manual inventory sources are created automatically when a group is created " "in the v1 API." msgstr "手動のインベントリーソースは、グループが v1 API で作成される際に自動作成されます。" -#: awx/api/serializers.py:1660 +#: awx/api/serializers.py:1669 msgid "Setting not compatible with existing schedules." msgstr "設定は既存スケジュールとの互換性がありません。" -#: awx/api/serializers.py:1673 -msgid "Cannot set source_path if not SCM type." -msgstr "SCM タイプでない場合 source_path を設定できません。" +#: awx/api/serializers.py:1674 +msgid "Cannot create Inventory Source for Smart Inventory" +msgstr "スマートインベントリーのインベントリーソースを作成できません" -#: awx/api/serializers.py:1676 -msgid "" -"Cannot update SCM-based inventory source on launch if set to update on " -"project update. Instead, configure the corresponding source project to " -"update on launch." -msgstr "" -"プロジェクト更新時の更新に設定している場合、SCM " -"ベースのインベントリーソースを更新できません。その代わりに起動時に更新するように対応するソースプロジェクトを設定します。" +#: awx/api/serializers.py:1688 +#, python-format +msgid "Cannot set %s if not SCM type." +msgstr "SCM タイプでない場合 %s を設定できません。" -#: awx/api/serializers.py:1680 -msgid "Inventory controlled by project-following SCM." -msgstr "インベントリー別のプロジェクト更新時の更新が適用される複数の SCM ベースのインベントリーソースは許可されません。" - -#: awx/api/serializers.py:1683 -msgid "SCM type sources must set `overwrite_vars` to `true`." -msgstr "SCM タイプソースは「overwrite_vars」を「true」に設定する必要があります。" - -#: awx/api/serializers.py:1925 +#: awx/api/serializers.py:1929 msgid "Modifications not allowed for managed credential types" msgstr "管理されている認証情報タイプで変更は許可されません" -#: awx/api/serializers.py:1930 +#: awx/api/serializers.py:1934 msgid "" "Modifications to inputs are not allowed for credential types that are in use" msgstr "入力への変更は使用中の認証情報タイプで許可されません" -#: awx/api/serializers.py:1936 +#: awx/api/serializers.py:1940 #, python-format msgid "Must be 'cloud' or 'net', not %s" msgstr "「cloud」または「net」にする必要があります (%s ではない)" -#: awx/api/serializers.py:1942 +#: awx/api/serializers.py:1946 msgid "'ask_at_runtime' is not supported for custom credentials." msgstr "「ask_at_runtime」はカスタム認証情報ではサポートされません。" -#: awx/api/serializers.py:2115 +#: awx/api/serializers.py:2119 #, python-format msgid "\"%s\" is not a valid choice" msgstr "「%s」は有効な選択ではありません" -#: awx/api/serializers.py:2134 +#: awx/api/serializers.py:2138 #, python-format msgid "'%s' is not a valid field for %s" msgstr "「%s」は %s の有効なフィールドではありません" -#: awx/api/serializers.py:2146 +#: awx/api/serializers.py:2150 msgid "" "Write-only field used to add user to owner role. If provided, do not give " "either team or organization. Only valid for creation." msgstr "" "ユーザーを所有者ロールに追加するために使用される書き込み専用フィールドです。提供されている場合は、チームまたは組織のいずれも指定しないでください。作成時にのみ有効です。" -#: awx/api/serializers.py:2151 +#: awx/api/serializers.py:2155 msgid "" "Write-only field used to add team to owner role. If provided, do not give " "either user or organization. Only valid for creation." msgstr "" "チームを所有者ロールに追加するために使用される書き込み専用フィールドです。提供されている場合は、ユーザーまたは組織のいずれも指定しないでください。作成時にのみ有効です。" -#: awx/api/serializers.py:2156 +#: awx/api/serializers.py:2160 msgid "" "Inherit permissions from organization roles. If provided on creation, do not" " give either user or team." msgstr "組織ロールからパーミッションを継承します。作成時に提供される場合は、ユーザーまたはチームのいずれも指定しないでください。" -#: awx/api/serializers.py:2172 +#: awx/api/serializers.py:2176 msgid "Missing 'user', 'team', or 'organization'." msgstr "「user」、「team」、または「organization」がありません。" -#: awx/api/serializers.py:2212 +#: awx/api/serializers.py:2216 msgid "" "Credential organization must be set and match before assigning to a team" msgstr "認証情報の組織が設定され、一致している状態でチームに割り当てる必要があります。" -#: awx/api/serializers.py:2374 +#: awx/api/serializers.py:2378 msgid "You must provide a cloud credential." msgstr "クラウド認証情報を指定する必要があります。" -#: awx/api/serializers.py:2375 +#: awx/api/serializers.py:2379 msgid "You must provide a network credential." msgstr "ネットワーク認証情報を指定する必要があります。" -#: awx/api/serializers.py:2391 +#: awx/api/serializers.py:2395 msgid "This field is required." msgstr "このフィールドは必須です。" -#: awx/api/serializers.py:2393 awx/api/serializers.py:2395 +#: awx/api/serializers.py:2397 awx/api/serializers.py:2399 msgid "Playbook not found for project." msgstr "プロジェクトの Playbook が見つかりません。" -#: awx/api/serializers.py:2397 +#: awx/api/serializers.py:2401 msgid "Must select playbook for project." msgstr "プロジェクトの Playbook を選択してください。" -#: awx/api/serializers.py:2466 +#: awx/api/serializers.py:2476 msgid "Must either set a default value or ask to prompt on launch." msgstr "起動時にプロントを出すには、デフォルト値を設定するか、またはプロンプトを出すよう指定する必要があります。" -#: awx/api/serializers.py:2468 awx/main/models/jobs.py:325 +#: awx/api/serializers.py:2478 awx/main/models/jobs.py:325 msgid "Job types 'run' and 'check' must have assigned a project." msgstr "ジョブタイプ「run」および「check」によりプロジェクトが割り当てられている必要があります。" -#: awx/api/serializers.py:2539 +#: awx/api/serializers.py:2549 msgid "Invalid job template." msgstr "無効なジョブテンプレート。" -#: awx/api/serializers.py:2620 +#: awx/api/serializers.py:2630 msgid "Credential not found or deleted." msgstr "認証情報が見つからないか、または削除されました。" -#: awx/api/serializers.py:2622 +#: awx/api/serializers.py:2632 msgid "Job Template Project is missing or undefined." msgstr "ジョブテンプレートプロジェクトが見つからないか、または定義されていません。" -#: awx/api/serializers.py:2624 +#: awx/api/serializers.py:2634 msgid "Job Template Inventory is missing or undefined." msgstr "ジョブテンプレートインベントリーが見つからないか、または定義されていません。" -#: awx/api/serializers.py:2911 +#: awx/api/serializers.py:2921 #, python-format msgid "%(job_type)s is not a valid job type. The choices are %(choices)s." msgstr "%(job_type)s は有効なジョブタイプではありません。%(choices)s を選択できます。" -#: awx/api/serializers.py:2916 +#: awx/api/serializers.py:2926 msgid "Workflow job template is missing during creation." msgstr "ワークフロージョブテンプレートが作成時に見つかりません。" -#: awx/api/serializers.py:2921 +#: awx/api/serializers.py:2931 #, python-format msgid "Cannot nest a %s inside a WorkflowJobTemplate" msgstr "ワークフロージョブテンプレート内に %s をネストできません" -#: awx/api/serializers.py:3178 +#: awx/api/serializers.py:3188 #, python-format msgid "Job Template '%s' is missing or undefined." msgstr "ジョブテンプレート「%s」が見つからない、または定義されていません。" -#: awx/api/serializers.py:3181 +#: awx/api/serializers.py:3191 msgid "The inventory associated with this Job Template is being deleted." msgstr "このジョブテンプレートに関連付けられているインベントリーが削除されています。" -#: awx/api/serializers.py:3222 awx/api/views.py:2998 +#: awx/api/serializers.py:3232 awx/api/views.py:2991 #, python-format msgid "Cannot assign multiple %s credentials." msgstr "複数の %s 認証情報を割り当てることができません。" -#: awx/api/serializers.py:3224 awx/api/views.py:3001 +#: awx/api/serializers.py:3234 awx/api/views.py:2994 msgid "Extra credentials must be network or cloud." msgstr "追加の認証情報はネットワークまたはクラウドにする必要があります。" -#: awx/api/serializers.py:3361 +#: awx/api/serializers.py:3371 msgid "" "Missing required fields for Notification Configuration: notification_type" msgstr "通知設定の必須フィールドがありません: notification_type" -#: awx/api/serializers.py:3384 +#: awx/api/serializers.py:3394 msgid "No values specified for field '{}'" msgstr "フィールド '{}' に値が指定されていません" -#: awx/api/serializers.py:3389 +#: awx/api/serializers.py:3399 msgid "Missing required fields for Notification Configuration: {}." msgstr "通知設定の必須フィールドがありません: {}。" -#: awx/api/serializers.py:3392 +#: awx/api/serializers.py:3402 msgid "Configuration field '{}' incorrect type, expected {}." msgstr "設定フィールド '{}' のタイプが正しくありません。{} が予期されました。" -#: awx/api/serializers.py:3445 +#: awx/api/serializers.py:3455 msgid "Inventory Source must be a cloud resource." msgstr "インベントリーソースはクラウドリソースでなければなりません。" -#: awx/api/serializers.py:3447 +#: awx/api/serializers.py:3457 msgid "Manual Project cannot have a schedule set." msgstr "手動プロジェクトにはスケジュールを設定できません。" -#: awx/api/serializers.py:3450 +#: awx/api/serializers.py:3460 msgid "" "Inventory sources with `update_on_project_update` cannot be scheduled. " "Schedule its source project `{}` instead." @@ -465,74 +461,74 @@ msgstr "" "「update_on_project_update」が設定されたインベントリーソースはスケジュールできません。代わりのそのソースプロジェクト「{}」 " "をスケジュールします。" -#: awx/api/serializers.py:3469 +#: awx/api/serializers.py:3479 msgid "Projects and inventory updates cannot accept extra variables." msgstr "プロジェクトおよびインベントリーの更新は追加変数を受け入れません。" -#: awx/api/serializers.py:3491 +#: awx/api/serializers.py:3501 msgid "" "DTSTART required in rrule. Value should match: DTSTART:YYYYMMDDTHHMMSSZ" msgstr "DTSTART が rrule で必要です。値は、DSTART:YYYYMMDDTHHMMSSZ に一致する必要があります。" -#: awx/api/serializers.py:3493 +#: awx/api/serializers.py:3503 msgid "Multiple DTSTART is not supported." msgstr "複数の DTSTART はサポートされません。" -#: awx/api/serializers.py:3495 +#: awx/api/serializers.py:3505 msgid "RRULE require in rrule." msgstr "RRULE が rrule で必要です。" -#: awx/api/serializers.py:3497 +#: awx/api/serializers.py:3507 msgid "Multiple RRULE is not supported." msgstr "複数の RRULE はサポートされません。" -#: awx/api/serializers.py:3499 +#: awx/api/serializers.py:3509 msgid "INTERVAL required in rrule." msgstr "INTERVAL が rrule で必要です。" -#: awx/api/serializers.py:3501 +#: awx/api/serializers.py:3511 msgid "TZID is not supported." msgstr "TZID はサポートされません。" -#: awx/api/serializers.py:3503 +#: awx/api/serializers.py:3513 msgid "SECONDLY is not supported." msgstr "SECONDLY はサポートされません。" -#: awx/api/serializers.py:3505 +#: awx/api/serializers.py:3515 msgid "Multiple BYMONTHDAYs not supported." msgstr "複数の BYMONTHDAY はサポートされません。" -#: awx/api/serializers.py:3507 +#: awx/api/serializers.py:3517 msgid "Multiple BYMONTHs not supported." msgstr "複数の BYMONTH はサポートされません。" -#: awx/api/serializers.py:3509 +#: awx/api/serializers.py:3519 msgid "BYDAY with numeric prefix not supported." msgstr "数字の接頭辞のある BYDAY はサポートされません。" -#: awx/api/serializers.py:3511 +#: awx/api/serializers.py:3521 msgid "BYYEARDAY not supported." msgstr "BYYEARDAY はサポートされません。" -#: awx/api/serializers.py:3513 +#: awx/api/serializers.py:3523 msgid "BYWEEKNO not supported." msgstr "BYWEEKNO はサポートされません。" -#: awx/api/serializers.py:3517 +#: awx/api/serializers.py:3527 msgid "COUNT > 999 is unsupported." msgstr "COUNT > 999 はサポートされません。" -#: awx/api/serializers.py:3521 +#: awx/api/serializers.py:3531 msgid "rrule parsing failed validation." msgstr "rrule の構文解析で検証に失敗しました。" -#: awx/api/serializers.py:3621 +#: awx/api/serializers.py:3631 msgid "" "A summary of the new and changed values when an object is created, updated, " "or deleted" msgstr "オブジェクトの作成、更新または削除時の新規値および変更された値の概要" -#: awx/api/serializers.py:3623 +#: awx/api/serializers.py:3633 msgid "" "For create, update, and delete events this is the object type that was " "affected. For associate and disassociate events this is the object type " @@ -541,7 +537,7 @@ msgstr "" "作成、更新、および削除イベントの場合、これは影響を受けたオブジェクトタイプになります。関連付けおよび関連付け解除イベントの場合、これは object2 " "に関連付けられたか、またはその関連付けが解除されたオブジェクトタイプになります。" -#: awx/api/serializers.py:3626 +#: awx/api/serializers.py:3636 msgid "" "Unpopulated for create, update, and delete events. For associate and " "disassociate events this is the object type that object1 is being associated" @@ -550,242 +546,252 @@ msgstr "" "作成、更新、および削除イベントの場合は設定されません。関連付けおよび関連付け解除イベントの場合、これは object1 " "が関連付けられるオブジェクトタイプになります。" -#: awx/api/serializers.py:3629 +#: awx/api/serializers.py:3639 msgid "The action taken with respect to the given object(s)." msgstr "指定されたオブジェクトについて実行されたアクション。" -#: awx/api/serializers.py:3732 +#: awx/api/serializers.py:3749 msgid "Unable to login with provided credentials." msgstr "提供される認証情報でログインできません。" -#: awx/api/serializers.py:3734 +#: awx/api/serializers.py:3751 msgid "Must include \"username\" and \"password\"." msgstr "「username」および「password」を含める必要があります。" -#: awx/api/views.py:107 +#: awx/api/views.py:106 msgid "Your license does not allow use of the activity stream." msgstr "お使いのライセンスではアクティビティーストリームを使用できません。" -#: awx/api/views.py:117 +#: awx/api/views.py:116 msgid "Your license does not permit use of system tracking." msgstr "お使いのライセンスではシステムトラッキングを使用できません。" -#: awx/api/views.py:127 +#: awx/api/views.py:126 msgid "Your license does not allow use of workflows." msgstr "お使いのライセンスではワークフローを使用できません。" -#: awx/api/views.py:135 awx/templates/rest_framework/api.html:28 +#: awx/api/views.py:140 +msgid "Cannot delete job resource when associated workflow job is running." +msgstr "関連付けられたワークフロージョブが実行中の場合、ジョブリソースを削除できません。" + +#: awx/api/views.py:144 +msgid "Cannot delete running job resource." +msgstr "実行中のジョブリソースを削除できません。" + +#: awx/api/views.py:153 awx/templates/rest_framework/api.html:28 msgid "REST API" msgstr "REST API" -#: awx/api/views.py:144 -msgid "Ansible Tower REST API" -msgstr "Ansible Tower REST API" +#: awx/api/views.py:162 awx/templates/rest_framework/api.html:4 +msgid "AWX REST API" +msgstr "AWX REST API" -#: awx/api/views.py:206 +#: awx/api/views.py:224 msgid "Version 1" msgstr "バージョン 1" -#: awx/api/views.py:210 +#: awx/api/views.py:228 msgid "Version 2" msgstr "バージョン 2" -#: awx/api/views.py:221 +#: awx/api/views.py:239 msgid "Ping" msgstr "Ping" -#: awx/api/views.py:256 awx/conf/apps.py:12 +#: awx/api/views.py:270 awx/conf/apps.py:12 msgid "Configuration" msgstr "設定" -#: awx/api/views.py:309 +#: awx/api/views.py:323 msgid "Invalid license data" msgstr "無効なライセンスデータ" -#: awx/api/views.py:311 +#: awx/api/views.py:325 msgid "Missing 'eula_accepted' property" msgstr "'eula_accepted' プロパティーがありません" -#: awx/api/views.py:315 +#: awx/api/views.py:329 msgid "'eula_accepted' value is invalid" msgstr "'eula_accepted' 値は無効です。" -#: awx/api/views.py:318 +#: awx/api/views.py:332 msgid "'eula_accepted' must be True" msgstr "'eula_accepted' は True でなければなりません" -#: awx/api/views.py:325 +#: awx/api/views.py:339 msgid "Invalid JSON" msgstr "無効な JSON" -#: awx/api/views.py:333 +#: awx/api/views.py:347 msgid "Invalid License" msgstr "無効なライセンス" -#: awx/api/views.py:343 +#: awx/api/views.py:357 msgid "Invalid license" msgstr "無効なライセンス" -#: awx/api/views.py:351 +#: awx/api/views.py:365 #, python-format msgid "Failed to remove license (%s)" msgstr "ライセンスの削除に失敗しました (%s)" -#: awx/api/views.py:356 +#: awx/api/views.py:370 msgid "Dashboard" msgstr "ダッシュボード" -#: awx/api/views.py:455 +#: awx/api/views.py:469 msgid "Dashboard Jobs Graphs" msgstr "ダッシュボードのジョブグラフ" -#: awx/api/views.py:491 +#: awx/api/views.py:505 #, python-format msgid "Unknown period \"%s\"" msgstr "不明な期間 \"%s\"" -#: awx/api/views.py:505 +#: awx/api/views.py:519 msgid "Instances" msgstr "インスタンス" -#: awx/api/views.py:513 +#: awx/api/views.py:527 msgid "Instance Detail" msgstr "インスタンスの詳細" -#: awx/api/views.py:521 +#: awx/api/views.py:535 msgid "Instance Running Jobs" msgstr "ジョブを実行しているインスタンス" -#: awx/api/views.py:536 +#: awx/api/views.py:550 msgid "Instance's Instance Groups" msgstr "インスタンスのインスタンスグループ" -#: awx/api/views.py:546 +#: awx/api/views.py:560 msgid "Instance Groups" msgstr "インスタンスグループ" -#: awx/api/views.py:554 +#: awx/api/views.py:568 msgid "Instance Group Detail" msgstr "インスタンスグループの詳細" -#: awx/api/views.py:562 +#: awx/api/views.py:576 msgid "Instance Group Running Jobs" msgstr "ジョブを実行しているインスタンスグループ" -#: awx/api/views.py:572 +#: awx/api/views.py:586 msgid "Instance Group's Instances" msgstr "インスタンスグループのインスタンス" -#: awx/api/views.py:582 +#: awx/api/views.py:596 msgid "Schedules" msgstr "スケジュール" -#: awx/api/views.py:601 +#: awx/api/views.py:615 msgid "Schedule Jobs List" msgstr "スケジュールジョブの一覧" -#: awx/api/views.py:825 +#: awx/api/views.py:841 msgid "Your license only permits a single organization to exist." msgstr "お使いのライセンスでは、単一組織のみの存在が許可されます。" -#: awx/api/views.py:1061 awx/api/views.py:4624 +#: awx/api/views.py:1077 awx/api/views.py:4615 msgid "You cannot assign an Organization role as a child role for a Team." msgstr "組織ロールをチームの子ロールとして割り当てることができません。" -#: awx/api/views.py:1065 awx/api/views.py:4638 +#: awx/api/views.py:1081 awx/api/views.py:4629 msgid "You cannot grant system-level permissions to a team." msgstr "システムレベルのパーミッションをチームに付与できません。" -#: awx/api/views.py:1072 awx/api/views.py:4630 +#: awx/api/views.py:1088 awx/api/views.py:4621 msgid "" "You cannot grant credential access to a team when the Organization field " "isn't set, or belongs to a different organization" msgstr "組織フィールドが設定されていないか、または別の組織に属する場合に認証情報のアクセス権をチームに付与できません" -#: awx/api/views.py:1162 +#: awx/api/views.py:1178 msgid "Cannot delete project." msgstr "プロジェクトを削除できません。" -#: awx/api/views.py:1197 +#: awx/api/views.py:1213 msgid "Project Schedules" msgstr "プロジェクトのスケジュール" -#: awx/api/views.py:1209 +#: awx/api/views.py:1225 msgid "Project SCM Inventory Sources" msgstr "プロジェクト SCM のインベントリーソース" -#: awx/api/views.py:1312 awx/api/views.py:2685 awx/api/views.py:3767 -msgid "Cannot delete job resource when associated workflow job is running." -msgstr "関連付けられたワークフロージョブが実行中の場合、ジョブリソースを削除できません。" - -#: awx/api/views.py:1345 +#: awx/api/views.py:1352 msgid "Project Update SCM Inventory Updates" msgstr "プロジェクト更新 SCM のインベントリー更新" -#: awx/api/views.py:1400 +#: awx/api/views.py:1407 msgid "Me" msgstr "自分" -#: awx/api/views.py:1444 awx/api/views.py:4581 +#: awx/api/views.py:1451 awx/api/views.py:4572 msgid "You may not perform any action with your own admin_role." msgstr "独自の admin_role でアクションを実行することはできません。" -#: awx/api/views.py:1450 awx/api/views.py:4585 +#: awx/api/views.py:1457 awx/api/views.py:4576 msgid "You may not change the membership of a users admin_role" msgstr "ユーザーの admin_role のメンバーシップを変更することはできません" -#: awx/api/views.py:1455 awx/api/views.py:4590 +#: awx/api/views.py:1462 awx/api/views.py:4581 msgid "" "You cannot grant credential access to a user not in the credentials' " "organization" msgstr "認証情報の組織に属さないユーザーに認証情報のアクセス権を付与することはできません" -#: awx/api/views.py:1459 awx/api/views.py:4594 +#: awx/api/views.py:1466 awx/api/views.py:4585 msgid "You cannot grant private credential access to another user" msgstr "非公開の認証情報のアクセス権を別のユーザーに付与することはできません" -#: awx/api/views.py:1557 +#: awx/api/views.py:1564 #, python-format msgid "Cannot change %s." msgstr "%s を変更できません。" -#: awx/api/views.py:1563 +#: awx/api/views.py:1570 msgid "Cannot delete user." msgstr "ユーザーを削除できません。" -#: awx/api/views.py:1592 +#: awx/api/views.py:1599 msgid "Deletion not allowed for managed credential types" msgstr "管理されている認証情報タイプで削除は許可されません" -#: awx/api/views.py:1594 +#: awx/api/views.py:1601 msgid "Credential types that are in use cannot be deleted" msgstr "使用中の認証情報タイプを削除できません" -#: awx/api/views.py:1772 +#: awx/api/views.py:1779 msgid "Cannot delete inventory script." msgstr "インベントリースクリプトを削除できません。" -#: awx/api/views.py:1857 +#: awx/api/views.py:1864 msgid "{0}" msgstr "{0}" -#: awx/api/views.py:2078 +#: awx/api/views.py:2089 msgid "Fact not found." msgstr "ファクトが見つかりませんでした。" -#: awx/api/views.py:2102 +#: awx/api/views.py:2113 msgid "SSLError while trying to connect to {}" msgstr "{} への接続試行中に SSL エラーが発生しました" -#: awx/api/views.py:2104 +#: awx/api/views.py:2115 msgid "Request to {} timed out." msgstr "{} の要求がタイムアウトになりました。" -#: awx/api/views.py:2106 +#: awx/api/views.py:2117 msgid "Unkown exception {} while trying to GET {}" msgstr "GET {} の試行中に不明の例外 {} が発生しました" -#: awx/api/views.py:2109 +#: awx/api/views.py:2120 +msgid "" +"Unauthorized access. Please check your Insights Credential username and " +"password." +msgstr "不正アクセスです。Insights 認証情報のユーザー名およびパスワードを確認してください。" + +#: awx/api/views.py:2122 msgid "" "Failed to gather reports and maintenance plans from Insights API at URL {}. " "Server responded with {} status code and message {}" @@ -793,200 +799,196 @@ msgstr "" "URL {} で Insights API からのレポートおよびメンテナンス計画を収集できませんでした。サーバーが {} " "ステータスコードおよびメッセージ {} を出して応答しました。" -#: awx/api/views.py:2115 +#: awx/api/views.py:2128 msgid "Expected JSON response from Insights but instead got {}" msgstr "Insights からの JSON 応答を予想していましたが、代わりに {} を取得しました。" -#: awx/api/views.py:2122 +#: awx/api/views.py:2135 msgid "This host is not recognized as an Insights host." msgstr "このホストは Insights ホストとして認識されていません。" -#: awx/api/views.py:2127 +#: awx/api/views.py:2140 msgid "The Insights Credential for \"{}\" was not found." msgstr "\"{}\" の Insights 認証情報が見つかりませんでした。" -#: awx/api/views.py:2196 +#: awx/api/views.py:2209 msgid "Cyclical Group association." msgstr "循環的なグループの関連付け" -#: awx/api/views.py:2473 +#: awx/api/views.py:2482 msgid "Inventory Source List" msgstr "インベントリーソース一覧" -#: awx/api/views.py:2486 +#: awx/api/views.py:2495 msgid "Inventory Sources Update" msgstr "インベントリーソースの更新" -#: awx/api/views.py:2514 -msgid "You do not have permission to update project `{}`" -msgstr "プロジェクト `{}`を更新するパーミッションがありません" - -#: awx/api/views.py:2526 +#: awx/api/views.py:2525 msgid "Could not start because `can_update` returned False" msgstr "`can_update` が False を返したので開始できませんでした" -#: awx/api/views.py:2534 +#: awx/api/views.py:2533 msgid "No inventory sources to update." msgstr "更新するインベントリーソースがありません。" -#: awx/api/views.py:2566 +#: awx/api/views.py:2565 msgid "Cannot delete inventory source." msgstr "インベントリーソースを削除できません。" -#: awx/api/views.py:2574 +#: awx/api/views.py:2573 msgid "Inventory Source Schedules" msgstr "インベントリーソースのスケジュール" -#: awx/api/views.py:2604 +#: awx/api/views.py:2603 msgid "Notification Templates can only be assigned when source is one of {}." msgstr "ソースが {} のいずれかである場合、通知テンプレートのみを割り当てることができます。" -#: awx/api/views.py:2833 +#: awx/api/views.py:2826 msgid "Job Template Schedules" msgstr "ジョブテンプレートスケジュール" -#: awx/api/views.py:2853 awx/api/views.py:2869 +#: awx/api/views.py:2846 awx/api/views.py:2862 msgid "Your license does not allow adding surveys." msgstr "お使いのライセンスでは Survey を追加できません。" -#: awx/api/views.py:2876 +#: awx/api/views.py:2869 msgid "'name' missing from survey spec." msgstr "Survey の指定に「name」がありません。" -#: awx/api/views.py:2878 +#: awx/api/views.py:2871 msgid "'description' missing from survey spec." msgstr "Survey の指定に「description」がありません。" -#: awx/api/views.py:2880 +#: awx/api/views.py:2873 msgid "'spec' missing from survey spec." msgstr "Survey の指定に「spec」がありません。" -#: awx/api/views.py:2882 +#: awx/api/views.py:2875 msgid "'spec' must be a list of items." msgstr "「spec」は項目の一覧にする必要があります。" -#: awx/api/views.py:2884 +#: awx/api/views.py:2877 msgid "'spec' doesn't contain any items." msgstr "「spec」には項目が含まれません。" -#: awx/api/views.py:2890 +#: awx/api/views.py:2883 #, python-format msgid "Survey question %s is not a json object." msgstr "Survey の質問 %s は json オブジェクトではありません。" -#: awx/api/views.py:2892 +#: awx/api/views.py:2885 #, python-format msgid "'type' missing from survey question %s." msgstr "Survey の質問 %s に「type」がありません。" -#: awx/api/views.py:2894 +#: awx/api/views.py:2887 #, python-format msgid "'question_name' missing from survey question %s." msgstr "Survey の質問 %s に「question_name」がありません。" -#: awx/api/views.py:2896 +#: awx/api/views.py:2889 #, python-format msgid "'variable' missing from survey question %s." msgstr "Survey の質問 %s に「variable」がありません。" -#: awx/api/views.py:2898 +#: awx/api/views.py:2891 #, python-format msgid "'variable' '%(item)s' duplicated in survey question %(survey)s." msgstr "Survey の質問%(survey)s で「variable」の「%(item)s」が重複しています。" -#: awx/api/views.py:2903 +#: awx/api/views.py:2896 #, python-format msgid "'required' missing from survey question %s." msgstr "Survey の質問 %s に「required」がありません。" -#: awx/api/views.py:2908 +#: awx/api/views.py:2901 msgid "" "$encrypted$ is reserved keyword and may not be used as a default for " "password {}." msgstr "$encrypted$ は予約されたキーワードで、パスワード {} のデフォルトして使用できません。" -#: awx/api/views.py:3024 +#: awx/api/views.py:3017 msgid "Maximum number of labels for {} reached." msgstr "{} のラベルの最大数に達しました。" -#: awx/api/views.py:3143 +#: awx/api/views.py:3136 msgid "No matching host could be found!" msgstr "一致するホストが見つかりませんでした!" -#: awx/api/views.py:3146 +#: awx/api/views.py:3139 msgid "Multiple hosts matched the request!" msgstr "複数のホストが要求に一致しました!" -#: awx/api/views.py:3151 +#: awx/api/views.py:3144 msgid "Cannot start automatically, user input required!" msgstr "自動的に開始できません。ユーザー入力が必要です!" -#: awx/api/views.py:3158 +#: awx/api/views.py:3151 msgid "Host callback job already pending." msgstr "ホストのコールバックジョブがすでに保留中です。" -#: awx/api/views.py:3171 +#: awx/api/views.py:3164 msgid "Error starting job!" msgstr "ジョブの開始時にエラーが発生しました!" -#: awx/api/views.py:3278 +#: awx/api/views.py:3271 msgid "Cannot associate {0} when {1} have been associated." msgstr "{1} が関連付けられている場合に {0} を関連付けることはできません。" -#: awx/api/views.py:3303 +#: awx/api/views.py:3296 msgid "Multiple parent relationship not allowed." msgstr "複数の親関係は許可されません。" -#: awx/api/views.py:3308 +#: awx/api/views.py:3301 msgid "Cycle detected." msgstr "サイクルが検出されました。" -#: awx/api/views.py:3512 +#: awx/api/views.py:3505 msgid "Workflow Job Template Schedules" msgstr "ワークフロージョブテンプレートのスケジュール" -#: awx/api/views.py:3657 awx/api/views.py:4233 +#: awx/api/views.py:3650 awx/api/views.py:4217 msgid "Superuser privileges needed." msgstr "スーパーユーザー権限が必要です。" -#: awx/api/views.py:3689 +#: awx/api/views.py:3682 msgid "System Job Template Schedules" msgstr "システムジョブテンプレートのスケジュール" -#: awx/api/views.py:3907 +#: awx/api/views.py:3891 msgid "Job Host Summaries List" msgstr "ジョブホスト概要一覧" -#: awx/api/views.py:3954 +#: awx/api/views.py:3938 msgid "Job Event Children List" msgstr "ジョブイベント子一覧" -#: awx/api/views.py:3963 +#: awx/api/views.py:3947 msgid "Job Event Hosts List" msgstr "ジョブイベントホスト一覧" -#: awx/api/views.py:3973 +#: awx/api/views.py:3957 msgid "Job Events List" msgstr "ジョブイベント一覧" -#: awx/api/views.py:4187 +#: awx/api/views.py:4171 msgid "Ad Hoc Command Events List" msgstr "アドホックコマンドイベント一覧" -#: awx/api/views.py:4395 +#: awx/api/views.py:4386 msgid "Error generating stdout download file: {}" msgstr "stdout ダウンロードファイルの生成中にエラーが発生しました: {}" -#: awx/api/views.py:4408 +#: awx/api/views.py:4399 #, python-format msgid "Error generating stdout download file: %s" msgstr "stdout ダウンロードファイルの生成中にエラーが発生しました: %s" -#: awx/api/views.py:4453 +#: awx/api/views.py:4444 msgid "Delete not allowed while there are pending notifications" msgstr "保留中の通知がある場合に削除は許可されません" -#: awx/api/views.py:4460 +#: awx/api/views.py:4451 msgid "Notification Template Test" msgstr "通知テンプレートテスト" @@ -1191,7 +1193,7 @@ msgstr "変更済み" msgid "User-Defaults" msgstr "ユーザー設定" -#: awx/conf/registry.py:150 +#: awx/conf/registry.py:151 msgid "This value has been set manually in a settings file." msgstr "この値は設定ファイルに手動で設定されました。" @@ -1234,8 +1236,9 @@ msgstr "この値は設定ファイルに手動で設定されました。" #: awx/conf/tests/unit/test_settings.py:360 #: awx/conf/tests/unit/test_settings.py:374 #: awx/conf/tests/unit/test_settings.py:398 -#: awx/conf/tests/unit/test_settings.py:412 -#: awx/conf/tests/unit/test_settings.py:448 awx/main/conf.py:22 +#: awx/conf/tests/unit/test_settings.py:411 +#: awx/conf/tests/unit/test_settings.py:430 +#: awx/conf/tests/unit/test_settings.py:466 awx/main/conf.py:22 #: awx/main/conf.py:32 awx/main/conf.py:42 awx/main/conf.py:51 #: awx/main/conf.py:63 awx/main/conf.py:81 awx/main/conf.py:96 #: awx/main/conf.py:121 @@ -1258,7 +1261,7 @@ msgstr "設定カテゴリー" msgid "Setting Detail" msgstr "設定の詳細" -#: awx/conf/views.py:166 +#: awx/conf/views.py:168 msgid "Logging Connectivity Test" msgstr "ロギング接続テスト" @@ -1298,57 +1301,57 @@ msgstr "機能 %s はアクティブなライセンスで有効にされてい msgid "Features not found in active license." msgstr "各種機能はアクティブなライセンスにありません。" -#: awx/main/access.py:534 awx/main/access.py:617 awx/main/access.py:746 -#: awx/main/access.py:803 awx/main/access.py:1065 awx/main/access.py:1265 -#: awx/main/access.py:1708 +#: awx/main/access.py:534 awx/main/access.py:619 awx/main/access.py:748 +#: awx/main/access.py:801 awx/main/access.py:1063 awx/main/access.py:1263 +#: awx/main/access.py:1725 msgid "Resource is being used by running jobs" msgstr "リソースが実行中のジョブで使用されています" -#: awx/main/access.py:673 +#: awx/main/access.py:675 msgid "Unable to change inventory on a host." msgstr "ホストのインベントリーを変更できません。" -#: awx/main/access.py:690 awx/main/access.py:735 +#: awx/main/access.py:692 awx/main/access.py:737 msgid "Cannot associate two items from different inventories." msgstr "異なるインベントリーの 2 つの項目を関連付けることはできません。" -#: awx/main/access.py:723 +#: awx/main/access.py:725 msgid "Unable to change inventory on a group." msgstr "グループのインベントリーを変更できません。" -#: awx/main/access.py:985 +#: awx/main/access.py:983 msgid "Unable to change organization on a team." msgstr "チームの組織を変更できません。" -#: awx/main/access.py:998 +#: awx/main/access.py:996 msgid "The {} role cannot be assigned to a team" msgstr "{} ロールをチームに割り当てることができません" -#: awx/main/access.py:1000 +#: awx/main/access.py:998 msgid "The admin_role for a User cannot be assigned to a team" msgstr "ユーザーの admin_role をチームに割り当てることができません" -#: awx/main/access.py:1426 +#: awx/main/access.py:1443 msgid "Job has been orphaned from its job template." msgstr "ジョブはジョブテンプレートから孤立しています。" -#: awx/main/access.py:1428 +#: awx/main/access.py:1445 msgid "You do not have execute permission to related job template." msgstr "関連するジョブテンプレートに対する実行パーミッションがありません。" -#: awx/main/access.py:1431 +#: awx/main/access.py:1448 msgid "Job was launched with prompted fields." msgstr "ジョブはプロンプトされたフィールドで起動されています。" -#: awx/main/access.py:1433 +#: awx/main/access.py:1450 msgid " Organization level permissions required." msgstr "組織レベルのパーミッションが必要です。" -#: awx/main/access.py:1435 +#: awx/main/access.py:1452 msgid " You do not have permission to related resources." msgstr "関連リソースに対するパーミッションがありません。" -#: awx/main/access.py:1781 +#: awx/main/access.py:1798 msgid "" "You do not have permission to the workflow job resources required for " "relaunch." @@ -1466,10 +1469,10 @@ msgstr "アドホックジョブで使用できるモジュール一覧。" #: awx/main/conf.py:130 awx/main/conf.py:140 awx/main/conf.py:151 #: awx/main/conf.py:161 awx/main/conf.py:171 awx/main/conf.py:181 #: awx/main/conf.py:192 awx/main/conf.py:204 awx/main/conf.py:216 -#: awx/main/conf.py:227 awx/main/conf.py:237 awx/main/conf.py:248 -#: awx/main/conf.py:258 awx/main/conf.py:268 awx/main/conf.py:278 -#: awx/main/conf.py:290 awx/main/conf.py:302 awx/main/conf.py:314 -#: awx/main/conf.py:327 +#: awx/main/conf.py:229 awx/main/conf.py:241 awx/main/conf.py:251 +#: awx/main/conf.py:262 awx/main/conf.py:272 awx/main/conf.py:282 +#: awx/main/conf.py:292 awx/main/conf.py:304 awx/main/conf.py:316 +#: awx/main/conf.py:328 awx/main/conf.py:341 msgid "Jobs" msgstr "ジョブ" @@ -1551,39 +1554,52 @@ msgstr "" "分離されたインスタンスと通信する際に使用される Ansible SSH 接続のタイムアウト (秒数) " "です。値は予想されるネットワークの待ち時間よりも大幅に大きな値になるはずです。" -#: awx/main/conf.py:214 awx/main/conf.py:215 +#: awx/main/conf.py:212 +msgid "Generate RSA keys for isolated instances" +msgstr "分離されたインスタンスの RSA 鍵の生成" + +#: awx/main/conf.py:213 +msgid "" +"If set, a random RSA key will be generated and distributed to isolated " +"instances. To disable this behavior and manage authentication for isolated " +"instances outside of Tower, disable this setting." +msgstr "" +"設定されている場合、RSA 鍵が生成され、分離されたインスタンスに配布されます。この動作を無効にし、Tower " +"の外部にある分離されたインスタンスの認証を管理するには、この設定を無効にします。" + +#: awx/main/conf.py:227 awx/main/conf.py:228 msgid "The RSA private key for SSH traffic to isolated instances" msgstr "分離されたインスタンスへの SSH トラフィック用の RSA 秘密鍵" -#: awx/main/conf.py:225 awx/main/conf.py:226 +#: awx/main/conf.py:239 awx/main/conf.py:240 msgid "The RSA public key for SSH traffic to isolated instances" msgstr "分離されたインスタンスへの SSH トラフィック用の RSA 公開鍵" -#: awx/main/conf.py:235 +#: awx/main/conf.py:249 msgid "Extra Environment Variables" msgstr "追加の環境変数" -#: awx/main/conf.py:236 +#: awx/main/conf.py:250 msgid "" "Additional environment variables set for playbook runs, inventory updates, " "project updates, and notification sending." msgstr "Playbook 実行、インベントリー更新、プロジェクト更新および通知の送信に設定される追加の環境変数。" -#: awx/main/conf.py:246 +#: awx/main/conf.py:260 msgid "Standard Output Maximum Display Size" msgstr "標準出力の最大表示サイズ" -#: awx/main/conf.py:247 +#: awx/main/conf.py:261 msgid "" "Maximum Size of Standard Output in bytes to display before requiring the " "output be downloaded." msgstr "出力のダウンロードを要求する前に表示される標準出力の最大サイズ (バイト単位)。" -#: awx/main/conf.py:256 +#: awx/main/conf.py:270 msgid "Job Event Standard Output Maximum Display Size" msgstr "ジョブイベントの標準出力の最大表示サイズ" -#: awx/main/conf.py:257 +#: awx/main/conf.py:271 msgid "" "Maximum Size of Standard Output in bytes to display for a single job or ad " "hoc command event. `stdout` will end with `…` when truncated." @@ -1591,31 +1607,31 @@ msgstr "" "単一ジョブまたはアドホックコマンドイベントについて表示される標準出力の最大サイズ (バイト単位)。`stdout` は切り捨てが実行されると `…` " "で終了します。" -#: awx/main/conf.py:266 +#: awx/main/conf.py:280 msgid "Maximum Scheduled Jobs" msgstr "スケジュール済みジョブの最大数" -#: awx/main/conf.py:267 +#: awx/main/conf.py:281 msgid "" "Maximum number of the same job template that can be waiting to run when " "launching from a schedule before no more are created." msgstr "スケジュールからの起動時に実行を待機している同じジョブテンプレートの最大数です (これ以上作成されることはありません)。" -#: awx/main/conf.py:276 +#: awx/main/conf.py:290 msgid "Ansible Callback Plugins" msgstr "Ansible コールバックプラグイン" -#: awx/main/conf.py:277 +#: awx/main/conf.py:291 msgid "" "List of paths to search for extra callback plugins to be used when running " "jobs. Enter one path per line." msgstr "ジョブの実行時に使用される追加のコールバックプラグインを検索する際のパスの一覧です。1 行に 1 つのパスを入力します。" -#: awx/main/conf.py:287 +#: awx/main/conf.py:301 msgid "Default Job Timeout" msgstr "デフォルトのジョブタイムアウト" -#: awx/main/conf.py:288 +#: awx/main/conf.py:302 msgid "" "Maximum time in seconds to allow jobs to run. Use value of 0 to indicate " "that no timeout should be imposed. A timeout set on an individual job " @@ -1624,37 +1640,37 @@ msgstr "" "ジョブの実行可能な最大時間 (秒数) です。値 0 " "が使用されている場合はタイムアウトを設定できないことを示します。個別のジョブテンプレートに設定されるタイムアウトはこれを上書きします。" -#: awx/main/conf.py:299 +#: awx/main/conf.py:313 msgid "Default Inventory Update Timeout" msgstr "デフォルトのインベントリー更新タイムアウト" -#: awx/main/conf.py:300 +#: awx/main/conf.py:314 msgid "" -"Maximum time to allow inventory updates to run. Use value of 0 to indicate " -"that no timeout should be imposed. A timeout set on an individual inventory " -"source will override this." +"Maximum time in seconds to allow inventory updates to run. Use value of 0 to" +" indicate that no timeout should be imposed. A timeout set on an individual " +"inventory source will override this." msgstr "" -"インベントリー更新の実行可能な最大時間。値 0 " +"インベントリー更新の実行可能な最大時間 (秒数)。値 0 " "が設定されている場合はタイムアウトを設定できないことを示します。個別のインベントリーソースに設定されるタイムアウトはこれを上書きします。" -#: awx/main/conf.py:311 +#: awx/main/conf.py:325 msgid "Default Project Update Timeout" msgstr "デフォルトのプロジェクト更新タイムアウト" -#: awx/main/conf.py:312 +#: awx/main/conf.py:326 msgid "" -"Maximum time to allow project updates to run. Use value of 0 to indicate " -"that no timeout should be imposed. A timeout set on an individual project " -"will override this." +"Maximum time in seconds to allow project updates to run. Use value of 0 to " +"indicate that no timeout should be imposed. A timeout set on an individual " +"project will override this." msgstr "" -"プロジェクト更新の実行可能な最大時間。値 0 " +"プロジェクト更新の実行可能な最大時間 (秒数)。値 0 " "が設定されている場合はタイムアウトを設定できないことを示します。個別のプロジェクトに設定されるタイムアウトはこれを上書きします。" -#: awx/main/conf.py:323 +#: awx/main/conf.py:337 msgid "Per-Host Ansible Fact Cache Timeout" msgstr "ホストあたりの Ansible ファクトキャッシュのタイムアウト" -#: awx/main/conf.py:324 +#: awx/main/conf.py:338 msgid "" "Maximum time, in seconds, that stored Ansible facts are considered valid " "since the last time they were modified. Only valid, non-stale, facts will be" @@ -1664,62 +1680,62 @@ msgstr "" "保存される Ansible ファクトが最後に変更されてから有効とみなされる最大時間 (秒数) です。有効な新規のファクトのみが Playbook " "でアクセスできます。ansible_facts のデータベースからの削除はこれによる影響を受けません。" -#: awx/main/conf.py:335 +#: awx/main/conf.py:350 msgid "Logging Aggregator" msgstr "ログアグリゲーター" -#: awx/main/conf.py:336 +#: awx/main/conf.py:351 msgid "Hostname/IP where external logs will be sent to." msgstr "外部ログの送信先のホスト名/IP" -#: awx/main/conf.py:337 awx/main/conf.py:347 awx/main/conf.py:358 -#: awx/main/conf.py:368 awx/main/conf.py:380 awx/main/conf.py:395 -#: awx/main/conf.py:407 awx/main/conf.py:416 awx/main/conf.py:426 -#: awx/main/conf.py:436 awx/main/conf.py:447 awx/main/conf.py:459 -#: awx/main/conf.py:472 +#: awx/main/conf.py:352 awx/main/conf.py:363 awx/main/conf.py:375 +#: awx/main/conf.py:385 awx/main/conf.py:397 awx/main/conf.py:412 +#: awx/main/conf.py:424 awx/main/conf.py:433 awx/main/conf.py:443 +#: awx/main/conf.py:453 awx/main/conf.py:464 awx/main/conf.py:476 +#: awx/main/conf.py:489 msgid "Logging" msgstr "ロギング" -#: awx/main/conf.py:344 +#: awx/main/conf.py:360 msgid "Logging Aggregator Port" msgstr "ログアグリゲーターポート" -#: awx/main/conf.py:345 +#: awx/main/conf.py:361 msgid "" "Port on Logging Aggregator to send logs to (if required and not provided in " "Logging Aggregator)." msgstr "ログの送信先のログアグリゲーターのポート (必要な場合。ログアグリゲーターでは指定されません)。" -#: awx/main/conf.py:356 +#: awx/main/conf.py:373 msgid "Logging Aggregator Type" msgstr "ログアグリゲーターのタイプ" -#: awx/main/conf.py:357 +#: awx/main/conf.py:374 msgid "Format messages for the chosen log aggregator." msgstr "選択されたログアグリゲーターのメッセージのフォーマット。" -#: awx/main/conf.py:366 +#: awx/main/conf.py:383 msgid "Logging Aggregator Username" msgstr "ログアグリゲーターのユーザー名" -#: awx/main/conf.py:367 +#: awx/main/conf.py:384 msgid "Username for external log aggregator (if required)." msgstr "外部ログアグリゲーターのユーザー名 (必要な場合)。" -#: awx/main/conf.py:378 +#: awx/main/conf.py:395 msgid "Logging Aggregator Password/Token" msgstr "ログアグリゲーターのパスワード/トークン" -#: awx/main/conf.py:379 +#: awx/main/conf.py:396 msgid "" "Password or authentication token for external log aggregator (if required)." msgstr "外部ログアグリゲーターのパスワードまたは認証トークン (必要な場合)。" -#: awx/main/conf.py:388 +#: awx/main/conf.py:405 msgid "Loggers Sending Data to Log Aggregator Form" msgstr "ログアグリゲーターフォームにデータを送信するロガー" -#: awx/main/conf.py:389 +#: awx/main/conf.py:406 msgid "" "List of loggers that will send HTTP logs to the collector, these can include any or all of: \n" "awx - service logs\n" @@ -1733,11 +1749,11 @@ msgstr "" "job_events - Ansible ジョブイベントからのコールバックデータ\n" "system_tracking - スキャンジョブから生成されるファクト" -#: awx/main/conf.py:402 +#: awx/main/conf.py:419 msgid "Log System Tracking Facts Individually" msgstr "ログシステムトラッキングの個別ファクト" -#: awx/main/conf.py:403 +#: awx/main/conf.py:420 msgid "" "If set, system tracking facts will be sent for each package, service, " "orother item found in a scan, allowing for greater search query granularity." @@ -1746,46 +1762,46 @@ msgid "" msgstr "" "設定されている場合、スキャンで見つかる各パッケージ、サービスその他の項目についてのサービスシステムトラッキングのファクトが送信され、検索クエリーの詳細度が上がります。設定されていない場合、ファクトは単一辞書として送信され、ファクトの処理の効率が上がります。" -#: awx/main/conf.py:414 +#: awx/main/conf.py:431 msgid "Enable External Logging" msgstr "外部ログの有効化" -#: awx/main/conf.py:415 +#: awx/main/conf.py:432 msgid "Enable sending logs to external log aggregator." msgstr "外部ログアグリゲーターへのログ送信の有効化" -#: awx/main/conf.py:424 +#: awx/main/conf.py:441 msgid "Cluster-wide Tower unique identifier." msgstr "クラスター全体での Tower 固有識別子。" -#: awx/main/conf.py:425 +#: awx/main/conf.py:442 msgid "Useful to uniquely identify Tower instances." msgstr "Tower インスタンスを一意に識別するのに役立ちます。" -#: awx/main/conf.py:434 +#: awx/main/conf.py:451 msgid "Logging Aggregator Protocol" msgstr "ログアグリゲーターのプロトコル" -#: awx/main/conf.py:435 +#: awx/main/conf.py:452 msgid "Protocol used to communicate with log aggregator." msgstr "ログアグリゲーターとの通信に使用されるプロトコルです。" -#: awx/main/conf.py:443 +#: awx/main/conf.py:460 msgid "TCP Connection Timeout" msgstr "TCP 接続のタイムアウト" -#: awx/main/conf.py:444 +#: awx/main/conf.py:461 msgid "" "Number of seconds for a TCP connection to external log aggregator to " "timeout. Applies to HTTPS and TCP log aggregator protocols." msgstr "" "外部ログアグリゲーターへの TCP 接続がタイムアウトする秒数です。HTTPS および TCP ログアグリゲータープロトコルに適用されます。" -#: awx/main/conf.py:454 +#: awx/main/conf.py:471 msgid "Enable/disable HTTPS certificate verification" msgstr "HTTPS 証明書の検証を有効化/無効化" -#: awx/main/conf.py:455 +#: awx/main/conf.py:472 msgid "" "Flag to control enable/disable of certificate verification when " "LOG_AGGREGATOR_PROTOCOL is \"https\". If enabled, Tower's log handler will " @@ -1796,11 +1812,11 @@ msgstr "" "が「https」の場合の証明書の検証の有効化/無効化を制御するフラグです。有効にされている場合、Tower " "のログハンドラーは接続を確立する前に外部ログアグリゲーターによって送信される証明書を検証します。" -#: awx/main/conf.py:467 +#: awx/main/conf.py:484 msgid "Logging Aggregator Level Threshold" msgstr "ログアグリゲーターレベルのしきい値" -#: awx/main/conf.py:468 +#: awx/main/conf.py:485 msgid "" "Level threshold used by log handler. Severities from lowest to highest are " "DEBUG, INFO, WARNING, ERROR, CRITICAL. Messages less severe than the " @@ -1811,7 +1827,7 @@ msgstr "" "になります。しきい値より重大度の低いメッセージはログハンドラーによって無視されます (カテゴリー awx.anlytics " "の下にあるメッセージはこの設定を無視します)。" -#: awx/main/conf.py:491 awx/sso/conf.py:1112 +#: awx/main/conf.py:508 awx/sso/conf.py:1105 msgid "\n" msgstr "\n" @@ -1843,43 +1859,48 @@ msgstr "Pmrun" msgid "Runas" msgstr "Runas" -#: awx/main/fields.py:55 +#: awx/main/fields.py:56 #, python-format msgid "'%s' is not one of ['%s']" msgstr "'%s' は ['%s'] のいずれでもありません。" -#: awx/main/fields.py:520 +#: awx/main/fields.py:531 +#, python-format +msgid "cannot be set unless \"%s\" is set" +msgstr "\"%s\" が設定されていない場合は設定できません" + +#: awx/main/fields.py:547 #, python-format msgid "required for %s" msgstr "%s に必須です" -#: awx/main/fields.py:544 +#: awx/main/fields.py:571 msgid "must be set when SSH key is encrypted." msgstr "SSH 鍵が暗号化されている場合に設定する必要があります。" -#: awx/main/fields.py:547 -msgid "should not be set when SSH key is empty." -msgstr "SSH 鍵が空の場合は設定できません。" - -#: awx/main/fields.py:549 +#: awx/main/fields.py:577 msgid "should not be set when SSH key is not encrypted." msgstr "SSH 鍵が暗号化されていない場合は設定できません。" -#: awx/main/fields.py:613 +#: awx/main/fields.py:635 +msgid "'dependencies' is not supported for custom credentials." +msgstr "「dependencies (依存関係)」はカスタム認証情報の場合にはサポートされません。" + +#: awx/main/fields.py:649 msgid "\"tower\" is a reserved field name" msgstr "「tower」は予約されたフィールド名です" -#: awx/main/fields.py:620 +#: awx/main/fields.py:656 #, python-format msgid "field IDs must be unique (%s)" msgstr "フィールド ID は固有でなければなりません (%s)" -#: awx/main/fields.py:633 +#: awx/main/fields.py:669 #, python-format msgid "%s not allowed for %s type (%s)" msgstr "%s は %s タイプに許可されません (%s)" -#: awx/main/fields.py:717 +#: awx/main/fields.py:753 #, python-format msgid "%s uses an undefined field (%s)" msgstr "%s は未定義のフィールドを使用します (%s)" @@ -1980,44 +2001,44 @@ msgstr "アドホックコマンドのサポートされていないモジュー msgid "No argument passed to %s module." msgstr "%s モジュールに渡される引数はありません。" -#: awx/main/models/ad_hoc_commands.py:243 awx/main/models/jobs.py:900 +#: awx/main/models/ad_hoc_commands.py:245 awx/main/models/jobs.py:904 msgid "Host Failed" msgstr "ホストの失敗" -#: awx/main/models/ad_hoc_commands.py:244 awx/main/models/jobs.py:901 +#: awx/main/models/ad_hoc_commands.py:246 awx/main/models/jobs.py:905 msgid "Host OK" msgstr "ホスト OK" -#: awx/main/models/ad_hoc_commands.py:245 awx/main/models/jobs.py:904 +#: awx/main/models/ad_hoc_commands.py:247 awx/main/models/jobs.py:908 msgid "Host Unreachable" msgstr "ホストに到達できません" -#: awx/main/models/ad_hoc_commands.py:250 awx/main/models/jobs.py:903 +#: awx/main/models/ad_hoc_commands.py:252 awx/main/models/jobs.py:907 msgid "Host Skipped" msgstr "ホストがスキップされました" -#: awx/main/models/ad_hoc_commands.py:260 awx/main/models/jobs.py:931 +#: awx/main/models/ad_hoc_commands.py:262 awx/main/models/jobs.py:935 msgid "Debug" msgstr "デバッグ" -#: awx/main/models/ad_hoc_commands.py:261 awx/main/models/jobs.py:932 +#: awx/main/models/ad_hoc_commands.py:263 awx/main/models/jobs.py:936 msgid "Verbose" msgstr "詳細" -#: awx/main/models/ad_hoc_commands.py:262 awx/main/models/jobs.py:933 +#: awx/main/models/ad_hoc_commands.py:264 awx/main/models/jobs.py:937 msgid "Deprecated" msgstr "非推奨" -#: awx/main/models/ad_hoc_commands.py:263 awx/main/models/jobs.py:934 +#: awx/main/models/ad_hoc_commands.py:265 awx/main/models/jobs.py:938 msgid "Warning" msgstr "警告" -#: awx/main/models/ad_hoc_commands.py:264 awx/main/models/jobs.py:935 +#: awx/main/models/ad_hoc_commands.py:266 awx/main/models/jobs.py:939 msgid "System Warning" msgstr "システム警告" -#: awx/main/models/ad_hoc_commands.py:265 awx/main/models/jobs.py:936 -#: awx/main/models/unified_jobs.py:63 +#: awx/main/models/ad_hoc_commands.py:267 awx/main/models/jobs.py:940 +#: awx/main/models/unified_jobs.py:64 msgid "Error" msgstr "エラー" @@ -2220,325 +2241,356 @@ msgstr "このインスタンスグループのメンバーであるインスタ msgid "Instance Group to remotely control this group." msgstr "このグループをリモートで制御するためのインスタンスグループ" -#: awx/main/models/inventory.py:51 +#: awx/main/models/inventory.py:52 msgid "Hosts have a direct link to this inventory." msgstr "ホストにはこのインベントリーへの直接のリンクがあります。" -#: awx/main/models/inventory.py:52 +#: awx/main/models/inventory.py:53 msgid "Hosts for inventory generated using the host_filter property." msgstr "host_filter プロパティーを使用して生成されたインベントリーのホスト。" -#: awx/main/models/inventory.py:57 +#: awx/main/models/inventory.py:58 msgid "inventories" msgstr "インベントリー" -#: awx/main/models/inventory.py:64 +#: awx/main/models/inventory.py:65 msgid "Organization containing this inventory." msgstr "このインベントリーを含む組織。" -#: awx/main/models/inventory.py:71 +#: awx/main/models/inventory.py:72 msgid "Inventory variables in JSON or YAML format." msgstr "JSON または YAML 形式のインベントリー変数。" -#: awx/main/models/inventory.py:76 +#: awx/main/models/inventory.py:77 msgid "Flag indicating whether any hosts in this inventory have failed." msgstr "このインベントリーのホストが失敗したかどうかを示すフラグ。" -#: awx/main/models/inventory.py:81 +#: awx/main/models/inventory.py:82 msgid "Total number of hosts in this inventory." msgstr "このインべントリー内のホストの合計数。" -#: awx/main/models/inventory.py:86 +#: awx/main/models/inventory.py:87 msgid "Number of hosts in this inventory with active failures." msgstr "アクティブなエラーのあるこのインベントリー内のホストの数。" -#: awx/main/models/inventory.py:91 +#: awx/main/models/inventory.py:92 msgid "Total number of groups in this inventory." msgstr "このインべントリー内のグループの合計数。" -#: awx/main/models/inventory.py:96 +#: awx/main/models/inventory.py:97 msgid "Number of groups in this inventory with active failures." msgstr "アクティブなエラーのあるこのインベントリー内のグループの数。" -#: awx/main/models/inventory.py:101 +#: awx/main/models/inventory.py:102 msgid "" "Flag indicating whether this inventory has any external inventory sources." msgstr "このインベントリーに外部のインベントリーソースがあるかどうかを示すフラグ。" -#: awx/main/models/inventory.py:106 +#: awx/main/models/inventory.py:107 msgid "" "Total number of external inventory sources configured within this inventory." msgstr "このインベントリー内で設定される外部インベントリーソースの合計数。" -#: awx/main/models/inventory.py:111 +#: awx/main/models/inventory.py:112 msgid "Number of external inventory sources in this inventory with failures." msgstr "エラーのあるこのインベントリー内の外部インベントリーソースの数。" -#: awx/main/models/inventory.py:118 +#: awx/main/models/inventory.py:119 msgid "Kind of inventory being represented." msgstr "表示されているインベントリーの種類。" -#: awx/main/models/inventory.py:124 +#: awx/main/models/inventory.py:125 msgid "Filter that will be applied to the hosts of this inventory." msgstr "このインべントリーのホストに適用されるフィルター。" -#: awx/main/models/inventory.py:151 +#: awx/main/models/inventory.py:152 msgid "" "Credentials to be used by hosts belonging to this inventory when accessing " "Red Hat Insights API." msgstr "Red Hat Insights API へのアクセス時にこのインベントリーに属するホストによって使用される認証情報。" -#: awx/main/models/inventory.py:160 +#: awx/main/models/inventory.py:161 msgid "Flag indicating the inventory is being deleted." msgstr "このインベントリーが削除されていることを示すフラグ。" -#: awx/main/models/inventory.py:373 +#: awx/main/models/inventory.py:374 msgid "Assignment not allowed for Smart Inventory" msgstr "割り当てはスマートインベントリーでは許可されません" -#: awx/main/models/inventory.py:375 awx/main/models/projects.py:148 +#: awx/main/models/inventory.py:376 awx/main/models/projects.py:148 msgid "Credential kind must be 'insights'." msgstr "認証情報の種類は「insights」である必要があります。" -#: awx/main/models/inventory.py:439 +#: awx/main/models/inventory.py:443 msgid "Is this host online and available for running jobs?" msgstr "このホストはオンラインで、ジョブを実行するために利用できますか?" -#: awx/main/models/inventory.py:445 +#: awx/main/models/inventory.py:449 msgid "" "The value used by the remote inventory source to uniquely identify the host" msgstr "ホストを一意に識別するためにリモートインベントリーソースで使用される値" -#: awx/main/models/inventory.py:450 +#: awx/main/models/inventory.py:454 msgid "Host variables in JSON or YAML format." msgstr "JSON または YAML 形式のホスト変数。" -#: awx/main/models/inventory.py:472 +#: awx/main/models/inventory.py:476 msgid "Flag indicating whether the last job failed for this host." msgstr "このホストの最後のジョブが失敗したかどうかを示すフラグ。" -#: awx/main/models/inventory.py:477 +#: awx/main/models/inventory.py:481 msgid "" "Flag indicating whether this host was created/updated from any external " "inventory sources." msgstr "このホストが外部インベントリーソースから作成/更新されたかどうかを示すフラグ。" -#: awx/main/models/inventory.py:483 +#: awx/main/models/inventory.py:487 msgid "Inventory source(s) that created or modified this host." msgstr "このホストを作成または変更したインベントリーソース。" -#: awx/main/models/inventory.py:488 +#: awx/main/models/inventory.py:492 msgid "Arbitrary JSON structure of most recent ansible_facts, per-host." msgstr "ホスト別の最新 ansible_facts の任意の JSON 構造。" -#: awx/main/models/inventory.py:494 +#: awx/main/models/inventory.py:498 msgid "The date and time ansible_facts was last modified." msgstr "ansible_facts の最終変更日時。" -#: awx/main/models/inventory.py:501 +#: awx/main/models/inventory.py:505 msgid "Red Hat Insights host unique identifier." msgstr "Red Hat Insights ホスト固有 ID。" -#: awx/main/models/inventory.py:629 +#: awx/main/models/inventory.py:633 msgid "Group variables in JSON or YAML format." msgstr "JSON または YAML 形式のグループ変数。" -#: awx/main/models/inventory.py:635 +#: awx/main/models/inventory.py:639 msgid "Hosts associated directly with this group." msgstr "このグループに直接関連付けられたホスト。" -#: awx/main/models/inventory.py:640 +#: awx/main/models/inventory.py:644 msgid "Total number of hosts directly or indirectly in this group." msgstr "このグループに直接的または間接的に属するホストの合計数。" -#: awx/main/models/inventory.py:645 +#: awx/main/models/inventory.py:649 msgid "Flag indicating whether this group has any hosts with active failures." msgstr "このグループにアクティブなエラーのあるホストがあるかどうかを示すフラグ。" -#: awx/main/models/inventory.py:650 +#: awx/main/models/inventory.py:654 msgid "Number of hosts in this group with active failures." msgstr "アクティブなエラーのあるこのグループ内のホストの数。" -#: awx/main/models/inventory.py:655 +#: awx/main/models/inventory.py:659 msgid "Total number of child groups contained within this group." msgstr "このグループに含まれる子グループの合計数。" -#: awx/main/models/inventory.py:660 +#: awx/main/models/inventory.py:664 msgid "Number of child groups within this group that have active failures." msgstr "アクティブなエラーのあるこのグループ内の子グループの数。" -#: awx/main/models/inventory.py:665 +#: awx/main/models/inventory.py:669 msgid "" "Flag indicating whether this group was created/updated from any external " "inventory sources." msgstr "このグループが外部インベントリーソースから作成/更新されたかどうかを示すフラグ。" -#: awx/main/models/inventory.py:671 +#: awx/main/models/inventory.py:675 msgid "Inventory source(s) that created or modified this group." msgstr "このグループを作成または変更したインベントリーソース。" -#: awx/main/models/inventory.py:861 awx/main/models/projects.py:42 -#: awx/main/models/unified_jobs.py:427 +#: awx/main/models/inventory.py:865 awx/main/models/projects.py:42 +#: awx/main/models/unified_jobs.py:428 msgid "Manual" msgstr "手動" -#: awx/main/models/inventory.py:862 +#: awx/main/models/inventory.py:866 msgid "File, Directory or Script" msgstr "ファイル、ディレクトリーまたはスクリプト" -#: awx/main/models/inventory.py:863 +#: awx/main/models/inventory.py:867 msgid "Sourced from a Project" msgstr "ソース: プロジェクト" -#: awx/main/models/inventory.py:864 +#: awx/main/models/inventory.py:868 msgid "Amazon EC2" msgstr "Amazon EC2" -#: awx/main/models/inventory.py:865 +#: awx/main/models/inventory.py:869 msgid "Google Compute Engine" msgstr "Google Compute Engine" -#: awx/main/models/inventory.py:866 +#: awx/main/models/inventory.py:870 msgid "Microsoft Azure Classic (deprecated)" msgstr "Microsoft Azure Classic (非推奨)" -#: awx/main/models/inventory.py:867 +#: awx/main/models/inventory.py:871 msgid "Microsoft Azure Resource Manager" msgstr "Microsoft Azure Resource Manager" -#: awx/main/models/inventory.py:868 +#: awx/main/models/inventory.py:872 msgid "VMware vCenter" msgstr "VMware vCenter" -#: awx/main/models/inventory.py:869 +#: awx/main/models/inventory.py:873 msgid "Red Hat Satellite 6" msgstr "Red Hat Satellite 6" -#: awx/main/models/inventory.py:870 +#: awx/main/models/inventory.py:874 msgid "Red Hat CloudForms" msgstr "Red Hat CloudForms" -#: awx/main/models/inventory.py:871 +#: awx/main/models/inventory.py:875 msgid "OpenStack" msgstr "OpenStack" -#: awx/main/models/inventory.py:872 +#: awx/main/models/inventory.py:876 msgid "Custom Script" msgstr "カスタムスクリプト" -#: awx/main/models/inventory.py:989 +#: awx/main/models/inventory.py:993 msgid "Inventory source variables in YAML or JSON format." msgstr "YAML または JSON 形式のインベントリーソース変数。" -#: awx/main/models/inventory.py:1008 +#: awx/main/models/inventory.py:1012 msgid "" "Comma-separated list of filter expressions (EC2 only). Hosts are imported " "when ANY of the filters match." msgstr "カンマ区切りのフィルター式の一覧 (EC2 のみ) です。ホストは、フィルターのいずれかが一致する場合にインポートされます。" -#: awx/main/models/inventory.py:1014 +#: awx/main/models/inventory.py:1018 msgid "Limit groups automatically created from inventory source (EC2 only)." msgstr "インベントリーソースから自動的に作成されるグループを制限します (EC2 のみ)。" -#: awx/main/models/inventory.py:1018 +#: awx/main/models/inventory.py:1022 msgid "Overwrite local groups and hosts from remote inventory source." msgstr "リモートインベントリーソースからのローカルグループおよびホストを上書きします。" -#: awx/main/models/inventory.py:1022 +#: awx/main/models/inventory.py:1026 msgid "Overwrite local variables from remote inventory source." msgstr "リモートインベントリーソースからのローカル変数を上書きします。" -#: awx/main/models/inventory.py:1027 awx/main/models/jobs.py:159 +#: awx/main/models/inventory.py:1031 awx/main/models/jobs.py:159 #: awx/main/models/projects.py:117 msgid "The amount of time (in seconds) to run before the task is canceled." msgstr "タスクが取り消される前の実行時間 (秒数)。" -#: awx/main/models/inventory.py:1060 -msgid "Availability Zone" -msgstr "アベイラビリティーゾーン" - -#: awx/main/models/inventory.py:1061 +#: awx/main/models/inventory.py:1064 msgid "Image ID" msgstr "イメージ ID" -#: awx/main/models/inventory.py:1062 +#: awx/main/models/inventory.py:1065 +msgid "Availability Zone" +msgstr "アベイラビリティーゾーン" + +#: awx/main/models/inventory.py:1066 +msgid "Account" +msgstr "アカウント" + +#: awx/main/models/inventory.py:1067 msgid "Instance ID" msgstr "インスタンス ID" -#: awx/main/models/inventory.py:1063 +#: awx/main/models/inventory.py:1068 +msgid "Instance State" +msgstr "インスタンスの状態" + +#: awx/main/models/inventory.py:1069 msgid "Instance Type" msgstr "インスタンスタイプ" -#: awx/main/models/inventory.py:1064 +#: awx/main/models/inventory.py:1070 msgid "Key Name" msgstr "キー名" -#: awx/main/models/inventory.py:1065 +#: awx/main/models/inventory.py:1071 msgid "Region" msgstr "リージョン" -#: awx/main/models/inventory.py:1066 +#: awx/main/models/inventory.py:1072 msgid "Security Group" msgstr "セキュリティーグループ" -#: awx/main/models/inventory.py:1067 +#: awx/main/models/inventory.py:1073 msgid "Tags" msgstr "タグ" -#: awx/main/models/inventory.py:1068 -msgid "VPC ID" -msgstr "VPC ID" - -#: awx/main/models/inventory.py:1069 +#: awx/main/models/inventory.py:1074 msgid "Tag None" msgstr "タグ None" -#: awx/main/models/inventory.py:1132 +#: awx/main/models/inventory.py:1075 +msgid "VPC ID" +msgstr "VPC ID" + +#: awx/main/models/inventory.py:1138 #, python-format msgid "" "Cloud-based inventory sources (such as %s) require credentials for the " "matching cloud service." msgstr "クラウドベースのインベントリーソース (%s など) には一致するクラウドサービスの認証情報が必要です。" -#: awx/main/models/inventory.py:1139 +#: awx/main/models/inventory.py:1145 msgid "Credential is required for a cloud source." msgstr "認証情報がクラウドソースに必要です。" -#: awx/main/models/inventory.py:1161 +#: awx/main/models/inventory.py:1167 #, python-format msgid "Invalid %(source)s region: %(region)s" msgstr "無効な %(source)s リージョン: %(region)s" -#: awx/main/models/inventory.py:1185 +#: awx/main/models/inventory.py:1191 #, python-format msgid "Invalid filter expression: %(filter)s" msgstr "無効なフィルター式: %(filter)s" -#: awx/main/models/inventory.py:1206 +#: awx/main/models/inventory.py:1212 #, python-format msgid "Invalid group by choice: %(choice)s" msgstr "無効なグループ (選択による): %(choice)s" -#: awx/main/models/inventory.py:1241 +#: awx/main/models/inventory.py:1247 msgid "Project containing inventory file used as source." msgstr "ソースとして使用されるインベントリーファイルが含まれるプロジェクト。" -#: awx/main/models/inventory.py:1389 +#: awx/main/models/inventory.py:1395 #, python-format msgid "" "Unable to configure this item for cloud sync. It is already managed by %s." msgstr "クラウド同期用にこの項目を設定できません。すでに %s によって管理されています。" -#: awx/main/models/inventory.py:1414 +#: awx/main/models/inventory.py:1405 +msgid "" +"More than one SCM-based inventory source with update on project update per-" +"inventory not allowed." +msgstr "複数の SCM ベースのインベントリーソースについて、インベントリー別のプロジェクト更新時の更新は許可されません。" + +#: awx/main/models/inventory.py:1412 +msgid "" +"Cannot update SCM-based inventory source on launch if set to update on " +"project update. Instead, configure the corresponding source project to " +"update on launch." +msgstr "" +"プロジェクト更新時の更新に設定している場合、SCM " +"ベースのインベントリーソースを更新できません。その代わりに起動時に更新するように対応するソースプロジェクトを設定します。" + +#: awx/main/models/inventory.py:1418 +msgid "SCM type sources must set `overwrite_vars` to `true`." +msgstr "SCM タイプソースは「overwrite_vars」を「true」に設定する必要があります。" + +#: awx/main/models/inventory.py:1423 +msgid "Cannot set source_path if not SCM type." +msgstr "SCM タイプでない場合 source_path を設定できません。" + +#: awx/main/models/inventory.py:1448 msgid "" "Inventory files from this Project Update were used for the inventory update." msgstr "このプロジェクト更新のインベントリーファイルがインベントリー更新に使用されました。" -#: awx/main/models/inventory.py:1528 +#: awx/main/models/inventory.py:1561 msgid "Inventory script contents" msgstr "インベントリースクリプトの内容" -#: awx/main/models/inventory.py:1533 +#: awx/main/models/inventory.py:1566 msgid "Organization owning this inventory script" msgstr "このインベントリースクリプトを所有する組織" @@ -2573,121 +2625,121 @@ msgstr "ジョブテンプレートは「inventory」を指定するか、この msgid "Job Template must provide 'credential' or allow prompting for it." msgstr "ジョブテンプレートは「credential」を指定するか、このプロンプトを許可する必要があります。" -#: awx/main/models/jobs.py:421 +#: awx/main/models/jobs.py:422 msgid "Cannot override job_type to or from a scan job." msgstr "スキャンジョブから/への job_type を上書きを実行できません。" -#: awx/main/models/jobs.py:487 awx/main/models/projects.py:263 +#: awx/main/models/jobs.py:488 awx/main/models/projects.py:263 msgid "SCM Revision" msgstr "SCM リビジョン" -#: awx/main/models/jobs.py:488 +#: awx/main/models/jobs.py:489 msgid "The SCM Revision from the Project used for this job, if available" msgstr "このジョブに使用されるプロジェクトからの SCM リビジョン (ある場合)" -#: awx/main/models/jobs.py:496 +#: awx/main/models/jobs.py:497 msgid "" "The SCM Refresh task used to make sure the playbooks were available for the " "job run" msgstr "SCM 更新タスクは、Playbook がジョブの実行で利用可能であったことを確認するために使用されます" -#: awx/main/models/jobs.py:799 +#: awx/main/models/jobs.py:802 msgid "job host summaries" msgstr "ジョブホストの概要" -#: awx/main/models/jobs.py:902 +#: awx/main/models/jobs.py:906 msgid "Host Failure" msgstr "ホストの失敗" -#: awx/main/models/jobs.py:905 awx/main/models/jobs.py:919 +#: awx/main/models/jobs.py:909 awx/main/models/jobs.py:923 msgid "No Hosts Remaining" msgstr "残りのホストがありません" -#: awx/main/models/jobs.py:906 +#: awx/main/models/jobs.py:910 msgid "Host Polling" msgstr "ホストのポーリング" -#: awx/main/models/jobs.py:907 +#: awx/main/models/jobs.py:911 msgid "Host Async OK" msgstr "ホストの非同期 OK" -#: awx/main/models/jobs.py:908 +#: awx/main/models/jobs.py:912 msgid "Host Async Failure" msgstr "ホストの非同期失敗" -#: awx/main/models/jobs.py:909 +#: awx/main/models/jobs.py:913 msgid "Item OK" msgstr "項目 OK" -#: awx/main/models/jobs.py:910 +#: awx/main/models/jobs.py:914 msgid "Item Failed" msgstr "項目の失敗" -#: awx/main/models/jobs.py:911 +#: awx/main/models/jobs.py:915 msgid "Item Skipped" msgstr "項目のスキップ" -#: awx/main/models/jobs.py:912 +#: awx/main/models/jobs.py:916 msgid "Host Retry" msgstr "ホストの再試行" -#: awx/main/models/jobs.py:914 +#: awx/main/models/jobs.py:918 msgid "File Difference" msgstr "ファイルの相違点" -#: awx/main/models/jobs.py:915 +#: awx/main/models/jobs.py:919 msgid "Playbook Started" msgstr "Playbook の開始" -#: awx/main/models/jobs.py:916 +#: awx/main/models/jobs.py:920 msgid "Running Handlers" msgstr "実行中のハンドラー" -#: awx/main/models/jobs.py:917 +#: awx/main/models/jobs.py:921 msgid "Including File" msgstr "組み込みファイル" -#: awx/main/models/jobs.py:918 +#: awx/main/models/jobs.py:922 msgid "No Hosts Matched" msgstr "一致するホストがありません" -#: awx/main/models/jobs.py:920 +#: awx/main/models/jobs.py:924 msgid "Task Started" msgstr "タスクの開始" -#: awx/main/models/jobs.py:922 +#: awx/main/models/jobs.py:926 msgid "Variables Prompted" msgstr "変数のプロモート" -#: awx/main/models/jobs.py:923 +#: awx/main/models/jobs.py:927 msgid "Gathering Facts" msgstr "ファクトの収集" -#: awx/main/models/jobs.py:924 +#: awx/main/models/jobs.py:928 msgid "internal: on Import for Host" msgstr "内部: ホストのインポート時" -#: awx/main/models/jobs.py:925 +#: awx/main/models/jobs.py:929 msgid "internal: on Not Import for Host" msgstr "内部: ホストの非インポート時" -#: awx/main/models/jobs.py:926 +#: awx/main/models/jobs.py:930 msgid "Play Started" msgstr "プレイの開始" -#: awx/main/models/jobs.py:927 +#: awx/main/models/jobs.py:931 msgid "Playbook Complete" msgstr "Playbook の完了" -#: awx/main/models/jobs.py:1337 +#: awx/main/models/jobs.py:1363 msgid "Remove jobs older than a certain number of days" msgstr "特定の日数より前のジョブを削除" -#: awx/main/models/jobs.py:1338 +#: awx/main/models/jobs.py:1364 msgid "Remove activity stream entries older than a certain number of days" msgstr "特定の日数より前のアクティビティーストリームのエントリーを削除" -#: awx/main/models/jobs.py:1339 +#: awx/main/models/jobs.py:1365 msgid "Purge and/or reduce the granularity of system tracking data" msgstr "システムトラッキングデータの詳細度の削除/削減" @@ -2695,15 +2747,15 @@ msgstr "システムトラッキングデータの詳細度の削除/削減" msgid "Organization this label belongs to." msgstr "このラベルが属する組織。" -#: awx/main/models/notifications.py:138 awx/main/models/unified_jobs.py:58 +#: awx/main/models/notifications.py:138 awx/main/models/unified_jobs.py:59 msgid "Pending" msgstr "保留中" -#: awx/main/models/notifications.py:139 awx/main/models/unified_jobs.py:61 +#: awx/main/models/notifications.py:139 awx/main/models/unified_jobs.py:62 msgid "Successful" msgstr "成功" -#: awx/main/models/notifications.py:140 awx/main/models/unified_jobs.py:62 +#: awx/main/models/notifications.py:140 awx/main/models/unified_jobs.py:63 msgid "Failed" msgstr "失敗" @@ -2963,94 +3015,95 @@ msgstr "予想される JSON" msgid "days must be a positive integer." msgstr "日数は正の整数である必要があります。" -#: awx/main/models/unified_jobs.py:57 +#: awx/main/models/unified_jobs.py:58 msgid "New" msgstr "新規" -#: awx/main/models/unified_jobs.py:59 +#: awx/main/models/unified_jobs.py:60 msgid "Waiting" msgstr "待機中" -#: awx/main/models/unified_jobs.py:60 +#: awx/main/models/unified_jobs.py:61 msgid "Running" msgstr "実行中" -#: awx/main/models/unified_jobs.py:64 +#: awx/main/models/unified_jobs.py:65 msgid "Canceled" msgstr "取り消されました" -#: awx/main/models/unified_jobs.py:68 +#: awx/main/models/unified_jobs.py:69 msgid "Never Updated" msgstr "更新されていません" -#: awx/main/models/unified_jobs.py:72 awx/ui/templates/ui/index.html:67 +#: awx/main/models/unified_jobs.py:73 awx/ui/templates/ui/index.html:67 #: awx/ui/templates/ui/index.html.py:86 msgid "OK" msgstr "OK" -#: awx/main/models/unified_jobs.py:73 +#: awx/main/models/unified_jobs.py:74 msgid "Missing" msgstr "不明" -#: awx/main/models/unified_jobs.py:77 +#: awx/main/models/unified_jobs.py:78 msgid "No External Source" msgstr "外部ソースがありません" -#: awx/main/models/unified_jobs.py:84 +#: awx/main/models/unified_jobs.py:85 msgid "Updating" msgstr "更新中" -#: awx/main/models/unified_jobs.py:428 +#: awx/main/models/unified_jobs.py:429 msgid "Relaunch" msgstr "再起動" -#: awx/main/models/unified_jobs.py:429 +#: awx/main/models/unified_jobs.py:430 msgid "Callback" msgstr "コールバック" -#: awx/main/models/unified_jobs.py:430 +#: awx/main/models/unified_jobs.py:431 msgid "Scheduled" msgstr "スケジュール済み" -#: awx/main/models/unified_jobs.py:431 +#: awx/main/models/unified_jobs.py:432 msgid "Dependency" msgstr "依存関係" -#: awx/main/models/unified_jobs.py:432 +#: awx/main/models/unified_jobs.py:433 msgid "Workflow" msgstr "ワークフロー" -#: awx/main/models/unified_jobs.py:433 +#: awx/main/models/unified_jobs.py:434 msgid "Sync" msgstr "同期" -#: awx/main/models/unified_jobs.py:480 +#: awx/main/models/unified_jobs.py:481 msgid "The node the job executed on." msgstr "ジョブが実行されるノード。" -#: awx/main/models/unified_jobs.py:506 +#: awx/main/models/unified_jobs.py:507 msgid "The date and time the job was queued for starting." msgstr "ジョブが開始のために待機した日時。" -#: awx/main/models/unified_jobs.py:512 +#: awx/main/models/unified_jobs.py:513 msgid "The date and time the job finished execution." msgstr "ジョブが実行を完了した日時。" -#: awx/main/models/unified_jobs.py:518 +#: awx/main/models/unified_jobs.py:519 msgid "Elapsed time in seconds that the job ran." msgstr "ジョブ実行の経過時間 (秒単位)" -#: awx/main/models/unified_jobs.py:540 +#: awx/main/models/unified_jobs.py:541 msgid "" "A status field to indicate the state of the job if it wasn't able to run and" " capture stdout" msgstr "stdout の実行およびキャプチャーを実行できない場合のジョブの状態を示すための状態フィールド" -#: awx/main/models/unified_jobs.py:579 +#: awx/main/models/unified_jobs.py:580 msgid "The Rampart/Instance group the job was run under" msgstr "ジョブが実行された Rampart/インスタンスグループ" #: awx/main/notifications/base.py:17 +#: awx/main/notifications/email_backend.py:28 msgid "" "{} #{} had status {}, view details at {}\n" "\n" @@ -3058,14 +3111,6 @@ msgstr "" "{} #{} のステータスは {} です。詳細を {} で確認してください。\n" "\n" -#: awx/main/notifications/email_backend.py:28 -msgid "" -"{} #{} had status {} on Ansible Tower, view details at {}\n" -"\n" -msgstr "" -"{} #{} には Ansible Tower のステータス {} があります。詳細については {} で確認してください\n" -"\n" - #: awx/main/notifications/hipchat_backend.py:47 msgid "Error sending messages: {}" msgstr "メッセージの送信時のエラー: {}" @@ -3097,31 +3142,31 @@ msgstr "Twilio への接続時の例外: {}" msgid "Error sending notification webhook: {}" msgstr "通知 webhook の送信時のエラー: {}" -#: awx/main/scheduler/__init__.py:153 +#: awx/main/scheduler/__init__.py:184 msgid "" "Job spawned from workflow could not start because it was not in the right " "state or required manual credentials" msgstr "ワークフローから起動されるジョブは、正常な状態にないか、または手動の認証が必要であるために開始できませんでした" -#: awx/main/scheduler/__init__.py:157 +#: awx/main/scheduler/__init__.py:188 msgid "" "Job spawned from workflow could not start because it was missing a related " "resource such as project or inventory" msgstr "ワークフローから起動されるジョブは、プロジェクトまたはインベントリーなどの関連するリソースがないために開始できませんでした" -#: awx/main/tasks.py:175 +#: awx/main/tasks.py:184 msgid "Ansible Tower host usage over 90%" msgstr "Ansible Tower ホストの使用率が 90% を超えました" -#: awx/main/tasks.py:180 +#: awx/main/tasks.py:189 msgid "Ansible Tower license will expire soon" msgstr "Ansible Tower ライセンスがまもなく期限切れになります" -#: awx/main/tasks.py:308 +#: awx/main/tasks.py:318 msgid "status_str must be either succeeded or failed" msgstr "status_str は成功または失敗のいずれかである必要があります" -#: awx/main/tasks.py:1498 +#: awx/main/tasks.py:1531 msgid "Dependent inventory update {} was canceled." msgstr "依存するインベントリーの更新 {} が取り消されました。" @@ -3274,287 +3319,287 @@ msgstr "サーバーエラー" msgid "A server error has occurred." msgstr "サーバーエラーが発生しました。" -#: awx/settings/defaults.py:663 +#: awx/settings/defaults.py:664 msgid "US East (Northern Virginia)" msgstr "米国東部 (バージニア北部)" -#: awx/settings/defaults.py:664 +#: awx/settings/defaults.py:665 msgid "US East (Ohio)" msgstr "米国東部 (オハイオ)" -#: awx/settings/defaults.py:665 +#: awx/settings/defaults.py:666 msgid "US West (Oregon)" msgstr "米国西部 (オレゴン)" -#: awx/settings/defaults.py:666 +#: awx/settings/defaults.py:667 msgid "US West (Northern California)" msgstr "米国西部 (北カリフォルニア)" -#: awx/settings/defaults.py:667 +#: awx/settings/defaults.py:668 msgid "Canada (Central)" msgstr "カナダ (中部)" -#: awx/settings/defaults.py:668 +#: awx/settings/defaults.py:669 msgid "EU (Frankfurt)" msgstr "EU (フランクフルト)" -#: awx/settings/defaults.py:669 +#: awx/settings/defaults.py:670 msgid "EU (Ireland)" msgstr "EU (アイルランド)" -#: awx/settings/defaults.py:670 +#: awx/settings/defaults.py:671 msgid "EU (London)" msgstr "EU (ロンドン)" -#: awx/settings/defaults.py:671 +#: awx/settings/defaults.py:672 msgid "Asia Pacific (Singapore)" msgstr "アジア太平洋 (シンガポール)" -#: awx/settings/defaults.py:672 +#: awx/settings/defaults.py:673 msgid "Asia Pacific (Sydney)" msgstr "アジア太平洋 (シドニー)" -#: awx/settings/defaults.py:673 +#: awx/settings/defaults.py:674 msgid "Asia Pacific (Tokyo)" msgstr "アジア太平洋 (東京)" -#: awx/settings/defaults.py:674 +#: awx/settings/defaults.py:675 msgid "Asia Pacific (Seoul)" msgstr "アジア太平洋 (ソウル)" -#: awx/settings/defaults.py:675 +#: awx/settings/defaults.py:676 msgid "Asia Pacific (Mumbai)" msgstr "アジア太平洋 (ムンバイ)" -#: awx/settings/defaults.py:676 +#: awx/settings/defaults.py:677 msgid "South America (Sao Paulo)" msgstr "南アメリカ (サンパウロ)" -#: awx/settings/defaults.py:677 +#: awx/settings/defaults.py:678 msgid "US West (GovCloud)" msgstr "米国西部 (GovCloud)" -#: awx/settings/defaults.py:678 +#: awx/settings/defaults.py:679 msgid "China (Beijing)" msgstr "中国 (北京)" -#: awx/settings/defaults.py:727 +#: awx/settings/defaults.py:728 msgid "US East 1 (B)" msgstr "米国東部 1 (B)" -#: awx/settings/defaults.py:728 +#: awx/settings/defaults.py:729 msgid "US East 1 (C)" msgstr "米国東部 1 (C)" -#: awx/settings/defaults.py:729 +#: awx/settings/defaults.py:730 msgid "US East 1 (D)" msgstr "米国東部 1 (D)" -#: awx/settings/defaults.py:730 +#: awx/settings/defaults.py:731 msgid "US East 4 (A)" msgstr "米国東部 4 (A)" -#: awx/settings/defaults.py:731 +#: awx/settings/defaults.py:732 msgid "US East 4 (B)" msgstr "米国東部 4 (B)" -#: awx/settings/defaults.py:732 +#: awx/settings/defaults.py:733 msgid "US East 4 (C)" msgstr "米国東部 4 (C)" -#: awx/settings/defaults.py:733 +#: awx/settings/defaults.py:734 msgid "US Central (A)" msgstr "米国中部 (A)" -#: awx/settings/defaults.py:734 +#: awx/settings/defaults.py:735 msgid "US Central (B)" msgstr "米国中部 (B)" -#: awx/settings/defaults.py:735 +#: awx/settings/defaults.py:736 msgid "US Central (C)" msgstr "米国中部 (C)" -#: awx/settings/defaults.py:736 +#: awx/settings/defaults.py:737 msgid "US Central (F)" msgstr "米国中部 (F)" -#: awx/settings/defaults.py:737 +#: awx/settings/defaults.py:738 msgid "US West (A)" msgstr "米国西部 (A)" -#: awx/settings/defaults.py:738 +#: awx/settings/defaults.py:739 msgid "US West (B)" msgstr "米国西部 (B)" -#: awx/settings/defaults.py:739 +#: awx/settings/defaults.py:740 msgid "US West (C)" msgstr "米国西部 (C)" -#: awx/settings/defaults.py:740 +#: awx/settings/defaults.py:741 msgid "Europe West 1 (B)" msgstr "欧州西部 1 (B)" -#: awx/settings/defaults.py:741 +#: awx/settings/defaults.py:742 msgid "Europe West 1 (C)" msgstr "欧州西部 1 (C)" -#: awx/settings/defaults.py:742 +#: awx/settings/defaults.py:743 msgid "Europe West 1 (D)" msgstr "欧州西部 1 (D)" -#: awx/settings/defaults.py:743 +#: awx/settings/defaults.py:744 msgid "Europe West 2 (A)" msgstr "欧州西部 2 (A)" -#: awx/settings/defaults.py:744 +#: awx/settings/defaults.py:745 msgid "Europe West 2 (B)" msgstr "欧州西部 2 (B)" -#: awx/settings/defaults.py:745 +#: awx/settings/defaults.py:746 msgid "Europe West 2 (C)" msgstr "欧州西部 2 (C)" -#: awx/settings/defaults.py:746 +#: awx/settings/defaults.py:747 msgid "Asia East (A)" msgstr "アジア東部 (A)" -#: awx/settings/defaults.py:747 +#: awx/settings/defaults.py:748 msgid "Asia East (B)" msgstr "アジア東部 (B)" -#: awx/settings/defaults.py:748 +#: awx/settings/defaults.py:749 msgid "Asia East (C)" msgstr "アジア東部 (C)" -#: awx/settings/defaults.py:749 +#: awx/settings/defaults.py:750 msgid "Asia Southeast (A)" msgstr "アジア南東部 (A)" -#: awx/settings/defaults.py:750 +#: awx/settings/defaults.py:751 msgid "Asia Southeast (B)" msgstr "アジア南東部 (B)" -#: awx/settings/defaults.py:751 +#: awx/settings/defaults.py:752 msgid "Asia Northeast (A)" msgstr "アジア北東部 (A)" -#: awx/settings/defaults.py:752 +#: awx/settings/defaults.py:753 msgid "Asia Northeast (B)" msgstr "アジア北東部 (B)" -#: awx/settings/defaults.py:753 +#: awx/settings/defaults.py:754 msgid "Asia Northeast (C)" msgstr "アジア北東部 (C)" -#: awx/settings/defaults.py:754 +#: awx/settings/defaults.py:755 msgid "Australia Southeast (A)" msgstr "オーストラリア南東部 (A)" -#: awx/settings/defaults.py:755 +#: awx/settings/defaults.py:756 msgid "Australia Southeast (B)" msgstr "オーストラリア南東部 (B)" -#: awx/settings/defaults.py:756 +#: awx/settings/defaults.py:757 msgid "Australia Southeast (C)" msgstr "オーストラリア南東部 (C)" -#: awx/settings/defaults.py:780 +#: awx/settings/defaults.py:781 msgid "US East" msgstr "米国東部" -#: awx/settings/defaults.py:781 +#: awx/settings/defaults.py:782 msgid "US East 2" msgstr "米国東部 2" -#: awx/settings/defaults.py:782 +#: awx/settings/defaults.py:783 msgid "US Central" msgstr "米国中部" -#: awx/settings/defaults.py:783 +#: awx/settings/defaults.py:784 msgid "US North Central" msgstr "米国中北部" -#: awx/settings/defaults.py:784 +#: awx/settings/defaults.py:785 msgid "US South Central" msgstr "米国中南部" -#: awx/settings/defaults.py:785 +#: awx/settings/defaults.py:786 msgid "US West Central" msgstr "米国中西部" -#: awx/settings/defaults.py:786 +#: awx/settings/defaults.py:787 msgid "US West" msgstr "米国西部" -#: awx/settings/defaults.py:787 +#: awx/settings/defaults.py:788 msgid "US West 2" msgstr "米国西部 2" -#: awx/settings/defaults.py:788 +#: awx/settings/defaults.py:789 msgid "Canada East" msgstr "カナダ東部" -#: awx/settings/defaults.py:789 +#: awx/settings/defaults.py:790 msgid "Canada Central" msgstr "カナダ中部" -#: awx/settings/defaults.py:790 +#: awx/settings/defaults.py:791 msgid "Brazil South" msgstr "ブラジル南部" -#: awx/settings/defaults.py:791 +#: awx/settings/defaults.py:792 msgid "Europe North" msgstr "欧州北部" -#: awx/settings/defaults.py:792 +#: awx/settings/defaults.py:793 msgid "Europe West" msgstr "欧州西部" -#: awx/settings/defaults.py:793 +#: awx/settings/defaults.py:794 msgid "UK West" msgstr "英国西部" -#: awx/settings/defaults.py:794 +#: awx/settings/defaults.py:795 msgid "UK South" msgstr "英国南部" -#: awx/settings/defaults.py:795 +#: awx/settings/defaults.py:796 msgid "Asia East" msgstr "アジア東部" -#: awx/settings/defaults.py:796 +#: awx/settings/defaults.py:797 msgid "Asia Southeast" msgstr "アジア南東部" -#: awx/settings/defaults.py:797 +#: awx/settings/defaults.py:798 msgid "Australia East" msgstr "オーストラリア東部" -#: awx/settings/defaults.py:798 +#: awx/settings/defaults.py:799 msgid "Australia Southeast" msgstr "オーストラリア南東部 " -#: awx/settings/defaults.py:799 +#: awx/settings/defaults.py:800 msgid "India West" msgstr "インド西部" -#: awx/settings/defaults.py:800 +#: awx/settings/defaults.py:801 msgid "India South" msgstr "インド南部" -#: awx/settings/defaults.py:801 +#: awx/settings/defaults.py:802 msgid "Japan East" msgstr "日本東部" -#: awx/settings/defaults.py:802 +#: awx/settings/defaults.py:803 msgid "Japan West" msgstr "日本西部" -#: awx/settings/defaults.py:803 +#: awx/settings/defaults.py:804 msgid "Korea Central" msgstr "韓国中部" -#: awx/settings/defaults.py:804 +#: awx/settings/defaults.py:805 msgid "Korea South" msgstr "韓国南部" @@ -3565,12 +3610,12 @@ msgstr "シングルサインオン" #: awx/sso/conf.py:30 msgid "" "Mapping to organization admins/users from social auth accounts. This setting\n" -"controls which users are placed into which Tower organizations based on\n" -"their username and email address. Configuration details are available in\n" -"Tower documentation." +"controls which users are placed into which Tower organizations based on their\n" +"username and email address. Configuration details are available in the Ansible\n" +"Tower documentation.'" msgstr "" -"ソーシャル認証アカウントから組織管理者/ユーザーへのマッピングです。この設定は、ユーザー名およびメールアドレスに基づいてどのユーザーをどの Tower 組織に配置するかを管理します。設定の詳細については\n" -"Tower ドキュメントを参照してください。" +"ソーシャル認証アカウントから組織管理者/ユーザーへのマッピングです。この設定は、ユーザー名およびメールアドレスに基づいてどのユーザーをどの Tower " +"組織に配置するかを管理します。設定の詳細については、Ansible Tower ドキュメントを参照してください。" #: awx/sso/conf.py:55 msgid "" @@ -3625,11 +3670,11 @@ msgstr "" " (SSL) などの LDAP サーバーに接続する URI です。複数の LDAP サーバーをスペースまたはカンマで区切って指定できます。LDAP " "認証は、このパラメーターが空の場合は無効になります。" -#: awx/sso/conf.py:142 awx/sso/conf.py:160 awx/sso/conf.py:172 -#: awx/sso/conf.py:184 awx/sso/conf.py:200 awx/sso/conf.py:220 -#: awx/sso/conf.py:242 awx/sso/conf.py:258 awx/sso/conf.py:277 -#: awx/sso/conf.py:294 awx/sso/conf.py:311 awx/sso/conf.py:327 -#: awx/sso/conf.py:344 awx/sso/conf.py:361 awx/sso/conf.py:387 +#: awx/sso/conf.py:142 awx/sso/conf.py:158 awx/sso/conf.py:170 +#: awx/sso/conf.py:182 awx/sso/conf.py:198 awx/sso/conf.py:218 +#: awx/sso/conf.py:240 awx/sso/conf.py:255 awx/sso/conf.py:273 +#: awx/sso/conf.py:290 awx/sso/conf.py:307 awx/sso/conf.py:323 +#: awx/sso/conf.py:337 awx/sso/conf.py:354 awx/sso/conf.py:380 msgid "LDAP" msgstr "LDAP" @@ -3639,37 +3684,34 @@ msgstr "LDAP バインド DN" #: awx/sso/conf.py:155 msgid "" -"DN (Distinguished Name) of user to bind for all search queries. Normally in " -"the format \"CN=Some User,OU=Users,DC=example,DC=com\" but may also be " -"specified as \"DOMAIN\\username\" for Active Directory. This is the system " -"user account we will use to login to query LDAP for other user information." +"DN (Distinguished Name) of user to bind for all search queries. This is the " +"system user account we will use to login to query LDAP for other user " +"information. Refer to the Ansible Tower documentation for example syntax." msgstr "" -"すべての検索クエリーについてバインドするユーザーの DN (識別名) です。通常、形式は \"CN=Some " -"User,OU=Users,DC=example,DC=com\" になりますが、Active Directory の場合 " -"\"DOMAIN\\username\" として指定することもできます。これは、他のユーザー情報についての LDAP " -"クエリー実行時のログインに使用するシステムユーザーアカウントです。" +"すべての検索クエリーについてバインドするユーザーの DN (識別名) です。これは、他のユーザー情報についての LDAP " +"クエリー実行時のログインに使用するシステムユーザーアカウントです。構文のサンプルについては Ansible Tower ドキュメントを参照してください。" -#: awx/sso/conf.py:170 +#: awx/sso/conf.py:168 msgid "LDAP Bind Password" msgstr "LDAP バインドパスワード" -#: awx/sso/conf.py:171 +#: awx/sso/conf.py:169 msgid "Password used to bind LDAP user account." msgstr "LDAP ユーザーアカウントをバインドするために使用されるパスワード。" -#: awx/sso/conf.py:182 +#: awx/sso/conf.py:180 msgid "LDAP Start TLS" msgstr "LDAP Start TLS" -#: awx/sso/conf.py:183 +#: awx/sso/conf.py:181 msgid "Whether to enable TLS when the LDAP connection is not using SSL." msgstr "LDAP 接続が SSL を使用していない場合に TLS を有効にするかどうか。" -#: awx/sso/conf.py:193 +#: awx/sso/conf.py:191 msgid "LDAP Connection Options" msgstr "LDAP 接続オプション" -#: awx/sso/conf.py:194 +#: awx/sso/conf.py:192 msgid "" "Additional options to set for the LDAP connection. LDAP referrals are " "disabled by default (to prevent certain LDAP queries from hanging with AD). " @@ -3682,16 +3724,16 @@ msgstr "" "\"OPT_REFERRALS\")。可能なオプションおよび設定できる値については、https://www.python-" "ldap.org/doc/html/ldap.html#options を参照してください。" -#: awx/sso/conf.py:213 +#: awx/sso/conf.py:211 msgid "LDAP User Search" msgstr "LDAP ユーザー検索" -#: awx/sso/conf.py:214 +#: awx/sso/conf.py:212 msgid "" "LDAP search query to find users. Any user that matches the given pattern " -"will be able to login to Tower. The user should also be mapped into an " -"Tower organization (as defined in the AUTH_LDAP_ORGANIZATION_MAP setting). " -"If multiple search queries need to be supported use of \"LDAPUnion\" is " +"will be able to login to Tower. The user should also be mapped into a Tower" +" organization (as defined in the AUTH_LDAP_ORGANIZATION_MAP setting). If " +"multiple search queries need to be supported use of \"LDAPUnion\" is " "possible. See Tower documentation for details." msgstr "" "ユーザーを検索するための LDAP 検索クエリーです。指定パターンに一致するユーザーは Tower にログインできます。ユーザーも Tower " @@ -3699,54 +3741,54 @@ msgstr "" "設定で定義)。複数の検索クエリーをサポートする必要がある場合、\"LDAPUnion\" を使用できます。詳細は、Tower " "ドキュメントを参照してください。" -#: awx/sso/conf.py:236 +#: awx/sso/conf.py:234 msgid "LDAP User DN Template" msgstr "LDAP ユーザー DN テンプレート" -#: awx/sso/conf.py:237 +#: awx/sso/conf.py:235 msgid "" "Alternative to user search, if user DNs are all of the same format. This " -"approach will be more efficient for user lookups than searching if it is " -"usable in your organizational environment. If this setting has a value it " -"will be used instead of AUTH_LDAP_USER_SEARCH." +"approach is more efficient for user lookups than searching if it is usable " +"in your organizational environment. If this setting has a value it will be " +"used instead of AUTH_LDAP_USER_SEARCH." msgstr "" "ユーザー DN " "の形式がすべて同じである場合のユーザー検索の代替法になります。この方法は、組織の環境で使用可能であるかどうかを検索する場合よりも効率的なユーザー検索方法になります。この設定に値がある場合、それが" " AUTH_LDAP_USER_SEARCH の代わりに使用されます。" -#: awx/sso/conf.py:252 +#: awx/sso/conf.py:250 msgid "LDAP User Attribute Map" msgstr "LDAP ユーザー属性マップ" -#: awx/sso/conf.py:253 +#: awx/sso/conf.py:251 msgid "" -"Mapping of LDAP user schema to Tower API user attributes (key is user " -"attribute name, value is LDAP attribute name). The default setting is valid" -" for ActiveDirectory but users with other LDAP configurations may need to " -"change the values (not the keys) of the dictionary/hash-table." +"Mapping of LDAP user schema to Tower API user attributes. The default " +"setting is valid for ActiveDirectory but users with other LDAP " +"configurations may need to change the values. Refer to the Ansible Tower " +"documentation for additonal details." msgstr "" -"LDAP ユーザースキーマの Tower API ユーザー属性へのマッピングです (キーはユーザー属性名で、値は LDAP " -"属性名です)。デフォルト設定は ActiveDirectory で有効ですが、他の LDAP 設定を持つユーザーは、辞書/ハッシュテーブルの値 " -"(キーではない) を変更する必要ある場合があります。" +"LDAP ユーザースキーマの Tower API ユーザー属性へのマッピングです 。デフォルト設定は ActiveDirectory で有効ですが、他の" +" LDAP 設定を持つユーザーは値を変更する必要が生じる場合があります。追加の詳細情報については、Ansible Tower " +"ドキュメントを参照してください。" -#: awx/sso/conf.py:272 +#: awx/sso/conf.py:269 msgid "LDAP Group Search" msgstr "LDAP グループ検索" -#: awx/sso/conf.py:273 +#: awx/sso/conf.py:270 msgid "" "Users are mapped to organizations based on their membership in LDAP groups. " -"This setting defines the LDAP search query to find groups. Note that this, " -"unlike the user search above, does not support LDAPSearchUnion." +"This setting defines the LDAP search query to find groups. Unlike the user " +"search, group search does not support LDAPSearchUnion." msgstr "" "ユーザーは LDAP グループのメンバーシップに基づいて組織にマップされます。この設定は、グループを検索できるように LDAP " -"検索クエリーを定義します。上記のユーザー検索とは異なり、これは LDAPSearchUnion をサポートしないことに注意してください。" +"検索クエリーを定義します。ユーザー検索とは異なり、グループ検索は LDAPSearchUnion をサポートしません。" -#: awx/sso/conf.py:290 +#: awx/sso/conf.py:286 msgid "LDAP Group Type" msgstr "LDAP グループタイプ" -#: awx/sso/conf.py:291 +#: awx/sso/conf.py:287 msgid "" "The group type may need to be changed based on the type of the LDAP server." " Values are listed at: http://pythonhosted.org/django-auth-ldap/groups.html" @@ -3755,11 +3797,11 @@ msgstr "" "グループタイプは LDAP サーバーのタイプに基づいて変更する必要がある場合があります。値は以下に記載されています: " "http://pythonhosted.org/django-auth-ldap/groups.html#types-of-groups" -#: awx/sso/conf.py:306 +#: awx/sso/conf.py:302 msgid "LDAP Require Group" msgstr "LDAP 要求グループ" -#: awx/sso/conf.py:307 +#: awx/sso/conf.py:303 msgid "" "Group DN required to login. If specified, user must be a member of this " "group to login via LDAP. If not set, everyone in LDAP that matches the user " @@ -3769,11 +3811,11 @@ msgstr "" "経由でログインするにはユーザーはこのグループのメンバーである必要があります。設定されていない場合は、ユーザー検索に一致する LDAP " "のすべてのユーザーが Tower 経由でログインできます。1つの要求グループのみがサポートされます。" -#: awx/sso/conf.py:323 +#: awx/sso/conf.py:319 msgid "LDAP Deny Group" msgstr "LDAP 拒否グループ" -#: awx/sso/conf.py:324 +#: awx/sso/conf.py:320 msgid "" "Group DN denied from login. If specified, user will not be allowed to login " "if a member of this group. Only one deny group is supported." @@ -3781,244 +3823,271 @@ msgstr "" "グループ DN がログインで拒否されます。指定されている場合、ユーザーはこのグループのメンバーの場合にログインできません。1 " "つの拒否グループのみがサポートされます。" -#: awx/sso/conf.py:337 +#: awx/sso/conf.py:333 msgid "LDAP User Flags By Group" msgstr "LDAP ユーザーフラグ (グループ別)" -#: awx/sso/conf.py:338 +#: awx/sso/conf.py:334 msgid "" -"User profile flags updated from group membership (key is user attribute " -"name, value is group DN). These are boolean fields that are matched based " -"on whether the user is a member of the given group. So far only " -"is_superuser and is_system_auditor are settable via this method. This flag " -"is set both true and false at login time based on current LDAP settings." +"Retrieve users from a given group. At this time, superuser and system " +"auditors are the only groups supported. Refer to the Ansible Tower " +"documentation for more detail." msgstr "" -"グループメンバーシップから更新されるユーザープロファイルフラグです (キーはユーザー属性名、値はグループ " -"DN)。これらは、ユーザーが指定グループのメンバーであるかに応じて一致するブール値フィールドです。is_superuser および " -"is_system_auditor のみがこのメソッドで設定可能です。このフラグは、現在の LDAP 設定に基づいてログイン時に true および " -"false に設定されます。" +"指定されたグループからユーザーを検索します。この場合、サポートされるグループは、スーパーユーザーおよびシステム監査者のみになります。詳細は、Ansible" +" Tower ドキュメントを参照してください。" -#: awx/sso/conf.py:356 +#: awx/sso/conf.py:349 msgid "LDAP Organization Map" msgstr "LDAP 組織マップ" -#: awx/sso/conf.py:357 +#: awx/sso/conf.py:350 msgid "" "Mapping between organization admins/users and LDAP groups. This controls " -"what users are placed into what Tower organizations relative to their LDAP " -"group memberships. Configuration details are available in Tower " -"documentation." +"which users are placed into which Tower organizations relative to their LDAP" +" group memberships. Configuration details are available in the Ansible Tower" +" documentation." msgstr "" -"組織管理者/ユーザーと LDAP グループ間のマッピングです。この設定は、LDAP グループのメンバーシップに基づいてどのユーザーをどの Tower 組織に配置するかを管理します。設定の詳細については\n" -"Tower ドキュメントを参照してください。" +"組織管理者/ユーザーと LDAP グループ間のマッピングです。この設定は、LDAP グループのメンバーシップに基づいてどのユーザーをどの Tower " +"組織に配置するかを管理します。設定の詳細については、Ansible Tower ドキュメントを参照してください。" -#: awx/sso/conf.py:384 +#: awx/sso/conf.py:377 msgid "LDAP Team Map" msgstr "LDAP チームマップ" -#: awx/sso/conf.py:385 +#: awx/sso/conf.py:378 msgid "" -"Mapping between team members (users) and LDAP groups.Configuration details " -"are available in Tower documentation." -msgstr "チームメンバー (ユーザー) と LDAP グループ間のマッピングです。設定の詳細については Tower ドキュメントを参照してください。" +"Mapping between team members (users) and LDAP groups. Configuration details " +"are available in the Ansible Tower documentation." +msgstr "" +"チームメンバー (ユーザー) と LDAP グループ間のマッピングです。設定の詳細については、Ansible Tower " +"ドキュメントを参照してください。" -#: awx/sso/conf.py:413 +#: awx/sso/conf.py:406 msgid "RADIUS Server" msgstr "RADIUS サーバー" -#: awx/sso/conf.py:414 +#: awx/sso/conf.py:407 msgid "" -"Hostname/IP of RADIUS server. RADIUS authentication will be disabled if this" -" setting is empty." +"Hostname/IP of RADIUS server. RADIUS authentication is disabled if this " +"setting is empty." msgstr "RADIUS サーバーのホスト名/IP です。この設定が空の場合は RADIUS 認証は無効にされます。" -#: awx/sso/conf.py:416 awx/sso/conf.py:430 awx/sso/conf.py:442 +#: awx/sso/conf.py:409 awx/sso/conf.py:423 awx/sso/conf.py:435 #: awx/sso/models.py:14 msgid "RADIUS" msgstr "RADIUS" -#: awx/sso/conf.py:428 +#: awx/sso/conf.py:421 msgid "RADIUS Port" msgstr "RADIUS ポート" -#: awx/sso/conf.py:429 +#: awx/sso/conf.py:422 msgid "Port of RADIUS server." msgstr "RADIUS サーバーのポート。" -#: awx/sso/conf.py:440 +#: awx/sso/conf.py:433 msgid "RADIUS Secret" msgstr "RADIUS シークレット" -#: awx/sso/conf.py:441 +#: awx/sso/conf.py:434 msgid "Shared secret for authenticating to RADIUS server." msgstr "RADIUS サーバーに対して認証するための共有シークレット。" -#: awx/sso/conf.py:457 +#: awx/sso/conf.py:450 msgid "TACACS+ Server" msgstr "TACACS+ サーバー" -#: awx/sso/conf.py:458 +#: awx/sso/conf.py:451 msgid "Hostname of TACACS+ server." msgstr "TACACS+ サーバーのホスト名。" -#: awx/sso/conf.py:459 awx/sso/conf.py:472 awx/sso/conf.py:485 -#: awx/sso/conf.py:498 awx/sso/conf.py:510 awx/sso/models.py:15 +#: awx/sso/conf.py:452 awx/sso/conf.py:465 awx/sso/conf.py:478 +#: awx/sso/conf.py:491 awx/sso/conf.py:503 awx/sso/models.py:15 msgid "TACACS+" msgstr "TACACS+" -#: awx/sso/conf.py:470 +#: awx/sso/conf.py:463 msgid "TACACS+ Port" msgstr "TACACS+ ポート" -#: awx/sso/conf.py:471 +#: awx/sso/conf.py:464 msgid "Port number of TACACS+ server." msgstr "TACACS+ サーバーのポート番号。" -#: awx/sso/conf.py:483 +#: awx/sso/conf.py:476 msgid "TACACS+ Secret" msgstr "TACACS+ シークレット" -#: awx/sso/conf.py:484 +#: awx/sso/conf.py:477 msgid "Shared secret for authenticating to TACACS+ server." msgstr "TACACS+ サーバーに対して認証するための共有シークレット。" -#: awx/sso/conf.py:496 +#: awx/sso/conf.py:489 msgid "TACACS+ Auth Session Timeout" msgstr "TACACS+ 認証セッションタイムアウト" -#: awx/sso/conf.py:497 +#: awx/sso/conf.py:490 msgid "TACACS+ session timeout value in seconds, 0 disables timeout." msgstr "TACACS+ セッションのタイムアウト値 (秒数) です。0 はタイムアウトを無効にします。" -#: awx/sso/conf.py:508 +#: awx/sso/conf.py:501 msgid "TACACS+ Authentication Protocol" msgstr "TACACS+ 認証プロトコル" -#: awx/sso/conf.py:509 +#: awx/sso/conf.py:502 msgid "Choose the authentication protocol used by TACACS+ client." msgstr "TACACS+ クライアントによって使用される認証プロトコルを選択します。" -#: awx/sso/conf.py:524 +#: awx/sso/conf.py:517 msgid "Google OAuth2 Callback URL" msgstr "Google OAuth2 コールバック URL" -#: awx/sso/conf.py:525 +#: awx/sso/conf.py:518 awx/sso/conf.py:611 awx/sso/conf.py:676 msgid "" -"Create a project at https://console.developers.google.com/ to obtain an " -"OAuth2 key and secret for a web application. Ensure that the Google+ API is " -"enabled. Provide this URL as the callback URL for your application." +"Provide this URL as the callback URL for your application as part of your " +"registration process. Refer to the Ansible Tower documentation for more " +"detail." msgstr "" -"web アプリケーションの OAuth2 キーおよびシークレットを取得するために " -"https://console.developers.google.com/ にプロジェクトを作成します。Google+ API " -"が有効であることを確認します。この URL をアプリケーションのコールバック URL として指定します。" +"登録プロセスの一環として、この URL をアプリケーションのコールバック URL として指定します。詳細については、Ansible Tower " +"ドキュメントを参照してください。" -#: awx/sso/conf.py:529 awx/sso/conf.py:540 awx/sso/conf.py:551 -#: awx/sso/conf.py:564 awx/sso/conf.py:578 awx/sso/conf.py:590 -#: awx/sso/conf.py:602 +#: awx/sso/conf.py:521 awx/sso/conf.py:533 awx/sso/conf.py:545 +#: awx/sso/conf.py:558 awx/sso/conf.py:572 awx/sso/conf.py:584 +#: awx/sso/conf.py:596 msgid "Google OAuth2" msgstr "Google OAuth2" -#: awx/sso/conf.py:538 +#: awx/sso/conf.py:531 msgid "Google OAuth2 Key" msgstr "Google OAuth2 キー" -#: awx/sso/conf.py:539 -msgid "" -"The OAuth2 key from your web application at " -"https://console.developers.google.com/." -msgstr "web アプリケーションの OAuth2 キー (https://console.developers.google.com/)。" +#: awx/sso/conf.py:532 +msgid "The OAuth2 key from your web application." +msgstr "web アプリケーションの OAuth2 キー " -#: awx/sso/conf.py:549 +#: awx/sso/conf.py:543 msgid "Google OAuth2 Secret" msgstr "Google OAuth2 シークレット" -#: awx/sso/conf.py:550 -msgid "" -"The OAuth2 secret from your web application at " -"https://console.developers.google.com/." -msgstr "web アプリケーションの OAuth2 シークレット (https://console.developers.google.com/)。" +#: awx/sso/conf.py:544 +msgid "The OAuth2 secret from your web application." +msgstr "web アプリケーションの OAuth2 シークレット" -#: awx/sso/conf.py:561 +#: awx/sso/conf.py:555 msgid "Google OAuth2 Whitelisted Domains" msgstr "Google OAuth2 ホワイトリストドメイン" -#: awx/sso/conf.py:562 +#: awx/sso/conf.py:556 msgid "" "Update this setting to restrict the domains who are allowed to login using " "Google OAuth2." msgstr "この設定を更新し、Google OAuth2 を使用してログインできるドメインを制限します。" -#: awx/sso/conf.py:573 +#: awx/sso/conf.py:567 msgid "Google OAuth2 Extra Arguments" msgstr "Google OAuth2 追加引数" -#: awx/sso/conf.py:574 +#: awx/sso/conf.py:568 msgid "" -"Extra arguments for Google OAuth2 login. When only allowing a single domain " -"to authenticate, set to `{\"hd\": \"yourdomain.com\"}` and Google will not " -"display any other accounts even if the user is logged in with multiple " -"Google accounts." +"Extra arguments for Google OAuth2 login. You can restrict it to only allow a" +" single domain to authenticate, even if the user is logged in with multple " +"Google accounts. Refer to the Ansible Tower documentation for more detail." msgstr "" -"Google OAuth2 ログインの追加引数です。単一ドメインの認証のみを許可する場合、`{\"hd\": \"yourdomain.com\"}` " -"に設定すると、Google はユーザーが複数の Google アカウントでログインしている場合でもその他のアカウントを表示しません。" +"Google OAuth2 ログインの追加引数です。ユーザーが複数の Google " +"アカウントでログインしている場合でも、単一ドメインの認証のみを許可するように制限できます。詳細については、Ansible Tower " +"ドキュメントを参照してください。" -#: awx/sso/conf.py:588 +#: awx/sso/conf.py:582 msgid "Google OAuth2 Organization Map" msgstr "Google OAuth2 組織マップ" -#: awx/sso/conf.py:600 +#: awx/sso/conf.py:594 msgid "Google OAuth2 Team Map" msgstr "Google OAuth2 チームマップ" -#: awx/sso/conf.py:616 +#: awx/sso/conf.py:610 msgid "GitHub OAuth2 Callback URL" msgstr "GitHub OAuth2 コールバック URL" -#: awx/sso/conf.py:617 -msgid "" -"Create a developer application at https://github.com/settings/developers to " -"obtain an OAuth2 key (Client ID) and secret (Client Secret). Provide this " -"URL as the callback URL for your application." -msgstr "" -"OAuth2 キー (クライアント ID) およびシークレット (クライアントシークレット) を取得するために " -"https://github.com/settings/developers に開発者アプリケーションを作成します。この URL " -"をアプリケーションのコールバック URL として指定します。" - -#: awx/sso/conf.py:621 awx/sso/conf.py:632 awx/sso/conf.py:642 -#: awx/sso/conf.py:654 awx/sso/conf.py:666 +#: awx/sso/conf.py:614 awx/sso/conf.py:626 awx/sso/conf.py:637 +#: awx/sso/conf.py:649 awx/sso/conf.py:661 msgid "GitHub OAuth2" msgstr "GitHub OAuth2" -#: awx/sso/conf.py:630 +#: awx/sso/conf.py:624 msgid "GitHub OAuth2 Key" msgstr "GitHub OAuth2 キー" -#: awx/sso/conf.py:631 +#: awx/sso/conf.py:625 msgid "The OAuth2 key (Client ID) from your GitHub developer application." msgstr "GitHub 開発者アプリケーションからの OAuth2 キー (クライアント ID)。" -#: awx/sso/conf.py:640 +#: awx/sso/conf.py:635 msgid "GitHub OAuth2 Secret" msgstr "GitHub OAuth2 シークレット" -#: awx/sso/conf.py:641 +#: awx/sso/conf.py:636 msgid "" "The OAuth2 secret (Client Secret) from your GitHub developer application." msgstr "GitHub 開発者アプリケーションからの OAuth2 シークレット (クライアントシークレット)。" -#: awx/sso/conf.py:652 +#: awx/sso/conf.py:647 msgid "GitHub OAuth2 Organization Map" msgstr "GitHub OAuth2 組織マップ" -#: awx/sso/conf.py:664 +#: awx/sso/conf.py:659 msgid "GitHub OAuth2 Team Map" msgstr "GitHub OAuth2 チームマップ" -#: awx/sso/conf.py:680 +#: awx/sso/conf.py:675 msgid "GitHub Organization OAuth2 Callback URL" msgstr "GitHub 組織 OAuth2 コールバック URL" -#: awx/sso/conf.py:681 awx/sso/conf.py:756 +#: awx/sso/conf.py:679 awx/sso/conf.py:691 awx/sso/conf.py:702 +#: awx/sso/conf.py:715 awx/sso/conf.py:726 awx/sso/conf.py:738 +msgid "GitHub Organization OAuth2" +msgstr "GitHub 組織 OAuth2" + +#: awx/sso/conf.py:689 +msgid "GitHub Organization OAuth2 Key" +msgstr "GitHub 組織 OAuth2 キー" + +#: awx/sso/conf.py:690 awx/sso/conf.py:768 +msgid "The OAuth2 key (Client ID) from your GitHub organization application." +msgstr "GitHub 組織アプリケーションからの OAuth2 キー (クライアント ID)。" + +#: awx/sso/conf.py:700 +msgid "GitHub Organization OAuth2 Secret" +msgstr "GitHub 組織 OAuth2 シークレット" + +#: awx/sso/conf.py:701 awx/sso/conf.py:779 +msgid "" +"The OAuth2 secret (Client Secret) from your GitHub organization application." +msgstr "GitHub 組織アプリケーションからの OAuth2 シークレット (クライアントシークレット)。" + +#: awx/sso/conf.py:712 +msgid "GitHub Organization Name" +msgstr "GitHub 組織名" + +#: awx/sso/conf.py:713 +msgid "" +"The name of your GitHub organization, as used in your organization's URL: " +"https://github.com//." +msgstr "GitHub 組織の名前で、組織の URL (https://github.com//) で使用されます。" + +#: awx/sso/conf.py:724 +msgid "GitHub Organization OAuth2 Organization Map" +msgstr "GitHub 組織 OAuth2 組織マップ" + +#: awx/sso/conf.py:736 +msgid "GitHub Organization OAuth2 Team Map" +msgstr "GitHub 組織 OAuth2 チームマップ" + +#: awx/sso/conf.py:752 +msgid "GitHub Team OAuth2 Callback URL" +msgstr "GitHub チーム OAuth2 コールバック URL" + +#: awx/sso/conf.py:753 msgid "" "Create an organization-owned application at " "https://github.com/organizations//settings/applications and obtain " @@ -4030,60 +4099,16 @@ msgstr "" " キー (クライアント ID) およびシークレット (クライアントシークレット) を取得します。この URL をアプリケーションのコールバック URL " "として指定します。" -#: awx/sso/conf.py:685 awx/sso/conf.py:696 awx/sso/conf.py:706 -#: awx/sso/conf.py:718 awx/sso/conf.py:729 awx/sso/conf.py:741 -msgid "GitHub Organization OAuth2" -msgstr "GitHub 組織 OAuth2" - -#: awx/sso/conf.py:694 -msgid "GitHub Organization OAuth2 Key" -msgstr "GitHub 組織 OAuth2 キー" - -#: awx/sso/conf.py:695 awx/sso/conf.py:770 -msgid "The OAuth2 key (Client ID) from your GitHub organization application." -msgstr "GitHub 組織アプリケーションからの OAuth2 キー (クライアント ID)。" - -#: awx/sso/conf.py:704 -msgid "GitHub Organization OAuth2 Secret" -msgstr "GitHub 組織 OAuth2 シークレット" - -#: awx/sso/conf.py:705 awx/sso/conf.py:780 -msgid "" -"The OAuth2 secret (Client Secret) from your GitHub organization application." -msgstr "GitHub 組織アプリケーションからの OAuth2 シークレット (クライアントシークレット)。" - -#: awx/sso/conf.py:715 -msgid "GitHub Organization Name" -msgstr "GitHub 組織名" - -#: awx/sso/conf.py:716 -msgid "" -"The name of your GitHub organization, as used in your organization's URL: " -"https://github.com//." -msgstr "GitHub 組織の名前で、組織の URL (https://github.com//) で使用されます。" - -#: awx/sso/conf.py:727 -msgid "GitHub Organization OAuth2 Organization Map" -msgstr "GitHub 組織 OAuth2 組織マップ" - -#: awx/sso/conf.py:739 -msgid "GitHub Organization OAuth2 Team Map" -msgstr "GitHub 組織 OAuth2 チームマップ" - -#: awx/sso/conf.py:755 -msgid "GitHub Team OAuth2 Callback URL" -msgstr "GitHub チーム OAuth2 コールバック URL" - -#: awx/sso/conf.py:760 awx/sso/conf.py:771 awx/sso/conf.py:781 +#: awx/sso/conf.py:757 awx/sso/conf.py:769 awx/sso/conf.py:780 #: awx/sso/conf.py:793 awx/sso/conf.py:804 awx/sso/conf.py:816 msgid "GitHub Team OAuth2" msgstr "GitHub チーム OAuth2" -#: awx/sso/conf.py:769 +#: awx/sso/conf.py:767 msgid "GitHub Team OAuth2 Key" msgstr "GitHub チーム OAuth2 キー" -#: awx/sso/conf.py:779 +#: awx/sso/conf.py:778 msgid "GitHub Team OAuth2 Secret" msgstr "GitHub チーム OAuth2 シークレット" @@ -4113,17 +4138,15 @@ msgstr "Azure AD OAuth2 コールバック URL" #: awx/sso/conf.py:831 msgid "" -"Register an Azure AD application as described by https://msdn.microsoft.com" -"/en-us/library/azure/dn132599.aspx and obtain an OAuth2 key (Client ID) and " -"secret (Client Secret). Provide this URL as the callback URL for your " -"application." +"Provide this URL as the callback URL for your application as part of your " +"registration process. Refer to the Ansible Tower documentation for more " +"detail. " msgstr "" -"Azure AD アプリケーションを https://msdn.microsoft.com/en-" -"us/library/azure/dn132599.aspx の説明に従って登録し、OAuth2 キー (クライアント ID) およびシークレット " -"(クライアントシークレット) を取得します。この URL をアプリケーションのコールバック URL として指定します。" +"登録プロセスの一環として、この URL をアプリケーションのコールバック URL として指定します。詳細については、Ansible Tower " +"ドキュメントを参照してください。" -#: awx/sso/conf.py:835 awx/sso/conf.py:846 awx/sso/conf.py:856 -#: awx/sso/conf.py:868 awx/sso/conf.py:880 +#: awx/sso/conf.py:834 awx/sso/conf.py:846 awx/sso/conf.py:857 +#: awx/sso/conf.py:869 awx/sso/conf.py:881 msgid "Azure AD OAuth2" msgstr "Azure AD OAuth2" @@ -4135,27 +4158,27 @@ msgstr "Azure AD OAuth2 キー" msgid "The OAuth2 key (Client ID) from your Azure AD application." msgstr "Azure AD アプリケーションからの OAuth2 キー (クライアント ID)。" -#: awx/sso/conf.py:854 +#: awx/sso/conf.py:855 msgid "Azure AD OAuth2 Secret" msgstr "Azure AD OAuth2 シークレット" -#: awx/sso/conf.py:855 +#: awx/sso/conf.py:856 msgid "The OAuth2 secret (Client Secret) from your Azure AD application." msgstr "Azure AD アプリケーションからの OAuth2 シークレット (クライアントシークレット)。" -#: awx/sso/conf.py:866 +#: awx/sso/conf.py:867 msgid "Azure AD OAuth2 Organization Map" msgstr "Azure AD OAuth2 組織マップ" -#: awx/sso/conf.py:878 +#: awx/sso/conf.py:879 msgid "Azure AD OAuth2 Team Map" msgstr "Azure AD OAuth2 チームマップ" -#: awx/sso/conf.py:903 +#: awx/sso/conf.py:904 msgid "SAML Assertion Consumer Service (ACS) URL" msgstr "SAML アサーションコンシューマー サービス (ACS) URL" -#: awx/sso/conf.py:904 +#: awx/sso/conf.py:905 msgid "" "Register Tower as a service provider (SP) with each identity provider (IdP) " "you have configured. Provide your SP Entity ID and this ACS URL for your " @@ -4164,29 +4187,29 @@ msgstr "" "設定済みの各アイデンティティープロバイダー (IdP) で Tower をサービスプロバイダー (SP) として登録します。SP エンティティー ID " "およびアプリケーションのこの ACS URL を指定します。" -#: awx/sso/conf.py:907 awx/sso/conf.py:921 awx/sso/conf.py:935 -#: awx/sso/conf.py:950 awx/sso/conf.py:964 awx/sso/conf.py:982 -#: awx/sso/conf.py:1004 awx/sso/conf.py:1023 awx/sso/conf.py:1043 -#: awx/sso/conf.py:1077 awx/sso/conf.py:1090 awx/sso/models.py:16 +#: awx/sso/conf.py:908 awx/sso/conf.py:922 awx/sso/conf.py:936 +#: awx/sso/conf.py:951 awx/sso/conf.py:965 awx/sso/conf.py:978 +#: awx/sso/conf.py:999 awx/sso/conf.py:1017 awx/sso/conf.py:1036 +#: awx/sso/conf.py:1070 awx/sso/conf.py:1083 awx/sso/models.py:16 msgid "SAML" msgstr "SAML" -#: awx/sso/conf.py:918 +#: awx/sso/conf.py:919 msgid "SAML Service Provider Metadata URL" msgstr "SAML サービスプロバイダーメタデータ URL" -#: awx/sso/conf.py:919 +#: awx/sso/conf.py:920 msgid "" "If your identity provider (IdP) allows uploading an XML metadata file, you " "can download one from this URL." msgstr "" "アイデンティティープロバイダー (IdP) が XML メタデータファイルのアップロードを許可する場合、この URL からダウンロードできます。" -#: awx/sso/conf.py:931 +#: awx/sso/conf.py:932 msgid "SAML Service Provider Entity ID" msgstr "SAML サービスプロバイダーエンティティー ID" -#: awx/sso/conf.py:932 +#: awx/sso/conf.py:933 msgid "" "The application-defined unique identifier used as the audience of the SAML " "service provider (SP) configuration. This is usually the URL for Tower." @@ -4194,69 +4217,82 @@ msgstr "" "SAML サービスプロバイダー (SP) 設定の対象として使用されるアプリケーションで定義される固有識別子です。通常これは Tower の URL " "になります。" -#: awx/sso/conf.py:947 +#: awx/sso/conf.py:948 msgid "SAML Service Provider Public Certificate" msgstr "SAML サービスプロバイダーの公開証明書" -#: awx/sso/conf.py:948 +#: awx/sso/conf.py:949 msgid "" "Create a keypair for Tower to use as a service provider (SP) and include the" " certificate content here." msgstr "サービスプロバイダー (SP) として使用するための Tower のキーペアを作成し、ここに証明書の内容を組み込みます。" -#: awx/sso/conf.py:961 +#: awx/sso/conf.py:962 msgid "SAML Service Provider Private Key" msgstr "SAML サービスプロバイダーの秘密鍵|" -#: awx/sso/conf.py:962 +#: awx/sso/conf.py:963 msgid "" "Create a keypair for Tower to use as a service provider (SP) and include the" " private key content here." msgstr "サービスプロバイダー (SP) として使用するための Tower のキーペアを作成し、ここに秘密鍵の内容を組み込みます。" -#: awx/sso/conf.py:980 +#: awx/sso/conf.py:975 msgid "SAML Service Provider Organization Info" msgstr "SAML サービスプロバイダーの組織情報" -#: awx/sso/conf.py:981 -msgid "Configure this setting with information about your app." -msgstr "アプリの情報でこの設定を行います。" +#: awx/sso/conf.py:976 +msgid "" +"Provide the URL, display name, and the name of your app. Refer to the " +"Ansible Tower documentation for example syntax." +msgstr "" +"アプリケーションの URL、表示名、および名前を指定します。構文のサンプルについては Ansible Tower ドキュメントを参照してください。" -#: awx/sso/conf.py:1002 +#: awx/sso/conf.py:995 msgid "SAML Service Provider Technical Contact" msgstr "SAML サービスプロバイダーテクニカルサポートの問い合わせ先" -#: awx/sso/conf.py:1003 awx/sso/conf.py:1022 -msgid "Configure this setting with your contact information." -msgstr "問い合わせ先情報で設定を行います。" +#: awx/sso/conf.py:996 +msgid "" +"Provide the name and email address of the technical contact for your service" +" provider. Refer to the Ansible Tower documentation for example syntax." +msgstr "" +"サービスプロバイダーのテクニカルサポート担当の名前およびメールアドレスを指定します。構文のサンプルについては Ansible Tower " +"ドキュメントを参照してください。" -#: awx/sso/conf.py:1021 +#: awx/sso/conf.py:1013 msgid "SAML Service Provider Support Contact" msgstr "SAML サービスプロバイダーサポートの問い合わせ先" -#: awx/sso/conf.py:1036 +#: awx/sso/conf.py:1014 +msgid "" +"Provide the name and email address of the support contact for your service " +"provider. Refer to the Ansible Tower documentation for example syntax." +msgstr "" +"サービスプロバイダーのサポート担当の名前およびメールアドレスを指定します。構文のサンプルについては Ansible Tower " +"ドキュメントを参照してください。" + +#: awx/sso/conf.py:1030 msgid "SAML Enabled Identity Providers" msgstr "SAML で有効にされたアイデンティティープロバイダー" -#: awx/sso/conf.py:1037 +#: awx/sso/conf.py:1031 msgid "" "Configure the Entity ID, SSO URL and certificate for each identity provider " "(IdP) in use. Multiple SAML IdPs are supported. Some IdPs may provide user " -"data using attribute names that differ from the default OIDs " -"(https://github.com/omab/python-social-" -"auth/blob/master/social/backends/saml.py#L16). Attribute names may be " -"overridden for each IdP." +"data using attribute names that differ from the default OIDs. Attribute " +"names may be overridden for each IdP. Refer to the Ansible documentation for" +" additional details and syntax." msgstr "" "使用中のそれぞれのアイデンティティープロバイダー (IdP) についてのエンティティー ID、SSO URL および証明書を設定します。複数の SAML" -" IdP がサポートされます。一部の IdP はデフォルト OID とは異なる属性名を使用してユーザーデータを提供することがあります " -"(https://github.com/omab/python-social-" -"auth/blob/master/social/backends/saml.py#L16)。それぞれの IdP の属性名を上書きできます。" +" IdP がサポートされます。一部の IdP はデフォルト OID とは異なる属性名を使用してユーザーデータを提供することがあります。それぞれの IdP" +" について属性名が上書きされる可能性があります。追加の詳細および構文については、Ansible ドキュメントを参照してください。" -#: awx/sso/conf.py:1075 +#: awx/sso/conf.py:1068 msgid "SAML Organization Map" msgstr "SAML 組織マップ" -#: awx/sso/conf.py:1088 +#: awx/sso/conf.py:1081 msgid "SAML Team Map" msgstr "SAML チームマップ" @@ -4380,10 +4416,6 @@ msgstr "TACACS+ シークレットは ASCII 以外の文字を許可しません msgid "AWX" msgstr "AWX" -#: awx/templates/rest_framework/api.html:4 -msgid "AWX REST API" -msgstr "AWX REST API" - #: awx/templates/rest_framework/api.html:39 msgid "Ansible Tower API Guide" msgstr "Ansible Tower API ガイド" @@ -4444,7 +4476,7 @@ msgstr "%(name)s リソースでの PUT 要求" msgid "Make a PATCH request on the %(name)s resource" msgstr "%(name)s リソースでの PATCH 要求" -#: awx/ui/apps.py:9 awx/ui/conf.py:22 awx/ui/conf.py:38 awx/ui/conf.py:53 +#: awx/ui/apps.py:9 awx/ui/conf.py:22 awx/ui/conf.py:36 awx/ui/conf.py:51 msgid "UI" msgstr "UI" @@ -4477,19 +4509,16 @@ msgid "" "If needed, you can add specific information (such as a legal notice or a " "disclaimer) to a text box in the login modal using this setting. Any content" " added must be in plain text, as custom HTML or other markup languages are " -"not supported. If multiple paragraphs of text are needed, new lines " -"(paragraphs) must be escaped as `\\n` within the block of text." +"not supported." msgstr "" "必要な場合は、この設定を使ってログインモーダルのテキストボックスに特定の情報 (法律上の通知または免責事項など) " -"を追加できます。追加されるすべてのコンテンツは、カスタム HTML " -"や他のマークアップ言語がサポートされないため、プレーンテキストでなければなりません。テキストの複数のパラグラフが必要な場合、改行 (パラグラフ) " -"をテキストのブロック内の `\\n` としてエスケープする必要があります。" +"を追加できます。追加されるすべてのコンテンツは、カスタム HTML や他のマークアップ言語がサポートされないため、プレーンテキストでなければなりません。" -#: awx/ui/conf.py:48 +#: awx/ui/conf.py:46 msgid "Custom Logo" msgstr "カスタムロゴ" -#: awx/ui/conf.py:49 +#: awx/ui/conf.py:47 msgid "" "To set up a custom logo, provide a file that you create. For the custom logo" " to look its best, use a .png file with a transparent background. GIF, PNG " diff --git a/awx/locale/nl/LC_MESSAGES/django.po b/awx/locale/nl/LC_MESSAGES/django.po new file mode 100644 index 0000000000..92fca917e2 --- /dev/null +++ b/awx/locale/nl/LC_MESSAGES/django.po @@ -0,0 +1,4893 @@ +# helena , 2017. #zanata +# helena01 , 2017. #zanata +# helena02 , 2017. #zanata +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-27 19:27+0000\n" +"PO-Revision-Date: 2017-08-31 08:53+0000\n" +"Last-Translator: helena02 \n" +"Language-Team: Dutch\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"X-Generator: Zanata 4.2.1\n" + +#: awx/api/authentication.py:67 +msgid "Invalid token header. No credentials provided." +msgstr "Ongeldige tokenheader. Geen referenties verschaft." + +#: awx/api/authentication.py:70 +msgid "Invalid token header. Token string should not contain spaces." +msgstr "Ongeldige tokenheader. De tokentekenreeks kan geen spaties bevatten." + +#: awx/api/authentication.py:105 +msgid "User inactive or deleted" +msgstr "De gebruiker is niet actief of is verwijderd" + +#: awx/api/authentication.py:161 +msgid "Invalid task token" +msgstr "Ongeldig taaktoken" + +#: awx/api/conf.py:12 +msgid "Idle Time Force Log Out" +msgstr "Niet-actieve tijd voor forceren van afmelding" + +#: awx/api/conf.py:13 +msgid "" +"Number of seconds that a user is inactive before they will need to login " +"again." +msgstr "" +"Maximumaantal seconden dat een gebruiker niet-actief is voordat deze zich " +"opnieuw moet aanmelden." + +#: awx/api/conf.py:14 awx/api/conf.py:24 awx/api/conf.py:33 awx/sso/conf.py:85 +#: awx/sso/conf.py:96 awx/sso/conf.py:108 awx/sso/conf.py:123 +msgid "Authentication" +msgstr "Authenticatie" + +#: awx/api/conf.py:22 +msgid "Maximum number of simultaneous logins" +msgstr "Maximumaantal gelijktijdige aanmeldingen" + +#: awx/api/conf.py:23 +msgid "" +"Maximum number of simultaneous logins a user may have. To disable enter -1." +msgstr "" +"Maximumaantal gelijktijdige aanmeldingen dat een gebruiker kan hebben. Voer " +"-1 in om dit uit te schakelen." + +#: awx/api/conf.py:31 +msgid "Enable HTTP Basic Auth" +msgstr "HTTP-basisauthenticatie inschakelen" + +#: awx/api/conf.py:32 +msgid "Enable HTTP Basic Auth for the API Browser." +msgstr "Schakel HTTP-basisauthenticatie voor de API-browser in." + +#: awx/api/filters.py:129 +msgid "Filtering on password fields is not allowed." +msgstr "Filteren op wachtwoordvelden is niet toegestaan." + +#: awx/api/filters.py:141 awx/api/filters.py:143 +#, python-format +msgid "Filtering on %s is not allowed." +msgstr "Filteren op %s is niet toegestaan." + +#: awx/api/filters.py:146 +msgid "Loops not allowed in filters, detected on field {}." +msgstr "Lussen zijn niet toegestaan in filters, gedetecteerd in veld {}." + +#: awx/api/filters.py:297 +#, python-format +msgid "cannot filter on kind %s" +msgstr "kan niet filteren op soort %s" + +#: awx/api/filters.py:404 +#, python-format +msgid "cannot order by field %s" +msgstr "Kan niet ordenen op veld %s" + +#: awx/api/generics.py:515 awx/api/generics.py:577 +msgid "\"id\" field must be an integer." +msgstr "'Id'-veld moet een geheel getal zijn." + +#: awx/api/generics.py:574 +msgid "\"id\" is required to disassociate" +msgstr "'id' is vereist om los te koppelen" + +#: awx/api/generics.py:625 +msgid "{} 'id' field is missing." +msgstr "{} 'id'-veld ontbreekt." + +#: awx/api/metadata.py:51 +msgid "Database ID for this {}." +msgstr "Database-id voor dit {}." + +#: awx/api/metadata.py:52 +msgid "Name of this {}." +msgstr "Naam van dit {}." + +#: awx/api/metadata.py:53 +msgid "Optional description of this {}." +msgstr "Optionele beschrijving van dit {}." + +#: awx/api/metadata.py:54 +msgid "Data type for this {}." +msgstr "Gegevenstype voor dit {}." + +#: awx/api/metadata.py:55 +msgid "URL for this {}." +msgstr "URL voor dit {}." + +#: awx/api/metadata.py:56 +msgid "Data structure with URLs of related resources." +msgstr "Gegevensstructuur met URL's van verwante bronnen." + +#: awx/api/metadata.py:57 +msgid "Data structure with name/description for related resources." +msgstr "Gegevensstructuur met naam/beschrijving voor verwante bronnen." + +#: awx/api/metadata.py:58 +msgid "Timestamp when this {} was created." +msgstr "Tijdstempel toen dit {} werd gemaakt." + +#: awx/api/metadata.py:59 +msgid "Timestamp when this {} was last modified." +msgstr "Tijdstempel van de laatste wijziging van dit {}." + +#: awx/api/parsers.py:64 +msgid "JSON parse error - not a JSON object" +msgstr "JSON-parseerfout - is geen JSON-object" + +#: awx/api/parsers.py:67 +#, python-format +msgid "" +"JSON parse error - %s\n" +"Possible cause: trailing comma." +msgstr "" +"JSON-parseerfout - %s\n" +"Mogelijke oorzaak: navolgende komma." + +#: awx/api/serializers.py:268 +msgid "Playbook Run" +msgstr "Draaiboek uitvoering" + +#: awx/api/serializers.py:269 +msgid "Command" +msgstr "Opdracht" + +#: awx/api/serializers.py:270 awx/main/models/unified_jobs.py:435 +msgid "SCM Update" +msgstr "SCM-update" + +#: awx/api/serializers.py:271 +msgid "Inventory Sync" +msgstr "Inventarissynchronisatie" + +#: awx/api/serializers.py:272 +msgid "Management Job" +msgstr "Beheertaak" + +#: awx/api/serializers.py:273 +msgid "Workflow Job" +msgstr "Workflowtaak" + +#: awx/api/serializers.py:274 +msgid "Workflow Template" +msgstr "Workflowsjabloon" + +#: awx/api/serializers.py:697 awx/api/serializers.py:755 awx/api/views.py:4314 +#, python-format +msgid "" +"Standard Output too large to display (%(text_size)d bytes), only download " +"supported for sizes over %(supported_size)d bytes" +msgstr "" +"De standaardoutput is te groot om weer te geven (%(text_size)d bytes), " +"alleen download ondersteund voor groottes van meer dan %(supported_size)d " +"bytes" + +#: awx/api/serializers.py:770 +msgid "Write-only field used to change the password." +msgstr "Een alleen-schrijven-veld is gebruikt om het wachtwoord te wijzigen." + +#: awx/api/serializers.py:772 +msgid "Set if the account is managed by an external service" +msgstr "Instellen als de account wordt beheerd door een externe service" + +#: awx/api/serializers.py:796 +msgid "Password required for new User." +msgstr "Wachtwoord vereist voor een nieuwe gebruiker." + +#: awx/api/serializers.py:882 +#, python-format +msgid "Unable to change %s on user managed by LDAP." +msgstr "Kan %s niet wijzigen voor gebruiker die wordt beheerd met LDAP." + +#: awx/api/serializers.py:1046 +msgid "Organization is missing" +msgstr "Organisatie ontbreekt" + +#: awx/api/serializers.py:1050 +msgid "Update options must be set to false for manual projects." +msgstr "" +"De update-opties moeten voor handmatige projecten worden ingesteld op " +"onwaar." + +#: awx/api/serializers.py:1056 +msgid "Array of playbooks available within this project." +msgstr "Er is binnen dit project een draaiboekenmatrix beschikbaar." + +#: awx/api/serializers.py:1075 +msgid "" +"Array of inventory files and directories available within this project, not " +"comprehensive." +msgstr "" +"Er is binnen dit project een niet-volledige matrix met " +"inventarisatiebestanden en -mappen beschikbaar." + +#: awx/api/serializers.py:1282 +#, python-format +msgid "Invalid port specification: %s" +msgstr "Ongeldige poortspecificatie: %s" + +#: awx/api/serializers.py:1293 +msgid "Cannot create Host for Smart Inventory" +msgstr "Kan geen host aanmaken voor Smart-inventaris" + +#: awx/api/serializers.py:1315 awx/api/serializers.py:3218 +#: awx/api/serializers.py:3303 awx/main/validators.py:198 +msgid "Must be valid JSON or YAML." +msgstr "Moet geldig JSON of YAML zijn." + +#: awx/api/serializers.py:1411 +msgid "Invalid group name." +msgstr "Ongeldige groepsnaam." + +#: awx/api/serializers.py:1416 +msgid "Cannot create Group for Smart Inventory" +msgstr "Kan geen groep aanmaken voor Smart-inventaris" + +#: awx/api/serializers.py:1488 +msgid "" +"Script must begin with a hashbang sequence: i.e.... #!/usr/bin/env python" +msgstr "" +"Script moet beginnen met een hashbang-reeks, bijvoorbeeld ... #!/usr/bin/env" +" python" + +#: awx/api/serializers.py:1534 +msgid "`{}` is a prohibited environment variable" +msgstr "`{}` is niet toegestaan als omgevingsvariabele" + +#: awx/api/serializers.py:1545 +msgid "If 'source' is 'custom', 'source_script' must be provided." +msgstr "Als 'bron' 'aangepast' is, moet 'source_script' worden geleverd." + +#: awx/api/serializers.py:1551 +msgid "Must provide an inventory." +msgstr "Moet een inventaris verschaffen." + +#: awx/api/serializers.py:1555 +msgid "" +"The 'source_script' does not belong to the same organization as the " +"inventory." +msgstr "" +"Het 'source_script' behoort niet tot dezelfde categorie als de inventaris." + +#: awx/api/serializers.py:1557 +msgid "'source_script' doesn't exist." +msgstr "'source_script' bestaat niet." + +#: awx/api/serializers.py:1581 +msgid "Automatic group relationship, will be removed in 3.3" +msgstr "Automatische groepsrelatie, wordt verwijderd in 3.3" + +#: awx/api/serializers.py:1658 +msgid "Cannot use manual project for SCM-based inventory." +msgstr "" +"Kan geen handmatig project gebruiken voor een SCM-gebaseerde inventaris." + +#: awx/api/serializers.py:1664 +msgid "" +"Manual inventory sources are created automatically when a group is created " +"in the v1 API." +msgstr "" +"Handmatige inventarisbronnen worden automatisch gemaakt wanneer er een groep" +" wordt gemaakt in de v1 API." + +#: awx/api/serializers.py:1669 +msgid "Setting not compatible with existing schedules." +msgstr "Instelling is niet compatibel met bestaande schema's." + +#: awx/api/serializers.py:1674 +msgid "Cannot create Inventory Source for Smart Inventory" +msgstr "Kan geen inventarisbron aanmaken voor Smart-inventaris" + +#: awx/api/serializers.py:1688 +#, python-format +msgid "Cannot set %s if not SCM type." +msgstr "Kan %s niet instellen als het geen SCM-type is." + +#: awx/api/serializers.py:1929 +msgid "Modifications not allowed for managed credential types" +msgstr "Wijzigingen zijn niet toegestaan voor beheerde referentietypen" + +#: awx/api/serializers.py:1934 +msgid "" +"Modifications to inputs are not allowed for credential types that are in use" +msgstr "" +"Wijzigingen in inputs zijn niet toegestaan voor referentietypen die in " +"gebruik zijn" + +#: awx/api/serializers.py:1940 +#, python-format +msgid "Must be 'cloud' or 'net', not %s" +msgstr "Moet 'cloud' of 'net' zijn, niet %s" + +#: awx/api/serializers.py:1946 +msgid "'ask_at_runtime' is not supported for custom credentials." +msgstr "'ask_at_runtime' wordt niet ondersteund voor aangepaste referenties." + +#: awx/api/serializers.py:2119 +#, python-format +msgid "\"%s\" is not a valid choice" +msgstr "\"%s\" is geen geldige keuze" + +#: awx/api/serializers.py:2138 +#, python-format +msgid "'%s' is not a valid field for %s" +msgstr "'%s' is geen geldig veld voor %s" + +#: awx/api/serializers.py:2150 +msgid "" +"Write-only field used to add user to owner role. If provided, do not give " +"either team or organization. Only valid for creation." +msgstr "" +"Er is een alleen-schrijven-veld gebruikt om een gebruiker toe te voegen aan " +"de eigenaarrol. Indien verschaft, geef geen team of organisatie op. Alleen " +"geldig voor maken." + +#: awx/api/serializers.py:2155 +msgid "" +"Write-only field used to add team to owner role. If provided, do not give " +"either user or organization. Only valid for creation." +msgstr "" +"Er is een alleen-schrijven-veld gebruikt om een team aan de eigenaarrol toe " +"te voegen. Indien verschaft, geef geen gebruiker of organisatie op. Alleen " +"geldig voor maken." + +#: awx/api/serializers.py:2160 +msgid "" +"Inherit permissions from organization roles. If provided on creation, do not" +" give either user or team." +msgstr "" +"Neem machtigingen over van organisatierollen. Indien verschaft bij maken, " +"geef geen gebruiker of team op." + +#: awx/api/serializers.py:2176 +msgid "Missing 'user', 'team', or 'organization'." +msgstr "'gebruiker', 'team' of 'organisatie' ontbreekt." + +#: awx/api/serializers.py:2216 +msgid "" +"Credential organization must be set and match before assigning to a team" +msgstr "" +"Referentieorganisatie moet worden ingesteld en moet overeenkomen vóór " +"toewijzing aan een team" + +#: awx/api/serializers.py:2378 +msgid "You must provide a cloud credential." +msgstr "U moet een cloudreferentie opgeven." + +#: awx/api/serializers.py:2379 +msgid "You must provide a network credential." +msgstr "U moet een netwerkreferentie opgeven." + +#: awx/api/serializers.py:2395 +msgid "This field is required." +msgstr "Dit veld is vereist." + +#: awx/api/serializers.py:2397 awx/api/serializers.py:2399 +msgid "Playbook not found for project." +msgstr "Draaiboek is niet gevonden voor project." + +#: awx/api/serializers.py:2401 +msgid "Must select playbook for project." +msgstr "Moet een draaiboek selecteren voor het project." + +#: awx/api/serializers.py:2476 +msgid "Must either set a default value or ask to prompt on launch." +msgstr "" +"Moet een standaardwaarde instellen of hierom laten vragen bij het opstarten." + +#: awx/api/serializers.py:2478 awx/main/models/jobs.py:325 +msgid "Job types 'run' and 'check' must have assigned a project." +msgstr "" +"Aan de taaktypen 'uitvoeren' en 'controleren' moet een project zijn " +"toegewezen." + +#: awx/api/serializers.py:2549 +msgid "Invalid job template." +msgstr "Ongeldige taaksjabloon." + +#: awx/api/serializers.py:2630 +msgid "Credential not found or deleted." +msgstr "Referentie niet gevonden of verwijderd." + +#: awx/api/serializers.py:2632 +msgid "Job Template Project is missing or undefined." +msgstr "Het taaksjabloonproject ontbreekt of is niet gedefinieerd." + +#: awx/api/serializers.py:2634 +msgid "Job Template Inventory is missing or undefined." +msgstr "De taaksjablooninventaris ontbreekt of is niet gedefinieerd." + +#: awx/api/serializers.py:2921 +#, python-format +msgid "%(job_type)s is not a valid job type. The choices are %(choices)s." +msgstr "%(job_type)s is geen geldig taaktype. De keuzes zijn %(choices)s." + +#: awx/api/serializers.py:2926 +msgid "Workflow job template is missing during creation." +msgstr "De taaksjabloon voor de workflow ontbreekt tijdens het maken." + +#: awx/api/serializers.py:2931 +#, python-format +msgid "Cannot nest a %s inside a WorkflowJobTemplate" +msgstr "Kan geen a %s nesten in een WorkflowJobTemplate" + +#: awx/api/serializers.py:3188 +#, python-format +msgid "Job Template '%s' is missing or undefined." +msgstr "Taaksjabloon '%s' ontbreekt of is niet gedefinieerd." + +#: awx/api/serializers.py:3191 +msgid "The inventory associated with this Job Template is being deleted." +msgstr "De aan deze taaksjabloon gekoppelde inventaris wordt verwijderd." + +#: awx/api/serializers.py:3232 awx/api/views.py:2991 +#, python-format +msgid "Cannot assign multiple %s credentials." +msgstr "Kan niet meerdere referenties voor %s toewijzen." + +#: awx/api/serializers.py:3234 awx/api/views.py:2994 +msgid "Extra credentials must be network or cloud." +msgstr "Extra referenties moeten netwerk of cloud zijn." + +#: awx/api/serializers.py:3371 +msgid "" +"Missing required fields for Notification Configuration: notification_type" +msgstr "" +"Ontbrekende vereiste velden voor kennisgevingsconfiguratie: " +"notification_type" + +#: awx/api/serializers.py:3394 +msgid "No values specified for field '{}'" +msgstr "Geen waarden opgegeven voor veld '{}'" + +#: awx/api/serializers.py:3399 +msgid "Missing required fields for Notification Configuration: {}." +msgstr "Ontbrekende vereiste velden voor kennisgevingsconfiguratie: {}." + +#: awx/api/serializers.py:3402 +msgid "Configuration field '{}' incorrect type, expected {}." +msgstr "Configuratieveld '{}' onjuist type, {} verwacht." + +#: awx/api/serializers.py:3455 +msgid "Inventory Source must be a cloud resource." +msgstr "Inventarisbron moet een cloudresource zijn." + +#: awx/api/serializers.py:3457 +msgid "Manual Project cannot have a schedule set." +msgstr "Handmatig project kan geen ingesteld schema hebben." + +#: awx/api/serializers.py:3460 +msgid "" +"Inventory sources with `update_on_project_update` cannot be scheduled. " +"Schedule its source project `{}` instead." +msgstr "" +"Inventarisbronnen met `update_on_project_update` kunnen niet worden gepland." +" Plan in plaats daarvan het bijbehorende bronproject `{}`." + +#: awx/api/serializers.py:3479 +msgid "Projects and inventory updates cannot accept extra variables." +msgstr "" +"Projecten en inventarisupdates kunnen geen extra variabelen accepteren." + +#: awx/api/serializers.py:3501 +msgid "" +"DTSTART required in rrule. Value should match: DTSTART:YYYYMMDDTHHMMSSZ" +msgstr "" +"DTSTART vereist in rrule. De waarde moet overeenkomen: " +"DTSTART:YYYYMMDDTHHMMSSZ" + +#: awx/api/serializers.py:3503 +msgid "Multiple DTSTART is not supported." +msgstr "Meervoudige DTSTART wordt niet ondersteund." + +#: awx/api/serializers.py:3505 +msgid "RRULE require in rrule." +msgstr "RRULE vereist in rrule." + +#: awx/api/serializers.py:3507 +msgid "Multiple RRULE is not supported." +msgstr "Meervoudige RRULE wordt niet ondersteund." + +#: awx/api/serializers.py:3509 +msgid "INTERVAL required in rrule." +msgstr "INTERVAL is vereist in rrule." + +#: awx/api/serializers.py:3511 +msgid "TZID is not supported." +msgstr "TZID wordt niet ondersteund." + +#: awx/api/serializers.py:3513 +msgid "SECONDLY is not supported." +msgstr "SECONDLY wordt niet ondersteund." + +#: awx/api/serializers.py:3515 +msgid "Multiple BYMONTHDAYs not supported." +msgstr "Meerdere BYMONTHDAY's worden niet ondersteund." + +#: awx/api/serializers.py:3517 +msgid "Multiple BYMONTHs not supported." +msgstr "Meerdere BYMONTH's worden niet ondersteund." + +#: awx/api/serializers.py:3519 +msgid "BYDAY with numeric prefix not supported." +msgstr "BYDAY met numeriek voorvoegsel wordt niet ondersteund." + +#: awx/api/serializers.py:3521 +msgid "BYYEARDAY not supported." +msgstr "BYYEARDAY wordt niet ondersteund." + +#: awx/api/serializers.py:3523 +msgid "BYWEEKNO not supported." +msgstr "BYWEEKNO wordt niet ondersteund." + +#: awx/api/serializers.py:3527 +msgid "COUNT > 999 is unsupported." +msgstr "COUNT > 999 wordt niet ondersteund." + +#: awx/api/serializers.py:3531 +msgid "rrule parsing failed validation." +msgstr "De validering van rrule-parsering is mislukt." + +#: awx/api/serializers.py:3631 +msgid "" +"A summary of the new and changed values when an object is created, updated, " +"or deleted" +msgstr "" +"Een overzicht van de nieuwe en gewijzigde waarden wanneer een object wordt " +"gemaakt, bijgewerkt of verwijderd" + +#: awx/api/serializers.py:3633 +msgid "" +"For create, update, and delete events this is the object type that was " +"affected. For associate and disassociate events this is the object type " +"associated or disassociated with object2." +msgstr "" +"Voor maak-, update- en verwijder-gebeurtenissen is dit het betreffende " +"objecttype. Voor koppel- en ontkoppel-gebeurtenissen is dit het objecttype " +"dat wordt gekoppeld aan of ontkoppeld van object2." + +#: awx/api/serializers.py:3636 +msgid "" +"Unpopulated for create, update, and delete events. For associate and " +"disassociate events this is the object type that object1 is being associated" +" with." +msgstr "" +"Niet-ingevuld voor maak-, update- en verwijder-gebeurtenissen. Voor koppel- " +"en ontkoppel-gebeurtenissen is dit het objecttype waaraan object1 wordt " +"gekoppeld." + +#: awx/api/serializers.py:3639 +msgid "The action taken with respect to the given object(s)." +msgstr "De actie ondernomen met betrekking tot de gegeven objecten." + +#: awx/api/serializers.py:3749 +msgid "Unable to login with provided credentials." +msgstr "Kan niet aanmelden met de verschafte referenties." + +#: awx/api/serializers.py:3751 +msgid "Must include \"username\" and \"password\"." +msgstr "Moet \"gebruikersnaam\" en \"wachtwoord\" bevatten." + +#: awx/api/views.py:106 +msgid "Your license does not allow use of the activity stream." +msgstr "Uw licentie staat het gebruik van de activiteitenstroom niet toe." + +#: awx/api/views.py:116 +msgid "Your license does not permit use of system tracking." +msgstr "Uw licentie staat het gebruik van systeemtracking niet toe." + +#: awx/api/views.py:126 +msgid "Your license does not allow use of workflows." +msgstr "Uw licentie staat het gebruik van workflows niet toe." + +#: awx/api/views.py:140 +msgid "Cannot delete job resource when associated workflow job is running." +msgstr "" +"Kan taakresource niet verwijderen wanneer een gekoppelde workflowtaak wordt " +"uitgevoerd." + +#: awx/api/views.py:144 +msgid "Cannot delete running job resource." +msgstr "Kan geen taakbron in uitvoering verwijderen." + +#: awx/api/views.py:153 awx/templates/rest_framework/api.html:28 +msgid "REST API" +msgstr "REST API" + +#: awx/api/views.py:162 awx/templates/rest_framework/api.html:4 +msgid "AWX REST API" +msgstr "AWX REST API" + +#: awx/api/views.py:224 +msgid "Version 1" +msgstr "Versie 1" + +#: awx/api/views.py:228 +msgid "Version 2" +msgstr "Versie 2" + +#: awx/api/views.py:239 +msgid "Ping" +msgstr "Ping" + +#: awx/api/views.py:270 awx/conf/apps.py:12 +msgid "Configuration" +msgstr "Configuratie" + +#: awx/api/views.py:323 +msgid "Invalid license data" +msgstr "Ongeldige licentiegegevens" + +#: awx/api/views.py:325 +msgid "Missing 'eula_accepted' property" +msgstr "Ontbrekende eigenschap 'eula_accepted'" + +#: awx/api/views.py:329 +msgid "'eula_accepted' value is invalid" +msgstr "Waarde 'eula_accepted' is ongeldig" + +#: awx/api/views.py:332 +msgid "'eula_accepted' must be True" +msgstr "'eula_accepted' moet True zijn" + +#: awx/api/views.py:339 +msgid "Invalid JSON" +msgstr "Ongeldig JSON" + +#: awx/api/views.py:347 +msgid "Invalid License" +msgstr "Ongeldige licentie" + +#: awx/api/views.py:357 +msgid "Invalid license" +msgstr "Ongeldige licentie" + +#: awx/api/views.py:365 +#, python-format +msgid "Failed to remove license (%s)" +msgstr "Kan licentie niet verwijderen (%s)" + +#: awx/api/views.py:370 +msgid "Dashboard" +msgstr "Dashboard" + +#: awx/api/views.py:469 +msgid "Dashboard Jobs Graphs" +msgstr "Dashboardtaakgrafieken" + +#: awx/api/views.py:505 +#, python-format +msgid "Unknown period \"%s\"" +msgstr "Onbekende periode \"%s\"" + +#: awx/api/views.py:519 +msgid "Instances" +msgstr "Instanties" + +#: awx/api/views.py:527 +msgid "Instance Detail" +msgstr "Instantiedetails" + +#: awx/api/views.py:535 +msgid "Instance Running Jobs" +msgstr "Taken in uitvoering van instantie" + +#: awx/api/views.py:550 +msgid "Instance's Instance Groups" +msgstr "Instantiegroepen van instantie" + +#: awx/api/views.py:560 +msgid "Instance Groups" +msgstr "Instantiegroepen" + +#: awx/api/views.py:568 +msgid "Instance Group Detail" +msgstr "Details van instantiegroep" + +#: awx/api/views.py:576 +msgid "Instance Group Running Jobs" +msgstr "Taken in uitvoering van instantiegroep" + +#: awx/api/views.py:586 +msgid "Instance Group's Instances" +msgstr "Instanties van instantiegroep" + +#: awx/api/views.py:596 +msgid "Schedules" +msgstr "Schema's" + +#: awx/api/views.py:615 +msgid "Schedule Jobs List" +msgstr "Schema takenlijst" + +#: awx/api/views.py:841 +msgid "Your license only permits a single organization to exist." +msgstr "Uw licentie staat het gebruik van maar één organisatie toe." + +#: awx/api/views.py:1077 awx/api/views.py:4615 +msgid "You cannot assign an Organization role as a child role for a Team." +msgstr "" +"U kunt een organisatierol niet toewijzen als een onderliggende rol voor een " +"team." + +#: awx/api/views.py:1081 awx/api/views.py:4629 +msgid "You cannot grant system-level permissions to a team." +msgstr "U kunt een team geen rechten op systeemniveau verlenen." + +#: awx/api/views.py:1088 awx/api/views.py:4621 +msgid "" +"You cannot grant credential access to a team when the Organization field " +"isn't set, or belongs to a different organization" +msgstr "" +"U kunt een team geen referentietoegang verlenen wanneer het veld Organisatie" +" niet is ingesteld of behoort tot een andere organisatie" + +#: awx/api/views.py:1178 +msgid "Cannot delete project." +msgstr "Kan project niet verwijderen." + +#: awx/api/views.py:1213 +msgid "Project Schedules" +msgstr "Projectschema's" + +#: awx/api/views.py:1225 +msgid "Project SCM Inventory Sources" +msgstr "SCM-inventarisbronnen van project" + +#: awx/api/views.py:1352 +msgid "Project Update SCM Inventory Updates" +msgstr "SCM-inventarisupdates van projectupdate" + +#: awx/api/views.py:1407 +msgid "Me" +msgstr "Mij" + +#: awx/api/views.py:1451 awx/api/views.py:4572 +msgid "You may not perform any action with your own admin_role." +msgstr "U kunt geen actie uitvoeren met uw eigen admin_role." + +#: awx/api/views.py:1457 awx/api/views.py:4576 +msgid "You may not change the membership of a users admin_role" +msgstr "" +"U kunt het lidmaatschap van de admin_role van een gebruiker niet wijzigen" + +#: awx/api/views.py:1462 awx/api/views.py:4581 +msgid "" +"You cannot grant credential access to a user not in the credentials' " +"organization" +msgstr "" +"U kunt geen referentietoegang verlenen aan een gebruiker die niet tot de " +"organisatie van de referenties behoort" + +#: awx/api/views.py:1466 awx/api/views.py:4585 +msgid "You cannot grant private credential access to another user" +msgstr "U kunt geen privéreferentietoegang verlenen aan een andere gebruiker" + +#: awx/api/views.py:1564 +#, python-format +msgid "Cannot change %s." +msgstr "Kan %s niet wijzigen." + +#: awx/api/views.py:1570 +msgid "Cannot delete user." +msgstr "Kan gebruiker niet verwijderen." + +#: awx/api/views.py:1599 +msgid "Deletion not allowed for managed credential types" +msgstr "Verwijdering is niet toegestaan voor beheerde referentietypen" + +#: awx/api/views.py:1601 +msgid "Credential types that are in use cannot be deleted" +msgstr "Referentietypen die in gebruik zijn, kunnen niet worden verwijderd" + +#: awx/api/views.py:1779 +msgid "Cannot delete inventory script." +msgstr "Kan inventarisscript niet verwijderen." + +#: awx/api/views.py:1864 +msgid "{0}" +msgstr "{0}" + +#: awx/api/views.py:2089 +msgid "Fact not found." +msgstr "Feit niet gevonden." + +#: awx/api/views.py:2113 +msgid "SSLError while trying to connect to {}" +msgstr "SSLError tijdens poging om verbinding te maken met {}" + +#: awx/api/views.py:2115 +msgid "Request to {} timed out." +msgstr "Er is een time-out opgetreden voor de aanvraag naar {}" + +#: awx/api/views.py:2117 +msgid "Unkown exception {} while trying to GET {}" +msgstr "Onbekende uitzondering {} tijdens poging tot OPHALEN {}" + +#: awx/api/views.py:2120 +msgid "" +"Unauthorized access. Please check your Insights Credential username and " +"password." +msgstr "" +"Geen toegang. Controleer uw Insights Credential gebruikersnaam en " +"wachtwoord." + +#: awx/api/views.py:2122 +msgid "" +"Failed to gather reports and maintenance plans from Insights API at URL {}. " +"Server responded with {} status code and message {}" +msgstr "" +"Kan rapporten en onderhoudsplannen niet verzamelen uit Insights API op URL " +"{}. Server heeft gereageerd met statuscode {} en bericht {}" + +#: awx/api/views.py:2128 +msgid "Expected JSON response from Insights but instead got {}" +msgstr "Verwachtte JSON-reactie van Insights, maar kreeg in plaats daarvan {}" + +#: awx/api/views.py:2135 +msgid "This host is not recognized as an Insights host." +msgstr "Deze host wordt niet herkend als een Insights-host." + +#: awx/api/views.py:2140 +msgid "The Insights Credential for \"{}\" was not found." +msgstr "De Insights-referentie voor \"{}\" is niet gevonden." + +#: awx/api/views.py:2209 +msgid "Cyclical Group association." +msgstr "Cyclische groepskoppeling." + +#: awx/api/views.py:2482 +msgid "Inventory Source List" +msgstr "Lijst met inventarisbronnen" + +#: awx/api/views.py:2495 +msgid "Inventory Sources Update" +msgstr "Update van inventarisbronnen" + +#: awx/api/views.py:2525 +msgid "Could not start because `can_update` returned False" +msgstr "Kan niet starten omdat 'can_update' False heeft geretourneerd" + +#: awx/api/views.py:2533 +msgid "No inventory sources to update." +msgstr "Er zijn geen inventarisbronnen om bij te werken." + +#: awx/api/views.py:2565 +msgid "Cannot delete inventory source." +msgstr "Kan inventarisbron niet verwijderen." + +#: awx/api/views.py:2573 +msgid "Inventory Source Schedules" +msgstr "Inventarisbronschema's" + +#: awx/api/views.py:2603 +msgid "Notification Templates can only be assigned when source is one of {}." +msgstr "" +"Berichtsjablonen kunnen alleen worden toegewezen wanneer de bron een van {} " +"is." + +#: awx/api/views.py:2826 +msgid "Job Template Schedules" +msgstr "Taaksjabloonschema's" + +#: awx/api/views.py:2846 awx/api/views.py:2862 +msgid "Your license does not allow adding surveys." +msgstr "Uw licentie staat toevoeging van enquêtes niet toe." + +#: awx/api/views.py:2869 +msgid "'name' missing from survey spec." +msgstr "'name' ontbreekt in de enquêtespecificaties." + +#: awx/api/views.py:2871 +msgid "'description' missing from survey spec." +msgstr "'description' ontbreekt in de enquêtespecificaties." + +#: awx/api/views.py:2873 +msgid "'spec' missing from survey spec." +msgstr "'spec' ontbreekt in de enquêtespecificaties." + +#: awx/api/views.py:2875 +msgid "'spec' must be a list of items." +msgstr "'spec' moet een lijst met items zijn." + +#: awx/api/views.py:2877 +msgid "'spec' doesn't contain any items." +msgstr "'spec' bevat geen items." + +#: awx/api/views.py:2883 +#, python-format +msgid "Survey question %s is not a json object." +msgstr "Enquêtevraag %s is geen json-object." + +#: awx/api/views.py:2885 +#, python-format +msgid "'type' missing from survey question %s." +msgstr "'type' ontbreekt in enquêtevraag %s." + +#: awx/api/views.py:2887 +#, python-format +msgid "'question_name' missing from survey question %s." +msgstr "'question_name' ontbreekt in enquêtevraag %s." + +#: awx/api/views.py:2889 +#, python-format +msgid "'variable' missing from survey question %s." +msgstr "'variable' ontbreekt in enquêtevraag %s." + +#: awx/api/views.py:2891 +#, python-format +msgid "'variable' '%(item)s' duplicated in survey question %(survey)s." +msgstr "'variable' '%(item)s' gedupliceerd in enquêtevraag %(survey)s." + +#: awx/api/views.py:2896 +#, python-format +msgid "'required' missing from survey question %s." +msgstr "'required' ontbreekt in enquêtevraag %s." + +#: awx/api/views.py:2901 +msgid "" +"$encrypted$ is reserved keyword and may not be used as a default for " +"password {}." +msgstr "" +"$encrypted$ is een gereserveerd sleutelwoord en mag niet als standaardwaarde" +" worden gebruikt voor wachtwoord {}." + +#: awx/api/views.py:3017 +msgid "Maximum number of labels for {} reached." +msgstr "Het maximumaantal labels voor {} is bereikt." + +#: awx/api/views.py:3136 +msgid "No matching host could be found!" +msgstr "Er is geen overeenkomende host gevonden." + +#: awx/api/views.py:3139 +msgid "Multiple hosts matched the request!" +msgstr "Meerdere hosts kwamen overeen met de aanvraag." + +#: awx/api/views.py:3144 +msgid "Cannot start automatically, user input required!" +msgstr "Kan niet automatisch starten. Gebruikersinput is vereist." + +#: awx/api/views.py:3151 +msgid "Host callback job already pending." +msgstr "Er is al een hostterugkoppelingstaak in afwachting." + +#: awx/api/views.py:3164 +msgid "Error starting job!" +msgstr "Fout bij starten taak." + +#: awx/api/views.py:3271 +msgid "Cannot associate {0} when {1} have been associated." +msgstr "Kan {0} niet koppelen wanneer {1} zijn gekoppeld." + +#: awx/api/views.py:3296 +msgid "Multiple parent relationship not allowed." +msgstr "Relatie met meerdere bovenliggende elementen is niet toegestaan." + +#: awx/api/views.py:3301 +msgid "Cycle detected." +msgstr "Cyclus gedetecteerd." + +#: awx/api/views.py:3505 +msgid "Workflow Job Template Schedules" +msgstr "Taaksjabloonschema's voor workflows" + +#: awx/api/views.py:3650 awx/api/views.py:4217 +msgid "Superuser privileges needed." +msgstr "Supergebruikersbevoegdheden vereist." + +#: awx/api/views.py:3682 +msgid "System Job Template Schedules" +msgstr "Taaksjabloonschema's voor systeem" + +#: awx/api/views.py:3891 +msgid "Job Host Summaries List" +msgstr "Lijst met taakhostoverzichten" + +#: awx/api/views.py:3938 +msgid "Job Event Children List" +msgstr "Lijst met onderliggende taakgebeurteniselementen" + +#: awx/api/views.py:3947 +msgid "Job Event Hosts List" +msgstr "Lijst met taakgebeurtenishosts" + +#: awx/api/views.py:3957 +msgid "Job Events List" +msgstr "Lijst met taakgebeurtenissen" + +#: awx/api/views.py:4171 +msgid "Ad Hoc Command Events List" +msgstr "Lijst met ad-hoc-opdrachtgebeurtenissen" + +#: awx/api/views.py:4386 +msgid "Error generating stdout download file: {}" +msgstr "Fout bij genereren stdout-downloadbestand: {}" + +#: awx/api/views.py:4399 +#, python-format +msgid "Error generating stdout download file: %s" +msgstr "Fout bij genereren stdout-downloadbestand: %s" + +#: awx/api/views.py:4444 +msgid "Delete not allowed while there are pending notifications" +msgstr "" +"Verwijderen is niet toegestaan wanneer er berichten in afwachting zijn" + +#: awx/api/views.py:4451 +msgid "Notification Template Test" +msgstr "Berichtsjabloon" + +#: awx/conf/conf.py:20 +msgid "Bud Frogs" +msgstr "Budweiser-kikkers" + +#: awx/conf/conf.py:21 +msgid "Bunny" +msgstr "Konijntje" + +#: awx/conf/conf.py:22 +msgid "Cheese" +msgstr "Kaas" + +#: awx/conf/conf.py:23 +msgid "Daemon" +msgstr "Daemon" + +#: awx/conf/conf.py:24 +msgid "Default Cow" +msgstr "Standaardkoe" + +#: awx/conf/conf.py:25 +msgid "Dragon" +msgstr "Draak" + +#: awx/conf/conf.py:26 +msgid "Elephant in Snake" +msgstr "Olifant in slang" + +#: awx/conf/conf.py:27 +msgid "Elephant" +msgstr "Olifant" + +#: awx/conf/conf.py:28 +msgid "Eyes" +msgstr "Ogen" + +#: awx/conf/conf.py:29 +msgid "Hello Kitty" +msgstr "Hello Kitty" + +#: awx/conf/conf.py:30 +msgid "Kitty" +msgstr "Katje" + +#: awx/conf/conf.py:31 +msgid "Luke Koala" +msgstr "Luke de Koala" + +#: awx/conf/conf.py:32 +msgid "Meow" +msgstr "Miauw" + +#: awx/conf/conf.py:33 +msgid "Milk" +msgstr "Melk" + +#: awx/conf/conf.py:34 +msgid "Moofasa" +msgstr "Mufasa" + +#: awx/conf/conf.py:35 +msgid "Moose" +msgstr "Eland" + +#: awx/conf/conf.py:36 +msgid "Ren" +msgstr "Rendier" + +#: awx/conf/conf.py:37 +msgid "Sheep" +msgstr "Schaap" + +#: awx/conf/conf.py:38 +msgid "Small Cow" +msgstr "Kleine koe" + +#: awx/conf/conf.py:39 +msgid "Stegosaurus" +msgstr "Stegosaurus" + +#: awx/conf/conf.py:40 +msgid "Stimpy" +msgstr "Stimpy" + +#: awx/conf/conf.py:41 +msgid "Super Milker" +msgstr "Supermelker" + +#: awx/conf/conf.py:42 +msgid "Three Eyes" +msgstr "Drie ogen" + +#: awx/conf/conf.py:43 +msgid "Turkey" +msgstr "Kalkoen" + +#: awx/conf/conf.py:44 +msgid "Turtle" +msgstr "Schildpad" + +#: awx/conf/conf.py:45 +msgid "Tux" +msgstr "Tux" + +#: awx/conf/conf.py:46 +msgid "Udder" +msgstr "Uier" + +#: awx/conf/conf.py:47 +msgid "Vader Koala" +msgstr "Darth Vader Koala" + +#: awx/conf/conf.py:48 +msgid "Vader" +msgstr "Vader" + +#: awx/conf/conf.py:49 +msgid "WWW" +msgstr "WWW" + +#: awx/conf/conf.py:52 +msgid "Cow Selection" +msgstr "Koe selecteren" + +#: awx/conf/conf.py:53 +msgid "Select which cow to use with cowsay when running jobs." +msgstr "" +"Selecteer welke koe u met cowsay wilt gebruiken wanneer u taken uitvoert." + +#: awx/conf/conf.py:54 awx/conf/conf.py:75 +msgid "Cows" +msgstr "Koeien" + +#: awx/conf/conf.py:73 +msgid "Example Read-Only Setting" +msgstr "Voorbeeld alleen-lezen-instelling" + +#: awx/conf/conf.py:74 +msgid "Example setting that cannot be changed." +msgstr "Voorbeeld van instelling die niet kan worden gewijzigd." + +#: awx/conf/conf.py:93 +msgid "Example Setting" +msgstr "Voorbeeld van instelling" + +#: awx/conf/conf.py:94 +msgid "Example setting which can be different for each user." +msgstr "Voorbeeld van instelling die anders kan zijn voor elke gebruiker." + +#: awx/conf/conf.py:95 awx/conf/registry.py:85 awx/conf/views.py:56 +msgid "User" +msgstr "Gebruiker" + +#: awx/conf/fields.py:62 +msgid "Enter a valid URL" +msgstr "Geef een geldige URL op" + +#: awx/conf/fields.py:94 +msgid "\"{input}\" is not a valid string." +msgstr "\"{input} is geen geldige tekenreeks." + +#: awx/conf/license.py:19 +msgid "Your Tower license does not allow that." +msgstr "Uw Tower-licentie staat dat niet toe." + +#: awx/conf/management/commands/migrate_to_database_settings.py:41 +msgid "Only show which settings would be commented/migrated." +msgstr "" +"Geef alleen weer welke instellingen worden becommentarieerd/gemigreerd." + +#: awx/conf/management/commands/migrate_to_database_settings.py:48 +msgid "" +"Skip over settings that would raise an error when commenting/migrating." +msgstr "" +"Sla instellingen over die een fout zouden genereren als ze worden " +"becommentarieerd/gemigreerd." + +#: awx/conf/management/commands/migrate_to_database_settings.py:55 +msgid "Skip commenting out settings in files." +msgstr "Sla het becommentariëren van instellingen in bestanden over." + +#: awx/conf/management/commands/migrate_to_database_settings.py:61 +msgid "Backup existing settings files with this suffix." +msgstr "" +"Maak een back-up van bestaande instellingenbestanden met dit achtervoegsel." + +#: awx/conf/registry.py:73 awx/conf/tests/unit/test_registry.py:169 +#: awx/conf/tests/unit/test_registry.py:192 +#: awx/conf/tests/unit/test_registry.py:196 +#: awx/conf/tests/unit/test_registry.py:201 +#: awx/conf/tests/unit/test_registry.py:208 +msgid "All" +msgstr "Alle" + +#: awx/conf/registry.py:74 awx/conf/tests/unit/test_registry.py:170 +#: awx/conf/tests/unit/test_registry.py:193 +#: awx/conf/tests/unit/test_registry.py:197 +#: awx/conf/tests/unit/test_registry.py:202 +#: awx/conf/tests/unit/test_registry.py:209 +msgid "Changed" +msgstr "Gewijzigd" + +#: awx/conf/registry.py:86 +msgid "User-Defaults" +msgstr "Standaardinstellingen voor gebruiker" + +#: awx/conf/registry.py:151 +msgid "This value has been set manually in a settings file." +msgstr "Deze waarde is handmatig ingesteld in een instellingenbestand." + +#: awx/conf/tests/unit/test_registry.py:46 +#: awx/conf/tests/unit/test_registry.py:56 +#: awx/conf/tests/unit/test_registry.py:72 +#: awx/conf/tests/unit/test_registry.py:87 +#: awx/conf/tests/unit/test_registry.py:100 +#: awx/conf/tests/unit/test_registry.py:106 +#: awx/conf/tests/unit/test_registry.py:126 +#: awx/conf/tests/unit/test_registry.py:140 +#: awx/conf/tests/unit/test_registry.py:146 +#: awx/conf/tests/unit/test_registry.py:159 +#: awx/conf/tests/unit/test_registry.py:171 +#: awx/conf/tests/unit/test_registry.py:180 +#: awx/conf/tests/unit/test_registry.py:198 +#: awx/conf/tests/unit/test_registry.py:210 +#: awx/conf/tests/unit/test_registry.py:219 +#: awx/conf/tests/unit/test_registry.py:225 +#: awx/conf/tests/unit/test_registry.py:237 +#: awx/conf/tests/unit/test_registry.py:245 +#: awx/conf/tests/unit/test_registry.py:288 +#: awx/conf/tests/unit/test_registry.py:306 +#: awx/conf/tests/unit/test_settings.py:79 +#: awx/conf/tests/unit/test_settings.py:97 +#: awx/conf/tests/unit/test_settings.py:112 +#: awx/conf/tests/unit/test_settings.py:127 +#: awx/conf/tests/unit/test_settings.py:143 +#: awx/conf/tests/unit/test_settings.py:156 +#: awx/conf/tests/unit/test_settings.py:173 +#: awx/conf/tests/unit/test_settings.py:189 +#: awx/conf/tests/unit/test_settings.py:200 +#: awx/conf/tests/unit/test_settings.py:216 +#: awx/conf/tests/unit/test_settings.py:237 +#: awx/conf/tests/unit/test_settings.py:259 +#: awx/conf/tests/unit/test_settings.py:285 +#: awx/conf/tests/unit/test_settings.py:299 +#: awx/conf/tests/unit/test_settings.py:323 +#: awx/conf/tests/unit/test_settings.py:343 +#: awx/conf/tests/unit/test_settings.py:360 +#: awx/conf/tests/unit/test_settings.py:374 +#: awx/conf/tests/unit/test_settings.py:398 +#: awx/conf/tests/unit/test_settings.py:411 +#: awx/conf/tests/unit/test_settings.py:430 +#: awx/conf/tests/unit/test_settings.py:466 awx/main/conf.py:22 +#: awx/main/conf.py:32 awx/main/conf.py:42 awx/main/conf.py:51 +#: awx/main/conf.py:63 awx/main/conf.py:81 awx/main/conf.py:96 +#: awx/main/conf.py:121 +msgid "System" +msgstr "Systeem" + +#: awx/conf/tests/unit/test_registry.py:165 +#: awx/conf/tests/unit/test_registry.py:172 +#: awx/conf/tests/unit/test_registry.py:187 +#: awx/conf/tests/unit/test_registry.py:203 +#: awx/conf/tests/unit/test_registry.py:211 +msgid "OtherSystem" +msgstr "OtherSystem" + +#: awx/conf/views.py:48 +msgid "Setting Categories" +msgstr "Instellingscategorieën" + +#: awx/conf/views.py:73 +msgid "Setting Detail" +msgstr "Instellingsdetail" + +#: awx/conf/views.py:168 +msgid "Logging Connectivity Test" +msgstr "Connectiviteitstest logboekregistratie" + +#: awx/main/access.py:224 +#, python-format +msgid "Bad data found in related field %s." +msgstr "Ongeldige gegevens gevonden in gerelateerd veld %s." + +#: awx/main/access.py:268 +msgid "License is missing." +msgstr "Licentie ontbreekt." + +#: awx/main/access.py:270 +msgid "License has expired." +msgstr "Licentie is verlopen." + +#: awx/main/access.py:278 +#, python-format +msgid "License count of %s instances has been reached." +msgstr "Het aantal licenties van %s instanties is bereikt." + +#: awx/main/access.py:280 +#, python-format +msgid "License count of %s instances has been exceeded." +msgstr "Het aantal licenties van %s instanties is overschreden." + +#: awx/main/access.py:282 +msgid "Host count exceeds available instances." +msgstr "Het aantal hosts is groter dan het aantal instanties." + +#: awx/main/access.py:286 +#, python-format +msgid "Feature %s is not enabled in the active license." +msgstr "De functie %s is niet ingeschakeld in de actieve licentie." + +#: awx/main/access.py:288 +msgid "Features not found in active license." +msgstr "Functies niet gevonden in actieve licentie." + +#: awx/main/access.py:534 awx/main/access.py:619 awx/main/access.py:748 +#: awx/main/access.py:801 awx/main/access.py:1063 awx/main/access.py:1263 +#: awx/main/access.py:1725 +msgid "Resource is being used by running jobs" +msgstr "Resource wordt gebruikt door taken uit te voeren" + +#: awx/main/access.py:675 +msgid "Unable to change inventory on a host." +msgstr "Kan inventaris op een host niet wijzigen." + +#: awx/main/access.py:692 awx/main/access.py:737 +msgid "Cannot associate two items from different inventories." +msgstr "Kan twee items uit verschillende inventarissen niet koppelen." + +#: awx/main/access.py:725 +msgid "Unable to change inventory on a group." +msgstr "Kan inventaris van een groep niet wijzigen." + +#: awx/main/access.py:983 +msgid "Unable to change organization on a team." +msgstr "Kan organisatie van een team niet wijzigen." + +#: awx/main/access.py:996 +msgid "The {} role cannot be assigned to a team" +msgstr "De rol {} kan niet worden toegewezen aan een team" + +#: awx/main/access.py:998 +msgid "The admin_role for a User cannot be assigned to a team" +msgstr "" +"De admin_role voor een gebruiker kan niet worden toegewezen aan een team" + +#: awx/main/access.py:1443 +msgid "Job has been orphaned from its job template." +msgstr "De taak is verwijderd uit zijn taaksjabloon." + +#: awx/main/access.py:1445 +msgid "You do not have execute permission to related job template." +msgstr "U hebt geen uitvoermachtiging voor de gerelateerde taaksjabloon." + +#: awx/main/access.py:1448 +msgid "Job was launched with prompted fields." +msgstr "De taak is gestart met invoervelden." + +#: awx/main/access.py:1450 +msgid " Organization level permissions required." +msgstr "Organisatieniveaumachtigingen zijn vereist." + +#: awx/main/access.py:1452 +msgid " You do not have permission to related resources." +msgstr "U hebt geen machtiging voor gerelateerde resources." + +#: awx/main/access.py:1798 +msgid "" +"You do not have permission to the workflow job resources required for " +"relaunch." +msgstr "" +"U hebt geen machtiging voor de workflowtaakresources die vereist zijn om " +"opnieuw op te starten." + +#: awx/main/apps.py:8 +msgid "Main" +msgstr "Hoofd" + +#: awx/main/conf.py:20 +msgid "Enable Activity Stream" +msgstr "Activiteitenstroom inschakelen" + +#: awx/main/conf.py:21 +msgid "Enable capturing activity for the activity stream." +msgstr "Vastlegactiviteit voor de activiteitenstroom inschakelen." + +#: awx/main/conf.py:30 +msgid "Enable Activity Stream for Inventory Sync" +msgstr "Activiteitenstroom voor inventarissynchronisatie inschakelen" + +#: awx/main/conf.py:31 +msgid "" +"Enable capturing activity for the activity stream when running inventory " +"sync." +msgstr "" +"Vastlegactiviteit voor de activiteitenstroom inschakelen wanneer " +"inventarissynchronisatie wordt uitgevoerd." + +#: awx/main/conf.py:40 +msgid "All Users Visible to Organization Admins" +msgstr "Alle gebruikers zichtbaar voor organisatiebeheerders" + +#: awx/main/conf.py:41 +msgid "" +"Controls whether any Organization Admin can view all users, even those not " +"associated with their Organization." +msgstr "" +"Regelt of organisatiebeheerders alle gebruikers kunnen weergeven, zelfs " +"gebruikers die niet aan hun organisatie zijn gekoppeld." + +#: awx/main/conf.py:49 +msgid "Enable Administrator Alerts" +msgstr "Beheerderssignalen inschakelen" + +#: awx/main/conf.py:50 +msgid "Email Admin users for system events that may require attention." +msgstr "" +"E-mails naar gebruikers met beheerdersrechten sturen over gebeurtenissen die" +" mogelijk aandacht nodig hebben." + +#: awx/main/conf.py:60 +msgid "Base URL of the Tower host" +msgstr "Basis-URL van de Tower-host" + +#: awx/main/conf.py:61 +msgid "" +"This setting is used by services like notifications to render a valid url to" +" the Tower host." +msgstr "" +"Deze instelling wordt gebruikt door services zoals berichten om een geldige " +"URL voor de Tower-host weer te geven." + +#: awx/main/conf.py:70 +msgid "Remote Host Headers" +msgstr "Externe hostheaders" + +#: awx/main/conf.py:71 +msgid "" +"HTTP headers and meta keys to search to determine remote host name or IP. Add additional items to this list, such as \"HTTP_X_FORWARDED_FOR\", if behind a reverse proxy.\n" +"\n" +"Note: The headers will be searched in order and the first found remote host name or IP will be used.\n" +"\n" +"In the below example 8.8.8.7 would be the chosen IP address.\n" +"X-Forwarded-For: 8.8.8.7, 192.168.2.1, 127.0.0.1\n" +"Host: 127.0.0.1\n" +"REMOTE_HOST_HEADERS = ['HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR', 'REMOTE_HOST']" +msgstr "" +"HTTP-headers en metasleutels om te zoeken om de naam of het IP-adres van de externe host te bepalen. Voeg aan deze lijst een extra item toe, zoals \"HTTP_X_FORWARDED_FOR\" indien achter een omgekeerde proxy.\n" +"\n" +"Opmerking: er wordt op volgorde naar de headers gezocht en de eerst gevonden naam of het eerst gevonden IP-adres van de externe host wordt gebruikt.\n" +"\n" +"In het onderstaande voorbeeld wordt 8.8.8.7 het gekozen IP-adres.\n" +"X-Forwarded-For: 8.8.8.7, 192.168.2.1, 127.0.0.1\n" +"Host: 127.0.0.1\n" +"REMOTE_HOST_HEADERS = ['HTTP_X_FORWARDED_FOR', 'REMOTE_ADDR', 'REMOTE_HOST']" + +#: awx/main/conf.py:88 +msgid "Proxy IP Whitelist" +msgstr "Whitelist met proxy-IP's" + +#: awx/main/conf.py:89 +msgid "" +"If Tower is behind a reverse proxy/load balancer, use this setting to whitelist the proxy IP addresses from which Tower should trust custom REMOTE_HOST_HEADERS header values\n" +"REMOTE_HOST_HEADERS = ['HTTP_X_FORWARDED_FOR', ''REMOTE_ADDR', 'REMOTE_HOST']\n" +"PROXY_IP_WHITELIST = ['10.0.1.100', '10.0.1.101']\n" +"If this setting is an empty list (the default), the headers specified by REMOTE_HOST_HEADERS will be trusted unconditionally')" +msgstr "" +"Als Tower zich achter een omgekeerde proxy/load balancer bevindt, gebruikt u deze instelling om een whitelist te maken met de proxy-IP-adressen vanwaar Tower aangepaste REMOTE_HOST_HEADERS-headerwaarden moet vertrouwen\n" +"REMOTE_HOST_HEADERS = ['HTTP_X_FORWARDED_FOR', ''REMOTE_ADDR', 'REMOTE_HOST']\n" +"PROXY_IP_WHITELIST = ['10.0.1.100', '10.0.1.101']\n" +"Als deze instelling een lege lijst is (de standaardinstelling), dan worden de door REMOTE_HOST_HEADERS opgegeven headers onvoorwaardelijk vertrouwd')" + +#: awx/main/conf.py:117 +msgid "License" +msgstr "Licentie" + +#: awx/main/conf.py:118 +msgid "" +"The license controls which features and functionality are enabled. Use " +"/api/v1/config/ to update or change the license." +msgstr "" +"De licentie bepaalt welke kenmerken en functionaliteiten zijn ingeschakeld. " +"Gebruik /api/v1/config/ om de licentie bij te werken of te wijzigen." + +#: awx/main/conf.py:128 +msgid "Ansible Modules Allowed for Ad Hoc Jobs" +msgstr "Ansible-modules toegestaan voor ad-hoctaken" + +#: awx/main/conf.py:129 +msgid "List of modules allowed to be used by ad-hoc jobs." +msgstr "Lijst met modules toegestaan voor gebruik met ad-hoctaken." + +#: awx/main/conf.py:130 awx/main/conf.py:140 awx/main/conf.py:151 +#: awx/main/conf.py:161 awx/main/conf.py:171 awx/main/conf.py:181 +#: awx/main/conf.py:192 awx/main/conf.py:204 awx/main/conf.py:216 +#: awx/main/conf.py:229 awx/main/conf.py:241 awx/main/conf.py:251 +#: awx/main/conf.py:262 awx/main/conf.py:272 awx/main/conf.py:282 +#: awx/main/conf.py:292 awx/main/conf.py:304 awx/main/conf.py:316 +#: awx/main/conf.py:328 awx/main/conf.py:341 +msgid "Jobs" +msgstr "Taken" + +#: awx/main/conf.py:138 +msgid "Enable job isolation" +msgstr "Taakisolatie inschakelen" + +#: awx/main/conf.py:139 +msgid "" +"Isolates an Ansible job from protected parts of the system to prevent " +"exposing sensitive information." +msgstr "" +"Isoleert een Ansible-taak van beschermde gedeeltes van het systeem om " +"blootstelling van gevoelige informatie te voorkomen." + +#: awx/main/conf.py:147 +msgid "Job execution path" +msgstr "Taakuitvoerpad" + +#: awx/main/conf.py:148 +msgid "" +"The directory in which Tower will create new temporary directories for job " +"execution and isolation (such as credential files and custom inventory " +"scripts)." +msgstr "" +"De map waarin Tower nieuwe tijdelijke mappen maakt voor de uitvoering en " +"isolatie van taken (zoals referentiebestanden en aangepaste " +"inventarisscripts)." + +#: awx/main/conf.py:159 +msgid "Paths to hide from isolated jobs" +msgstr "Paden die moeten worden verborgen voor geïsoleerde taken" + +#: awx/main/conf.py:160 +msgid "" +"Additional paths to hide from isolated processes. Enter one path per line." +msgstr "" +"Extra paden die moeten worden verborgen voor geïsoleerde processen. Geef één" +" pad per regel op." + +#: awx/main/conf.py:169 +msgid "Paths to expose to isolated jobs" +msgstr "Paden die kunnen worden blootgesteld aan geïsoleerde taken" + +#: awx/main/conf.py:170 +msgid "" +"Whitelist of paths that would otherwise be hidden to expose to isolated " +"jobs. Enter one path per line." +msgstr "" +"Whitelist met paden die anders zouden zijn verborgen voor blootstelling aan " +"geïsoleerde taken. Geef één pad per regel op." + +#: awx/main/conf.py:179 +msgid "Isolated status check interval" +msgstr "Controle-interval voor isolatiestatus" + +#: awx/main/conf.py:180 +msgid "" +"The number of seconds to sleep between status checks for jobs running on " +"isolated instances." +msgstr "" +"Het aantal seconden rust tussen statuscontroles voor taken die worden " +"uitgevoerd op geïsoleerde instanties." + +#: awx/main/conf.py:189 +msgid "Isolated launch timeout" +msgstr "Time-out geïsoleerd opstartproces" + +#: awx/main/conf.py:190 +msgid "" +"The timeout (in seconds) for launching jobs on isolated instances. This " +"includes the time needed to copy source control files (playbooks) to the " +"isolated instance." +msgstr "" +"De time-out (in seconden) voor het opstarten van taken in geïsoleerde " +"instanties. Dit is met inbegrip van de tijd vereist om de controlebestanden " +"van de bron (draaiboeken) te kopiëren naar de geïsoleerde instantie." + +#: awx/main/conf.py:201 +msgid "Isolated connection timeout" +msgstr "Time-out geïsoleerde verbinding" + +#: awx/main/conf.py:202 +msgid "" +"Ansible SSH connection timeout (in seconds) to use when communicating with " +"isolated instances. Value should be substantially greater than expected " +"network latency." +msgstr "" +"Time-out van Ansible SSH-verbinding (in seconden) voor gebruik tijdens de " +"communicatie met geïsoleerde instanties. De waarde moet aanzienlijk groter " +"zijn dan de verwachte netwerklatentie." + +#: awx/main/conf.py:212 +msgid "Generate RSA keys for isolated instances" +msgstr "RSA-sleutels aanmaken voor afzonderlijke instanties" + +#: awx/main/conf.py:213 +msgid "" +"If set, a random RSA key will be generated and distributed to isolated " +"instances. To disable this behavior and manage authentication for isolated " +"instances outside of Tower, disable this setting." +msgstr "" +"Als deze instelling ingeschakeld is, wordt er bij afzonderlijke instanties " +"een willekeurige RSA-sleutel aangemaakt en uitgedeeld. Om dit gedrag uit te " +"schakelen en authenticatie voor afzonderlijke instanties buiten Tower te " +"beheren kunt u deze instelling uitschakelen." + +#: awx/main/conf.py:227 awx/main/conf.py:228 +msgid "The RSA private key for SSH traffic to isolated instances" +msgstr "De RSA-privésleutel voor SSH-verkeer naar geïsoleerde instanties" + +#: awx/main/conf.py:239 awx/main/conf.py:240 +msgid "The RSA public key for SSH traffic to isolated instances" +msgstr "De openbare RSA-sleutel voor SSH-verkeer naar geïsoleerde instanties" + +#: awx/main/conf.py:249 +msgid "Extra Environment Variables" +msgstr "Extra omgevingsvariabelen" + +#: awx/main/conf.py:250 +msgid "" +"Additional environment variables set for playbook runs, inventory updates, " +"project updates, and notification sending." +msgstr "" +"Extra omgevingsvariabelen ingesteld voor draaiboekuitvoeringen, " +"inventarisupdates, projectupdates en berichtverzending." + +#: awx/main/conf.py:260 +msgid "Standard Output Maximum Display Size" +msgstr "Maximale weergavegrootte voor standaardoutput" + +#: awx/main/conf.py:261 +msgid "" +"Maximum Size of Standard Output in bytes to display before requiring the " +"output be downloaded." +msgstr "" +"De maximale weergavegrootte van standaardoutput in bytes voordat wordt " +"vereist dat de output wordt gedownload." + +#: awx/main/conf.py:270 +msgid "Job Event Standard Output Maximum Display Size" +msgstr "Maximale weergavegrootte voor standaardoutput van taakgebeurtenissen" + +#: awx/main/conf.py:271 +msgid "" +"Maximum Size of Standard Output in bytes to display for a single job or ad " +"hoc command event. `stdout` will end with `…` when truncated." +msgstr "" +"De maximale weergavegrootte van standaardoutput in bytes voor één taak of " +"ad-hoc-opdrachtgebeurtenis. `stdout` eindigt op `…` indien afgekapt." + +#: awx/main/conf.py:280 +msgid "Maximum Scheduled Jobs" +msgstr "Maximumaantal geplande taken" + +#: awx/main/conf.py:281 +msgid "" +"Maximum number of the same job template that can be waiting to run when " +"launching from a schedule before no more are created." +msgstr "" +"Het maximumaantal van dezelfde sjabloon dat kan wachten op uitvoering " +"wanneer wordt gestart vanuit een schema voordat er geen andere meer kunnen " +"worden gemaakt." + +#: awx/main/conf.py:290 +msgid "Ansible Callback Plugins" +msgstr "Ansible-terugkoppelingsplugins" + +#: awx/main/conf.py:291 +msgid "" +"List of paths to search for extra callback plugins to be used when running " +"jobs. Enter one path per line." +msgstr "" +"Lijst met paden om te zoeken naar extra terugkoppelingsplugins voor gebruik " +"bij het uitvoeren van taken. Geef één pad per regel op." + +#: awx/main/conf.py:301 +msgid "Default Job Timeout" +msgstr "Standaardtime-out voor taken" + +#: awx/main/conf.py:302 +msgid "" +"Maximum time in seconds to allow jobs to run. Use value of 0 to indicate " +"that no timeout should be imposed. A timeout set on an individual job " +"template will override this." +msgstr "" +"Maximale tijd in seconden dat de uitvoering van taken mag duren. Gebruik een" +" waarde van 0 om aan te geven dat geen time-out mag worden opgelegd. Als er " +"in een individuele taaksjabloon een time-out is ingesteld, heeft deze " +"voorrang." + +#: awx/main/conf.py:313 +msgid "Default Inventory Update Timeout" +msgstr "Standaardtime-out voor inventarisupdates" + +#: awx/main/conf.py:314 +msgid "" +"Maximum time in seconds to allow inventory updates to run. Use value of 0 to" +" indicate that no timeout should be imposed. A timeout set on an individual " +"inventory source will override this." +msgstr "" +"Maximale tijd in seconden die inventarisupdates mogen duren. Gebruik een " +"waarde van 0 om aan te geven dat geen time-out mag worden opgelegd. Als er " +"in een individuele inventarisbron een time-out is ingesteld, heeft deze " +"voorrang." + +#: awx/main/conf.py:325 +msgid "Default Project Update Timeout" +msgstr "Standaardtime-out voor projectupdates" + +#: awx/main/conf.py:326 +msgid "" +"Maximum time in seconds to allow project updates to run. Use value of 0 to " +"indicate that no timeout should be imposed. A timeout set on an individual " +"project will override this." +msgstr "" +"Maximale tijd in seconden die projectupdates mogen duren. Gebruik een waarde" +" van 0 om aan te geven dat geen time-out mag worden opgelegd. Als er in een " +"individueel project een time-out is ingesteld, heeft deze voorrang." + +#: awx/main/conf.py:337 +msgid "Per-Host Ansible Fact Cache Timeout" +msgstr "Time-out voor feitcache per-host Ansible" + +#: awx/main/conf.py:338 +msgid "" +"Maximum time, in seconds, that stored Ansible facts are considered valid " +"since the last time they were modified. Only valid, non-stale, facts will be" +" accessible by a playbook. Note, this does not influence the deletion of " +"ansible_facts from the database." +msgstr "" +"Maximale tijd in seconden dat opgeslagen Ansible-feiten als geldig worden " +"beschouwd sinds ze voor het laatst zijn gewijzigd. Alleen geldige, niet-" +"verlopen feiten zijn toegankelijk voor een draaiboek. Merk op dat dit geen " +"invloed heeft op de verwijdering van ansible_facts uit de database." + +#: awx/main/conf.py:350 +msgid "Logging Aggregator" +msgstr "Aggregator logboekregistraties" + +#: awx/main/conf.py:351 +msgid "Hostname/IP where external logs will be sent to." +msgstr "Hostnaam/IP-adres waarnaar externe logboeken worden verzonden." + +#: awx/main/conf.py:352 awx/main/conf.py:363 awx/main/conf.py:375 +#: awx/main/conf.py:385 awx/main/conf.py:397 awx/main/conf.py:412 +#: awx/main/conf.py:424 awx/main/conf.py:433 awx/main/conf.py:443 +#: awx/main/conf.py:453 awx/main/conf.py:464 awx/main/conf.py:476 +#: awx/main/conf.py:489 +msgid "Logging" +msgstr "Logboekregistratie" + +#: awx/main/conf.py:360 +msgid "Logging Aggregator Port" +msgstr "Aggregator logboekregistraties" + +#: awx/main/conf.py:361 +msgid "" +"Port on Logging Aggregator to send logs to (if required and not provided in " +"Logging Aggregator)." +msgstr "" +"Poort van aggregator logboekregistraties waarnaar logboeken worden verzonden" +" (indien vereist en niet geleverd in de aggregator logboekregistraties)." + +#: awx/main/conf.py:373 +msgid "Logging Aggregator Type" +msgstr "Type aggregator logboekregistraties" + +#: awx/main/conf.py:374 +msgid "Format messages for the chosen log aggregator." +msgstr "Maak berichten op voor de gekozen log aggregator." + +#: awx/main/conf.py:383 +msgid "Logging Aggregator Username" +msgstr "Gebruikersnaam aggregator logboekregistraties" + +#: awx/main/conf.py:384 +msgid "Username for external log aggregator (if required)." +msgstr "Gebruikersnaam voor externe log aggregator (indien vereist)" + +#: awx/main/conf.py:395 +msgid "Logging Aggregator Password/Token" +msgstr "Wachtwoord/token voor aggregator logboekregistraties" + +#: awx/main/conf.py:396 +msgid "" +"Password or authentication token for external log aggregator (if required)." +msgstr "" +"Wachtwoord of authenticatietoken voor externe log aggregator(indien " +"vereist)." + +#: awx/main/conf.py:405 +msgid "Loggers Sending Data to Log Aggregator Form" +msgstr "" +"Logboekverzamelingen die gegevens verzenden naar log aggregator-formulier" + +#: awx/main/conf.py:406 +msgid "" +"List of loggers that will send HTTP logs to the collector, these can include any or all of: \n" +"awx - service logs\n" +"activity_stream - activity stream records\n" +"job_events - callback data from Ansible job events\n" +"system_tracking - facts gathered from scan jobs." +msgstr "" +"Lijst met logboekverzamelingen die HTTP-logboeken verzenden naar de verzamelaar. Deze kunnen bestaan uit een of meer van de volgende: \n" +"awx - servicelogboeken\n" +"activity_stream - records activiteitenstroom\n" +"job_events - terugkoppelgegevens van Ansible-taakgebeurtenissen\n" +"system_tracking - feiten verzameld uit scantaken." + +#: awx/main/conf.py:419 +msgid "Log System Tracking Facts Individually" +msgstr "Logboeksysteem dat feiten individueel bijhoudt" + +#: awx/main/conf.py:420 +msgid "" +"If set, system tracking facts will be sent for each package, service, " +"orother item found in a scan, allowing for greater search query granularity." +" If unset, facts will be sent as a single dictionary, allowing for greater " +"efficiency in fact processing." +msgstr "" +"Indien ingesteld, worden systeemtrackingfeiten verzonden voor alle " +"pakketten, services of andere items aangetroffen in een scan, wat aan " +"zoekquery's meer gedetailleerdheid verleent. Indien niet ingesteld, worden " +"feiten verzonden als één woordenlijst, waardoor feiten sneller kunnen worden" +" verwerkt." + +#: awx/main/conf.py:431 +msgid "Enable External Logging" +msgstr "Externe logboekregistratie inschakelen" + +#: awx/main/conf.py:432 +msgid "Enable sending logs to external log aggregator." +msgstr "" +"Schakel de verzending in van logboeken naar een externe log aggregator." + +#: awx/main/conf.py:441 +msgid "Cluster-wide Tower unique identifier." +msgstr "Clusterbrede, unieke Tower-id" + +#: awx/main/conf.py:442 +msgid "Useful to uniquely identify Tower instances." +msgstr "Handig om Tower-instanties uniek te identificeren." + +#: awx/main/conf.py:451 +msgid "Logging Aggregator Protocol" +msgstr "Protocol aggregator logboekregistraties" + +#: awx/main/conf.py:452 +msgid "Protocol used to communicate with log aggregator." +msgstr "Protocol gebruikt om te communiceren met de log aggregator." + +#: awx/main/conf.py:460 +msgid "TCP Connection Timeout" +msgstr "Time-out van TCP-verbinding" + +#: awx/main/conf.py:461 +msgid "" +"Number of seconds for a TCP connection to external log aggregator to " +"timeout. Applies to HTTPS and TCP log aggregator protocols." +msgstr "" +"Aantal seconden voordat er een time-out optreedt voor een TCP-verbinding met" +" een externe log aggregator. Geldt voor HTTPS en TCP log aggregator-" +"protocollen." + +#: awx/main/conf.py:471 +msgid "Enable/disable HTTPS certificate verification" +msgstr "HTTPS-certificaatcontrole in-/uitschakelen" + +#: awx/main/conf.py:472 +msgid "" +"Flag to control enable/disable of certificate verification when " +"LOG_AGGREGATOR_PROTOCOL is \"https\". If enabled, Tower's log handler will " +"verify certificate sent by external log aggregator before establishing " +"connection." +msgstr "" +"Vlag om certificaatcontrole in/uit te schakelen wanneer het " +"LOG_AGGREGATOR_PROTOCOL gelijk is aan \"https\". Indien ingeschakeld, " +"controleert de logboekhandler van Tower het certificaat verzonden door de " +"externe log aggregator voordat de verbinding tot stand wordt gebracht." + +#: awx/main/conf.py:484 +msgid "Logging Aggregator Level Threshold" +msgstr "Drempelwaarde aggregator logboekregistraties" + +#: awx/main/conf.py:485 +msgid "" +"Level threshold used by log handler. Severities from lowest to highest are " +"DEBUG, INFO, WARNING, ERROR, CRITICAL. Messages less severe than the " +"threshold will be ignored by log handler. (messages under category " +"awx.anlytics ignore this setting)" +msgstr "" +"Drempelwaarde gebruikt door logboekhandler. Ernstcategorieën van laag naar " +"hoog zijn DEBUG, INFO, WARNING, ERROR, CRITICAL. Berichten die minder streng" +" zijn dan de drempelwaarde, worden genegeerd door de logboekhandler. (deze " +"instelling wordt genegeerd door berichten onder de categorie awx.anlytics)" + +#: awx/main/conf.py:508 awx/sso/conf.py:1105 +msgid "\n" +msgstr "\n" + +#: awx/main/constants.py:8 +msgid "Sudo" +msgstr "Sudo" + +#: awx/main/constants.py:8 +msgid "Su" +msgstr "Su" + +#: awx/main/constants.py:8 +msgid "Pbrun" +msgstr "Pbrun" + +#: awx/main/constants.py:8 +msgid "Pfexec" +msgstr "Pfexec" + +#: awx/main/constants.py:8 +msgid "DZDO" +msgstr "DZDO" + +#: awx/main/constants.py:8 +msgid "Pmrun" +msgstr "Pmrun" + +#: awx/main/constants.py:8 +msgid "Runas" +msgstr "Runas" + +#: awx/main/fields.py:56 +#, python-format +msgid "'%s' is not one of ['%s']" +msgstr "'%s' is niet een van ['%s']" + +#: awx/main/fields.py:531 +#, python-format +msgid "cannot be set unless \"%s\" is set" +msgstr "kan niet ingesteld worden, tenzij '%s' ingesteld is" + +#: awx/main/fields.py:547 +#, python-format +msgid "required for %s" +msgstr "vereist voor %s" + +#: awx/main/fields.py:571 +msgid "must be set when SSH key is encrypted." +msgstr "moet worden ingesteld wanneer SSH-sleutel wordt versleuteld." + +#: awx/main/fields.py:577 +msgid "should not be set when SSH key is not encrypted." +msgstr "mag niet worden ingesteld wanneer SSH-sleutel niet is gecodeerd." + +#: awx/main/fields.py:635 +msgid "'dependencies' is not supported for custom credentials." +msgstr "" +"'afhankelijkheden' is niet ondersteund voor aangepaste toegangsgegevens." + +#: awx/main/fields.py:649 +msgid "\"tower\" is a reserved field name" +msgstr "\"tower\" is een gereserveerde veldnaam" + +#: awx/main/fields.py:656 +#, python-format +msgid "field IDs must be unique (%s)" +msgstr "veld-id's moeten uniek zijn (%s)" + +#: awx/main/fields.py:669 +#, python-format +msgid "%s not allowed for %s type (%s)" +msgstr "%s niet toegestaan voor type %s (%s)" + +#: awx/main/fields.py:753 +#, python-format +msgid "%s uses an undefined field (%s)" +msgstr "%s gebruikt een niet-gedefinieerd veld (%s)" + +#: awx/main/middleware.py:121 +msgid "Formats of all available named urls" +msgstr "Indelingen van alle beschikbare, genoemde url's" + +#: awx/main/middleware.py:122 +msgid "" +"Read-only list of key-value pairs that shows the standard format of all " +"available named URLs." +msgstr "" +"Alleen-lezen-lijst met sleutelwaardeparen die de standaardindeling van alle " +"beschikbare, genoemde URL's toont." + +#: awx/main/middleware.py:124 awx/main/middleware.py:134 +msgid "Named URL" +msgstr "Genoemde URL" + +#: awx/main/middleware.py:131 +msgid "List of all named url graph nodes." +msgstr "Lijst met alle grafische knooppunten van genoemde URL's." + +#: awx/main/middleware.py:132 +msgid "" +"Read-only list of key-value pairs that exposes named URL graph topology. Use" +" this list to programmatically generate named URLs for resources" +msgstr "" +"Alleen-lezen-lijst met sleutelwaardeparen die de grafische topologie van " +"genoemde URL's duidelijk maakt. Gebruik deze lijst om programmatische " +"genoemde URL's voor resources te genereren." + +#: awx/main/migrations/_reencrypt.py:23 awx/main/models/notifications.py:33 +msgid "Email" +msgstr "E-mail" + +#: awx/main/migrations/_reencrypt.py:24 awx/main/models/notifications.py:34 +msgid "Slack" +msgstr "Slack" + +#: awx/main/migrations/_reencrypt.py:25 awx/main/models/notifications.py:35 +msgid "Twilio" +msgstr "Twilio" + +#: awx/main/migrations/_reencrypt.py:26 awx/main/models/notifications.py:36 +msgid "Pagerduty" +msgstr "Pagerduty" + +#: awx/main/migrations/_reencrypt.py:27 awx/main/models/notifications.py:37 +msgid "HipChat" +msgstr "HipChat" + +#: awx/main/migrations/_reencrypt.py:28 awx/main/models/notifications.py:38 +msgid "Webhook" +msgstr "Webhook" + +#: awx/main/migrations/_reencrypt.py:29 awx/main/models/notifications.py:39 +msgid "IRC" +msgstr "IRC" + +#: awx/main/models/activity_stream.py:24 +msgid "Entity Created" +msgstr "Entiteit gemaakt" + +#: awx/main/models/activity_stream.py:25 +msgid "Entity Updated" +msgstr "Entiteit bijgewerkt" + +#: awx/main/models/activity_stream.py:26 +msgid "Entity Deleted" +msgstr "Entiteit verwijderd" + +#: awx/main/models/activity_stream.py:27 +msgid "Entity Associated with another Entity" +msgstr "Entiteit gekoppeld aan een andere entiteit" + +#: awx/main/models/activity_stream.py:28 +msgid "Entity was Disassociated with another Entity" +msgstr "Entiteit is losgekoppeld van een andere entiteit" + +#: awx/main/models/ad_hoc_commands.py:100 +msgid "No valid inventory." +msgstr "Geen geldige inventaris." + +#: awx/main/models/ad_hoc_commands.py:107 +msgid "You must provide a machine / SSH credential." +msgstr "U moet een machine / SSH-referentie verschaffen." + +#: awx/main/models/ad_hoc_commands.py:118 +#: awx/main/models/ad_hoc_commands.py:126 +msgid "Invalid type for ad hoc command" +msgstr "Ongeldig type voor ad-hocopdracht" + +#: awx/main/models/ad_hoc_commands.py:121 +msgid "Unsupported module for ad hoc commands." +msgstr "Niet-ondersteunde module voor ad-hocopdrachten." + +#: awx/main/models/ad_hoc_commands.py:129 +#, python-format +msgid "No argument passed to %s module." +msgstr "Geen argument doorgegeven aan module %s." + +#: awx/main/models/ad_hoc_commands.py:245 awx/main/models/jobs.py:904 +msgid "Host Failed" +msgstr "Host is mislukt" + +#: awx/main/models/ad_hoc_commands.py:246 awx/main/models/jobs.py:905 +msgid "Host OK" +msgstr "Host OK" + +#: awx/main/models/ad_hoc_commands.py:247 awx/main/models/jobs.py:908 +msgid "Host Unreachable" +msgstr "Host onbereikbaar" + +#: awx/main/models/ad_hoc_commands.py:252 awx/main/models/jobs.py:907 +msgid "Host Skipped" +msgstr "Host overgeslagen" + +#: awx/main/models/ad_hoc_commands.py:262 awx/main/models/jobs.py:935 +msgid "Debug" +msgstr "Foutopsporing" + +#: awx/main/models/ad_hoc_commands.py:263 awx/main/models/jobs.py:936 +msgid "Verbose" +msgstr "Uitgebreid" + +#: awx/main/models/ad_hoc_commands.py:264 awx/main/models/jobs.py:937 +msgid "Deprecated" +msgstr "Afgeschaft" + +#: awx/main/models/ad_hoc_commands.py:265 awx/main/models/jobs.py:938 +msgid "Warning" +msgstr "Waarschuwing" + +#: awx/main/models/ad_hoc_commands.py:266 awx/main/models/jobs.py:939 +msgid "System Warning" +msgstr "Systeemwaarschuwing" + +#: awx/main/models/ad_hoc_commands.py:267 awx/main/models/jobs.py:940 +#: awx/main/models/unified_jobs.py:64 +msgid "Error" +msgstr "Fout" + +#: awx/main/models/base.py:40 awx/main/models/base.py:46 +#: awx/main/models/base.py:51 +msgid "Run" +msgstr "Uitvoeren" + +#: awx/main/models/base.py:41 awx/main/models/base.py:47 +#: awx/main/models/base.py:52 +msgid "Check" +msgstr "Controleren" + +#: awx/main/models/base.py:42 +msgid "Scan" +msgstr "Scannen" + +#: awx/main/models/credential.py:82 +msgid "Host" +msgstr "Host" + +#: awx/main/models/credential.py:83 +msgid "The hostname or IP address to use." +msgstr "Te gebruiken hostnaam of IP-adres" + +#: awx/main/models/credential.py:89 +msgid "Username" +msgstr "Gebruikersnaam" + +#: awx/main/models/credential.py:90 +msgid "Username for this credential." +msgstr "Gebruikersnaam voor deze referentie." + +#: awx/main/models/credential.py:96 +msgid "Password" +msgstr "Wachtwoord" + +#: awx/main/models/credential.py:97 +msgid "" +"Password for this credential (or \"ASK\" to prompt the user for machine " +"credentials)." +msgstr "" +"Wachtwoord voor deze referentie (of \"ASK\" om de gebruiker om de " +"machinereferenties te vragen)." + +#: awx/main/models/credential.py:104 +msgid "Security Token" +msgstr "Beveiligingstoken" + +#: awx/main/models/credential.py:105 +msgid "Security Token for this credential" +msgstr "Beveiligingstoken voor deze referentie" + +#: awx/main/models/credential.py:111 +msgid "Project" +msgstr "Project" + +#: awx/main/models/credential.py:112 +msgid "The identifier for the project." +msgstr "De id voor het project." + +#: awx/main/models/credential.py:118 +msgid "Domain" +msgstr "Domein" + +#: awx/main/models/credential.py:119 +msgid "The identifier for the domain." +msgstr "De id voor het domein." + +#: awx/main/models/credential.py:124 +msgid "SSH private key" +msgstr "SSH-privésleutel" + +#: awx/main/models/credential.py:125 +msgid "RSA or DSA private key to be used instead of password." +msgstr "RSA- of DSA-privésleutel te gebruiken in plaats van wachtwoord." + +#: awx/main/models/credential.py:131 +msgid "SSH key unlock" +msgstr "SSH-sleutelontgrendeling" + +#: awx/main/models/credential.py:132 +msgid "" +"Passphrase to unlock SSH private key if encrypted (or \"ASK\" to prompt the " +"user for machine credentials)." +msgstr "" +"Wachtwoordzin om SSH-privésleutel te ontgrendelen indien versleuteld (of " +"\"ASK\" om de gebruiker om de machinereferenties te vragen)." + +#: awx/main/models/credential.py:139 +msgid "None" +msgstr "Geen" + +#: awx/main/models/credential.py:140 +msgid "Privilege escalation method." +msgstr "Methode voor verhoging van rechten." + +#: awx/main/models/credential.py:146 +msgid "Privilege escalation username." +msgstr "Gebruikersnaam voor verhoging van rechten." + +#: awx/main/models/credential.py:152 +msgid "Password for privilege escalation method." +msgstr "Wachtwoord voor methode voor verhoging van rechten." + +#: awx/main/models/credential.py:158 +msgid "Vault password (or \"ASK\" to prompt the user)." +msgstr "Wachtwoord voor kluis (of \"ASK\" om de gebruiker te vragen)." + +#: awx/main/models/credential.py:162 +msgid "Whether to use the authorize mechanism." +msgstr "Of het autorisatiemechanisme mag worden gebruikt." + +#: awx/main/models/credential.py:168 +msgid "Password used by the authorize mechanism." +msgstr "Wachtwoord gebruikt door het autorisatiemechanisme." + +#: awx/main/models/credential.py:174 +msgid "Client Id or Application Id for the credential" +msgstr "Klant-id voor toepassings-id voor de referentie" + +#: awx/main/models/credential.py:180 +msgid "Secret Token for this credential" +msgstr "Geheim token voor deze referentie" + +#: awx/main/models/credential.py:186 +msgid "Subscription identifier for this credential" +msgstr "Abonnements-id voor deze referentie" + +#: awx/main/models/credential.py:192 +msgid "Tenant identifier for this credential" +msgstr "Huurder-id voor deze referentie" + +#: awx/main/models/credential.py:216 +msgid "" +"Specify the type of credential you want to create. Refer to the Ansible " +"Tower documentation for details on each type." +msgstr "" +"Geef het type referentie op dat u wilt maken. Raadpleeg de documentatie voor" +" Ansible Tower voor details over elk type." + +#: awx/main/models/credential.py:230 awx/main/models/credential.py:416 +msgid "" +"Enter inputs using either JSON or YAML syntax. Use the radio button to " +"toggle between the two. Refer to the Ansible Tower documentation for example" +" syntax." +msgstr "" +"Geef inputs op met JSON- of YAML-syntaxis. Gebruik het keuzerondje om te " +"wisselen tussen de twee. Raadpleeg de documentatie voor Ansible Tower voor " +"voorbeeldsyntaxis." + +#: awx/main/models/credential.py:397 +msgid "Machine" +msgstr "Machine" + +#: awx/main/models/credential.py:398 +msgid "Vault" +msgstr "Kluis" + +#: awx/main/models/credential.py:399 +msgid "Network" +msgstr "Netwerk" + +#: awx/main/models/credential.py:400 +msgid "Source Control" +msgstr "Broncontrole" + +#: awx/main/models/credential.py:401 +msgid "Cloud" +msgstr "Cloud" + +#: awx/main/models/credential.py:402 +msgid "Insights" +msgstr "Inzichten" + +#: awx/main/models/credential.py:423 +msgid "" +"Enter injectors using either JSON or YAML syntax. Use the radio button to " +"toggle between the two. Refer to the Ansible Tower documentation for example" +" syntax." +msgstr "" +"Geef injectoren op met JSON- of YAML-syntaxis. Gebruik het keuzerondje om te" +" wisselen tussen de twee. Raadpleeg de documentatie voor Ansible Tower voor " +"voorbeeldsyntaxis." + +#: awx/main/models/fact.py:25 +msgid "Host for the facts that the fact scan captured." +msgstr "Host voor de feiten die de feitenscan heeft vastgelegd." + +#: awx/main/models/fact.py:30 +msgid "Date and time of the corresponding fact scan gathering time." +msgstr "Datum en tijd van de verzameltijd van de overeenkomstige feitenscan." + +#: awx/main/models/fact.py:33 +msgid "" +"Arbitrary JSON structure of module facts captured at timestamp for a single " +"host." +msgstr "" +"Willekeurige JSON-structuur van modulefeiten vastgelegd bij de tijdstempel " +"voor één host." + +#: awx/main/models/ha.py:76 +msgid "Instances that are members of this InstanceGroup" +msgstr "Instanties die lid zijn van deze InstanceGroup" + +#: awx/main/models/ha.py:81 +msgid "Instance Group to remotely control this group." +msgstr "Instantiegroep om deze groep extern te regelen." + +#: awx/main/models/inventory.py:52 +msgid "Hosts have a direct link to this inventory." +msgstr "Hosts hebben een directe koppeling naar deze inventaris." + +#: awx/main/models/inventory.py:53 +msgid "Hosts for inventory generated using the host_filter property." +msgstr "Hosts voor inventaris gegenereerd met de eigenschap host_filter." + +#: awx/main/models/inventory.py:58 +msgid "inventories" +msgstr "inventarissen" + +#: awx/main/models/inventory.py:65 +msgid "Organization containing this inventory." +msgstr "Organisatie die deze inventaris bevat." + +#: awx/main/models/inventory.py:72 +msgid "Inventory variables in JSON or YAML format." +msgstr "Inventarisvariabelen in JSON- of YAML-indeling." + +#: awx/main/models/inventory.py:77 +msgid "Flag indicating whether any hosts in this inventory have failed." +msgstr "Vlag die aangeeft of hosts in deze inventaris zijn mislukt." + +#: awx/main/models/inventory.py:82 +msgid "Total number of hosts in this inventory." +msgstr "Totaal aantal hosts in deze inventaris." + +#: awx/main/models/inventory.py:87 +msgid "Number of hosts in this inventory with active failures." +msgstr "Aantal hosts in deze inventaris met actieve mislukkingen." + +#: awx/main/models/inventory.py:92 +msgid "Total number of groups in this inventory." +msgstr "Totaal aantal groepen in deze inventaris." + +#: awx/main/models/inventory.py:97 +msgid "Number of groups in this inventory with active failures." +msgstr "Aantal groepen in deze inventaris met actieve mislukkingen." + +#: awx/main/models/inventory.py:102 +msgid "" +"Flag indicating whether this inventory has any external inventory sources." +msgstr "Vlag die aangeeft of deze inventaris externe inventarisbronnen heeft." + +#: awx/main/models/inventory.py:107 +msgid "" +"Total number of external inventory sources configured within this inventory." +msgstr "" +"Totaal aantal externe inventarisbronnen dat binnen deze inventaris is " +"geconfigureerd." + +#: awx/main/models/inventory.py:112 +msgid "Number of external inventory sources in this inventory with failures." +msgstr "Aantal externe inventarisbronnen in deze inventaris met mislukkingen." + +#: awx/main/models/inventory.py:119 +msgid "Kind of inventory being represented." +msgstr "Soort inventaris dat wordt voorgesteld." + +#: awx/main/models/inventory.py:125 +msgid "Filter that will be applied to the hosts of this inventory." +msgstr "Filter dat wordt toegepast op de hosts van deze inventaris." + +#: awx/main/models/inventory.py:152 +msgid "" +"Credentials to be used by hosts belonging to this inventory when accessing " +"Red Hat Insights API." +msgstr "" +"Referenties die worden gebruikt door hosts die behoren tot deze inventaris " +"bij toegang tot de Red Hat Insights API." + +#: awx/main/models/inventory.py:161 +msgid "Flag indicating the inventory is being deleted." +msgstr "Vlag die aangeeft dat de inventaris wordt verwijderd." + +#: awx/main/models/inventory.py:374 +msgid "Assignment not allowed for Smart Inventory" +msgstr "Toewijzing niet toegestaan voor Smart-inventaris" + +#: awx/main/models/inventory.py:376 awx/main/models/projects.py:148 +msgid "Credential kind must be 'insights'." +msgstr "Referentiesoort moet 'insights' zijn." + +#: awx/main/models/inventory.py:443 +msgid "Is this host online and available for running jobs?" +msgstr "Is deze host online en beschikbaar om taken uit te voeren?" + +#: awx/main/models/inventory.py:449 +msgid "" +"The value used by the remote inventory source to uniquely identify the host" +msgstr "" +"De waarde die de externe inventarisbron gebruikt om de host uniek te " +"identificeren" + +#: awx/main/models/inventory.py:454 +msgid "Host variables in JSON or YAML format." +msgstr "Hostvariabelen in JSON- of YAML-indeling." + +#: awx/main/models/inventory.py:476 +msgid "Flag indicating whether the last job failed for this host." +msgstr "Vlag die aangeeft of de laatste taak voor deze host is mislukt." + +#: awx/main/models/inventory.py:481 +msgid "" +"Flag indicating whether this host was created/updated from any external " +"inventory sources." +msgstr "" +"Vlag die aangeeft of deze host is gemaakt/bijgewerkt op grond van externe " +"inventarisbronnen." + +#: awx/main/models/inventory.py:487 +msgid "Inventory source(s) that created or modified this host." +msgstr "Inventarisbronnen die deze host hebben gemaakt of gewijzigd." + +#: awx/main/models/inventory.py:492 +msgid "Arbitrary JSON structure of most recent ansible_facts, per-host." +msgstr "" +"Willekeurige JSON-structuur van meest recente ansible_facts, per host/" + +#: awx/main/models/inventory.py:498 +msgid "The date and time ansible_facts was last modified." +msgstr "De datum en tijd waarop ansible_facts voor het laatst is gewijzigd." + +#: awx/main/models/inventory.py:505 +msgid "Red Hat Insights host unique identifier." +msgstr "Unieke id van Red Hat Insights-host." + +#: awx/main/models/inventory.py:633 +msgid "Group variables in JSON or YAML format." +msgstr "Groepeer variabelen in JSON- of YAML-indeling." + +#: awx/main/models/inventory.py:639 +msgid "Hosts associated directly with this group." +msgstr "Hosts direct gekoppeld aan deze groep." + +#: awx/main/models/inventory.py:644 +msgid "Total number of hosts directly or indirectly in this group." +msgstr "Totaal aantal hosts dat direct of indirect in deze groep is." + +#: awx/main/models/inventory.py:649 +msgid "Flag indicating whether this group has any hosts with active failures." +msgstr "Vlag die aangeeft of deze groep hosts met actieve mislukkingen heeft." + +#: awx/main/models/inventory.py:654 +msgid "Number of hosts in this group with active failures." +msgstr "Aantal hosts in deze groep met actieve mislukkingen." + +#: awx/main/models/inventory.py:659 +msgid "Total number of child groups contained within this group." +msgstr "Totaal aantal onderliggende groepen binnen deze groep." + +#: awx/main/models/inventory.py:664 +msgid "Number of child groups within this group that have active failures." +msgstr "Aantal onderliggende groepen in deze groep met actieve mislukkingen." + +#: awx/main/models/inventory.py:669 +msgid "" +"Flag indicating whether this group was created/updated from any external " +"inventory sources." +msgstr "" +"Vlag die aangeeft of deze groep is gemaakt/bijgewerkt op grond van externe " +"inventarisbronnen." + +#: awx/main/models/inventory.py:675 +msgid "Inventory source(s) that created or modified this group." +msgstr "Inventarisbronnen die deze groep hebben gemaakt of gewijzigd." + +#: awx/main/models/inventory.py:865 awx/main/models/projects.py:42 +#: awx/main/models/unified_jobs.py:428 +msgid "Manual" +msgstr "Handmatig" + +#: awx/main/models/inventory.py:866 +msgid "File, Directory or Script" +msgstr "Bestand, map of script" + +#: awx/main/models/inventory.py:867 +msgid "Sourced from a Project" +msgstr "Afkomstig uit een project" + +#: awx/main/models/inventory.py:868 +msgid "Amazon EC2" +msgstr "Amazon EC2" + +#: awx/main/models/inventory.py:869 +msgid "Google Compute Engine" +msgstr "Google Compute Engine" + +#: awx/main/models/inventory.py:870 +msgid "Microsoft Azure Classic (deprecated)" +msgstr "Microsoft Azure Classic (afgeschaft)" + +#: awx/main/models/inventory.py:871 +msgid "Microsoft Azure Resource Manager" +msgstr "Microsoft Azure Resource Manager" + +#: awx/main/models/inventory.py:872 +msgid "VMware vCenter" +msgstr "VMware vCenter" + +#: awx/main/models/inventory.py:873 +msgid "Red Hat Satellite 6" +msgstr "Red Hat Satellite 6" + +#: awx/main/models/inventory.py:874 +msgid "Red Hat CloudForms" +msgstr "Red Hat CloudForms" + +#: awx/main/models/inventory.py:875 +msgid "OpenStack" +msgstr "OpenStack" + +#: awx/main/models/inventory.py:876 +msgid "Custom Script" +msgstr "Aangepast script" + +#: awx/main/models/inventory.py:993 +msgid "Inventory source variables in YAML or JSON format." +msgstr "Bronvariabelen inventaris in YAML- of JSON-indeling." + +#: awx/main/models/inventory.py:1012 +msgid "" +"Comma-separated list of filter expressions (EC2 only). Hosts are imported " +"when ANY of the filters match." +msgstr "" +"Door komma's gescheiden lijst met filterexpressies (alleen EC2). Hosts " +"worden geïmporteerd wanneer WILLEKEURIG WELK van de filters overeenkomt." + +#: awx/main/models/inventory.py:1018 +msgid "Limit groups automatically created from inventory source (EC2 only)." +msgstr "" +"Overschrijf groepen die automatisch gemaakt worden op grond van " +"inventarisbron (alleen EC2)." + +#: awx/main/models/inventory.py:1022 +msgid "Overwrite local groups and hosts from remote inventory source." +msgstr "" +"Overschrijf lokale groepen en hosts op grond van externe inventarisbron." + +#: awx/main/models/inventory.py:1026 +msgid "Overwrite local variables from remote inventory source." +msgstr "Overschrijf lokale variabelen op grond van externe inventarisbron." + +#: awx/main/models/inventory.py:1031 awx/main/models/jobs.py:159 +#: awx/main/models/projects.py:117 +msgid "The amount of time (in seconds) to run before the task is canceled." +msgstr "" +"De hoeveelheid tijd (in seconden) voor uitvoering voordat de taak wordt " +"geannuleerd." + +#: awx/main/models/inventory.py:1064 +msgid "Image ID" +msgstr "Image-id" + +#: awx/main/models/inventory.py:1065 +msgid "Availability Zone" +msgstr "Beschikbaarheidszone" + +#: awx/main/models/inventory.py:1066 +msgid "Account" +msgstr "Account" + +#: awx/main/models/inventory.py:1067 +msgid "Instance ID" +msgstr "Instantie-id" + +#: awx/main/models/inventory.py:1068 +msgid "Instance State" +msgstr "Instantiestaat" + +#: awx/main/models/inventory.py:1069 +msgid "Instance Type" +msgstr "Instantietype" + +#: awx/main/models/inventory.py:1070 +msgid "Key Name" +msgstr "Sleutelnaam" + +#: awx/main/models/inventory.py:1071 +msgid "Region" +msgstr "Regio" + +#: awx/main/models/inventory.py:1072 +msgid "Security Group" +msgstr "Beveiligingsgroep" + +#: awx/main/models/inventory.py:1073 +msgid "Tags" +msgstr "Tags" + +#: awx/main/models/inventory.py:1074 +msgid "Tag None" +msgstr "Tag geen" + +#: awx/main/models/inventory.py:1075 +msgid "VPC ID" +msgstr "VPC ID" + +#: awx/main/models/inventory.py:1138 +#, python-format +msgid "" +"Cloud-based inventory sources (such as %s) require credentials for the " +"matching cloud service." +msgstr "" +"Cloudgebaseerde inventarisbronnen (zoals %s) vereisen referenties voor de " +"overeenkomende cloudservice." + +#: awx/main/models/inventory.py:1145 +msgid "Credential is required for a cloud source." +msgstr "Referentie is vereist voor een cloudbron." + +#: awx/main/models/inventory.py:1167 +#, python-format +msgid "Invalid %(source)s region: %(region)s" +msgstr "Ongeldige %(source)s regio: %(region)s" + +#: awx/main/models/inventory.py:1191 +#, python-format +msgid "Invalid filter expression: %(filter)s" +msgstr "Ongeldige filterexpressie: %(filter)s" + +#: awx/main/models/inventory.py:1212 +#, python-format +msgid "Invalid group by choice: %(choice)s" +msgstr "Ongeldige groep op keuze: %(choice)s" + +#: awx/main/models/inventory.py:1247 +msgid "Project containing inventory file used as source." +msgstr "Project met inventarisbestand dat wordt gebruikt als bron." + +#: awx/main/models/inventory.py:1395 +#, python-format +msgid "" +"Unable to configure this item for cloud sync. It is already managed by %s." +msgstr "" +"Kan dit item niet configureren voor cloudsynchronisatie. Wordt al beheerd " +"door %s." + +#: awx/main/models/inventory.py:1405 +msgid "" +"More than one SCM-based inventory source with update on project update per-" +"inventory not allowed." +msgstr "" +"Het is niet toegestaan meer dan één SCM-gebaseerde inventarisbron met een " +"update bovenop een projectupdate per inventaris te hebben." + +#: awx/main/models/inventory.py:1412 +msgid "" +"Cannot update SCM-based inventory source on launch if set to update on " +"project update. Instead, configure the corresponding source project to " +"update on launch." +msgstr "" +"Kan SCM-gebaseerde inventarisbron niet bijwerken bij opstarten indien " +"ingesteld op bijwerken bij projectupdate. Configureer in plaats daarvan het " +"overeenkomstige bronproject om bij te werken bij opstarten." + +#: awx/main/models/inventory.py:1418 +msgid "SCM type sources must set `overwrite_vars` to `true`." +msgstr "SCM-typebronnen moeten 'overwrite_vars' instellen op 'true'." + +#: awx/main/models/inventory.py:1423 +msgid "Cannot set source_path if not SCM type." +msgstr "Kan source_path niet instellen als het geen SCM-type is." + +#: awx/main/models/inventory.py:1448 +msgid "" +"Inventory files from this Project Update were used for the inventory update." +msgstr "" +"Inventarisbestanden uit deze projectupdate zijn gebruikt voor de " +"inventarisupdate." + +#: awx/main/models/inventory.py:1561 +msgid "Inventory script contents" +msgstr "Inhoud inventarisscript" + +#: awx/main/models/inventory.py:1566 +msgid "Organization owning this inventory script" +msgstr "Organisatie die eigenaar is van deze inventarisscript" + +#: awx/main/models/jobs.py:65 +msgid "" +"If enabled, textual changes made to any templated files on the host are " +"shown in the standard output" +msgstr "" +"Indien ingeschakeld, worden tekstwijzigingen aangebracht in " +"sjabloonbestanden op de host weergegeven in de standaardoutput" + +#: awx/main/models/jobs.py:163 +msgid "" +"If enabled, Tower will act as an Ansible Fact Cache Plugin; persisting facts" +" at the end of a playbook run to the database and caching facts for use by " +"Ansible." +msgstr "" +"Indien ingeschakeld, treedt Tower op als een Ansible Fact Cache Plugin en " +"handhaaft het feiten aan het einde van een draaiboekuitvoering in een " +"database en worden feiten voor gebruik door Ansible in het cachegeheugen " +"opgeslagen." + +#: awx/main/models/jobs.py:172 +msgid "You must provide an SSH credential." +msgstr "U moet een SSH-referentie opgeven." + +#: awx/main/models/jobs.py:180 +msgid "You must provide a Vault credential." +msgstr "U moet een kluisreferentie opgeven." + +#: awx/main/models/jobs.py:316 +msgid "Job Template must provide 'inventory' or allow prompting for it." +msgstr "Taaksjabloon moet 'inventory' verschaffen of toestaan erom te vragen." + +#: awx/main/models/jobs.py:320 +msgid "Job Template must provide 'credential' or allow prompting for it." +msgstr "" +"Taaksjabloon moet 'credential' verschaffen of toestaan erom te vragen." + +#: awx/main/models/jobs.py:422 +msgid "Cannot override job_type to or from a scan job." +msgstr "Kan job_type niet vervangen naar of vanuit een scantaak." + +#: awx/main/models/jobs.py:488 awx/main/models/projects.py:263 +msgid "SCM Revision" +msgstr "SCM-revisie" + +#: awx/main/models/jobs.py:489 +msgid "The SCM Revision from the Project used for this job, if available" +msgstr "" +"De SCM-revisie uit het project gebruikt voor deze taak, indien beschikbaar" + +#: awx/main/models/jobs.py:497 +msgid "" +"The SCM Refresh task used to make sure the playbooks were available for the " +"job run" +msgstr "" +"De taak SCM vernieuwen gebruik om te verzekeren dat de draaiboeken " +"beschikbaar waren om de taak uit te voeren" + +#: awx/main/models/jobs.py:802 +msgid "job host summaries" +msgstr "taakhostoverzichten" + +#: awx/main/models/jobs.py:906 +msgid "Host Failure" +msgstr "Hostmislukking" + +#: awx/main/models/jobs.py:909 awx/main/models/jobs.py:923 +msgid "No Hosts Remaining" +msgstr "Geen resterende hosts" + +#: awx/main/models/jobs.py:910 +msgid "Host Polling" +msgstr "Hostpolling" + +#: awx/main/models/jobs.py:911 +msgid "Host Async OK" +msgstr "Host Async OK" + +#: awx/main/models/jobs.py:912 +msgid "Host Async Failure" +msgstr "Host Async mislukking" + +#: awx/main/models/jobs.py:913 +msgid "Item OK" +msgstr "Item OK" + +#: awx/main/models/jobs.py:914 +msgid "Item Failed" +msgstr "Item mislukt" + +#: awx/main/models/jobs.py:915 +msgid "Item Skipped" +msgstr "Item overgeslagen" + +#: awx/main/models/jobs.py:916 +msgid "Host Retry" +msgstr "Host opnieuw proberen" + +#: awx/main/models/jobs.py:918 +msgid "File Difference" +msgstr "Bestandsverschil" + +#: awx/main/models/jobs.py:919 +msgid "Playbook Started" +msgstr "Draaiboek gestart" + +#: awx/main/models/jobs.py:920 +msgid "Running Handlers" +msgstr "Handlers die worden uitgevoerd" + +#: awx/main/models/jobs.py:921 +msgid "Including File" +msgstr "Inclusief bestand" + +#: awx/main/models/jobs.py:922 +msgid "No Hosts Matched" +msgstr "Geen overeenkomende hosts" + +#: awx/main/models/jobs.py:924 +msgid "Task Started" +msgstr "Taak gestart" + +#: awx/main/models/jobs.py:926 +msgid "Variables Prompted" +msgstr "Variabelen gevraagd" + +#: awx/main/models/jobs.py:927 +msgid "Gathering Facts" +msgstr "Feiten verzamelen" + +#: awx/main/models/jobs.py:928 +msgid "internal: on Import for Host" +msgstr "intern: bij importeren voor host" + +#: awx/main/models/jobs.py:929 +msgid "internal: on Not Import for Host" +msgstr "intern: niet bij importeren voor host" + +#: awx/main/models/jobs.py:930 +msgid "Play Started" +msgstr "Afspelen gestart" + +#: awx/main/models/jobs.py:931 +msgid "Playbook Complete" +msgstr "Draaiboek voltooid" + +#: awx/main/models/jobs.py:1363 +msgid "Remove jobs older than a certain number of days" +msgstr "Taken ouder dan een bepaald aantal dagen verwijderen" + +#: awx/main/models/jobs.py:1364 +msgid "Remove activity stream entries older than a certain number of days" +msgstr "" +"Vermeldingen activiteitenstroom ouder dan een bepaald aantal dagen " +"verwijderen" + +#: awx/main/models/jobs.py:1365 +msgid "Purge and/or reduce the granularity of system tracking data" +msgstr "" +"Granulariteit van systeemtrackinggegevens verwijderen en/of verminderen" + +#: awx/main/models/label.py:29 +msgid "Organization this label belongs to." +msgstr "Organisatie waartoe dit label behoort." + +#: awx/main/models/notifications.py:138 awx/main/models/unified_jobs.py:59 +msgid "Pending" +msgstr "In afwachting" + +#: awx/main/models/notifications.py:139 awx/main/models/unified_jobs.py:62 +msgid "Successful" +msgstr "Geslaagd" + +#: awx/main/models/notifications.py:140 awx/main/models/unified_jobs.py:63 +msgid "Failed" +msgstr "Mislukt" + +#: awx/main/models/organization.py:132 +msgid "Token not invalidated" +msgstr "Validatie van token is niet ongeldig gemaakt" + +#: awx/main/models/organization.py:133 +msgid "Token is expired" +msgstr "Token is verlopen" + +#: awx/main/models/organization.py:134 +msgid "" +"The maximum number of allowed sessions for this user has been exceeded." +msgstr "" +"Het maximum aantal toegestane sessies voor deze gebruiker is overschreden." + +#: awx/main/models/organization.py:137 +msgid "Invalid token" +msgstr "Ongeldig token" + +#: awx/main/models/organization.py:155 +msgid "Reason the auth token was invalidated." +msgstr "Reden waarom het verificatietoken ongeldig is gemaakt." + +#: awx/main/models/organization.py:194 +msgid "Invalid reason specified" +msgstr "Ongeldige reden opgegeven" + +#: awx/main/models/projects.py:43 +msgid "Git" +msgstr "Git" + +#: awx/main/models/projects.py:44 +msgid "Mercurial" +msgstr "Mercurial" + +#: awx/main/models/projects.py:45 +msgid "Subversion" +msgstr "Subversie" + +#: awx/main/models/projects.py:46 +msgid "Red Hat Insights" +msgstr "Red Hat Insights" + +#: awx/main/models/projects.py:72 +msgid "" +"Local path (relative to PROJECTS_ROOT) containing playbooks and related " +"files for this project." +msgstr "" +"Lokaal pad (ten opzichte van PROJECTS_ROOT) met draaiboeken en gerelateerde " +"bestanden voor dit project." + +#: awx/main/models/projects.py:81 +msgid "SCM Type" +msgstr "Type SCM" + +#: awx/main/models/projects.py:82 +msgid "Specifies the source control system used to store the project." +msgstr "" +"Specificeert het broncontrolesysteem gebruikt om het project op te slaan." + +#: awx/main/models/projects.py:88 +msgid "SCM URL" +msgstr "SCM URL" + +#: awx/main/models/projects.py:89 +msgid "The location where the project is stored." +msgstr "De locatie waar het project is opgeslagen." + +#: awx/main/models/projects.py:95 +msgid "SCM Branch" +msgstr "SCM-vertakking" + +#: awx/main/models/projects.py:96 +msgid "Specific branch, tag or commit to checkout." +msgstr "Specifieke vertakking, tag of toewijzing om uit te checken." + +#: awx/main/models/projects.py:100 +msgid "Discard any local changes before syncing the project." +msgstr "" +"Verwijder alle lokale wijzigingen voordat u het project synchroniseert." + +#: awx/main/models/projects.py:104 +msgid "Delete the project before syncing." +msgstr "Verwijder het project alvorens te synchroniseren." + +#: awx/main/models/projects.py:133 +msgid "Invalid SCM URL." +msgstr "Ongeldige SCM URL." + +#: awx/main/models/projects.py:136 +msgid "SCM URL is required." +msgstr "SCM URL is vereist." + +#: awx/main/models/projects.py:144 +msgid "Insights Credential is required for an Insights Project." +msgstr "Insights-referentie is vereist voor een Insights-project." + +#: awx/main/models/projects.py:150 +msgid "Credential kind must be 'scm'." +msgstr "Referentie moet 'scm' zijn." + +#: awx/main/models/projects.py:167 +msgid "Invalid credential." +msgstr "Ongeldige referentie." + +#: awx/main/models/projects.py:249 +msgid "Update the project when a job is launched that uses the project." +msgstr "" +"Werk het project bij wanneer een taak wordt gestart waarin het project wordt" +" gebruikt." + +#: awx/main/models/projects.py:254 +msgid "" +"The number of seconds after the last project update ran that a newproject " +"update will be launched as a job dependency." +msgstr "" +"Het aantal seconden na uitvoering van de laatste projectupdate dat een " +"nieuwe projectupdate wordt gestart als een taakafhankelijkheid." + +#: awx/main/models/projects.py:264 +msgid "The last revision fetched by a project update" +msgstr "De laatste revisie opgehaald door een projectupdate" + +#: awx/main/models/projects.py:271 +msgid "Playbook Files" +msgstr "Draaiboekbestanden" + +#: awx/main/models/projects.py:272 +msgid "List of playbooks found in the project" +msgstr "Lijst met draaiboekbestanden aangetroffen in het project" + +#: awx/main/models/projects.py:279 +msgid "Inventory Files" +msgstr "Inventarisbestanden" + +#: awx/main/models/projects.py:280 +msgid "" +"Suggested list of content that could be Ansible inventory in the project" +msgstr "" +"Aanbevolen lijst met inhoud die een Ansible-inventaris in het project kan " +"zijn" + +#: awx/main/models/rbac.py:36 +msgid "System Administrator" +msgstr "Systeembeheerder" + +#: awx/main/models/rbac.py:37 +msgid "System Auditor" +msgstr "Systeemcontroleur" + +#: awx/main/models/rbac.py:38 +msgid "Ad Hoc" +msgstr "Ad hoc" + +#: awx/main/models/rbac.py:39 +msgid "Admin" +msgstr "Beheerder" + +#: awx/main/models/rbac.py:40 +msgid "Auditor" +msgstr "Controleur" + +#: awx/main/models/rbac.py:41 +msgid "Execute" +msgstr "Uitvoeren" + +#: awx/main/models/rbac.py:42 +msgid "Member" +msgstr "Lid" + +#: awx/main/models/rbac.py:43 +msgid "Read" +msgstr "Lezen" + +#: awx/main/models/rbac.py:44 +msgid "Update" +msgstr "Bijwerken" + +#: awx/main/models/rbac.py:45 +msgid "Use" +msgstr "Gebruiken" + +#: awx/main/models/rbac.py:49 +msgid "Can manage all aspects of the system" +msgstr "Kan alle aspecten van het systeem beheren" + +#: awx/main/models/rbac.py:50 +msgid "Can view all settings on the system" +msgstr "Kan alle instellingen van het systeem weergeven" + +#: awx/main/models/rbac.py:51 +msgid "May run ad hoc commands on an inventory" +msgstr "Kan ad-hocopdrachten in een inventaris uitvoeren" + +#: awx/main/models/rbac.py:52 +#, python-format +msgid "Can manage all aspects of the %s" +msgstr "Kan alle aspecten van %s beheren" + +#: awx/main/models/rbac.py:53 +#, python-format +msgid "Can view all settings for the %s" +msgstr "Kan alle instellingen voor %s weergeven" + +#: awx/main/models/rbac.py:54 +#, python-format +msgid "May run the %s" +msgstr "Kan %s uitvoeren" + +#: awx/main/models/rbac.py:55 +#, python-format +msgid "User is a member of the %s" +msgstr "Gebruiker is lid van %s" + +#: awx/main/models/rbac.py:56 +#, python-format +msgid "May view settings for the %s" +msgstr "Kan instellingen voor %s weergeven" + +#: awx/main/models/rbac.py:57 +msgid "" +"May update project or inventory or group using the configured source update " +"system" +msgstr "" +"Kan project of inventarisgroep bijwerken met het geconfigureerde " +"bronupdatesysteem" + +#: awx/main/models/rbac.py:58 +#, python-format +msgid "Can use the %s in a job template" +msgstr "Kan %s gebruiken in een taaksjabloon" + +#: awx/main/models/rbac.py:122 +msgid "roles" +msgstr "rollen" + +#: awx/main/models/rbac.py:434 +msgid "role_ancestors" +msgstr "role_ancestors" + +#: awx/main/models/schedules.py:71 +msgid "Enables processing of this schedule." +msgstr "Maakt de verwerking van dit schema mogelijk." + +#: awx/main/models/schedules.py:77 +msgid "The first occurrence of the schedule occurs on or after this time." +msgstr "Het eerste voorkomen van het schema treedt op of na deze tijd op." + +#: awx/main/models/schedules.py:83 +msgid "" +"The last occurrence of the schedule occurs before this time, aftewards the " +"schedule expires." +msgstr "" +"Het laatste voorkomen van het schema treedt voor deze tijd op, nadat het " +"schema is verlopen." + +#: awx/main/models/schedules.py:87 +msgid "A value representing the schedules iCal recurrence rule." +msgstr "Een waarde die de iCal-herhalingsregel van het schema voorstelt." + +#: awx/main/models/schedules.py:93 +msgid "The next time that the scheduled action will run." +msgstr "De volgende keer dat de geplande actie wordt uitgevoerd." + +#: awx/main/models/schedules.py:109 +msgid "Expected JSON" +msgstr "JSON verwacht" + +#: awx/main/models/schedules.py:121 +msgid "days must be a positive integer." +msgstr "dagen moet een positief geheel getal zijn." + +#: awx/main/models/unified_jobs.py:58 +msgid "New" +msgstr "Nieuw" + +#: awx/main/models/unified_jobs.py:60 +msgid "Waiting" +msgstr "Wachten" + +#: awx/main/models/unified_jobs.py:61 +msgid "Running" +msgstr "Uitvoeren" + +#: awx/main/models/unified_jobs.py:65 +msgid "Canceled" +msgstr "Geannuleerd" + +#: awx/main/models/unified_jobs.py:69 +msgid "Never Updated" +msgstr "Nooit bijgewerkt" + +#: awx/main/models/unified_jobs.py:73 awx/ui/templates/ui/index.html:67 +#: awx/ui/templates/ui/index.html.py:86 +msgid "OK" +msgstr "OK" + +#: awx/main/models/unified_jobs.py:74 +msgid "Missing" +msgstr "Ontbrekend" + +#: awx/main/models/unified_jobs.py:78 +msgid "No External Source" +msgstr "Geen externe bron" + +#: awx/main/models/unified_jobs.py:85 +msgid "Updating" +msgstr "Bijwerken" + +#: awx/main/models/unified_jobs.py:429 +msgid "Relaunch" +msgstr "Opnieuw starten" + +#: awx/main/models/unified_jobs.py:430 +msgid "Callback" +msgstr "Terugkoppelen" + +#: awx/main/models/unified_jobs.py:431 +msgid "Scheduled" +msgstr "Gepland" + +#: awx/main/models/unified_jobs.py:432 +msgid "Dependency" +msgstr "Afhankelijkheid" + +#: awx/main/models/unified_jobs.py:433 +msgid "Workflow" +msgstr "Workflow" + +#: awx/main/models/unified_jobs.py:434 +msgid "Sync" +msgstr "Synchroniseren" + +#: awx/main/models/unified_jobs.py:481 +msgid "The node the job executed on." +msgstr "Het knooppunt waarop de taak is uitgevoerd." + +#: awx/main/models/unified_jobs.py:507 +msgid "The date and time the job was queued for starting." +msgstr "" +"De datum en tijd waarop de taak in de wachtrij is gezet om te worden " +"gestart." + +#: awx/main/models/unified_jobs.py:513 +msgid "The date and time the job finished execution." +msgstr "De datum en tijd waarop de taak de uitvoering heeft beëindigd." + +#: awx/main/models/unified_jobs.py:519 +msgid "Elapsed time in seconds that the job ran." +msgstr "Verstreken tijd in seconden dat de taak is uitgevoerd." + +#: awx/main/models/unified_jobs.py:541 +msgid "" +"A status field to indicate the state of the job if it wasn't able to run and" +" capture stdout" +msgstr "" +"Een statusveld om de status van de taak aan te geven als deze niet kon " +"worden uitgevoerd en stdout niet kon worden vastgelegd" + +#: awx/main/models/unified_jobs.py:580 +msgid "The Rampart/Instance group the job was run under" +msgstr "De Rampart-/instantiegroep waaronder de taak werd uitgevoerd" + +#: awx/main/notifications/base.py:17 +#: awx/main/notifications/email_backend.py:28 +msgid "" +"{} #{} had status {}, view details at {}\n" +"\n" +msgstr "" +"{} #{} had status {}, geef details weer op {}\n" +"\n" + +#: awx/main/notifications/hipchat_backend.py:47 +msgid "Error sending messages: {}" +msgstr "Fout bij verzending van berichten: {}" + +#: awx/main/notifications/hipchat_backend.py:49 +msgid "Error sending message to hipchat: {}" +msgstr "Fout bij verzending van bericht naar hipchat: {}" + +#: awx/main/notifications/irc_backend.py:54 +msgid "Exception connecting to irc server: {}" +msgstr "Uitzondering bij het maken van de verbinding met de irc-server: {}" + +#: awx/main/notifications/pagerduty_backend.py:39 +msgid "Exception connecting to PagerDuty: {}" +msgstr "Uitzondering bij het maken van de verbinding met PagerDuty: {}" + +#: awx/main/notifications/pagerduty_backend.py:48 +#: awx/main/notifications/slack_backend.py:52 +#: awx/main/notifications/twilio_backend.py:46 +msgid "Exception sending messages: {}" +msgstr "Uitzondering bij het verzenden van berichten: {}" + +#: awx/main/notifications/twilio_backend.py:36 +msgid "Exception connecting to Twilio: {}" +msgstr "Uitzondering bij het maken van de verbinding met Twilio: {}" + +#: awx/main/notifications/webhook_backend.py:38 +#: awx/main/notifications/webhook_backend.py:40 +msgid "Error sending notification webhook: {}" +msgstr "Fout bij verzending bericht webhook: {}" + +#: awx/main/scheduler/__init__.py:184 +msgid "" +"Job spawned from workflow could not start because it was not in the right " +"state or required manual credentials" +msgstr "" +"Taak voortgebracht vanuit workflow kon niet starten omdat deze niet de " +"juiste status of vereiste handmatige referenties had" + +#: awx/main/scheduler/__init__.py:188 +msgid "" +"Job spawned from workflow could not start because it was missing a related " +"resource such as project or inventory" +msgstr "" +"Taak voortgebracht vanuit workflow kon niet starten omdat een gerelateerde " +"resource zoals project of inventaris ontbreekt" + +#: awx/main/tasks.py:184 +msgid "Ansible Tower host usage over 90%" +msgstr "Ansible Tower-hostgebruik meer dan 90%" + +#: awx/main/tasks.py:189 +msgid "Ansible Tower license will expire soon" +msgstr "De licentie voor Ansible Tower verloopt binnenkort" + +#: awx/main/tasks.py:318 +msgid "status_str must be either succeeded or failed" +msgstr "status_str must moet geslaagd of mislukt zijn" + +#: awx/main/tasks.py:1531 +msgid "Dependent inventory update {} was canceled." +msgstr "De afhankelijke inventarisupdate {} is geannuleerd." + +#: awx/main/utils/common.py:89 +#, python-format +msgid "Unable to convert \"%s\" to boolean" +msgstr "Kan \"%s\" niet converteren in boolean" + +#: awx/main/utils/common.py:209 +#, python-format +msgid "Unsupported SCM type \"%s\"" +msgstr "Niet-ondersteund SCM-type \"%s\"" + +#: awx/main/utils/common.py:216 awx/main/utils/common.py:228 +#: awx/main/utils/common.py:247 +#, python-format +msgid "Invalid %s URL" +msgstr "Ongeldige %s URL" + +#: awx/main/utils/common.py:218 awx/main/utils/common.py:257 +#, python-format +msgid "Unsupported %s URL" +msgstr "Niet-ondersteunde %s URL" + +#: awx/main/utils/common.py:259 +#, python-format +msgid "Unsupported host \"%s\" for file:// URL" +msgstr "Niet-ondersteunde host \"%s\" voor bestand:// URL" + +#: awx/main/utils/common.py:261 +#, python-format +msgid "Host is required for %s URL" +msgstr "Host is vereist voor %s URL" + +#: awx/main/utils/common.py:279 +#, python-format +msgid "Username must be \"git\" for SSH access to %s." +msgstr "Gebruikersnaam moet \"git\" zijn voor SSH-toegang tot %s." + +#: awx/main/utils/common.py:285 +#, python-format +msgid "Username must be \"hg\" for SSH access to %s." +msgstr "Gebruikersnaam moet \"hg\" zijn voor SSH-toegang tot %s." + +#: awx/main/validators.py:60 +#, python-format +msgid "Invalid certificate or key: %s..." +msgstr "Ongeldig certificaat of ongeldige sleutel: %s..." + +#: awx/main/validators.py:74 +#, python-format +msgid "Invalid private key: unsupported type \"%s\"" +msgstr "Ongeldige privésleutel: niet-ondersteund type \"%s\"" + +#: awx/main/validators.py:78 +#, python-format +msgid "Unsupported PEM object type: \"%s\"" +msgstr "Niet-ondersteund PEM-objecttype \"%s\"" + +#: awx/main/validators.py:103 +msgid "Invalid base64-encoded data" +msgstr "Ongeldige base64-versleutelde gegevens" + +#: awx/main/validators.py:122 +msgid "Exactly one private key is required." +msgstr "Precies één privésleutel is vereist." + +#: awx/main/validators.py:124 +msgid "At least one private key is required." +msgstr "Ten minste één privésleutel is vereist." + +#: awx/main/validators.py:126 +#, python-format +msgid "" +"At least %(min_keys)d private keys are required, only %(key_count)d " +"provided." +msgstr "" +"Ten minste %(min_keys)d privésleutels zijn vereist, niet meer dan " +"%(key_count)d geleverd." + +#: awx/main/validators.py:129 +#, python-format +msgid "Only one private key is allowed, %(key_count)d provided." +msgstr "Maar één privésleutel is toegestaan, %(key_count)d geleverd." + +#: awx/main/validators.py:131 +#, python-format +msgid "" +"No more than %(max_keys)d private keys are allowed, %(key_count)d provided." +msgstr "" +"Niet meer dan %(max_keys)d privésleutels zijn toegestaan, %(key_count)d " +"geleverd." + +#: awx/main/validators.py:136 +msgid "Exactly one certificate is required." +msgstr "Precies één certificaat is vereist." + +#: awx/main/validators.py:138 +msgid "At least one certificate is required." +msgstr "Ten minste één certificaat is vereist." + +#: awx/main/validators.py:140 +#, python-format +msgid "" +"At least %(min_certs)d certificates are required, only %(cert_count)d " +"provided." +msgstr "" +"Ten minste %(min_certs)d certificaten zijn vereist, niet meer dan " +"%(cert_count)d geleverd." + +#: awx/main/validators.py:143 +#, python-format +msgid "Only one certificate is allowed, %(cert_count)d provided." +msgstr "Maar één certificaat is toegestaan, %(cert_count)d geleverd." + +#: awx/main/validators.py:145 +#, python-format +msgid "" +"No more than %(max_certs)d certificates are allowed, %(cert_count)d " +"provided." +msgstr "" +"Niet meer dan %(max_certs)d certificaten zijn toegestaan, %(cert_count)d " +"geleverd." + +#: awx/main/views.py:23 +msgid "API Error" +msgstr "API-fout" + +#: awx/main/views.py:61 +msgid "Bad Request" +msgstr "Onjuiste aanvraag" + +#: awx/main/views.py:62 +msgid "The request could not be understood by the server." +msgstr "De aanvraag kon niet worden begrepen door de server." + +#: awx/main/views.py:69 +msgid "Forbidden" +msgstr "Niet-toegestaan" + +#: awx/main/views.py:70 +msgid "You don't have permission to access the requested resource." +msgstr "U bent niet gemachtigd om de aangevraagde resource te openen." + +#: awx/main/views.py:77 +msgid "Not Found" +msgstr "Niet gevonden" + +#: awx/main/views.py:78 +msgid "The requested resource could not be found." +msgstr "De aangevraagde resource is onvindbaar." + +#: awx/main/views.py:85 +msgid "Server Error" +msgstr "Serverfout" + +#: awx/main/views.py:86 +msgid "A server error has occurred." +msgstr "Er is een serverfout opgetreden" + +#: awx/settings/defaults.py:664 +msgid "US East (Northern Virginia)" +msgstr "VS Oosten (Northern Virginia)" + +#: awx/settings/defaults.py:665 +msgid "US East (Ohio)" +msgstr "VS Oosten (Ohio)" + +#: awx/settings/defaults.py:666 +msgid "US West (Oregon)" +msgstr "VS Westen (Oregon)" + +#: awx/settings/defaults.py:667 +msgid "US West (Northern California)" +msgstr "VS Westen (Northern California)" + +#: awx/settings/defaults.py:668 +msgid "Canada (Central)" +msgstr "Canada (Midden)" + +#: awx/settings/defaults.py:669 +msgid "EU (Frankfurt)" +msgstr "EU (Frankfurt)" + +#: awx/settings/defaults.py:670 +msgid "EU (Ireland)" +msgstr "EU (Ierland)" + +#: awx/settings/defaults.py:671 +msgid "EU (London)" +msgstr "EU (Londen)" + +#: awx/settings/defaults.py:672 +msgid "Asia Pacific (Singapore)" +msgstr "Azië-Pacific (Singapore)" + +#: awx/settings/defaults.py:673 +msgid "Asia Pacific (Sydney)" +msgstr "Azië-Pacific (Sydney)" + +#: awx/settings/defaults.py:674 +msgid "Asia Pacific (Tokyo)" +msgstr "Azië-Pacific (Tokyo)" + +#: awx/settings/defaults.py:675 +msgid "Asia Pacific (Seoul)" +msgstr "Azië-Pacific (Seoul)" + +#: awx/settings/defaults.py:676 +msgid "Asia Pacific (Mumbai)" +msgstr "Azië-Pacific (Mumbai)" + +#: awx/settings/defaults.py:677 +msgid "South America (Sao Paulo)" +msgstr "Zuid-Amerika (Sao Paulo)" + +#: awx/settings/defaults.py:678 +msgid "US West (GovCloud)" +msgstr "VS Westen (GovCloud)" + +#: awx/settings/defaults.py:679 +msgid "China (Beijing)" +msgstr "China (Beijing)" + +#: awx/settings/defaults.py:728 +msgid "US East 1 (B)" +msgstr "VS Oosten 1 (B)" + +#: awx/settings/defaults.py:729 +msgid "US East 1 (C)" +msgstr "VS Oosten 1 (C)" + +#: awx/settings/defaults.py:730 +msgid "US East 1 (D)" +msgstr "VS Oosten 1 (D)" + +#: awx/settings/defaults.py:731 +msgid "US East 4 (A)" +msgstr "VS Oosten 4 (A)" + +#: awx/settings/defaults.py:732 +msgid "US East 4 (B)" +msgstr "VS Oosten 4 (B)" + +#: awx/settings/defaults.py:733 +msgid "US East 4 (C)" +msgstr "VS Oosten 4 (C)" + +#: awx/settings/defaults.py:734 +msgid "US Central (A)" +msgstr "VS Midden (A)" + +#: awx/settings/defaults.py:735 +msgid "US Central (B)" +msgstr "VS Midden (B)" + +#: awx/settings/defaults.py:736 +msgid "US Central (C)" +msgstr "VS Midden (C)" + +#: awx/settings/defaults.py:737 +msgid "US Central (F)" +msgstr "VS Midden (F)" + +#: awx/settings/defaults.py:738 +msgid "US West (A)" +msgstr "VS Westen (A)" + +#: awx/settings/defaults.py:739 +msgid "US West (B)" +msgstr "VS Westen (B)" + +#: awx/settings/defaults.py:740 +msgid "US West (C)" +msgstr "VS Westen (C)" + +#: awx/settings/defaults.py:741 +msgid "Europe West 1 (B)" +msgstr "Europa Westen 1 (B)" + +#: awx/settings/defaults.py:742 +msgid "Europe West 1 (C)" +msgstr "Europa Westen 1 (C)" + +#: awx/settings/defaults.py:743 +msgid "Europe West 1 (D)" +msgstr "Europa Westen 1 (D)" + +#: awx/settings/defaults.py:744 +msgid "Europe West 2 (A)" +msgstr "Europa Westen 2 (A)" + +#: awx/settings/defaults.py:745 +msgid "Europe West 2 (B)" +msgstr "Europa Westen 2 (B)" + +#: awx/settings/defaults.py:746 +msgid "Europe West 2 (C)" +msgstr "Europa Westen 2 (C)" + +#: awx/settings/defaults.py:747 +msgid "Asia East (A)" +msgstr "Azië Oosten (A)" + +#: awx/settings/defaults.py:748 +msgid "Asia East (B)" +msgstr "Azië Oosten (B)" + +#: awx/settings/defaults.py:749 +msgid "Asia East (C)" +msgstr "Azië Oosten (C)" + +#: awx/settings/defaults.py:750 +msgid "Asia Southeast (A)" +msgstr "Azië (Zuidoost) (A)" + +#: awx/settings/defaults.py:751 +msgid "Asia Southeast (B)" +msgstr "Azië (Zuidoost) (B)" + +#: awx/settings/defaults.py:752 +msgid "Asia Northeast (A)" +msgstr "Azië (Noordoost) (A)" + +#: awx/settings/defaults.py:753 +msgid "Asia Northeast (B)" +msgstr "Azië (Noordoost) (B)" + +#: awx/settings/defaults.py:754 +msgid "Asia Northeast (C)" +msgstr "Azië (Noordoost) (C)" + +#: awx/settings/defaults.py:755 +msgid "Australia Southeast (A)" +msgstr "Australië Zuidoost (A)" + +#: awx/settings/defaults.py:756 +msgid "Australia Southeast (B)" +msgstr "Australië Zuidoost (B)" + +#: awx/settings/defaults.py:757 +msgid "Australia Southeast (C)" +msgstr "Australië Zuidoost (C)" + +#: awx/settings/defaults.py:781 +msgid "US East" +msgstr "VS Oosten" + +#: awx/settings/defaults.py:782 +msgid "US East 2" +msgstr "VS Oosten 2" + +#: awx/settings/defaults.py:783 +msgid "US Central" +msgstr "VS Midden" + +#: awx/settings/defaults.py:784 +msgid "US North Central" +msgstr "VS Noord Midden" + +#: awx/settings/defaults.py:785 +msgid "US South Central" +msgstr "VS Zuid MIdden" + +#: awx/settings/defaults.py:786 +msgid "US West Central" +msgstr "VS West Midden" + +#: awx/settings/defaults.py:787 +msgid "US West" +msgstr "VS Westen" + +#: awx/settings/defaults.py:788 +msgid "US West 2" +msgstr "VS Westen 2" + +#: awx/settings/defaults.py:789 +msgid "Canada East" +msgstr "Canada Oosten" + +#: awx/settings/defaults.py:790 +msgid "Canada Central" +msgstr "Canada Midden" + +#: awx/settings/defaults.py:791 +msgid "Brazil South" +msgstr "Brazilië Zuiden" + +#: awx/settings/defaults.py:792 +msgid "Europe North" +msgstr "Europa Noorden" + +#: awx/settings/defaults.py:793 +msgid "Europe West" +msgstr "Europa Westen" + +#: awx/settings/defaults.py:794 +msgid "UK West" +msgstr "VK Westen" + +#: awx/settings/defaults.py:795 +msgid "UK South" +msgstr "VK Zuiden" + +#: awx/settings/defaults.py:796 +msgid "Asia East" +msgstr "Azië Oosten" + +#: awx/settings/defaults.py:797 +msgid "Asia Southeast" +msgstr "Azië Zuidoosten" + +#: awx/settings/defaults.py:798 +msgid "Australia East" +msgstr "Australië Oosten" + +#: awx/settings/defaults.py:799 +msgid "Australia Southeast" +msgstr "Australië Zuidoosten" + +#: awx/settings/defaults.py:800 +msgid "India West" +msgstr "India Westen" + +#: awx/settings/defaults.py:801 +msgid "India South" +msgstr "India Zuiden" + +#: awx/settings/defaults.py:802 +msgid "Japan East" +msgstr "Japan Oosten" + +#: awx/settings/defaults.py:803 +msgid "Japan West" +msgstr "Japan Westen" + +#: awx/settings/defaults.py:804 +msgid "Korea Central" +msgstr "Korea Midden" + +#: awx/settings/defaults.py:805 +msgid "Korea South" +msgstr "Korea Zuiden" + +#: awx/sso/apps.py:9 +msgid "Single Sign-On" +msgstr "Single Sign-On" + +#: awx/sso/conf.py:30 +msgid "" +"Mapping to organization admins/users from social auth accounts. This setting\n" +"controls which users are placed into which Tower organizations based on their\n" +"username and email address. Configuration details are available in the Ansible\n" +"Tower documentation.'" +msgstr "" +"Toewijzing aan organisatiebeheerders/-gebruikers vanuit sociale " +"verificatieaccounts. Deze instelling bepaalt welke gebruikers in welke " +"Tower-organisaties worden geplaatst op grond van hun gebruikersnaam en " +"e-mailadres. Configuratiedetails zijn beschikbaar in de Ansible Tower-" +"documentatie." + +#: awx/sso/conf.py:55 +msgid "" +"Mapping of team members (users) from social auth accounts. Configuration\n" +"details are available in Tower documentation." +msgstr "" +"Toewijzing van teamleden (gebruikers) vanuit sociale verificatieaccounts. Configuratie-\n" +"details zijn beschikbaar in de Tower-documentatie." + +#: awx/sso/conf.py:80 +msgid "Authentication Backends" +msgstr "Verificatiebackends" + +#: awx/sso/conf.py:81 +msgid "" +"List of authentication backends that are enabled based on license features " +"and other authentication settings." +msgstr "" +"Lijst met verificatiebackends die worden ingeschakeld op grond van " +"licentiekenmerken en andere verificatie-instellingen." + +#: awx/sso/conf.py:94 +msgid "Social Auth Organization Map" +msgstr "Organisatiekaart sociale verificatie" + +#: awx/sso/conf.py:106 +msgid "Social Auth Team Map" +msgstr "Teamkaart sociale verificatie" + +#: awx/sso/conf.py:118 +msgid "Social Auth User Fields" +msgstr "Gebruikersvelden sociale verificatie" + +#: awx/sso/conf.py:119 +msgid "" +"When set to an empty list `[]`, this setting prevents new user accounts from" +" being created. Only users who have previously logged in using social auth " +"or have a user account with a matching email address will be able to login." +msgstr "" +"Indien ingesteld op een lege lijst `[]`, voorkomt deze instelling dat nieuwe" +" gebruikersaccounts worden gemaakt. Alleen gebruikers die zich eerder hebben" +" aangemeld met sociale verificatie of een gebruikersaccount hebben met een " +"overeenkomend e-mailadres, kunnen zich aanmelden." + +#: awx/sso/conf.py:137 +msgid "LDAP Server URI" +msgstr "URI LDAP-server" + +#: awx/sso/conf.py:138 +msgid "" +"URI to connect to LDAP server, such as \"ldap://ldap.example.com:389\" (non-" +"SSL) or \"ldaps://ldap.example.com:636\" (SSL). Multiple LDAP servers may be" +" specified by separating with spaces or commas. LDAP authentication is " +"disabled if this parameter is empty." +msgstr "" +"URI om verbinding te maken met een LDAP-server, zoals " +"\"ldap://ldap.example.com:389\" (niet-SSL) of " +"\"ldaps://ldap.example.com:636\" (SSL). Meerdere LDAP-servers kunnen worden " +"opgegeven door ze van elkaar te scheiden met komma's. LDAP-authenticatie is " +"uitgeschakeld als deze parameter leeg is." + +#: awx/sso/conf.py:142 awx/sso/conf.py:158 awx/sso/conf.py:170 +#: awx/sso/conf.py:182 awx/sso/conf.py:198 awx/sso/conf.py:218 +#: awx/sso/conf.py:240 awx/sso/conf.py:255 awx/sso/conf.py:273 +#: awx/sso/conf.py:290 awx/sso/conf.py:307 awx/sso/conf.py:323 +#: awx/sso/conf.py:337 awx/sso/conf.py:354 awx/sso/conf.py:380 +msgid "LDAP" +msgstr "LDAP" + +#: awx/sso/conf.py:154 +msgid "LDAP Bind DN" +msgstr "DN LDAP-binding" + +#: awx/sso/conf.py:155 +msgid "" +"DN (Distinguished Name) of user to bind for all search queries. This is the " +"system user account we will use to login to query LDAP for other user " +"information. Refer to the Ansible Tower documentation for example syntax." +msgstr "" +"DN (Distinguished Name) van gebruiker om te binden voor alle zoekquery's. " +"Dit is de systeemgebruikersaccount waarmee we ons aanmelden om LDAP te " +"ondervragen voor andere gebruikersinformatie. Raadpleeg de documentatie van " +"Ansible Tower voor voorbeeldsyntaxis." + +#: awx/sso/conf.py:168 +msgid "LDAP Bind Password" +msgstr "Wachtwoord voor LDAP-binding" + +#: awx/sso/conf.py:169 +msgid "Password used to bind LDAP user account." +msgstr "Wachtwoord gebruikt om LDAP-gebruikersaccount te binden." + +#: awx/sso/conf.py:180 +msgid "LDAP Start TLS" +msgstr "TLS voor starten LDAP" + +#: awx/sso/conf.py:181 +msgid "Whether to enable TLS when the LDAP connection is not using SSL." +msgstr "" +"Of TLS moet worden ingeschakeld wanneer de LDAP-verbinding geen SSL " +"gebruikt." + +#: awx/sso/conf.py:191 +msgid "LDAP Connection Options" +msgstr "Opties voor LDAP-verbinding" + +#: awx/sso/conf.py:192 +msgid "" +"Additional options to set for the LDAP connection. LDAP referrals are " +"disabled by default (to prevent certain LDAP queries from hanging with AD). " +"Option names should be strings (e.g. \"OPT_REFERRALS\"). Refer to " +"https://www.python-ldap.org/doc/html/ldap.html#options for possible options " +"and values that can be set." +msgstr "" +"Extra opties voor de LDAP-verbinding. LDAP-verwijzingen zijn standaard " +"uitgeschakeld (om te voorkomen dat sommige LDAP-query's vastlopen met AD). " +"Optienamen kunnen tekenreeksen zijn (bijv. \"OPT_REFERRALS\"). Zie " +"https://www.python-ldap.org/doc/html/ldap.html#options voor de opties en " +"waarden die u kunt instellen." + +#: awx/sso/conf.py:211 +msgid "LDAP User Search" +msgstr "Gebruikers zoeken met LDAP" + +#: awx/sso/conf.py:212 +msgid "" +"LDAP search query to find users. Any user that matches the given pattern " +"will be able to login to Tower. The user should also be mapped into a Tower" +" organization (as defined in the AUTH_LDAP_ORGANIZATION_MAP setting). If " +"multiple search queries need to be supported use of \"LDAPUnion\" is " +"possible. See Tower documentation for details." +msgstr "" +"LDAP-zoekquery om gebruikers te vinden. Iedere gebruiker die past bij het " +"opgegeven patroon kan zich aanmelden bij Tower. De gebruiker moet ook worden" +" toegewezen aan een Tower-organisatie (zoals gedefinieerd in de instelling " +"AUTH_LDAP_ORGANIZATION_MAP setting). Als meerdere zoekquery's moeten worden" +" ondersteund, kan \"LDAPUnion\" worden gebruikt. Zie de Tower-documentatie " +"voor details." + +#: awx/sso/conf.py:234 +msgid "LDAP User DN Template" +msgstr "Sjabloon voor LDAP-gebruikers-DN" + +#: awx/sso/conf.py:235 +msgid "" +"Alternative to user search, if user DNs are all of the same format. This " +"approach is more efficient for user lookups than searching if it is usable " +"in your organizational environment. If this setting has a value it will be " +"used instead of AUTH_LDAP_USER_SEARCH." +msgstr "" +"Alternatief voor het zoeken naar gebruikers als DN's van gebruikers dezelfde" +" indeling hebben. Deze methode is efficiënter voor het opzoeken van " +"gebruikers dan zoeken als de methode bruikbaar is binnen de omgeving van uw " +"organisatie. Als deze instelling een waarde heeft, wordt die gebruikt in " +"plaats van AUTH_LDAP_USER_SEARCH." + +#: awx/sso/conf.py:250 +msgid "LDAP User Attribute Map" +msgstr "Kenmerkentoewijzing van LDAP-gebruikers" + +#: awx/sso/conf.py:251 +msgid "" +"Mapping of LDAP user schema to Tower API user attributes. The default " +"setting is valid for ActiveDirectory but users with other LDAP " +"configurations may need to change the values. Refer to the Ansible Tower " +"documentation for additonal details." +msgstr "" +"Toewijzing van LDAP-gebruikersschema aan gebruikerskenmerken van Tower API. " +"De standaardinstelling is geldig voor ActiveDirectory, maar gebruikers met " +"andere LDAP-configuraties moeten mogelijk de waarden veranderen. Raadpleeg " +"de documentatie van Ansible Tower voor meer informatie." + +#: awx/sso/conf.py:269 +msgid "LDAP Group Search" +msgstr "LDAP-groep zoeken" + +#: awx/sso/conf.py:270 +msgid "" +"Users are mapped to organizations based on their membership in LDAP groups. " +"This setting defines the LDAP search query to find groups. Unlike the user " +"search, group search does not support LDAPSearchUnion." +msgstr "" +"Gebruikers worden toegewezen aan organisaties op grond van hun lidmaatschap " +"van LDAP-groepen. Deze instelling definieert de LDAP-zoekquery om groepen te" +" vinden. Anders dan het zoeken naar gebruikers biedt het zoeken naar groepen" +" geen ondersteuning voor LDAPSearchUnion." + +#: awx/sso/conf.py:286 +msgid "LDAP Group Type" +msgstr "Type LDAP-groep" + +#: awx/sso/conf.py:287 +msgid "" +"The group type may need to be changed based on the type of the LDAP server." +" Values are listed at: http://pythonhosted.org/django-auth-ldap/groups.html" +"#types-of-groups" +msgstr "" +"Mogelijk moet het groepstype worden gewijzigd op grond van het type LDAP-" +"server. Waarden worden vermeld op: http://pythonhosted.org/django-auth-" +"ldap/groups.html#types-of-groups" + +#: awx/sso/conf.py:302 +msgid "LDAP Require Group" +msgstr "LDAP-vereist-groep" + +#: awx/sso/conf.py:303 +msgid "" +"Group DN required to login. If specified, user must be a member of this " +"group to login via LDAP. If not set, everyone in LDAP that matches the user " +"search will be able to login via Tower. Only one require group is supported." +msgstr "" +"Groeps-DN vereist voor aanmelding. Indien opgegeven, moet de gebruiker lid " +"zijn van deze groep om zich aan te melden via LDAP. Indien niet ingesteld, " +"kan iedereen in LDAP die overeenkomt met de gebruikerszoekopdracht zich " +"aanmelden via Tower. Maar één vereiste groep wordt ondersteund." + +#: awx/sso/conf.py:319 +msgid "LDAP Deny Group" +msgstr "LDAP-weiger-groep" + +#: awx/sso/conf.py:320 +msgid "" +"Group DN denied from login. If specified, user will not be allowed to login " +"if a member of this group. Only one deny group is supported." +msgstr "" +"Groeps-DN geweigerd voor aanmelding. Indien opgegeven, kan een gebruikers " +"zich niet aanmelden als deze lid is van deze groep. Maar één weiger-groep " +"wordt ondersteund." + +#: awx/sso/conf.py:333 +msgid "LDAP User Flags By Group" +msgstr "LDAP-gebruikersvlaggen op groep" + +#: awx/sso/conf.py:334 +msgid "" +"Retrieve users from a given group. At this time, superuser and system " +"auditors are the only groups supported. Refer to the Ansible Tower " +"documentation for more detail." +msgstr "" +"Gebruikers ophalen uit een opgegeven groep. Op dit moment zijn de enige " +"ondersteunde groepen supergebruikers en systeemauditors. Raadpleeg de " +"documentatie van Ansible Tower voor meer informatie." + +#: awx/sso/conf.py:349 +msgid "LDAP Organization Map" +msgstr "Toewijzing LDAP-organisaties" + +#: awx/sso/conf.py:350 +msgid "" +"Mapping between organization admins/users and LDAP groups. This controls " +"which users are placed into which Tower organizations relative to their LDAP" +" group memberships. Configuration details are available in the Ansible Tower" +" documentation." +msgstr "" +"Toewijzing tussen organisatiebeheerders/-gebruikers en LDAP-groepen. Dit " +"bepaalt welke gebruikers worden geplaatst in welke Tower-organisaties ten " +"opzichte van hun LDAP-groepslidmaatschappen. Configuratiedetails zijn " +"beschikbaar in de documentatie van Ansible Tower." + +#: awx/sso/conf.py:377 +msgid "LDAP Team Map" +msgstr "LDAP-teamtoewijzing" + +#: awx/sso/conf.py:378 +msgid "" +"Mapping between team members (users) and LDAP groups. Configuration details " +"are available in the Ansible Tower documentation." +msgstr "" +"Toewijzing tussen teamleden (gebruikers) en LDAP-groepen. " +"Configuratiedetails zijn beschikbaar in de documentatie van Ansible Tower." + +#: awx/sso/conf.py:406 +msgid "RADIUS Server" +msgstr "RADIUS-server" + +#: awx/sso/conf.py:407 +msgid "" +"Hostname/IP of RADIUS server. RADIUS authentication is disabled if this " +"setting is empty." +msgstr "" +"Hostnaam/IP-adres van RADIUS-server. RADIUS-authenticatie wordt " +"uitgeschakeld als deze instelling leeg is." + +#: awx/sso/conf.py:409 awx/sso/conf.py:423 awx/sso/conf.py:435 +#: awx/sso/models.py:14 +msgid "RADIUS" +msgstr "RADIUS" + +#: awx/sso/conf.py:421 +msgid "RADIUS Port" +msgstr "RADIUS-poort" + +#: awx/sso/conf.py:422 +msgid "Port of RADIUS server." +msgstr "Poort van RADIUS-server." + +#: awx/sso/conf.py:433 +msgid "RADIUS Secret" +msgstr "RADIUS-geheim" + +#: awx/sso/conf.py:434 +msgid "Shared secret for authenticating to RADIUS server." +msgstr "Gedeeld geheim voor authenticatie naar RADIUS-server." + +#: awx/sso/conf.py:450 +msgid "TACACS+ Server" +msgstr "TACACS+ server" + +#: awx/sso/conf.py:451 +msgid "Hostname of TACACS+ server." +msgstr "Hostnaam van TACACS+ server." + +#: awx/sso/conf.py:452 awx/sso/conf.py:465 awx/sso/conf.py:478 +#: awx/sso/conf.py:491 awx/sso/conf.py:503 awx/sso/models.py:15 +msgid "TACACS+" +msgstr "TACACS+" + +#: awx/sso/conf.py:463 +msgid "TACACS+ Port" +msgstr "TACACS+ poort" + +#: awx/sso/conf.py:464 +msgid "Port number of TACACS+ server." +msgstr "Poortnummer van TACACS+ server." + +#: awx/sso/conf.py:476 +msgid "TACACS+ Secret" +msgstr "TACACS+ geheim" + +#: awx/sso/conf.py:477 +msgid "Shared secret for authenticating to TACACS+ server." +msgstr "Gedeeld geheim voor authenticatie naar TACACS+ server." + +#: awx/sso/conf.py:489 +msgid "TACACS+ Auth Session Timeout" +msgstr "Time-out TACACS+ authenticatiesessie" + +#: awx/sso/conf.py:490 +msgid "TACACS+ session timeout value in seconds, 0 disables timeout." +msgstr "" +"Time-outwaarde TACACS+ sessie in seconden, 0 schakelt de time-out uit." + +#: awx/sso/conf.py:501 +msgid "TACACS+ Authentication Protocol" +msgstr "TACACS+ authenticatieprotocol" + +#: awx/sso/conf.py:502 +msgid "Choose the authentication protocol used by TACACS+ client." +msgstr "" +"Kies het authenticatieprotocol dat wordt gebruikt door de TACACS+ client." + +#: awx/sso/conf.py:517 +msgid "Google OAuth2 Callback URL" +msgstr "Terugkoppelings-URL voor Google OAuth2" + +#: awx/sso/conf.py:518 awx/sso/conf.py:611 awx/sso/conf.py:676 +msgid "" +"Provide this URL as the callback URL for your application as part of your " +"registration process. Refer to the Ansible Tower documentation for more " +"detail." +msgstr "" +"Geef deze URL op als de terugkoppelings-URL voor uw toepassing als onderdeel" +" van uw registratieproces. Raadpleeg de documentatie van Ansible Tower voor " +"meer informatie." + +#: awx/sso/conf.py:521 awx/sso/conf.py:533 awx/sso/conf.py:545 +#: awx/sso/conf.py:558 awx/sso/conf.py:572 awx/sso/conf.py:584 +#: awx/sso/conf.py:596 +msgid "Google OAuth2" +msgstr "Google OAuth2" + +#: awx/sso/conf.py:531 +msgid "Google OAuth2 Key" +msgstr "Google OAuth2-sleutel" + +#: awx/sso/conf.py:532 +msgid "The OAuth2 key from your web application." +msgstr "De OAuth2-sleutel van uw webtoepassing." + +#: awx/sso/conf.py:543 +msgid "Google OAuth2 Secret" +msgstr "Google OAuth2-geheim" + +#: awx/sso/conf.py:544 +msgid "The OAuth2 secret from your web application." +msgstr "Het OAuth2-geheim van uw webtoepassing." + +#: awx/sso/conf.py:555 +msgid "Google OAuth2 Whitelisted Domains" +msgstr "In whitelist opgenomen Google OAuth2-domeinen" + +#: awx/sso/conf.py:556 +msgid "" +"Update this setting to restrict the domains who are allowed to login using " +"Google OAuth2." +msgstr "" +"Werk deze instelling bij om te beperken welke domeinen zich mogen aanmelden " +"met Google OAuth2." + +#: awx/sso/conf.py:567 +msgid "Google OAuth2 Extra Arguments" +msgstr "Extra argumenten Google OAuth2" + +#: awx/sso/conf.py:568 +msgid "" +"Extra arguments for Google OAuth2 login. You can restrict it to only allow a" +" single domain to authenticate, even if the user is logged in with multple " +"Google accounts. Refer to the Ansible Tower documentation for more detail." +msgstr "" +"Extra argumenten voor Google OAuth2-aanmelding. U kunt een beperking " +"instellen, waardoor de authenticatie toegestaan is voor niet meer dan één " +"domein, zelfs als de gebruiker aangemeld is met meerdere Google-accounts. " +"Raadpleeg de documentatie van Ansible Tower voor meer informatie." + +#: awx/sso/conf.py:582 +msgid "Google OAuth2 Organization Map" +msgstr "Organisatietoewijzing Google OAuth2" + +#: awx/sso/conf.py:594 +msgid "Google OAuth2 Team Map" +msgstr "Teamtoewijzing Google OAuth2" + +#: awx/sso/conf.py:610 +msgid "GitHub OAuth2 Callback URL" +msgstr "Terugkoppelings-URL GitHub OAuth2" + +#: awx/sso/conf.py:614 awx/sso/conf.py:626 awx/sso/conf.py:637 +#: awx/sso/conf.py:649 awx/sso/conf.py:661 +msgid "GitHub OAuth2" +msgstr "GitHub OAuth2" + +#: awx/sso/conf.py:624 +msgid "GitHub OAuth2 Key" +msgstr "GitHub OAuth2-sleutel" + +#: awx/sso/conf.py:625 +msgid "The OAuth2 key (Client ID) from your GitHub developer application." +msgstr "De OAuth2-sleutel (Client-id) van uw GitHub-ontwikkelaarstoepassing." + +#: awx/sso/conf.py:635 +msgid "GitHub OAuth2 Secret" +msgstr "GitHub OAuth2-geheim" + +#: awx/sso/conf.py:636 +msgid "" +"The OAuth2 secret (Client Secret) from your GitHub developer application." +msgstr "" +"Het OAuth2-geheim (Client-geheim) van uw GitHub-ontwikkelaarstoepassing." + +#: awx/sso/conf.py:647 +msgid "GitHub OAuth2 Organization Map" +msgstr "GitHub OAuth2-organisatietoewijzing" + +#: awx/sso/conf.py:659 +msgid "GitHub OAuth2 Team Map" +msgstr "GitHub OAuth2-teamtoewijzing" + +#: awx/sso/conf.py:675 +msgid "GitHub Organization OAuth2 Callback URL" +msgstr "OAuth2-terugkoppelings-URL GitHub-organisatie" + +#: awx/sso/conf.py:679 awx/sso/conf.py:691 awx/sso/conf.py:702 +#: awx/sso/conf.py:715 awx/sso/conf.py:726 awx/sso/conf.py:738 +msgid "GitHub Organization OAuth2" +msgstr "Organization OAuth2 van GitHub-organisatie" + +#: awx/sso/conf.py:689 +msgid "GitHub Organization OAuth2 Key" +msgstr " OAuth2-sleutel van GitHub-organisatie" + +#: awx/sso/conf.py:690 awx/sso/conf.py:768 +msgid "The OAuth2 key (Client ID) from your GitHub organization application." +msgstr "De OAuth2-sleutel (Client-id) van uw GitHub-organisatietoepassing." + +#: awx/sso/conf.py:700 +msgid "GitHub Organization OAuth2 Secret" +msgstr " OAuth2-geheim van GitHub-organisatie" + +#: awx/sso/conf.py:701 awx/sso/conf.py:779 +msgid "" +"The OAuth2 secret (Client Secret) from your GitHub organization application." +msgstr "" +"Het OAuth2-geheim (Client-geheim) van uw GitHub-organisatietoepassing." + +#: awx/sso/conf.py:712 +msgid "GitHub Organization Name" +msgstr "Naam van GitHub-organisatie" + +#: awx/sso/conf.py:713 +msgid "" +"The name of your GitHub organization, as used in your organization's URL: " +"https://github.com//." +msgstr "" +"De naam van uw GitHub-organisatie zoals gebruikt in de URL van uw " +"organisatie: https://github.com//." + +#: awx/sso/conf.py:724 +msgid "GitHub Organization OAuth2 Organization Map" +msgstr "OAuth2-organisatietoewijzing van GitHub-organisatie" + +#: awx/sso/conf.py:736 +msgid "GitHub Organization OAuth2 Team Map" +msgstr "OAuth2-teamtoewijzing van GitHub-organisatie" + +#: awx/sso/conf.py:752 +msgid "GitHub Team OAuth2 Callback URL" +msgstr "OAuth2-terugkoppelings-URL GitHub-team" + +#: awx/sso/conf.py:753 +msgid "" +"Create an organization-owned application at " +"https://github.com/organizations//settings/applications and obtain " +"an OAuth2 key (Client ID) and secret (Client Secret). Provide this URL as " +"the callback URL for your application." +msgstr "" +"Maak een toepassing in eigendom van de organisatie op " +"https://github.com/organizations//settings/applications en verkrijg" +" een OAuth2-sleutel (Client-id) en -geheim (Client-geheim). Lever deze URL " +"als de terugkoppelings-URL voor uw toepassing." + +#: awx/sso/conf.py:757 awx/sso/conf.py:769 awx/sso/conf.py:780 +#: awx/sso/conf.py:793 awx/sso/conf.py:804 awx/sso/conf.py:816 +msgid "GitHub Team OAuth2" +msgstr "OAuth2 van GitHub-team" + +#: awx/sso/conf.py:767 +msgid "GitHub Team OAuth2 Key" +msgstr "OAuth2-sleutel GitHub-team" + +#: awx/sso/conf.py:778 +msgid "GitHub Team OAuth2 Secret" +msgstr "OAuth2-geheim GitHub-team" + +#: awx/sso/conf.py:790 +msgid "GitHub Team ID" +msgstr "Id GitHub-team" + +#: awx/sso/conf.py:791 +msgid "" +"Find the numeric team ID using the Github API: http://fabian-" +"kostadinov.github.io/2015/01/16/how-to-find-a-github-team-id/." +msgstr "" +"Zoek de numerieke team-id op met de Github API: http://fabian-" +"kostadinov.github.io/2015/01/16/how-to-find-a-github-team-id/." + +#: awx/sso/conf.py:802 +msgid "GitHub Team OAuth2 Organization Map" +msgstr "OAuth2-organisatietoewijzing van GitHub-team" + +#: awx/sso/conf.py:814 +msgid "GitHub Team OAuth2 Team Map" +msgstr "OAuth2-teamtoewijzing van GitHub-organisatie" + +#: awx/sso/conf.py:830 +msgid "Azure AD OAuth2 Callback URL" +msgstr "Terugkoppelings-URL voor Azure AD OAuth2" + +#: awx/sso/conf.py:831 +msgid "" +"Provide this URL as the callback URL for your application as part of your " +"registration process. Refer to the Ansible Tower documentation for more " +"detail. " +msgstr "" +"Geef deze URL op als de terugkoppelings-URL voor uw toepassing als onderdeel" +" van uw registratieproces. Raadpleeg de documentatie van Ansible Tower voor " +"meer informatie." + +#: awx/sso/conf.py:834 awx/sso/conf.py:846 awx/sso/conf.py:857 +#: awx/sso/conf.py:869 awx/sso/conf.py:881 +msgid "Azure AD OAuth2" +msgstr "Azure AD OAuth2" + +#: awx/sso/conf.py:844 +msgid "Azure AD OAuth2 Key" +msgstr "Azure AD OAuth2-sleutel" + +#: awx/sso/conf.py:845 +msgid "The OAuth2 key (Client ID) from your Azure AD application." +msgstr "De OAuth2-sleutel (Client-id) van uw Azure AD-toepassing." + +#: awx/sso/conf.py:855 +msgid "Azure AD OAuth2 Secret" +msgstr "Azure AD OAuth2-geheim" + +#: awx/sso/conf.py:856 +msgid "The OAuth2 secret (Client Secret) from your Azure AD application." +msgstr "Het OAuth2-geheim (Client-geheim) van uw Azure AD-toepassing." + +#: awx/sso/conf.py:867 +msgid "Azure AD OAuth2 Organization Map" +msgstr "Azure AD OAuth2-organisatietoewijzing" + +#: awx/sso/conf.py:879 +msgid "Azure AD OAuth2 Team Map" +msgstr "Azure AD OAuth2-teamtoewijzing" + +#: awx/sso/conf.py:904 +msgid "SAML Assertion Consumer Service (ACS) URL" +msgstr "URL SAML Assertion Consumer Service (ACS)" + +#: awx/sso/conf.py:905 +msgid "" +"Register Tower as a service provider (SP) with each identity provider (IdP) " +"you have configured. Provide your SP Entity ID and this ACS URL for your " +"application." +msgstr "" +"Registreer Tower als serviceprovider (SP) met elke identiteitsprovider (IdP)" +" die u hebt geconfigureerd. Lever uw SP-entiteit-id en deze ACS URL voor uw " +"toepassing." + +#: awx/sso/conf.py:908 awx/sso/conf.py:922 awx/sso/conf.py:936 +#: awx/sso/conf.py:951 awx/sso/conf.py:965 awx/sso/conf.py:978 +#: awx/sso/conf.py:999 awx/sso/conf.py:1017 awx/sso/conf.py:1036 +#: awx/sso/conf.py:1070 awx/sso/conf.py:1083 awx/sso/models.py:16 +msgid "SAML" +msgstr "SAML" + +#: awx/sso/conf.py:919 +msgid "SAML Service Provider Metadata URL" +msgstr "URL voor metagegevens van SAML-serviceprovider" + +#: awx/sso/conf.py:920 +msgid "" +"If your identity provider (IdP) allows uploading an XML metadata file, you " +"can download one from this URL." +msgstr "" +"Als uw identiteitsprovider (IdP) toestaat een XML-gegevensbestand te " +"uploaden, kunt u er een uploaden vanaf deze URL." + +#: awx/sso/conf.py:932 +msgid "SAML Service Provider Entity ID" +msgstr "Entiteit-id van SAML-serviceprovider" + +#: awx/sso/conf.py:933 +msgid "" +"The application-defined unique identifier used as the audience of the SAML " +"service provider (SP) configuration. This is usually the URL for Tower." +msgstr "" +"De toepassingsgedefinieerde unieke id gebruikt als doelgroep van de SAML-" +"serviceprovider (SP)-configuratie. Dit is gewoonlijk de URL voor Tower." + +#: awx/sso/conf.py:948 +msgid "SAML Service Provider Public Certificate" +msgstr "Openbaar certificaat SAML-serviceprovider" + +#: awx/sso/conf.py:949 +msgid "" +"Create a keypair for Tower to use as a service provider (SP) and include the" +" certificate content here." +msgstr "" +"Maak een sleutelpaar voor Tower om dit te gebruiken als serviceprovider (SP)" +" en neem de certificaatinhoud hier op." + +#: awx/sso/conf.py:962 +msgid "SAML Service Provider Private Key" +msgstr "Privésleutel SAML-serviceprovider" + +#: awx/sso/conf.py:963 +msgid "" +"Create a keypair for Tower to use as a service provider (SP) and include the" +" private key content here." +msgstr "" +"Maak een sleutelpaar voor Tower om dit te gebruiken als serviceprovider (SP)" +" en neem de inhoud van de privésleutel hier op." + +#: awx/sso/conf.py:975 +msgid "SAML Service Provider Organization Info" +msgstr "Organisatie-informatie SAML-serviceprovider" + +#: awx/sso/conf.py:976 +msgid "" +"Provide the URL, display name, and the name of your app. Refer to the " +"Ansible Tower documentation for example syntax." +msgstr "" +"Geef de URL, weergavenaam en de naam van uw toepassing op. Raadpleeg de " +"documentatie van Ansible Tower voor voorbeeldsyntaxis." + +#: awx/sso/conf.py:995 +msgid "SAML Service Provider Technical Contact" +msgstr "Technisch contactpersoon SAML-serviceprovider" + +#: awx/sso/conf.py:996 +msgid "" +"Provide the name and email address of the technical contact for your service" +" provider. Refer to the Ansible Tower documentation for example syntax." +msgstr "" +"Geef de naam en het e-mailadres van de technische contactpersoon van uw " +"serviceprovider op. Raadpleeg de documentatie van Ansible Tower voor " +"voorbeeldsyntaxis." + +#: awx/sso/conf.py:1013 +msgid "SAML Service Provider Support Contact" +msgstr "Ondersteuningscontactpersoon SAML-serviceprovider" + +#: awx/sso/conf.py:1014 +msgid "" +"Provide the name and email address of the support contact for your service " +"provider. Refer to the Ansible Tower documentation for example syntax." +msgstr "" +"Geef de naam en het e-mailadres van de ondersteuningscontactpersoon voor uw " +"serviceprovider op. Raadpleeg de documentatie van Ansible Tower voor " +"voorbeeldsyntaxis." + +#: awx/sso/conf.py:1030 +msgid "SAML Enabled Identity Providers" +msgstr "Id-providers met SAML-mogelijkheden" + +#: awx/sso/conf.py:1031 +msgid "" +"Configure the Entity ID, SSO URL and certificate for each identity provider " +"(IdP) in use. Multiple SAML IdPs are supported. Some IdPs may provide user " +"data using attribute names that differ from the default OIDs. Attribute " +"names may be overridden for each IdP. Refer to the Ansible documentation for" +" additional details and syntax." +msgstr "" +"Configureer de entiteit-id, de SSO URL en het certificaat voor elke id-" +"provider (IdP) die in gebruik is. Meerdere ASAML IdP's worden ondersteund. " +"Sommige IdP's kunnen gebruikersgegevens verschaffen met kenmerknamen die " +"verschillen van de standaard-OID's. Kenmerknamen kunnen worden overschreven " +"voor elke IdP. Raadpleeg de documentatie van Ansible voor meer informatie en" +" syntaxis." + +#: awx/sso/conf.py:1068 +msgid "SAML Organization Map" +msgstr "SAML-organisatietoewijzing" + +#: awx/sso/conf.py:1081 +msgid "SAML Team Map" +msgstr "SAML-teamtoewijzing" + +#: awx/sso/fields.py:123 +msgid "Invalid connection option(s): {invalid_options}." +msgstr "Ongeldige verbindingsoptie(s): {invalid_options}." + +#: awx/sso/fields.py:194 +msgid "Base" +msgstr "Basis" + +#: awx/sso/fields.py:195 +msgid "One Level" +msgstr "Eén niveau" + +#: awx/sso/fields.py:196 +msgid "Subtree" +msgstr "Substructuur" + +#: awx/sso/fields.py:214 +msgid "Expected a list of three items but got {length} instead." +msgstr "Verwachtte een lijst met drie items, maar kreeg er {length}." + +#: awx/sso/fields.py:215 +msgid "Expected an instance of LDAPSearch but got {input_type} instead." +msgstr "" +"Verwachtte een instantie van LDAPSearch, maar kreeg in plaats daarvan " +"{input_type}." + +#: awx/sso/fields.py:251 +msgid "" +"Expected an instance of LDAPSearch or LDAPSearchUnion but got {input_type} " +"instead." +msgstr "" +"Verwachtte een instantie van LDAPSearch of LDAPSearchUnion, maar kreeg in " +"plaats daarvan {input_type}." + +#: awx/sso/fields.py:289 +msgid "Invalid user attribute(s): {invalid_attrs}." +msgstr "Ongeldig(e) gebruikerskenmerk(en): {invalid_attrs}." + +#: awx/sso/fields.py:306 +msgid "Expected an instance of LDAPGroupType but got {input_type} instead." +msgstr "" +"Verwachtte een instantie van LDAPGroupType, maar kreeg in plaats daarvan " +"{input_type}." + +#: awx/sso/fields.py:334 +msgid "Invalid user flag: \"{invalid_flag}\"." +msgstr "Ongeldige gebruikersvlag: \"{invalid_flag}\"." + +#: awx/sso/fields.py:350 awx/sso/fields.py:517 +msgid "" +"Expected None, True, False, a string or list of strings but got {input_type}" +" instead." +msgstr "" +"Verwachtte None, True, False, een tekenreeks of een lijst met tekenreeksen, " +"maar kreeg in plaats daarvan {input_type}." + +#: awx/sso/fields.py:386 +msgid "Missing key(s): {missing_keys}." +msgstr "Ontbrekende sleutel(s): {missing_keys}." + +#: awx/sso/fields.py:387 +msgid "Invalid key(s): {invalid_keys}." +msgstr "Ongeldige sleutel(s): {invalid_keys}." + +#: awx/sso/fields.py:436 awx/sso/fields.py:553 +msgid "Invalid key(s) for organization map: {invalid_keys}." +msgstr "Ongeldige sleutel(s) voor organisatietoewijzing: {invalid_keys}." + +#: awx/sso/fields.py:454 +msgid "Missing required key for team map: {invalid_keys}." +msgstr "Ontbrekende vereiste sleutel voor teamtoewijzing: {invalid_keys}." + +#: awx/sso/fields.py:455 awx/sso/fields.py:572 +msgid "Invalid key(s) for team map: {invalid_keys}." +msgstr "Ongeldige sleutel(s) voor teamtoewijzing: {invalid_keys}." + +#: awx/sso/fields.py:571 +msgid "Missing required key for team map: {missing_keys}." +msgstr "Ontbrekende vereiste sleutel voor teamtoewijzing: {missing_keys}." + +#: awx/sso/fields.py:589 +msgid "Missing required key(s) for org info record: {missing_keys}." +msgstr "Ontbrekende vereiste sleutel(s) voor org info record: {missing_keys}." + +#: awx/sso/fields.py:602 +msgid "Invalid language code(s) for org info: {invalid_lang_codes}." +msgstr "Ongeldige taalcode(s) voor org info: {invalid_lang_codes}." + +#: awx/sso/fields.py:621 +msgid "Missing required key(s) for contact: {missing_keys}." +msgstr "Ontbrekende vereiste sleutel(s) voor contactpersoon: {missing_keys}." + +#: awx/sso/fields.py:633 +msgid "Missing required key(s) for IdP: {missing_keys}." +msgstr "Ontbrekende vereiste sleutel(s) voor IdP: {missing_keys}." + +#: awx/sso/pipeline.py:24 +msgid "An account cannot be found for {0}" +msgstr "Een account kan niet worden gevonden voor {0}" + +#: awx/sso/pipeline.py:30 +msgid "Your account is inactive" +msgstr "Uw account is inactief" + +#: awx/sso/validators.py:20 awx/sso/validators.py:46 +#, python-format +msgid "DN must include \"%%(user)s\" placeholder for username: %s" +msgstr "DN moet plaatshouder \"%%(user)s\" bevatten voor gebruikersnaam: %s" + +#: awx/sso/validators.py:27 +#, python-format +msgid "Invalid DN: %s" +msgstr "Ongeldige DN: %s" + +#: awx/sso/validators.py:58 +#, python-format +msgid "Invalid filter: %s" +msgstr "Ongeldig filter: %s" + +#: awx/sso/validators.py:69 +msgid "TACACS+ secret does not allow non-ascii characters" +msgstr "TACACS+ geheim staat geen niet-ascii-tekens toe" + +#: awx/templates/error.html:4 +msgid "AWX" +msgstr "AWX" + +#: awx/templates/rest_framework/api.html:39 +msgid "Ansible Tower API Guide" +msgstr "Gebruikersgids Ansible Tower API" + +#: awx/templates/rest_framework/api.html:40 +msgid "Back to Ansible Tower" +msgstr "Terug naar Ansible Tower" + +#: awx/templates/rest_framework/api.html:41 +msgid "Resize" +msgstr "Groter/kleiner maken" + +#: awx/templates/rest_framework/base.html:78 +#: awx/templates/rest_framework/base.html:92 +#, python-format +msgid "Make a GET request on the %(name)s resource" +msgstr "Maak een OPHAAL-aanvraag voor de resource van %(name)s" + +#: awx/templates/rest_framework/base.html:80 +msgid "Specify a format for the GET request" +msgstr "Geef een indeling op voor de OPHAAL-aanvraag" + +#: awx/templates/rest_framework/base.html:86 +#, python-format +msgid "" +"Make a GET request on the %(name)s resource with the format set to " +"`%(format)s`" +msgstr "" +"Maak een OPHAAL-aanvraag voor de resource van %(name)s met de indeling " +"ingesteld op `%(format)s`" + +#: awx/templates/rest_framework/base.html:100 +#, python-format +msgid "Make an OPTIONS request on the %(name)s resource" +msgstr "Maak een OPTIES-aanvraag voor de resource van %(name)s" + +#: awx/templates/rest_framework/base.html:106 +#, python-format +msgid "Make a DELETE request on the %(name)s resource" +msgstr "Maak een VERWIJDER-aanvraag voor de resource van %(name)s" + +#: awx/templates/rest_framework/base.html:113 +msgid "Filters" +msgstr "Filters" + +#: awx/templates/rest_framework/base.html:172 +#: awx/templates/rest_framework/base.html:186 +#, python-format +msgid "Make a POST request on the %(name)s resource" +msgstr "Maak een POST-aanvraag voor de resource van %(name)s" + +#: awx/templates/rest_framework/base.html:216 +#: awx/templates/rest_framework/base.html:230 +#, python-format +msgid "Make a PUT request on the %(name)s resource" +msgstr "Maak een PLAATS-aanvraag voor de resource van %(name)s" + +#: awx/templates/rest_framework/base.html:233 +#, python-format +msgid "Make a PATCH request on the %(name)s resource" +msgstr "Maak een PATCH-aanvraag voor de resource van %(name)s" + +#: awx/ui/apps.py:9 awx/ui/conf.py:22 awx/ui/conf.py:36 awx/ui/conf.py:51 +msgid "UI" +msgstr "Gebruikersinterface" + +#: awx/ui/conf.py:16 +msgid "Off" +msgstr "Uit" + +#: awx/ui/conf.py:17 +msgid "Anonymous" +msgstr "Anoniem" + +#: awx/ui/conf.py:18 +msgid "Detailed" +msgstr "Gedetailleerd" + +#: awx/ui/conf.py:20 +msgid "Analytics Tracking State" +msgstr "Trackingstatus analyses" + +#: awx/ui/conf.py:21 +msgid "Enable or Disable Analytics Tracking." +msgstr "Tacking analyses in- of uitschakelen" + +#: awx/ui/conf.py:31 +msgid "Custom Login Info" +msgstr "Aangepaste aanmeldgegevens" + +#: awx/ui/conf.py:32 +msgid "" +"If needed, you can add specific information (such as a legal notice or a " +"disclaimer) to a text box in the login modal using this setting. Any content" +" added must be in plain text, as custom HTML or other markup languages are " +"not supported." +msgstr "" +"U kunt met deze instelling zo nodig specifieke informatie (zoals juridische " +"informatie of een afwijzing) toevoegen aan een tekstvak in de aanmeldmodus. " +"Alle toegevoegde tekst moet in gewone tekst zijn omdat aangepaste HTML of " +"andere opmaaktalen niet worden ondersteund." + +#: awx/ui/conf.py:46 +msgid "Custom Logo" +msgstr "Aangepast logo" + +#: awx/ui/conf.py:47 +msgid "" +"To set up a custom logo, provide a file that you create. For the custom logo" +" to look its best, use a .png file with a transparent background. GIF, PNG " +"and JPEG formats are supported." +msgstr "" +"Om een aangepast logo te maken, levert u een bestand dat u zelf maakt. Het " +"aangepaste logo ziet er op zijn best uit als u een .png-bestand met " +"transparante achtergrond gebruikt. De indelingen GIF, PNG en JPEG worden " +"ondersteund." + +#: awx/ui/fields.py:29 +msgid "" +"Invalid format for custom logo. Must be a data URL with a base64-encoded " +"GIF, PNG or JPEG image." +msgstr "" +"Ongeldige indeling voor aangepast logo. Moet een gegevens-URL zijn met een " +"base64-versleutelde GIF-, PNG- of JPEG-afbeelding." + +#: awx/ui/fields.py:30 +msgid "Invalid base64-encoded data in data URL." +msgstr "Ongeldige base64-versleutelde gegevens in gegevens-URL." + +#: awx/ui/templates/ui/index.html:31 +msgid "" +"Your session will expire in 60 seconds, would you like to " +"continue?" +msgstr "" +"Uw sessie verloopt over 60 seconden. Wilt u doorgaan?" + +#: awx/ui/templates/ui/index.html:46 +msgid "CANCEL" +msgstr "ANNULEREN" + +#: awx/ui/templates/ui/index.html:98 +msgid "Set how many days of data should be retained." +msgstr "Stel in hoeveel dagen aan gegevens er moet worden bewaard." + +#: awx/ui/templates/ui/index.html:104 +msgid "" +"Please enter an integer that is not " +"negative that is lower than " +"9999." +msgstr "" +"Geef een geheel getal opdat niet negatief " +"is dat kleiner is dan " +"9999." + +#: awx/ui/templates/ui/index.html:109 +msgid "" +"For facts collected older than the time period specified, save one fact scan (snapshot) per time window (frequency). For example, facts older than 30 days are purged, while one weekly fact scan is kept.\n" +"
\n" +"
CAUTION: Setting both numerical variables to \"0\" will delete all facts.\n" +"
\n" +"
" +msgstr "" +"Voor verzamelde feiten die ouder zijn dan de opgegeven periode, slaat u één feitenscan (momentopname) per tijdvenster (frequentie) op. Bijvoorbeeld feiten ouder dan 30 dagen worden verwijderd, terwijl één wekelijkse feitenscan wordt bewaard.\n" +"
\n" +"
LET OP: als u beide numerieke variabelen instelt op \"0\", worden alle feiten verwijderd.\n" +"
\n" +"
" + +#: awx/ui/templates/ui/index.html:118 +msgid "Select a time period after which to remove old facts" +msgstr "Selecteer een tijdsperiode waarna oude feiten worden verwijderd." + +#: awx/ui/templates/ui/index.html:132 +msgid "" +"Please enter an integer that is not " +"negative that is lower than " +"9999." +msgstr "" +"Geef een geheel getal op dat niet negatief " +"is dat kleiner is dan " +"9999." + +#: awx/ui/templates/ui/index.html:137 +msgid "Select a frequency for snapshot retention" +msgstr "Selecteer een frequentie voor het behoud van momentopnames" + +#: awx/ui/templates/ui/index.html:151 +msgid "" +"Please enter an integer that is not" +" negative that is " +"lower than 9999." +msgstr "" +"Geef een geheel getal op dat niet " +"negatief is dat kleiner" +" is dan 9999." + +#: awx/ui/templates/ui/index.html:157 +msgid "working..." +msgstr "bezig..." diff --git a/awx/main/access.py b/awx/main/access.py index bf722c0e2c..d73b877389 100644 --- a/awx/main/access.py +++ b/awx/main/access.py @@ -377,9 +377,11 @@ class InstanceAccess(BaseAccess): def get_queryset(self): if self.user.is_superuser or self.user.is_system_auditor: - return Instance.objects.all().distinct() + qs = Instance.objects.all().distinct() else: - return Instance.objects.filter(rampart_groups__in=self.user.get_queryset(InstanceGroup)).distinct() + qs = Instance.objects.filter( + rampart_groups__in=self.user.get_queryset(InstanceGroup)).distinct() + return qs.prefetch_related('rampart_groups') def can_add(self, data): return False @@ -397,9 +399,11 @@ class InstanceGroupAccess(BaseAccess): def get_queryset(self): if self.user.is_superuser or self.user.is_system_auditor: - return InstanceGroup.objects.all() + qs = InstanceGroup.objects.all() else: - return InstanceGroup.objects.filter(organization__in=Organization.accessible_objects(self.user, 'admin_role')) + qs = InstanceGroup.objects.filter( + organization__in=Organization.accessible_pk_qs(self.user, 'admin_role')) + return qs.prefetch_related('instances') def can_add(self, data): return False @@ -506,6 +510,8 @@ class OrganizationAccess(BaseAccess): I can change or delete organizations when: - I am a superuser. - I'm an admin of that organization. + I can associate/disassociate instance groups when: + - I am a superuser. ''' model = Organization @@ -537,7 +543,7 @@ class OrganizationAccess(BaseAccess): def can_attach(self, obj, sub_obj, relationship, *args, **kwargs): if relationship == "instance_groups": - if self.user.can_access(type(sub_obj), "read", sub_obj) and self.user in obj.admin_role: + if self.user.is_superuser: return True return False return super(OrganizationAccess, self).can_attach(obj, sub_obj, relationship, *args, **kwargs) @@ -596,9 +602,18 @@ class InventoryAccess(BaseAccess): @check_superuser def can_admin(self, obj, data): + # Host filter may only be modified by org admin level + org_admin_mandatory = False + new_host_filter = data.get('host_filter', None) if data else None + if new_host_filter and new_host_filter != obj.host_filter: + org_admin_mandatory = True # Verify that the user has access to the new organization if moving an # inventory to a new organization. Otherwise, just check for admin permission. - return self.check_related('organization', Organization, data, obj=obj) and self.user in obj.admin_role + return ( + self.check_related('organization', Organization, data, obj=obj, + mandatory=org_admin_mandatory) and + self.user in obj.admin_role + ) @check_superuser def can_update(self, obj): @@ -834,6 +849,10 @@ class InventoryUpdateAccess(BaseAccess): def get_queryset(self): qs = InventoryUpdate.objects.distinct() qs = qs.select_related('created_by', 'modified_by', 'inventory_source__inventory') + qs = qs.prefetch_related( + 'unified_job_template', + 'instance_group' + ) inventory_sources_qs = self.user.get_queryset(InventorySource) return qs.filter(inventory_source__in=inventory_sources_qs) @@ -1080,11 +1099,17 @@ class ProjectUpdateAccess(BaseAccess): def get_queryset(self): if self.user.is_superuser or self.user.is_system_auditor: - return self.model.objects.all() - qs = ProjectUpdate.objects.distinct() + qs = self.model.objects.all() + else: + qs = self.model.objects.filter( + project__in=Project.accessible_pk_qs(self.user, 'read_role') + ) qs = qs.select_related('created_by', 'modified_by', 'project') - project_ids = set(self.user.get_queryset(Project).values_list('id', flat=True)) - return qs.filter(project_id__in=project_ids) + qs = qs.prefetch_related( + 'unified_job_template', + 'instance_group' + ) + return qs @check_superuser def can_cancel(self, obj): @@ -1304,7 +1329,11 @@ class JobAccess(BaseAccess): qs = self.model.objects qs = qs.select_related('created_by', 'modified_by', 'job_template', 'inventory', 'project', 'credential', 'job_template') - qs = qs.prefetch_related('unified_job_template') + qs = qs.prefetch_related( + 'unified_job_template', + 'instance_group', + Prefetch('labels', queryset=Label.objects.all().order_by('name')) + ) if self.user.is_superuser or self.user.is_system_auditor: return qs.all() @@ -2170,10 +2199,13 @@ class LabelAccess(BaseAccess): def get_queryset(self): if self.user.is_superuser or self.user.is_system_auditor: - return self.model.objects.all() - return self.model.objects.all().filter( - organization__in=Organization.accessible_objects(self.user, 'read_role') - ) + qs = self.model.objects.all() + else: + qs = self.model.objects.all().filter( + organization__in=Organization.accessible_pk_qs(self.user, 'read_role') + ) + qs = qs.prefetch_related('modified_by', 'created_by', 'organization') + return qs @check_superuser def can_read(self, obj): diff --git a/awx/main/conf.py b/awx/main/conf.py index c4f4bcf9b0..7b8e5f92db 100644 --- a/awx/main/conf.py +++ b/awx/main/conf.py @@ -311,7 +311,7 @@ register( min_value=0, default=0, label=_('Default Inventory Update Timeout'), - help_text=_('Maximum time to allow inventory updates to run. Use value of 0 to indicate that no ' + help_text=_('Maximum time in seconds to allow inventory updates to run. Use value of 0 to indicate that no ' 'timeout should be imposed. A timeout set on an individual inventory source will override this.'), category=_('Jobs'), category_slug='jobs', @@ -323,7 +323,7 @@ register( min_value=0, default=0, label=_('Default Project Update Timeout'), - help_text=_('Maximum time to allow project updates to run. Use value of 0 to indicate that no ' + help_text=_('Maximum time in seconds to allow project updates to run. Use value of 0 to indicate that no ' 'timeout should be imposed. A timeout set on an individual project will override this.'), category=_('Jobs'), category_slug='jobs', @@ -446,7 +446,7 @@ register( register( 'LOG_AGGREGATOR_PROTOCOL', field_class=fields.ChoiceField, - choices=['https', 'tcp', 'udp'], + choices=[('https', 'HTTPS'), ('tcp', 'TCP'), ('udp', 'UDP')], default='https', label=_('Logging Aggregator Protocol'), help_text=_('Protocol used to communicate with log aggregator.'), diff --git a/awx/main/management/commands/check_license.py b/awx/main/management/commands/check_license.py index 8b67bd71e6..11b3b5cc9c 100644 --- a/awx/main/management/commands/check_license.py +++ b/awx/main/management/commands/check_license.py @@ -6,15 +6,8 @@ from django.core.management.base import NoArgsCommand class Command(NoArgsCommand): - """Return 0 if licensed; 1 if unlicensed - """ + """Returns license type, e.g., 'enterprise', 'open', 'none'""" def handle(self, **options): super(Command, self).__init__() - - license_info = get_licenser().validate() - if license_info['valid_key'] is True: - return 0 - else: - return 1 - + return get_licenser().validate().get('license_type', 'none') diff --git a/awx/main/management/commands/inventory_import.py b/awx/main/management/commands/inventory_import.py index 1de39baccb..aa64822bfe 100644 --- a/awx/main/management/commands/inventory_import.py +++ b/awx/main/management/commands/inventory_import.py @@ -83,6 +83,7 @@ class AnsibleInventoryLoader(object): env = dict(os.environ.items()) env['VIRTUAL_ENV'] = settings.ANSIBLE_VENV_PATH env['PATH'] = os.path.join(settings.ANSIBLE_VENV_PATH, "bin") + ":" + env['PATH'] + env['ANSIBLE_INVENTORY_UNPARSED_FAILED'] = '1' venv_libdir = os.path.join(settings.ANSIBLE_VENV_PATH, "lib") env.pop('PYTHONPATH', None) # default to none if no python_ver matches for python_ver in ["python2.7", "python2.6"]: diff --git a/awx/main/managers.py b/awx/main/managers.py index 2deeeb7046..4825b33231 100644 --- a/awx/main/managers.py +++ b/awx/main/managers.py @@ -3,6 +3,7 @@ import sys from datetime import timedelta +import logging from django.db import models from django.utils.timezone import now @@ -11,7 +12,9 @@ from django.conf import settings from awx.main.utils.filters import SmartFilter -___all__ = ['HostManager', 'InstanceManager'] +___all__ = ['HostManager', 'InstanceManager', 'InstanceGroupManager'] + +logger = logging.getLogger('awx.main.managers') class HostManager(models.Manager): @@ -34,6 +37,8 @@ class HostManager(models.Manager): hasattr(self.instance, 'kind')): if self.instance.kind == 'smart' and self.instance.host_filter is not None: q = SmartFilter.query_from_string(self.instance.host_filter) + if self.instance.organization_id: + q = q.filter(inventory__organization=self.instance.organization_id) # If we are using host_filters, disable the core_filters, this allows # us to access all of the available Host entries, not just the ones associated # with a specific FK/relation. @@ -41,11 +46,26 @@ class HostManager(models.Manager): # If we don't disable this, a filter of {'inventory': self.instance} gets automatically # injected by the related object mapper. self.core_filters = {} + qs = qs & q - return qs.distinct() + unique_by_name = qs.order_by('name', 'pk').distinct('name') + return qs.filter(pk__in=unique_by_name) return qs +def get_ig_ig_mapping(ig_instance_mapping, instance_ig_mapping): + # Create IG mapping by union of all groups their instances are members of + ig_ig_mapping = {} + for group_name in ig_instance_mapping.keys(): + ig_ig_set = set() + for instance_hostname in ig_instance_mapping[group_name]: + ig_ig_set |= instance_ig_mapping[instance_hostname] + else: + ig_ig_set.add(group_name) # Group contains no instances, return self + ig_ig_mapping[group_name] = ig_ig_set + return ig_ig_mapping + + class InstanceManager(models.Manager): """A custom manager class for the Instance model. @@ -77,3 +97,100 @@ class InstanceManager(models.Manager): def my_role(self): # NOTE: TODO: Likely to repurpose this once standalone ramparts are a thing return "tower" + + +class InstanceGroupManager(models.Manager): + """A custom manager class for the Instance model. + + Used for global capacity calculations + """ + + def capacity_mapping(self, qs=None): + """ + Another entry-point to Instance manager method by same name + """ + if qs is None: + qs = self.all().prefetch_related('instances') + instance_ig_mapping = {} + ig_instance_mapping = {} + # Create dictionaries that represent basic m2m memberships + for group in qs: + ig_instance_mapping[group.name] = set( + instance.hostname for instance in group.instances.all() if + instance.capacity != 0 + ) + for inst in group.instances.all(): + if inst.capacity == 0: + continue + instance_ig_mapping.setdefault(inst.hostname, set()) + instance_ig_mapping[inst.hostname].add(group.name) + # Get IG capacity overlap mapping + ig_ig_mapping = get_ig_ig_mapping(ig_instance_mapping, instance_ig_mapping) + + return instance_ig_mapping, ig_ig_mapping + + @staticmethod + def zero_out_group(graph, name, breakdown): + if name not in graph: + graph[name] = {} + graph[name]['consumed_capacity'] = 0 + if breakdown: + graph[name]['committed_capacity'] = 0 + graph[name]['running_capacity'] = 0 + + def capacity_values(self, qs=None, tasks=None, breakdown=False, graph=None): + """ + Returns a dictionary of capacity values for all IGs + """ + if qs is None: # Optionally BYOQS - bring your own queryset + qs = self.all().prefetch_related('instances') + instance_ig_mapping, ig_ig_mapping = self.capacity_mapping(qs=qs) + + if tasks is None: + tasks = self.model.unifiedjob_set.related.related_model.objects.filter( + status__in=('running', 'waiting')) + + if graph is None: + graph = {group.name: {} for group in qs} + for group_name in graph: + self.zero_out_group(graph, group_name, breakdown) + for t in tasks: + # TODO: dock capacity for isolated job management tasks running in queue + impact = t.task_impact + if t.status == 'waiting' or not t.execution_node: + # Subtract capacity from any peer groups that share instances + if not t.instance_group: + logger.warning('Excluded %s from capacity algorithm ' + '(missing instance_group).', t.log_format) + impacted_groups = [] + elif t.instance_group.name not in ig_ig_mapping: + # Waiting job in group with 0 capacity has no collateral impact + impacted_groups = [t.instance_group.name] + else: + impacted_groups = ig_ig_mapping[t.instance_group.name] + for group_name in impacted_groups: + if group_name not in graph: + self.zero_out_group(graph, group_name, breakdown) + graph[group_name]['consumed_capacity'] += impact + if breakdown: + graph[group_name]['committed_capacity'] += impact + elif t.status == 'running': + # Subtract capacity from all groups that contain the instance + if t.execution_node not in instance_ig_mapping: + logger.warning('Detected %s running inside lost instance, ' + 'may still be waiting for reaper.', t.log_format) + if t.instance_group: + impacted_groups = [t.instance_group.name] + else: + impacted_groups = [] + else: + impacted_groups = instance_ig_mapping[t.execution_node] + for group_name in impacted_groups: + if group_name not in graph: + self.zero_out_group(graph, group_name, breakdown) + graph[group_name]['consumed_capacity'] += impact + if breakdown: + graph[group_name]['running_capacity'] += impact + else: + logger.error('Programming error, %s not in ["running", "waiting"]', t.log_format) + return graph diff --git a/awx/main/middleware.py b/awx/main/middleware.py index 74308b8c28..dfb08b20fb 100644 --- a/awx/main/middleware.py +++ b/awx/main/middleware.py @@ -143,7 +143,8 @@ class URLModificationMiddleware(object): def _convert_named_url(self, url_path): url_units = url_path.split('/') - if len(url_units) < 6 or url_units[1] != 'api' or url_units[2] not in ['v2']: + # If the identifier is an empty string, it is always invalid. + if len(url_units) < 6 or url_units[1] != 'api' or url_units[2] not in ['v2'] or not url_units[4]: return url_path resource = url_units[3] if resource in settings.NAMED_URL_MAPPINGS: diff --git a/awx/main/models/ad_hoc_commands.py b/awx/main/models/ad_hoc_commands.py index 00773abcd8..ce02f900c8 100644 --- a/awx/main/models/ad_hoc_commands.py +++ b/awx/main/models/ad_hoc_commands.py @@ -347,7 +347,6 @@ class AdHocCommandEvent(CreatedModifiedModel): return u'%s @ %s' % (self.get_event_display(), self.created.isoformat()) def save(self, *args, **kwargs): - from awx.main.models.inventory import Host # If update_fields has been specified, add our field names to it, # if it hasn't been specified, then we're just doing a normal save. update_fields = kwargs.get('update_fields', []) @@ -364,16 +363,16 @@ class AdHocCommandEvent(CreatedModifiedModel): self.host_name = self.event_data.get('host', '').strip() if 'host_name' not in update_fields: update_fields.append('host_name') - try: - if not self.host_id and self.host_name: - host_qs = Host.objects.filter(inventory__ad_hoc_commands__id=self.ad_hoc_command_id, name=self.host_name) + if not self.host_id and self.host_name: + host_qs = self.ad_hoc_command.inventory.hosts.filter(name=self.host_name) + try: host_id = host_qs.only('id').values_list('id', flat=True) if host_id.exists(): self.host_id = host_id[0] if 'host_id' not in update_fields: update_fields.append('host_id') - except (IndexError, AttributeError): - pass + except (IndexError, AttributeError): + pass super(AdHocCommandEvent, self).save(*args, **kwargs) @classmethod diff --git a/awx/main/models/credential.py b/awx/main/models/credential.py index 720e3c2fa3..9b81498bfa 100644 --- a/awx/main/models/credential.py +++ b/awx/main/models/credential.py @@ -690,6 +690,7 @@ def vault(cls): 'secret': True, 'ask_at_runtime': True }], + 'required': ['vault_password'], } ) @@ -735,7 +736,8 @@ def net(cls): 'dependencies': { 'ssh_key_unlock': ['ssh_key_data'], 'authorize_password': ['authorize'], - } + }, + 'required': ['username'], } ) @@ -822,7 +824,7 @@ def vmware(cls): 'id': 'host', 'label': 'VCenter Host', 'type': 'string', - 'help_text': ('Enter the hostname or IP address which corresponds ' + 'help_text': ('Enter the hostname or IP address that corresponds ' 'to your VMware vCenter.') }, { 'id': 'username', @@ -850,7 +852,7 @@ def satellite6(cls): 'id': 'host', 'label': 'Satellite 6 URL', 'type': 'string', - 'help_text': ('Enter the URL which corresponds to your Red Hat ' + 'help_text': ('Enter the URL that corresponds to your Red Hat ' 'Satellite 6 server. For example, https://satellite.example.org') }, { 'id': 'username', @@ -861,7 +863,8 @@ def satellite6(cls): 'label': 'Password', 'type': 'string', 'secret': True, - }] + }], + 'required': ['host', 'username', 'password'], } ) @@ -877,7 +880,7 @@ def cloudforms(cls): 'id': 'host', 'label': 'CloudForms URL', 'type': 'string', - 'help_text': ('Enter the URL for the virtual machine which ' + 'help_text': ('Enter the URL for the virtual machine that ' 'corresponds to your CloudForm instance. ' 'For example, https://cloudforms.example.org') }, { @@ -889,7 +892,8 @@ def cloudforms(cls): 'label': 'Password', 'type': 'string', 'secret': True, - }] + }], + 'required': ['host', 'username', 'password'], } ) @@ -912,8 +916,9 @@ def gce(cls): 'label': 'Project', 'type': 'string', 'help_text': ('The Project ID is the GCE assigned identification. ' - 'It is constructed as two words followed by a three ' - 'digit number. Example: adjective-noun-000') + 'It is often constructed as three words or two words ' + 'followed by a three-digit number. Examples: project-id-000 ' + 'and another-project-id') }, { 'id': 'ssh_key_data', 'label': 'RSA Private Key', @@ -923,7 +928,8 @@ def gce(cls): 'multiline': True, 'help_text': ('Paste the contents of the PEM file associated ' 'with the service account email.') - }] + }], + 'required': ['username', 'ssh_key_data'], } ) @@ -951,7 +957,8 @@ def azure(cls): 'help_text': ('Paste the contents of the PEM file that corresponds ' 'to the certificate you uploaded in the Microsoft ' 'Azure console.') - }] + }], + 'required': ['username', 'ssh_key_data'], } ) @@ -991,7 +998,8 @@ def azure_rm(cls): 'id': 'tenant', 'label': 'Tenant ID', 'type': 'string' - }] + }], + 'required': ['subscription'], } ) @@ -1022,4 +1030,3 @@ def insights(cls): }, }, ) - diff --git a/awx/main/models/ha.py b/awx/main/models/ha.py index 509e37b4ac..f2e57f7a07 100644 --- a/awx/main/models/ha.py +++ b/awx/main/models/ha.py @@ -11,7 +11,7 @@ from django.utils.timezone import now, timedelta from solo.models import SingletonModel from awx.api.versioning import reverse -from awx.main.managers import InstanceManager +from awx.main.managers import InstanceManager, InstanceGroupManager from awx.main.models.inventory import InventoryUpdate from awx.main.models.jobs import Job from awx.main.models.projects import ProjectUpdate @@ -66,6 +66,8 @@ class Instance(models.Model): class InstanceGroup(models.Model): """A model representing a Queue/Group of AWX Instances.""" + objects = InstanceGroupManager() + name = models.CharField(max_length=250, unique=True) created = models.DateTimeField(auto_now_add=True) modified = models.DateTimeField(auto_now=True) @@ -89,12 +91,7 @@ class InstanceGroup(models.Model): @property def capacity(self): - return sum([x[0] for x in self.instances.values_list('capacity')]) - - @property - def consumed_capacity(self): - return sum(x.task_impact for x in UnifiedJob.objects.filter(instance_group=self, - status__in=('running', 'waiting'))) + return sum([inst.capacity for inst in self.instances.all()]) class Meta: app_label = 'main' diff --git a/awx/main/models/inventory.py b/awx/main/models/inventory.py index 2dc712450c..e13db5f749 100644 --- a/awx/main/models/inventory.py +++ b/awx/main/models/inventory.py @@ -1143,6 +1143,11 @@ class InventorySourceOptions(BaseModel): # from the instance metadata instead of those explicitly provided. elif self.source in CLOUD_PROVIDERS and self.source != 'ec2': raise ValidationError(_('Credential is required for a cloud source.')) + elif self.source == 'custom' and cred and cred.credential_type.kind in ('scm', 'ssh', 'insights', 'vault'): + raise ValidationError(_( + 'Credentials of type machine, source control, insights and vault are ' + 'disallowed for custom inventory sources.' + )) return cred def clean_source_regions(self): @@ -1400,7 +1405,7 @@ class InventorySource(UnifiedJobTemplate, InventorySourceOptions): self.source == 'scm' and \ InventorySource.objects.filter( Q(inventory=self.inventory, - update_on_project_update=True, source='scm') & + update_on_project_update=True, source='scm') & ~Q(id=self.id)).exists(): raise ValidationError(_("More than one SCM-based inventory source with update on project update per-inventory not allowed.")) return self.update_on_project_update @@ -1409,7 +1414,7 @@ class InventorySource(UnifiedJobTemplate, InventorySourceOptions): if self.update_on_project_update is True and \ self.source == 'scm' and \ self.update_on_launch is True: - raise ValidationError(_("Cannot update SCM-based inventory source on launch if set to update on project update. " + raise ValidationError(_("Cannot update SCM-based inventory source on launch if set to update on project update. " "Instead, configure the corresponding source project to update on launch.")) return self.update_on_launch diff --git a/awx/main/models/jobs.py b/awx/main/models/jobs.py index 60663a8087..b9e6a00359 100644 --- a/awx/main/models/jobs.py +++ b/awx/main/models/jobs.py @@ -20,7 +20,7 @@ from django.db.models import Q, Count from django.utils.dateparse import parse_datetime from dateutil import parser from dateutil.tz import tzutc -from django.utils.encoding import force_text +from django.utils.encoding import force_text, smart_str from django.utils.timezone import utc from django.utils.translation import ugettext_lazy as _ from django.core.exceptions import ValidationError @@ -785,10 +785,12 @@ class Job(UnifiedJob, JobOptions, SurveyJobMixin, JobNotificationMixin, TaskMana if 'insights' in ansible_facts and 'system_id' in ansible_facts['insights']: host.insights_system_id = ansible_facts['insights']['system_id'] host.save() - system_tracking_logger.info('New fact for inventory {} host {}'.format(host.inventory.name, host.name), - extra=dict(inventory_id=host.inventory.id, host_name=host.name, - ansible_facts=host.ansible_facts, - ansible_facts_modified=host.ansible_facts_modified.isoformat())) + system_tracking_logger.info( + 'New fact for inventory {} host {}'.format( + smart_str(host.inventory.name), smart_str(host.name)), + extra=dict(inventory_id=host.inventory.id, host_name=host.name, + ansible_facts=host.ansible_facts, + ansible_facts_modified=host.ansible_facts_modified.isoformat())) class JobHostSummary(CreatedModifiedModel): @@ -830,8 +832,9 @@ class JobHostSummary(CreatedModifiedModel): failed = models.BooleanField(default=False, editable=False) def __unicode__(self): + hostname = self.host.name if self.host else 'N/A' return '%s changed=%d dark=%d failures=%d ok=%d processed=%d skipped=%s' % \ - (self.host.name, self.changed, self.dark, self.failures, self.ok, + (hostname, self.changed, self.dark, self.failures, self.ok, self.processed, self.skipped) def get_absolute_url(self, request=None): @@ -1163,7 +1166,6 @@ class JobEvent(CreatedModifiedModel): def _update_hosts(self, extra_host_pks=None): # Update job event hosts m2m from host_name, propagate to parent events. - from awx.main.models.inventory import Host extra_host_pks = set(extra_host_pks or []) hostnames = set() if self.host_name: @@ -1174,7 +1176,7 @@ class JobEvent(CreatedModifiedModel): hostnames.update(v.keys()) except AttributeError: # In case event_data or v isn't a dict. pass - qs = Host.objects.filter(inventory__jobs__id=self.job_id) + qs = self.job.inventory.hosts.all() qs = qs.filter(Q(name__in=hostnames) | Q(pk__in=extra_host_pks)) qs = qs.exclude(job_events__pk=self.id).only('id') for host in qs: @@ -1185,30 +1187,32 @@ class JobEvent(CreatedModifiedModel): parent = parent[0] parent._update_hosts(qs.values_list('id', flat=True)) - def _update_host_summary_from_stats(self): - from awx.main.models.inventory import Host + def _hostnames(self): hostnames = set() try: for stat in ('changed', 'dark', 'failures', 'ok', 'processed', 'skipped'): hostnames.update(self.event_data.get(stat, {}).keys()) - except AttributeError: # In case event_data or v isn't a dict. + except AttributeError: # In case event_data or v isn't a dict. pass + return hostnames + + def _update_host_summary_from_stats(self, hostnames): with ignore_inventory_computed_fields(): - qs = Host.objects.filter(inventory__jobs__id=self.job_id, - name__in=hostnames) + qs = self.job.inventory.hosts.filter(name__in=hostnames) job = self.job for host in hostnames: host_stats = {} for stat in ('changed', 'dark', 'failures', 'ok', 'processed', 'skipped'): try: host_stats[stat] = self.event_data.get(stat, {}).get(host, 0) - except AttributeError: # in case event_data[stat] isn't a dict. + except AttributeError: # in case event_data[stat] isn't a dict. pass if qs.filter(name=host).exists(): host_actual = qs.get(name=host) host_summary, created = job.job_host_summaries.get_or_create(host=host_actual, host_name=host_actual.name, defaults=host_stats) else: host_summary, created = job.job_host_summaries.get_or_create(host_name=host, defaults=host_stats) + if not created: update_fields = [] for stat, value in host_stats.items(): @@ -1217,11 +1221,8 @@ class JobEvent(CreatedModifiedModel): update_fields.append(stat) if update_fields: host_summary.save(update_fields=update_fields) - job.inventory.update_computed_fields() - emit_channel_notification('jobs-summary', dict(group_name='jobs', unified_job_id=job.id)) def save(self, *args, **kwargs): - from awx.main.models.inventory import Host # If update_fields has been specified, add our field names to it, # if it hasn't been specified, then we're just doing a normal save. update_fields = kwargs.get('update_fields', []) @@ -1236,7 +1237,7 @@ class JobEvent(CreatedModifiedModel): update_fields.append(field) # Update host related field from host_name. if not self.host_id and self.host_name: - host_qs = Host.objects.filter(inventory__jobs__id=self.job_id, name=self.host_name) + host_qs = self.job.inventory.hosts.filter(name=self.host_name) host_id = host_qs.only('id').values_list('id', flat=True).first() if host_id != self.host_id: self.host_id = host_id @@ -1249,7 +1250,12 @@ class JobEvent(CreatedModifiedModel): self._update_hosts() if self.event == 'playbook_on_stats': self._update_parents_failed_and_changed() - self._update_host_summary_from_stats() + + hostnames = self._hostnames() + self._update_host_summary_from_stats(hostnames) + self.job.inventory.update_computed_fields() + + emit_channel_notification('jobs-summary', dict(group_name='jobs', unified_job_id=self.job.id)) @classmethod def create_from_data(self, **kwargs): diff --git a/awx/main/models/organization.py b/awx/main/models/organization.py index 4679850120..d92d0d2075 100644 --- a/awx/main/models/organization.py +++ b/awx/main/models/organization.py @@ -9,7 +9,7 @@ import uuid # Django from django.conf import settings -from django.db import models +from django.db import models, connection from django.contrib.auth.models import User from django.utils.timezone import now as tz_now from django.utils.translation import ugettext_lazy as _ @@ -187,7 +187,7 @@ class AuthToken(BaseModel): if not self.pk or not self.is_expired(now=now): self.expires = now + datetime.timedelta(seconds=settings.AUTH_TOKEN_EXPIRATION) if save: - self.save() + connection.on_commit(lambda: self.save(update_fields=['expires'])) def invalidate(self, reason='timeout_reached', save=True): if not AuthToken.reason_long(reason): diff --git a/awx/main/scheduler/__init__.py b/awx/main/scheduler/__init__.py index cdd9a55f3b..a6f477539c 100644 --- a/awx/main/scheduler/__init__.py +++ b/awx/main/scheduler/__init__.py @@ -14,6 +14,7 @@ from django.db import transaction, connection, DatabaseError from django.utils.translation import ugettext_lazy as _ from django.utils.timezone import now as tz_now, utc from django.db.models import Q +from django.contrib.contenttypes.models import ContentType # AWX from awx.main.models import * # noqa @@ -37,10 +38,10 @@ class TaskManager(): def __init__(self): self.graph = dict() - for rampart_group in InstanceGroup.objects.all(): + for rampart_group in InstanceGroup.objects.prefetch_related('instances'): self.graph[rampart_group.name] = dict(graph=DependencyGraph(rampart_group.name), capacity_total=rampart_group.capacity, - capacity_used=0) + consumed_capacity=0) def is_job_blocked(self, task): # TODO: I'm not happy with this, I think blocking behavior should be decided outside of the dependency graph @@ -77,11 +78,18 @@ class TaskManager(): ''' def get_running_tasks(self): execution_nodes = {} + waiting_jobs = [] now = tz_now() - jobs = UnifiedJob.objects.filter(Q(status='running') | - Q(status='waiting', modified__lte=now - timedelta(seconds=60))) - [execution_nodes.setdefault(j.execution_node, [j]).append(j) for j in jobs] - return execution_nodes + workflow_ctype_id = ContentType.objects.get_for_model(WorkflowJob).id + jobs = UnifiedJob.objects.filter((Q(status='running') | + Q(status='waiting', modified__lte=now - timedelta(seconds=60))) & + ~Q(polymorphic_ctype_id=workflow_ctype_id)) + for j in jobs: + if j.execution_node: + execution_nodes.setdefault(j.execution_node, [j]).append(j) + else: + waiting_jobs.append(j) + return (execution_nodes, waiting_jobs) ''' Tasks that are currently running in celery @@ -395,18 +403,45 @@ class TaskManager(): preferred_instance_groups = task.preferred_instance_groups found_acceptable_queue = False for rampart_group in preferred_instance_groups: - if self.get_remaining_capacity(rampart_group.name) <= 0: - logger.debug("Skipping group %s capacity <= 0", rampart_group.name) + remaining_capacity = self.get_remaining_capacity(rampart_group.name) + if remaining_capacity <= 0: + logger.debug("Skipping group %s, remaining_capacity %s <= 0", + rampart_group.name, remaining_capacity) continue if not self.would_exceed_capacity(task, rampart_group.name): - logger.debug("Starting %s in group %s", task.log_format, rampart_group.name) + logger.debug("Starting %s in group %s (remaining_capacity=%s)", + task.log_format, rampart_group.name, remaining_capacity) self.graph[rampart_group.name]['graph'].add_job(task) self.start_task(task, rampart_group, task.get_jobs_fail_chain()) found_acceptable_queue = True break + else: + logger.debug("Not enough capacity to run %s on %s (remaining_capacity=%s)", + task.log_format, rampart_group.name, remaining_capacity) if not found_acceptable_queue: logger.debug("%s couldn't be scheduled on graph, waiting for next cycle", task.log_format) + def fail_jobs_if_not_in_celery(self, node_jobs, active_tasks, celery_task_start_time): + for task in node_jobs: + if (task.celery_task_id not in active_tasks and not hasattr(settings, 'IGNORE_CELERY_INSPECTOR')): + if isinstance(task, WorkflowJob): + continue + if task.modified > celery_task_start_time: + continue + task.status = 'failed' + task.job_explanation += ' '.join(( + 'Task was marked as running in Tower but was not present in', + 'Celery, so it has been marked as failed.', + )) + try: + task.save(update_fields=['status', 'job_explanation']) + except DatabaseError: + logger.error("Task {} DB error in marking failed. Job possibly deleted.".format(task.log_format)) + continue + awx_tasks._send_notification_templates(task, 'failed') + task.websocket_emit_status('failed') + logger.error("Task {} has no record in celery. Marking as failed".format(task.log_format)) + def cleanup_inconsistent_celery_tasks(self): ''' Rectify tower db <-> celery inconsistent view of jobs state @@ -428,7 +463,13 @@ class TaskManager(): Only consider failing tasks on instances for which we obtained a task list from celery for. ''' - running_tasks = self.get_running_tasks() + running_tasks, waiting_tasks = self.get_running_tasks() + all_celery_task_ids = [] + for node, node_jobs in active_queues.iteritems(): + all_celery_task_ids.extend(node_jobs) + + self.fail_jobs_if_not_in_celery(waiting_tasks, all_celery_task_ids, celery_task_start_time) + for node, node_jobs in running_tasks.iteritems(): if node in active_queues: active_tasks = active_queues[node] @@ -445,54 +486,35 @@ class TaskManager(): continue except Instance.DoesNotExist: logger.error("Execution node Instance {} not found in database. " - "The node is currently executing jobs {}".format(node, [str(j) for j in node_jobs])) + "The node is currently executing jobs {}".format(node, + [j.log_format for j in node_jobs])) active_tasks = [] - for task in node_jobs: - if (task.celery_task_id not in active_tasks and not hasattr(settings, 'IGNORE_CELERY_INSPECTOR')): - if isinstance(task, WorkflowJob): - continue - if task.modified > celery_task_start_time: - continue - task.status = 'failed' - task.job_explanation += ' '.join(( - 'Task was marked as running in Tower but was not present in', - 'Celery, so it has been marked as failed.', - )) - try: - task.save(update_fields=['status', 'job_explanation']) - except DatabaseError: - logger.error("Task {} DB error in marking failed. Job possibly deleted.".format(task.log_format)) - continue - awx_tasks._send_notification_templates(task, 'failed') - task.websocket_emit_status('failed') - logger.error("Task {} has no record in celery. Marking as failed".format(task.log_format)) - def calculate_capacity_used(self, tasks): - for rampart_group in self.graph: - self.graph[rampart_group]['capacity_used'] = 0 - for t in tasks: - # TODO: dock capacity for isolated job management tasks running in queue - for group_actual in InstanceGroup.objects.filter(instances__hostname=t.execution_node).values_list('name'): - if group_actual[0] in self.graph: - self.graph[group_actual[0]]['capacity_used'] += t.task_impact + self.fail_jobs_if_not_in_celery(node_jobs, active_tasks, celery_task_start_time) + + def calculate_capacity_consumed(self, tasks): + self.graph = InstanceGroup.objects.capacity_values(tasks=tasks, graph=self.graph) def would_exceed_capacity(self, task, instance_group): - current_capacity = self.graph[instance_group]['capacity_used'] + current_capacity = self.graph[instance_group]['consumed_capacity'] capacity_total = self.graph[instance_group]['capacity_total'] if current_capacity == 0: return False return (task.task_impact + current_capacity > capacity_total) def consume_capacity(self, task, instance_group): - self.graph[instance_group]['capacity_used'] += task.task_impact + logger.debug('%s consumed %s capacity units from %s with prior total of %s', + task.log_format, task.task_impact, instance_group, + self.graph[instance_group]['consumed_capacity']) + self.graph[instance_group]['consumed_capacity'] += task.task_impact def get_remaining_capacity(self, instance_group): - return (self.graph[instance_group]['capacity_total'] - self.graph[instance_group]['capacity_used']) + return (self.graph[instance_group]['capacity_total'] - self.graph[instance_group]['consumed_capacity']) def process_tasks(self, all_sorted_tasks): running_tasks = filter(lambda t: t.status in ['waiting', 'running'], all_sorted_tasks) - self.calculate_capacity_used(running_tasks) + self.calculate_capacity_consumed(running_tasks) self.process_running_tasks(running_tasks) @@ -521,12 +543,13 @@ class TaskManager(): return finished_wfjs def schedule(self): - logger.debug("Starting Schedule") with transaction.atomic(): # Lock with advisory_lock('task_manager_lock', wait=False) as acquired: if acquired is False: + logger.debug("Not running scheduler, another task holds lock") return + logger.debug("Starting Scheduler") self.cleanup_inconsistent_celery_tasks() finished_wfjs = self._schedule() diff --git a/awx/main/scheduler/tasks.py b/awx/main/scheduler/tasks.py index 48b80cdbb6..ae97f367be 100644 --- a/awx/main/scheduler/tasks.py +++ b/awx/main/scheduler/tasks.py @@ -3,7 +3,7 @@ import logging # Celery -from celery import task +from celery import Task, task # AWX from awx.main.scheduler import TaskManager @@ -15,6 +15,12 @@ logger = logging.getLogger('awx.main.scheduler') # updated model, the call to schedule() may get stale data. +class LogErrorsTask(Task): + def on_failure(self, exc, task_id, args, kwargs, einfo): + logger.exception('Task {} encountered exception.'.format(self.name), exc_info=exc) + super(LogErrorsTask, self).on_failure(exc, task_id, args, kwargs, einfo) + + @task def run_job_launch(job_id): TaskManager().schedule() @@ -25,7 +31,7 @@ def run_job_complete(job_id): TaskManager().schedule() -@task +@task(base=LogErrorsTask) def run_task_manager(): logger.debug("Running Tower task manager.") TaskManager().schedule() diff --git a/awx/main/signals.py b/awx/main/signals.py index 35501c6cf9..81f6e17092 100644 --- a/awx/main/signals.py +++ b/awx/main/signals.py @@ -140,6 +140,9 @@ def rebuild_role_ancestor_list(reverse, model, instance, pk_set, action, **kwarg def sync_superuser_status_to_rbac(instance, **kwargs): 'When the is_superuser flag is changed on a user, reflect that in the membership of the System Admnistrator role' + update_fields = kwargs.get('update_fields', None) + if update_fields and 'is_superuser' not in update_fields: + return if instance.is_superuser: Role.singleton(ROLE_SINGLETON_SYSTEM_ADMINISTRATOR).members.add(instance) else: @@ -147,6 +150,8 @@ def sync_superuser_status_to_rbac(instance, **kwargs): def create_user_role(instance, **kwargs): + if not kwargs.get('created', True): + return try: Role.objects.get( content_type=ContentType.objects.get_for_model(instance), diff --git a/awx/main/tests/functional/api/test_credential.py b/awx/main/tests/functional/api/test_credential.py index ac9c1be960..8063ff01e7 100644 --- a/awx/main/tests/functional/api/test_credential.py +++ b/awx/main/tests/functional/api/test_credential.py @@ -748,6 +748,7 @@ def test_falsey_field_data(get, post, organization, admin, field_value): 'credential_type': net.pk, 'organization': organization.id, 'inputs': { + 'username': 'joe-user', # username is required 'authorize': field_value } } @@ -922,6 +923,25 @@ def test_vault_create_ok(post, organization, admin, version, params): assert decrypt_field(cred, 'vault_password') == 'some_password' +@pytest.mark.django_db +def test_vault_password_required(post, organization, admin): + vault = CredentialType.defaults['vault']() + vault.save() + response = post( + reverse('api:credential_list', kwargs={'version': 'v2'}), + { + 'credential_type': vault.pk, + 'organization': organization.id, + 'name': 'Best credential ever', + 'inputs': {} + }, + admin + ) + assert response.status_code == 400 + assert response.data['inputs'] == {'vault_password': ['required for Vault']} + assert Credential.objects.count() == 0 + + # # Net Credentials # @@ -1426,6 +1446,34 @@ def test_field_removal(put, organization, admin, credentialtype_ssh, version, pa assert 'password' not in cred.inputs +@pytest.mark.django_db +def test_credential_type_immutable_in_v2(patch, organization, admin, credentialtype_ssh, credentialtype_aws): + cred = Credential( + credential_type=credentialtype_ssh, + name='Best credential ever', + organization=organization, + inputs={ + 'username': u'jim', + 'password': u'pass' + } + ) + cred.save() + + response = patch( + reverse('api:credential_detail', kwargs={'version': 'v2', 'pk': cred.pk}), + { + 'credential_type': credentialtype_aws.pk, + 'inputs': { + 'username': u'jim', + 'password': u'pass' + } + }, + admin + ) + assert response.status_code == 400 + assert 'credential_type' in response.data + + @pytest.mark.django_db @pytest.mark.parametrize('version, params', [ ['v1', { diff --git a/awx/main/tests/functional/api/test_inventory.py b/awx/main/tests/functional/api/test_inventory.py index 8f6f6a6f22..c1b84401a5 100644 --- a/awx/main/tests/functional/api/test_inventory.py +++ b/awx/main/tests/functional/api/test_inventory.py @@ -204,22 +204,6 @@ def test_delete_inventory_group(delete, group, alice, role_field, expected_statu delete(reverse('api:group_detail', kwargs={'pk': group.id}), alice, expect=expected_status_code) -@pytest.mark.django_db -def test_create_inventory_smarthost(post, get, inventory, admin_user, organization): - data = { 'name': 'Host 1', 'description': 'Test Host'} - smart_inventory = Inventory(name='smart', - kind='smart', - organization=organization, - host_filter='inventory_sources__source=ec2') - smart_inventory.save() - post(reverse('api:inventory_hosts_list', kwargs={'pk': smart_inventory.id}), data, admin_user) - resp = get(reverse('api:inventory_hosts_list', kwargs={'pk': smart_inventory.id}), admin_user) - jdata = json.loads(resp.content) - - assert getattr(smart_inventory, 'kind') == 'smart' - assert jdata['count'] == 0 - - @pytest.mark.django_db def test_create_inventory_smartgroup(post, get, inventory, admin_user, organization): data = { 'name': 'Group 1', 'description': 'Test Group'} diff --git a/awx/main/tests/functional/api/test_rbac_displays.py b/awx/main/tests/functional/api/test_rbac_displays.py index 523e057465..688d4cf174 100644 --- a/awx/main/tests/functional/api/test_rbac_displays.py +++ b/awx/main/tests/functional/api/test_rbac_displays.py @@ -73,6 +73,7 @@ class TestJobTemplateCopyEdit: fake_view = FakeView() fake_view.request = request + fake_view.kwargs = {'pk': '42'} context = {} context['view'] = fake_view context['request'] = request diff --git a/awx/main/tests/functional/api/test_script_endpoint.py b/awx/main/tests/functional/api/test_script_endpoint.py index eadf1868da..4423d2347f 100644 --- a/awx/main/tests/functional/api/test_script_endpoint.py +++ b/awx/main/tests/functional/api/test_script_endpoint.py @@ -7,35 +7,21 @@ from awx.main.models import Inventory, Host @pytest.mark.django_db def test_empty_inventory(post, get, admin_user, organization, group_factory): - inventory = Inventory(name='basic_inventory', - kind='', + inventory = Inventory(name='basic_inventory', + kind='', organization=organization) inventory.save() resp = get(reverse('api:inventory_script_view', kwargs={'version': 'v2', 'pk': inventory.pk}), admin_user) jdata = json.loads(resp.content) - + assert inventory.hosts.count() == 0 assert jdata == {} - - -@pytest.mark.django_db -def test_empty_smart_inventory(post, get, admin_user, organization, group_factory): - smart_inventory = Inventory(name='smart', - kind='smart', - organization=organization, - host_filter='enabled=True') - smart_inventory.save() - resp = get(reverse('api:inventory_script_view', kwargs={'version': 'v2', 'pk': smart_inventory.pk}), admin_user) - smartjdata = json.loads(resp.content) - assert smart_inventory.hosts.count() == 0 - assert smartjdata == {} - - + @pytest.mark.django_db def test_ungrouped_hosts(post, get, admin_user, organization, group_factory): - inventory = Inventory(name='basic_inventory', - kind='', + inventory = Inventory(name='basic_inventory', + kind='', organization=organization) inventory.save() Host.objects.create(name='first_host', inventory=inventory) @@ -44,32 +30,3 @@ def test_ungrouped_hosts(post, get, admin_user, organization, group_factory): jdata = json.loads(resp.content) assert inventory.hosts.count() == 2 assert len(jdata['all']['hosts']) == 2 - - -@pytest.mark.django_db -def test_grouped_hosts_smart_inventory(post, get, admin_user, organization, group_factory): - inventory = Inventory(name='basic_inventory', - kind='', - organization=organization) - inventory.save() - groupA = group_factory('test_groupA') - host1 = Host.objects.create(name='first_host', inventory=inventory) - host2 = Host.objects.create(name='second_host', inventory=inventory) - Host.objects.create(name='third_host', inventory=inventory) - groupA.hosts.add(host1) - groupA.hosts.add(host2) - smart_inventory = Inventory(name='smart_inventory', - kind='smart', - organization=organization, - host_filter='enabled=True') - smart_inventory.save() - resp = get(reverse('api:inventory_script_view', kwargs={'version': 'v2', 'pk': inventory.pk}), admin_user) - jdata = json.loads(resp.content) - resp = get(reverse('api:inventory_script_view', kwargs={'version': 'v2', 'pk': smart_inventory.pk}), admin_user) - smartjdata = json.loads(resp.content) - - assert getattr(smart_inventory, 'kind') == 'smart' - assert inventory.hosts.count() == 3 - assert len(jdata['all']['hosts']) == 1 - assert smart_inventory.hosts.count() == 3 - assert len(smartjdata['all']['hosts']) == 3 diff --git a/awx/main/tests/functional/models/test_inventory.py b/awx/main/tests/functional/models/test_inventory.py index fd31e50315..85d07c1ce0 100644 --- a/awx/main/tests/functional/models/test_inventory.py +++ b/awx/main/tests/functional/models/test_inventory.py @@ -10,6 +10,7 @@ from awx.main.models import ( InventorySource, InventoryUpdate, ) +from awx.main.utils.filters import SmartFilter @pytest.mark.django_db @@ -104,40 +105,22 @@ def setup_inventory_groups(inventory, group_factory): @pytest.mark.django_db class TestHostManager: - def test_host_filter_change(self, setup_ec2_gce, organization): - smart_inventory = Inventory(name='smart', - kind='smart', - organization=organization, - host_filter='inventory_sources__source=ec2') - smart_inventory.save() - assert len(smart_inventory.hosts.all()) == 2 - - smart_inventory.host_filter = 'inventory_sources__source=gce' - smart_inventory.save() - assert len(smart_inventory.hosts.all()) == 1 - def test_host_filter_not_smart(self, setup_ec2_gce, organization): smart_inventory = Inventory(name='smart', organization=organization, host_filter='inventory_sources__source=ec2') assert len(smart_inventory.hosts.all()) == 0 - def test_host_objects_manager(self, setup_ec2_gce, organization): - smart_inventory = Inventory(kind='smart', - name='smart', - organization=organization, - host_filter='inventory_sources__source=ec2') - smart_inventory.save() + def test_host_distinctness(self, setup_inventory_groups, organization): + """ + two criteria would both yield the same host, check that we only get 1 copy here + """ + assert ( + list(SmartFilter.query_from_string('name=single_host or name__startswith=single_')) == + [Host.objects.get(name='single_host')] + ) - hosts = smart_inventory.hosts.all() - assert len(hosts) == 2 - assert hosts[0].inventory_sources.first().source == 'ec2' - assert hosts[1].inventory_sources.first().source == 'ec2' - - def test_host_objects_no_dupes(self, setup_inventory_groups, organization): - smart_inventory = Inventory(name='smart', - kind='smart', - organization=organization, - host_filter='groups__name=test_groupA or groups__name=test_groupB') - smart_inventory.save() - assert len(smart_inventory.hosts.all()) == 1 + # Things we can not easily test due to SQLite backend: + # 2 organizations with host of same name only has 1 entry in smart inventory + # smart inventory in 1 organization does not include host from another + # smart inventory correctly returns hosts in filter in same organization diff --git a/awx/main/tests/functional/task_management/test_capacity.py b/awx/main/tests/functional/task_management/test_capacity.py new file mode 100644 index 0000000000..7b7b7d7dc0 --- /dev/null +++ b/awx/main/tests/functional/task_management/test_capacity.py @@ -0,0 +1,34 @@ +import pytest + +from django.test import TransactionTestCase + +from awx.main.models import ( + Instance, + InstanceGroup, +) + + +@pytest.mark.django_db +class TestCapacityMapping(TransactionTestCase): + + def sample_cluster(self): + ig_small = InstanceGroup.objects.create(name='ig_small') + ig_large = InstanceGroup.objects.create(name='ig_large') + tower = InstanceGroup.objects.create(name='tower') + i1 = Instance.objects.create(hostname='i1', capacity=200) + i2 = Instance.objects.create(hostname='i2', capacity=200) + i3 = Instance.objects.create(hostname='i3', capacity=200) + ig_small.instances.add(i1) + ig_large.instances.add(i2, i3) + tower.instances.add(i2) + return [tower, ig_large, ig_small] + + def test_mapping(self): + self.sample_cluster() + with self.assertNumQueries(2): + inst_map, ig_map = InstanceGroup.objects.capacity_mapping() + assert inst_map['i1'] == set(['ig_small']) + assert inst_map['i2'] == set(['ig_large', 'tower']) + assert ig_map['ig_small'] == set(['ig_small']) + assert ig_map['ig_large'] == set(['ig_large', 'tower']) + assert ig_map['tower'] == set(['ig_large', 'tower']) diff --git a/awx/main/tests/functional/task_management/test_scheduler.py b/awx/main/tests/functional/task_management/test_scheduler.py index 335505a65e..05de8b2a81 100644 --- a/awx/main/tests/functional/task_management/test_scheduler.py +++ b/awx/main/tests/functional/task_management/test_scheduler.py @@ -9,6 +9,7 @@ from awx.main.scheduler import TaskManager from awx.main.models import ( Job, Instance, + WorkflowJob, ) @@ -230,27 +231,29 @@ class TestReaper(): Instance.objects.create(hostname='host4_offline', capacity=0) j1 = Job.objects.create(status='pending', execution_node='host1') - j2 = Job.objects.create(status='waiting', celery_task_id='considered_j2', execution_node='host1') - j3 = Job.objects.create(status='waiting', celery_task_id='considered_j3', execution_node='host1') + j2 = Job.objects.create(status='waiting', celery_task_id='considered_j2') + j3 = Job.objects.create(status='waiting', celery_task_id='considered_j3') j3.modified = now - timedelta(seconds=60) j3.save(update_fields=['modified']) j4 = Job.objects.create(status='running', celery_task_id='considered_j4', execution_node='host1') - j5 = Job.objects.create(status='waiting', celery_task_id='reapable_j5', execution_node='host1') + j5 = Job.objects.create(status='waiting', celery_task_id='reapable_j5') j5.modified = now - timedelta(seconds=60) j5.save(update_fields=['modified']) - j6 = Job.objects.create(status='waiting', celery_task_id='considered_j6', execution_node='host2') + j6 = Job.objects.create(status='waiting', celery_task_id='considered_j6') j6.modified = now - timedelta(seconds=60) j6.save(update_fields=['modified']) j7 = Job.objects.create(status='running', celery_task_id='considered_j7', execution_node='host2') j8 = Job.objects.create(status='running', celery_task_id='reapable_j7', execution_node='host2') - j9 = Job.objects.create(status='waiting', celery_task_id='host3_j8', execution_node='host3_split') + j9 = Job.objects.create(status='waiting', celery_task_id='reapable_j8') j9.modified = now - timedelta(seconds=60) j9.save(update_fields=['modified']) - j10 = Job.objects.create(status='running', execution_node='host3_split') + j10 = Job.objects.create(status='running', celery_task_id='host3_j10', execution_node='host3_split') j11 = Job.objects.create(status='running', celery_task_id='host4_j11', execution_node='host4_offline') - js = [j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11] + j12 = WorkflowJob.objects.create(status='running', celery_task_id='workflow_job', execution_node='host1') + + js = [j1, j2, j3, j4, j5, j6, j7, j8, j9, j10, j11, j12] for j in js: j.save = mocker.Mock(wraps=j.save) j.websocket_emit_status = mocker.Mock() @@ -263,12 +266,16 @@ class TestReaper(): @pytest.fixture def running_tasks(self, all_jobs): return { - 'host1': all_jobs[2:5], - 'host2': all_jobs[5:8], - 'host3_split': all_jobs[8:10], + 'host1': [all_jobs[3]], + 'host2': [all_jobs[7], all_jobs[8]], + 'host3_split': [all_jobs[9]], 'host4_offline': [all_jobs[10]], } + @pytest.fixture + def waiting_tasks(self, all_jobs): + return [all_jobs[2], all_jobs[4], all_jobs[5], all_jobs[8]] + @pytest.fixture def reapable_jobs(self, all_jobs): return [all_jobs[4], all_jobs[7], all_jobs[10]] @@ -287,10 +294,10 @@ class TestReaper(): @pytest.mark.django_db @mock.patch('awx.main.tasks._send_notification_templates') @mock.patch.object(TaskManager, 'get_active_tasks', lambda self: ([], [])) - def test_cleanup_inconsistent_task(self, notify, active_tasks, considered_jobs, reapable_jobs, running_tasks, mocker): + def test_cleanup_inconsistent_task(self, notify, active_tasks, considered_jobs, reapable_jobs, running_tasks, waiting_tasks, mocker): tm = TaskManager() - tm.get_running_tasks = mocker.Mock(return_value=running_tasks) + tm.get_running_tasks = mocker.Mock(return_value=(running_tasks, waiting_tasks)) tm.get_active_tasks = mocker.Mock(return_value=active_tasks) tm.cleanup_inconsistent_celery_tasks() @@ -299,7 +306,7 @@ class TestReaper(): if j not in reapable_jobs: j.save.assert_not_called() - assert notify.call_count == 3 + assert notify.call_count == 4 notify.assert_has_calls([mock.call(j, 'failed') for j in reapable_jobs], any_order=True) for j in reapable_jobs: @@ -314,20 +321,23 @@ class TestReaper(): tm = TaskManager() # Ensure the query grabs the expected jobs - execution_nodes_jobs = tm.get_running_tasks() + execution_nodes_jobs, waiting_jobs = tm.get_running_tasks() assert 'host1' in execution_nodes_jobs assert 'host2' in execution_nodes_jobs assert 'host3_split' in execution_nodes_jobs - assert all_jobs[2] in execution_nodes_jobs['host1'] assert all_jobs[3] in execution_nodes_jobs['host1'] - assert all_jobs[4] in execution_nodes_jobs['host1'] - assert all_jobs[5] in execution_nodes_jobs['host2'] assert all_jobs[6] in execution_nodes_jobs['host2'] assert all_jobs[7] in execution_nodes_jobs['host2'] - assert all_jobs[8] in execution_nodes_jobs['host3_split'] assert all_jobs[9] in execution_nodes_jobs['host3_split'] assert all_jobs[10] in execution_nodes_jobs['host4_offline'] + + assert all_jobs[11] not in execution_nodes_jobs['host1'] + + assert all_jobs[2] in waiting_jobs + assert all_jobs[4] in waiting_jobs + assert all_jobs[5] in waiting_jobs + assert all_jobs[8] in waiting_jobs diff --git a/awx/main/tests/functional/test_credential.py b/awx/main/tests/functional/test_credential.py index cdb54c2265..4a51565d04 100644 --- a/awx/main/tests/functional/test_credential.py +++ b/awx/main/tests/functional/test_credential.py @@ -226,7 +226,7 @@ def test_credential_creation_validation_failure(organization_factory, inputs): [EXAMPLE_PRIVATE_KEY.replace('=', '\u003d'), None, True], # automatically fix JSON-encoded GCE keys ]) def test_ssh_key_data_validation(organization, kind, ssh_key_data, ssh_key_unlock, valid): - inputs = {} + inputs = {'username': 'joe-user'} if ssh_key_data: inputs['ssh_key_data'] = ssh_key_data if ssh_key_unlock: diff --git a/awx/main/tests/functional/test_rbac_instance_groups.py b/awx/main/tests/functional/test_rbac_instance_groups.py index 07a6c32c9f..2021f537ca 100644 --- a/awx/main/tests/functional/test_rbac_instance_groups.py +++ b/awx/main/tests/functional/test_rbac_instance_groups.py @@ -50,7 +50,7 @@ def test_ig_associability(organization, default_instance_group, admin, system_au organization.instance_groups.add(default_instance_group) assert admin_access.can_unattach(organization, default_instance_group, 'instance_groups', None) - assert oadmin_access.can_unattach(organization, default_instance_group, 'instance_groups', None) + assert not oadmin_access.can_unattach(organization, default_instance_group, 'instance_groups', None) assert not auditor_access.can_unattach(organization, default_instance_group, 'instance_groups', None) assert not omember_access.can_unattach(organization, default_instance_group, 'instance_groups', None) diff --git a/awx/main/tests/functional/test_rbac_inventory.py b/awx/main/tests/functional/test_rbac_inventory.py index 42218905f3..821d8893a8 100644 --- a/awx/main/tests/functional/test_rbac_inventory.py +++ b/awx/main/tests/functional/test_rbac_inventory.py @@ -174,3 +174,17 @@ def test_inventory_source_org_admin_schedule_access(org_admin, inventory_source) assert access.get_queryset() assert access.can_read(schedule) assert access.can_change(schedule, {'rrule': 'DTSTART:20151117T050000Z RRULE:FREQ=DAILY;INTERVAL=1;COUNT=2'}) + + +@pytest.fixture +def smart_inventory(organization): + return organization.inventories.create(name="smart-inv", kind="smart") + + +@pytest.mark.django_db +class TestSmartInventory: + + def test_host_filter_edit(self, smart_inventory, rando, org_admin): + assert InventoryAccess(org_admin).can_admin(smart_inventory, {'host_filter': 'search=foo'}) + smart_inventory.admin_role.members.add(rando) + assert not InventoryAccess(rando).can_admin(smart_inventory, {'host_filter': 'search=foo'}) diff --git a/awx/main/tests/unit/api/serializers/conftest.py b/awx/main/tests/unit/api/serializers/conftest.py index 9aa601d591..477c273bf9 100644 --- a/awx/main/tests/unit/api/serializers/conftest.py +++ b/awx/main/tests/unit/api/serializers/conftest.py @@ -1,4 +1,4 @@ - +import mock import pytest @@ -39,6 +39,7 @@ def get_summary_fields_assert(): def get_summary_fields_mock_and_run(): def fn(serializer_class, model_obj): serializer = serializer_class() + serializer.context['view'] = mock.Mock(kwargs={}) return serializer.get_summary_fields(model_obj) return fn diff --git a/awx/main/tests/unit/api/serializers/test_job_template_serializers.py b/awx/main/tests/unit/api/serializers/test_job_template_serializers.py index 11ddf3a2aa..ab69aeb375 100644 --- a/awx/main/tests/unit/api/serializers/test_job_template_serializers.py +++ b/awx/main/tests/unit/api/serializers/test_job_template_serializers.py @@ -108,6 +108,7 @@ class TestJobTemplateSerializerGetSummaryFields(): request.user = user view = JobTemplateDetail() view.request = request + view.kwargs = {} serializer.context['view'] = view with mocker.patch("awx.api.serializers.role_summary_fields_generator", return_value='Can eat pie'): diff --git a/awx/main/tests/unit/api/test_views.py b/awx/main/tests/unit/api/test_views.py index 2402186606..a2532a75d7 100644 --- a/awx/main/tests/unit/api/test_views.py +++ b/awx/main/tests/unit/api/test_views.py @@ -220,8 +220,8 @@ class TestHostInsights(): class TestInventoryHostsList(object): def test_host_list_smart_inventory(self, mocker): - Inventory = namedtuple('Inventory', ['kind', 'host_filter', 'hosts']) - obj = Inventory(kind='smart', host_filter='localhost', hosts=HostManager()) + Inventory = namedtuple('Inventory', ['kind', 'host_filter', 'hosts', 'organization_id']) + obj = Inventory(kind='smart', host_filter='localhost', hosts=HostManager(), organization_id=None) obj.hosts.instance = obj with mock.patch.object(InventoryHostsList, 'get_parent_object', return_value=obj): diff --git a/awx/main/tests/unit/test_capacity.py b/awx/main/tests/unit/test_capacity.py new file mode 100644 index 0000000000..7817521f2e --- /dev/null +++ b/awx/main/tests/unit/test_capacity.py @@ -0,0 +1,135 @@ +import pytest + +from awx.main.models import InstanceGroup + + +class FakeObject(object): + def __init__(self, **kwargs): + for k, v in kwargs.items(): + setattr(self, k, v) + + +class Job(FakeObject): + task_impact = 43 + + def log_format(self): + return 'job 382 (fake)' + + +@pytest.fixture +def sample_cluster(): + def stand_up_cluster(): + + class Instances(FakeObject): + def add(self, *args): + for instance in args: + self.obj.instance_list.append(instance) + + def all(self): + return self.obj.instance_list + + class InstanceGroup(FakeObject): + + def __init__(self, **kwargs): + super(InstanceGroup, self).__init__(**kwargs) + self.instance_list = [] + + @property + def instances(self): + mgr = Instances(obj=self) + return mgr + + + class Instance(FakeObject): + pass + + + ig_small = InstanceGroup(name='ig_small') + ig_large = InstanceGroup(name='ig_large') + tower = InstanceGroup(name='tower') + i1 = Instance(hostname='i1', capacity=200) + i2 = Instance(hostname='i2', capacity=200) + i3 = Instance(hostname='i3', capacity=200) + ig_small.instances.add(i1) + ig_large.instances.add(i2, i3) + tower.instances.add(i2) + return [tower, ig_large, ig_small] + return stand_up_cluster + + +def test_committed_capacity(sample_cluster): + tower, ig_large, ig_small = sample_cluster() + tasks = [ + Job(status='waiting', instance_group=tower), + Job(status='waiting', instance_group=ig_large), + Job(status='waiting', instance_group=ig_small) + ] + capacities = InstanceGroup.objects.capacity_values( + qs=[tower, ig_large, ig_small], tasks=tasks, breakdown=True + ) + # Jobs submitted to either tower or ig_larg must count toward both + assert capacities['tower']['committed_capacity'] == 43 * 2 + assert capacities['ig_large']['committed_capacity'] == 43 * 2 + assert capacities['ig_small']['committed_capacity'] == 43 + + +def test_running_capacity(sample_cluster): + tower, ig_large, ig_small = sample_cluster() + tasks = [ + Job(status='running', execution_node='i1'), + Job(status='running', execution_node='i2'), + Job(status='running', execution_node='i3') + ] + capacities = InstanceGroup.objects.capacity_values( + qs=[tower, ig_large, ig_small], tasks=tasks, breakdown=True + ) + # Tower is only given 1 instance + assert capacities['tower']['running_capacity'] == 43 + # Large IG has 2 instances + assert capacities['ig_large']['running_capacity'] == 43 * 2 + assert capacities['ig_small']['running_capacity'] == 43 + + +def test_offline_node_running(sample_cluster): + """ + Assure that algorithm doesn't explode if a job is marked running + in an offline node + """ + tower, ig_large, ig_small = sample_cluster() + ig_small.instance_list[0].capacity = 0 + tasks = [Job(status='running', execution_node='i1', instance_group=ig_small)] + capacities = InstanceGroup.objects.capacity_values( + qs=[tower, ig_large, ig_small], tasks=tasks) + assert capacities['ig_small']['consumed_capacity'] == 43 + + +def test_offline_node_waiting(sample_cluster): + """ + Same but for a waiting job + """ + tower, ig_large, ig_small = sample_cluster() + ig_small.instance_list[0].capacity = 0 + tasks = [Job(status='waiting', instance_group=ig_small)] + capacities = InstanceGroup.objects.capacity_values( + qs=[tower, ig_large, ig_small], tasks=tasks) + assert capacities['ig_small']['consumed_capacity'] == 43 + + +def test_RBAC_reduced_filter(sample_cluster): + """ + User can see jobs that are running in `ig_small` and `ig_large` IGs, + but user does not have permission to see those actual instance groups. + Verify that this does not blow everything up. + """ + tower, ig_large, ig_small = sample_cluster() + tasks = [ + Job(status='waiting', instance_group=tower), + Job(status='waiting', instance_group=ig_large), + Job(status='waiting', instance_group=ig_small) + ] + capacities = InstanceGroup.objects.capacity_values( + qs=[tower], tasks=tasks, breakdown=True + ) + # Cross-links between groups not visible to current user, + # so a naieve accounting of capacities is returned instead + assert capacities['tower']['committed_capacity'] == 43 diff --git a/awx/main/tests/unit/test_task_manager.py b/awx/main/tests/unit/test_task_manager.py index fc0be720c8..65b7607bb4 100644 --- a/awx/main/tests/unit/test_task_manager.py +++ b/awx/main/tests/unit/test_task_manager.py @@ -19,8 +19,8 @@ from django.core.cache import cache class TestCleanupInconsistentCeleryTasks(): @mock.patch.object(cache, 'get', return_value=None) @mock.patch.object(TaskManager, 'get_active_tasks', return_value=([], {})) - @mock.patch.object(TaskManager, 'get_running_tasks', return_value={'host1': [Job(id=2), Job(id=3),]}) - @mock.patch.object(InstanceGroup.objects, 'all', return_value=[]) + @mock.patch.object(TaskManager, 'get_running_tasks', return_value=({'host1': [Job(id=2), Job(id=3),]}, [])) + @mock.patch.object(InstanceGroup.objects, 'prefetch_related', return_value=[]) @mock.patch.object(Instance.objects, 'get', side_effect=Instance.DoesNotExist) @mock.patch('awx.main.scheduler.logger') def test_instance_does_not_exist(self, logger_mock, *args): @@ -31,19 +31,19 @@ class TestCleanupInconsistentCeleryTasks(): assert "mocked" in str(excinfo.value) logger_mock.error.assert_called_once_with("Execution node Instance host1 not found in database. " - "The node is currently executing jobs ['None-2-new', " - "'None-3-new']") + "The node is currently executing jobs ['job 2 (new)', " + "'job 3 (new)']") @mock.patch.object(cache, 'get', return_value=None) @mock.patch.object(TaskManager, 'get_active_tasks', return_value=([], {'host1': []})) - @mock.patch.object(InstanceGroup.objects, 'all', return_value=[]) + @mock.patch.object(InstanceGroup.objects, 'prefetch_related', return_value=[]) @mock.patch.object(TaskManager, 'get_running_tasks') @mock.patch('awx.main.scheduler.logger') def test_save_failed(self, logger_mock, get_running_tasks, *args): logger_mock.error = mock.MagicMock() job = Job(id=2, modified=tz_now(), status='running', celery_task_id='blah', execution_node='host1') job.websocket_emit_status = mock.MagicMock() - get_running_tasks.return_value = {'host1': [job]} + get_running_tasks.return_value = ({'host1': [job]}, []) tm = TaskManager() with mock.patch.object(job, 'save', side_effect=DatabaseError): diff --git a/awx/plugins/library/scan_packages.py b/awx/plugins/library/scan_packages.py index 5195a051a6..3fd2edc1fa 100755 --- a/awx/plugins/library/scan_packages.py +++ b/awx/plugins/library/scan_packages.py @@ -74,7 +74,7 @@ def rpm_package_list(): def deb_package_list(): import apt apt_cache = apt.Cache() - installed_packages = [] + installed_packages = {} apt_installed_packages = [pk for pk in apt_cache.keys() if apt_cache[pk].is_installed] for package in apt_installed_packages: ac_pkg = apt_cache[package].installed diff --git a/awx/sso/conf.py b/awx/sso/conf.py index 636b39daf0..e04f091851 100644 --- a/awx/sso/conf.py +++ b/awx/sso/conf.py @@ -29,9 +29,9 @@ class SocialAuthCallbackURL(object): SOCIAL_AUTH_ORGANIZATION_MAP_HELP_TEXT = _('''\ Mapping to organization admins/users from social auth accounts. This setting -controls which users are placed into which Tower organizations based on -their username and email address. Configuration details are available in -Tower documentation.\ +controls which users are placed into which Tower organizations based on their +username and email address. Configuration details are available in the Ansible +Tower documentation.'\ ''') # FIXME: /regex/gim (flags) @@ -152,11 +152,9 @@ register( default='', validators=[validate_ldap_bind_dn], label=_('LDAP Bind DN'), - help_text=_('DN (Distinguished Name) of user to bind for all search queries. ' - 'Normally in the format "CN=Some User,OU=Users,DC=example,DC=com" ' - 'but may also be specified as "DOMAIN\username" for Active Directory. ' - 'This is the system user account we will use to login to query LDAP ' - 'for other user information.'), + help_text=_('DN (Distinguished Name) of user to bind for all search queries. This' + ' is the system user account we will use to login to query LDAP for other' + ' user information. Refer to the Ansible Tower documentation for example syntax.'), category=_('LDAP'), category_slug='ldap', feature_required='ldap', @@ -213,7 +211,7 @@ register( label=_('LDAP User Search'), help_text=_('LDAP search query to find users. Any user that matches the given ' 'pattern will be able to login to Tower. The user should also be ' - 'mapped into an Tower organization (as defined in the ' + 'mapped into a Tower organization (as defined in the ' 'AUTH_LDAP_ORGANIZATION_MAP setting). If multiple search queries ' 'need to be supported use of "LDAPUnion" is possible. See ' 'Tower documentation for details.'), @@ -235,7 +233,7 @@ register( default=None, label=_('LDAP User DN Template'), help_text=_('Alternative to user search, if user DNs are all of the same ' - 'format. This approach will be more efficient for user lookups than ' + 'format. This approach is more efficient for user lookups than ' 'searching if it is usable in your organizational environment. If ' 'this setting has a value it will be used instead of ' 'AUTH_LDAP_USER_SEARCH.'), @@ -250,11 +248,10 @@ register( field_class=fields.LDAPUserAttrMapField, default={}, label=_('LDAP User Attribute Map'), - help_text=_('Mapping of LDAP user schema to Tower API user attributes (key is ' - 'user attribute name, value is LDAP attribute name). The default ' - 'setting is valid for ActiveDirectory but users with other LDAP ' - 'configurations may need to change the values (not the keys) of ' - 'the dictionary/hash-table.'), + help_text=_('Mapping of LDAP user schema to Tower API user attributes. The default' + ' setting is valid for ActiveDirectory but users with other LDAP' + ' configurations may need to change the values. Refer to the Ansible' + ' Tower documentation for additonal details.'), category=_('LDAP'), category_slug='ldap', placeholder=collections.OrderedDict([ @@ -270,10 +267,9 @@ register( field_class=fields.LDAPSearchField, default=[], label=_('LDAP Group Search'), - help_text=_('Users are mapped to organizations based on their ' - 'membership in LDAP groups. This setting defines the LDAP search ' - 'query to find groups. Note that this, unlike the user search ' - 'above, does not support LDAPSearchUnion.'), + help_text=_('Users are mapped to organizations based on their membership in LDAP' + ' groups. This setting defines the LDAP search query to find groups. ' + 'Unlike the user search, group search does not support LDAPSearchUnion.'), category=_('LDAP'), category_slug='ldap', placeholder=( @@ -335,12 +331,9 @@ register( field_class=fields.LDAPUserFlagsField, default={}, label=_('LDAP User Flags By Group'), - help_text=_('User profile flags updated from group membership (key is user ' - 'attribute name, value is group DN). These are boolean fields ' - 'that are matched based on whether the user is a member of the ' - 'given group. So far only is_superuser and is_system_auditor ' - 'are settable via this method. This flag is set both true and ' - 'false at login time based on current LDAP settings.'), + help_text=_('Retrieve users from a given group. At this time, superuser and system' + ' auditors are the only groups supported. Refer to the Ansible Tower' + ' documentation for more detail.'), category=_('LDAP'), category_slug='ldap', placeholder=collections.OrderedDict([ @@ -355,9 +348,9 @@ register( default={}, label=_('LDAP Organization Map'), help_text=_('Mapping between organization admins/users and LDAP groups. This ' - 'controls what users are placed into what Tower organizations ' + 'controls which users are placed into which Tower organizations ' 'relative to their LDAP group memberships. Configuration details ' - 'are available in Tower documentation.'), + 'are available in the Ansible Tower documentation.'), category=_('LDAP'), category_slug='ldap', placeholder=collections.OrderedDict([ @@ -382,8 +375,8 @@ register( field_class=fields.LDAPTeamMapField, default={}, label=_('LDAP Team Map'), - help_text=_('Mapping between team members (users) and LDAP groups.' - 'Configuration details are available in Tower documentation.'), + help_text=_('Mapping between team members (users) and LDAP groups. Configuration' + ' details are available in the Ansible Tower documentation.'), category=_('LDAP'), category_slug='ldap', placeholder=collections.OrderedDict([ @@ -411,7 +404,7 @@ register( allow_blank=True, default='', label=_('RADIUS Server'), - help_text=_('Hostname/IP of RADIUS server. RADIUS authentication will be ' + help_text=_('Hostname/IP of RADIUS server. RADIUS authentication is ' 'disabled if this setting is empty.'), category=_('RADIUS'), category_slug='radius', @@ -522,10 +515,9 @@ register( read_only=True, default=SocialAuthCallbackURL('google-oauth2'), label=_('Google OAuth2 Callback URL'), - help_text=_('Create a project at https://console.developers.google.com/ to ' - 'obtain an OAuth2 key and secret for a web application. Ensure ' - 'that the Google+ API is enabled. Provide this URL as the ' - 'callback URL for your application.'), + help_text=_('Provide this URL as the callback URL for your application as part ' + 'of your registration process. Refer to the Ansible Tower ' + 'documentation for more detail.'), category=_('Google OAuth2'), category_slug='google-oauth2', depends_on=['TOWER_URL_BASE'], @@ -537,7 +529,7 @@ register( allow_blank=True, default='', label=_('Google OAuth2 Key'), - help_text=_('The OAuth2 key from your web application at https://console.developers.google.com/.'), + help_text=_('The OAuth2 key from your web application.'), category=_('Google OAuth2'), category_slug='google-oauth2', placeholder='528620852399-gm2dt4hrl2tsj67fqamk09k1e0ad6gd8.apps.googleusercontent.com', @@ -549,7 +541,7 @@ register( allow_blank=True, default='', label=_('Google OAuth2 Secret'), - help_text=_('The OAuth2 secret from your web application at https://console.developers.google.com/.'), + help_text=_('The OAuth2 secret from your web application.'), category=_('Google OAuth2'), category_slug='google-oauth2', placeholder='q2fMVCmEregbg-drvebPp8OW', @@ -573,10 +565,10 @@ register( field_class=fields.DictField, default={}, label=_('Google OAuth2 Extra Arguments'), - help_text=_('Extra arguments for Google OAuth2 login. When only allowing a ' - 'single domain to authenticate, set to `{"hd": "yourdomain.com"}` ' - 'and Google will not display any other accounts even if the user ' - 'is logged in with multiple Google accounts.'), + help_text=_('Extra arguments for Google OAuth2 login. You can restrict it to' + ' only allow a single domain to authenticate, even if the user is' + ' logged in with multple Google accounts. Refer to the Ansible Tower' + ' documentation for more detail.'), category=_('Google OAuth2'), category_slug='google-oauth2', placeholder={'hd': 'example.com'}, @@ -616,10 +608,9 @@ register( read_only=True, default=SocialAuthCallbackURL('github'), label=_('GitHub OAuth2 Callback URL'), - help_text=_('Create a developer application at ' - 'https://github.com/settings/developers to obtain an OAuth2 ' - 'key (Client ID) and secret (Client Secret). Provide this URL ' - 'as the callback URL for your application.'), + help_text=_('Provide this URL as the callback URL for your application as part ' + 'of your registration process. Refer to the Ansible Tower ' + 'documentation for more detail.'), category=_('GitHub OAuth2'), category_slug='github', depends_on=['TOWER_URL_BASE'], @@ -682,10 +673,9 @@ register( read_only=True, default=SocialAuthCallbackURL('github-org'), label=_('GitHub Organization OAuth2 Callback URL'), - help_text=_('Create an organization-owned application at ' - 'https://github.com/organizations//settings/applications ' - 'and obtain an OAuth2 key (Client ID) and secret (Client Secret). ' - 'Provide this URL as the callback URL for your application.'), + help_text=_('Provide this URL as the callback URL for your application as part ' + 'of your registration process. Refer to the Ansible Tower ' + 'documentation for more detail.'), category=_('GitHub Organization OAuth2'), category_slug='github-org', depends_on=['TOWER_URL_BASE'], @@ -838,10 +828,9 @@ register( read_only=True, default=SocialAuthCallbackURL('azuread-oauth2'), label=_('Azure AD OAuth2 Callback URL'), - help_text=_('Register an Azure AD application as described by ' - 'https://msdn.microsoft.com/en-us/library/azure/dn132599.aspx ' - 'and obtain an OAuth2 key (Client ID) and secret (Client Secret). ' - 'Provide this URL as the callback URL for your application.'), + help_text=_('Provide this URL as the callback URL for your application as part' + ' of your registration process. Refer to the Ansible Tower' + ' documentation for more detail. '), category=_('Azure AD OAuth2'), category_slug='azuread-oauth2', depends_on=['TOWER_URL_BASE'], @@ -984,7 +973,8 @@ register( field_class=fields.SAMLOrgInfoField, required=True, label=_('SAML Service Provider Organization Info'), - help_text=_('Configure this setting with information about your app.'), + help_text=_('Provide the URL, display name, and the name of your app. Refer to' + ' the Ansible Tower documentation for example syntax.'), category=_('SAML'), category_slug='saml', placeholder=collections.OrderedDict([ @@ -1003,7 +993,9 @@ register( allow_blank=True, required=True, label=_('SAML Service Provider Technical Contact'), - help_text=_('Configure this setting with your contact information.'), + help_text=_('Provide the name and email address of the technical contact for' + ' your service provider. Refer to the Ansible Tower documentation' + ' for example syntax.'), category=_('SAML'), category_slug='saml', placeholder=collections.OrderedDict([ @@ -1019,7 +1011,9 @@ register( allow_blank=True, required=True, label=_('SAML Service Provider Support Contact'), - help_text=_('Configure this setting with your contact information.'), + help_text=_('Provide the name and email address of the support contact for your' + ' service provider. Refer to the Ansible Tower documentation for' + ' example syntax.'), category=_('SAML'), category_slug='saml', placeholder=collections.OrderedDict([ @@ -1034,12 +1028,11 @@ register( field_class=fields.SAMLEnabledIdPsField, default={}, label=_('SAML Enabled Identity Providers'), - help_text=_('Configure the Entity ID, SSO URL and certificate for each ' - 'identity provider (IdP) in use. Multiple SAML IdPs are supported. ' - 'Some IdPs may provide user data using attribute names that differ ' - 'from the default OIDs ' - '(https://github.com/omab/python-social-auth/blob/master/social/backends/saml.py#L16). ' - 'Attribute names may be overridden for each IdP.'), + help_text=_('Configure the Entity ID, SSO URL and certificate for each identity' + ' provider (IdP) in use. Multiple SAML IdPs are supported. Some IdPs' + ' may provide user data using attribute names that differ from the' + ' default OIDs. Attribute names may be overridden for each IdP. Refer' + ' to the Ansible documentation for additional details and syntax.'), category=_('SAML'), category_slug='saml', placeholder=collections.OrderedDict([ diff --git a/awx/sso/middleware.py b/awx/sso/middleware.py index c678ff08f3..71e93725e9 100644 --- a/awx/sso/middleware.py +++ b/awx/sso/middleware.py @@ -53,7 +53,7 @@ class SocialAuthMiddleware(SocialAuthExceptionMiddleware): if not auth_token and request.user and request.user.is_authenticated(): logout(request) - elif auth_token and request.user != auth_token.user: + elif auth_token and request.user.is_anonymous is False and request.user != auth_token.user: logout(request) auth_token.user.backend = '' login(request, auth_token.user) diff --git a/awx/ui/client/features/credentials/add-credentials.controller.js b/awx/ui/client/features/credentials/add-credentials.controller.js index c991f62b0f..193c2cbb5b 100644 --- a/awx/ui/client/features/credentials/add-credentials.controller.js +++ b/awx/ui/client/features/credentials/add-credentials.controller.js @@ -43,8 +43,8 @@ function AddCredentialsController (models, $state, strings) { }; vm.form.save = data => { - data.user = me.getSelf().id; - + data.user = me.get('id'); + return credential.request('post', data); }; diff --git a/awx/ui/client/features/credentials/edit-credentials.controller.js b/awx/ui/client/features/credentials/edit-credentials.controller.js index 92a3dc357c..177dab5239 100644 --- a/awx/ui/client/features/credentials/edit-credentials.controller.js +++ b/awx/ui/client/features/credentials/edit-credentials.controller.js @@ -45,6 +45,14 @@ function EditCredentialsController (models, $state, $scope, strings) { vm.form.disabled = !isEditable; } + let isOrgAdmin = _.some(me.get('related.admin_of_organizations.results'), (org) => {return org.id === organization.get('id');}); + let isSuperuser = me.get('is_superuser'); + let isCurrentAuthor = Boolean(credential.get('summary_fields.created_by.id') === me.get('id')); + vm.form.organization._disabled = true; + if(isSuperuser || isOrgAdmin || (credential.get('organization') === null && isCurrentAuthor)){ + vm.form.organization._disabled = false; + } + vm.form.organization._resource = 'organization'; vm.form.organization._model = organization; vm.form.organization._route = 'credentials.edit.organization'; @@ -75,12 +83,12 @@ function EditCredentialsController (models, $state, $scope, strings) { }; /** - * If a credential's `credential_type` is changed while editing, the inputs associated with - * the old type need to be cleared before saving the inputs associated with the new type. + * If a credential's `credential_type` is changed while editing, the inputs associated with + * the old type need to be cleared before saving the inputs associated with the new type. * Otherwise inputs are merged together making the request invalid. */ vm.form.save = data => { - data.user = me.getSelf().id; + data.user = me.get('id'); credential.unset('inputs'); return credential.request('put', data); diff --git a/awx/ui/client/features/credentials/index.js b/awx/ui/client/features/credentials/index.js index c11dc3e1d6..391e5acbb6 100644 --- a/awx/ui/client/features/credentials/index.js +++ b/awx/ui/client/features/credentials/index.js @@ -7,7 +7,9 @@ function CredentialsResolve ($q, $stateParams, Me, Credential, CredentialType, O let id = $stateParams.credential_id; let promises = { - me: new Me('get') + me: new Me('get').then((me) => { + return me.extend('get', 'admin_of_organizations'); + }) }; if (!id) { diff --git a/awx/ui/client/features/credentials/legacy.credentials.js b/awx/ui/client/features/credentials/legacy.credentials.js index 26f2163115..e271da0936 100644 --- a/awx/ui/client/features/credentials/legacy.credentials.js +++ b/awx/ui/client/features/credentials/legacy.credentials.js @@ -149,10 +149,10 @@ function LegacyCredentialsService (pathService) { 'QuerySet', '$stateParams', 'GetBasePath', - (list, qs, $stateParams, GetBasePath) => { - let path = GetBasePath(list.basePath) || GetBasePath(list.name); + 'resourceData', + (list, qs, $stateParams, GetBasePath, resourceData) => { + let path = resourceData.data.organization ? GetBasePath('organizations') + `${resourceData.data.organization}/users` : ((list.basePath) || GetBasePath(list.name)); return qs.search(path, $stateParams.user_search); - } ], teamsDataset: [ @@ -160,9 +160,19 @@ function LegacyCredentialsService (pathService) { 'QuerySet', '$stateParams', 'GetBasePath', - (list, qs, $stateParams, GetBasePath) => { + 'resourceData', + (list, qs, $stateParams, GetBasePath, resourceData) => { let path = GetBasePath(list.basePath) || GetBasePath(list.name); - return qs.search(path, $stateParams.team_search); + + if(!resourceData.data.organization) { + return null; + } + else { + $stateParams[`${list.iterator}_search`].organization = resourceData.data.organization; + return qs.search(path, $stateParams.team_search); + } + + } ], resourceData: ['CredentialModel', '$stateParams', (Credential, $stateParams) => { @@ -198,7 +208,8 @@ function LegacyCredentialsService (pathService) { teams-dataset='$resolve.teamsDataset' selected='allSelected' resource-data='$resolve.resourceData' - title='Add Users / Teams'> + without-team-permissions='{{$resolve.resourceData.data.organization ? null : true}}' + title='{{$resolve.resourceData.data.organization ? "Add Users / Teams" : "Add Users"}}'> ` } }, diff --git a/awx/ui/client/legacy-styles/ansible-ui.less b/awx/ui/client/legacy-styles/ansible-ui.less index 6ae02877f3..77830b329c 100644 --- a/awx/ui/client/legacy-styles/ansible-ui.less +++ b/awx/ui/client/legacy-styles/ansible-ui.less @@ -342,12 +342,6 @@ textarea.allowresize { } } -.prepend-asterisk:before { - content: "\002A\00A0"; - color: @red; - margin-right: -5px; -} - .subtitle { font-size: 16px; } diff --git a/awx/ui/client/legacy-styles/forms.less b/awx/ui/client/legacy-styles/forms.less index c263e0568e..4fb40e395d 100644 --- a/awx/ui/client/legacy-styles/forms.less +++ b/awx/ui/client/legacy-styles/forms.less @@ -404,7 +404,7 @@ .select2-dropdown { border:1px solid @field-border; - + z-index: 1030; } .select2-container--open .select2-dropdown--below { @@ -700,6 +700,10 @@ input[type='radio']:checked:before { width: 30px; } +.Form-requiredAsterisk { + color: @red; +} + @media only screen and (max-width: 650px) { .Form-formGroup { flex: 1 0 auto; diff --git a/awx/ui/client/legacy-styles/lists.less b/awx/ui/client/legacy-styles/lists.less index 149ba2c80d..d3948f6c79 100644 --- a/awx/ui/client/legacy-styles/lists.less +++ b/awx/ui/client/legacy-styles/lists.less @@ -346,6 +346,8 @@ table, tbody { background-color: @default-no-items-bord; color: @list-no-items-txt; text-transform: uppercase; + text-align: center; + padding: 10px; } .modal-body > .List-noItems { diff --git a/awx/ui/client/lib/components/input/label.partial.html b/awx/ui/client/lib/components/input/label.partial.html index e5c79544d5..c8d4802ffd 100644 --- a/awx/ui/client/lib/components/input/label.partial.html +++ b/awx/ui/client/lib/components/input/label.partial.html @@ -1,11 +1,11 @@