1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

add toggle to controle inventory parse as error (#28729)

* add toggle to controle inventory parse as error

also rearranged new inventory options into it's own ini section

* updated with inventory features

also minor fixes/consolidation on deprecated/removed modules

* tweaked settings
This commit is contained in:
Brian Coca 2017-08-28 17:17:19 -04:00 committed by GitHub
parent 862cde5e82
commit de6ba4daff
4 changed files with 56 additions and 30 deletions

View file

@ -48,27 +48,25 @@ Ansible Changes By Release
module is deprecated and slated to go away in 2.8. The functionality has been module is deprecated and slated to go away in 2.8. The functionality has been
moved to `ansible.utils.unsafe_proxy` to avoid a circular import. moved to `ansible.utils.unsafe_proxy` to avoid a circular import.
#### Deprecated Modules: #### Deprecated Modules (to be removed in 2.8):
* ec2_facts (removed in 2.7), replaced by ec2_metadata_facts * ec2_facts: replaced by ec2_metadata_facts
* cs_nic (removed in 2.7), replaced by cs_instance_nic_secondaryip, also see new module cs_instance_nic for managing nics * cs_nic: replaced by cs_instance_nic_secondaryip, also see new module cs_instance_nic for managing nics
* panos_address (use M(panos_object) instead) * panos_address: use M(panos_object) instead
* panos_service (use M(panos_object) instead) * panos_service: use M(panos_object) instead
* panos_security_policy: In 2.4 use M(panos_security_rule) instead. * panos_security_policy: use M(panos_security_rule) instead
* panos_nat_policy, In 2.4 use M(panos_nat_rule) instead. * panos_nat_policy: use M(panos_nat_rule) instead
* s3 (removed in 2.7), replaced by aws_s3 * s3: replaced by aws_s3
* ec2_remote_facts: replaced by
#### Removed Deprecated Modules: #### Removed Modules (previouslly deprecated):
* eos_template (use eos_config instead) * eos_template: use eos_config instead
* ios_template (use ios_config instead) * ios_template: use ios_config instead
* iosxr_template (use iosxr_config instead) * iosxr_template: use iosxr_config instead
* junos_template (use junos_config instead) * junos_template: use junos_config instead
* nxos_template (use nxos_config instead) * nxos_template: use nxos_config instead
* ops_template (use ops_config instead) * ops_template: use ops_config instead
* openswitch * openswitch
* Modules (scheduled for removal in 2.6)
* ec2_remote_facts
### Minor Changes ### Minor Changes
* Removed previously deprecated config option `hostfile` and env var `ANSIBLE_HOSTS` * Removed previously deprecated config option `hostfile` and env var `ANSIBLE_HOSTS`
@ -124,6 +122,11 @@ Ansible Changes By Release
* datetime filter updated to use default format of datetime.datetime (ISO8601) * datetime filter updated to use default format of datetime.datetime (ISO8601)
* The junit plugin now has an option to report a junit test failure on changes for idempotent testing. * The junit plugin now has an option to report a junit test failure on changes for idempotent testing.
* New 'diff' keyword allows setting diff mode on playbook objects, overriding command line option and config. * New 'diff' keyword allows setting diff mode on playbook objects, overriding command line option and config.
* New config settings for inventory to:
- control inventory plugins used
- extensions of files to ignore when using inventory directory
- patterns of flies to ignore when using inventory directory
- option to toggle failed inventory source parsing between an error or a warning
#### New Callbacks: #### New Callbacks:
- full_skip - full_skip

View file

@ -72,9 +72,6 @@
# enable callback plugins, they can output to stdout but cannot be 'stdout' type. # enable callback plugins, they can output to stdout but cannot be 'stdout' type.
#callback_whitelist = timer, mail #callback_whitelist = timer, mail
# enable inventory plugins, default: 'host_list', 'script', 'yaml', 'ini'
#inventory_enabled = host_list, virtualbox, yaml, constructed
# Determine whether includes in tasks and handlers are "static" by # Determine whether includes in tasks and handlers are "static" by
# default. As of 2.0, includes are dynamic by default. Setting these # default. As of 2.0, includes are dynamic by default. Setting these
# values to True will make includes behave more like they did in the # values to True will make includes behave more like they did in the
@ -313,6 +310,19 @@
# set default errors for all plays # set default errors for all plays
#any_errors_fatal = False #any_errors_fatal = False
[inventory]
# enable inventory plugins, default: 'host_list', 'script', 'yaml', 'ini'
#enabled_plugins = host_list, virtualbox, yaml, constructed
# ignore these extensions when parsing a directory as inventory source
#ignore_extensions = '.pyc', '.pyo', '.swp', '.bak', '~', '.rpm', '.md', '.txt', '~', '.orig', '.ini', '.cfg', '.retry'
# ignore files matching these patterns when parsing a directory as inventory source
#ignore_patterns=
# If 'true' unparsed inventory sources become fatal errors, they are warnings otherwise.
#unparsed_is_failed=False
[privilege_escalation] [privilege_escalation]
#become=True #become=True
#become_method=sudo #become_method=sudo

View file

@ -1180,31 +1180,36 @@ HOST_KEY_CHECKING:
ini: ini:
- {key: host_key_checking, section: defaults} - {key: host_key_checking, section: defaults}
type: boolean type: boolean
yaml: {key: defaults.host_key_checking}
INVENTORY_ENABLED: INVENTORY_ENABLED:
default: [host_list, script, yaml, ini] default: ['host_list', 'script', 'yaml', 'ini']
description: List of enabled inventory plugins, it also determines the order in which they are used. description: List of enabled inventory plugins, it also determines the order in which they are used.
env: [{name: ANSIBLE_INVENTORY_ENABLED}] env: [{name: ANSIBLE_INVENTORY_ENABLED}]
ini: ini:
- {key: inventory_enabled, section: defaults} - {key: enable_plugins, section: inventory}
type: list type: list
yaml: {key: inventory.enabled_plugins}
INVENTORY_IGNORE_EXTS: INVENTORY_IGNORE_EXTS:
default: eval(BLACKLIST_EXTS + ( '~', '.orig', '.ini', '.cfg', '.retry')) default: eval(BLACKLIST_EXTS + ( '~', '.orig', '.ini', '.cfg', '.retry'))
description: List of extensions to ignore when using a directory as an inventory source description: List of extensions to ignore when using a directory as an inventory source
env: [{name: ANSIBLE_INVENTORY_IGNORE}] env: [{name: ANSIBLE_INVENTORY_IGNORE}]
ini: ini:
- {key: inventory_ignore_extensions, section: defaults} - {key: inventory_ignore_extensions, section: defaults}
- {key: ignore_extensions, section: inventory}
type: list type: list
yaml: {key: inventory.ignore_extensions}
INVENTORY_IGNORE_PATTERNS: INVENTORY_IGNORE_PATTERNS:
default: [] default: []
description: List of patterns to ignore when using a directory as an inventory source description: List of patterns to ignore when using a directory as an inventory source
env: [{name: ANSIBLE_INVENTORY_IGNORE_REGEX}] env: [{name: ANSIBLE_INVENTORY_IGNORE_REGEX}]
ini: ini:
- {key: inventory_ignore_patterns, section: defaults} - {key: inventory_ignore_patterns, section: defaults}
- {key: ignore_patterns, section: inventory}
type: list type: list
yaml: {key: inventory.ignore_patterns} INVENTORY_UNPARSED_IS_FAILED:
default: False
description: If 'true' unparsed inventory sources become fatal errors, they are warnings otherwise.
env: [{name: ANSIBLE_INVENTORY_UNPARSED_FAILED}]
ini:
- {key: unparsed_is_failed, section: inventory}
type: boolean
MAX_FILE_SIZE_FOR_DIFF: MAX_FILE_SIZE_FOR_DIFF:
default: 104448 default: 104448
description: Maximum size of files to be considered for diff display description: Maximum size of files to be considered for diff display

View file

@ -267,6 +267,14 @@ class InventoryManager(object):
else: else:
if not parsed and failures: if not parsed and failures:
# only if no plugin processed files should we show errors. # only if no plugin processed files should we show errors.
if C.INVENTORY_UNPARSED_IS_FAILED:
msg = "Could not parse inventory source %s with availabel plugins:\n" % source
for fail in failures:
msg += 'Plugin %s failed: %s\n' % (fail['plugin'], to_native(fail['exc']))
if display.verbosity >= 3:
msg += "%s\n" % fail['exc'].tb
raise AnsibleParserError(msg)
else:
for fail in failures: for fail in failures:
display.warning('\n* Failed to parse %s with %s plugin: %s' % (to_native(fail['src']), fail['plugin'], to_native(fail['exc']))) display.warning('\n* Failed to parse %s with %s plugin: %s' % (to_native(fail['src']), fail['plugin'], to_native(fail['exc'])))
display.vvv(fail['exc'].tb) display.vvv(fail['exc'].tb)