Merge pull request #1088 from t-woerner/fix_new_ansible_lint_disallowed_ignores

Fix new ansible lint disallowes ignores
This commit is contained in:
Rafael Guterres Jeffman
2023-05-05 12:08:41 -03:00
committed by GitHub
33 changed files with 43 additions and 169 deletions

View File

@@ -747,8 +747,8 @@ def exit_raw_json(module, **kwargs):
contains sensible data, it will be appear in the logs. contains sensible data, it will be appear in the logs.
""" """
module.do_cleanup_files() module.do_cleanup_files()
print(jsonify(kwargs)) print(jsonify(kwargs)) # pylint: disable=W0012,ansible-bad-function
sys.exit(0) sys.exit(0) # pylint: disable=W0012,ansible-bad-function
def __get_domain_validator(): def __get_domain_validator():

View File

@@ -1394,15 +1394,16 @@ def gen_args(entry):
if record_value is not None: if record_value is not None:
record_type = entry['record_type'] record_type = entry['record_type']
rec = "{}record".format(record_type.lower()) rec = "{0}record".format(record_type.lower())
args[rec] = ensure_data_is_list(record_value) args[rec] = ensure_data_is_list(record_value)
else: else:
for field in _RECORD_FIELDS: for field in _RECORD_FIELDS:
record_value = entry.get(field) or entry.get("%sord" % field) record_value = entry.get(field) or entry.get("%sord" % field)
if record_value is not None: if record_value is not None:
# pylint: disable=use-maxsplit-arg
record_type = field.split('_')[0] record_type = field.split('_')[0]
rec = "{}record".format(record_type.lower()) rec = "{0}record".format(record_type.lower())
args[rec] = ensure_data_is_list(record_value) args[rec] = ensure_data_is_list(record_value)
records = { records = {

View File

@@ -236,7 +236,8 @@ def main():
except Exception as e: except Exception as e:
logger.debug("config_show failed %s", e, exc_info=True) logger.debug("config_show failed %s", e, exc_info=True)
module.fail_json( module.fail_json(
"Failed to retrieve CA certificate subject base: {}".format(e), "Failed to retrieve CA certificate subject base: "
"{0}".format(e),
rval=CLIENT_INSTALL_ERROR) rval=CLIENT_INSTALL_ERROR)
else: else:
subject_base = str(DN(config['ipacertificatesubjectbase'][0])) subject_base = str(DN(config['ipacertificatesubjectbase'][0]))

View File

@@ -241,7 +241,7 @@ def main():
config=krb_name) config=krb_name)
except RuntimeError as e: except RuntimeError as e:
module.fail_json( module.fail_json(
msg="Kerberos authentication failed: {}".format(e)) msg="Kerberos authentication failed: {0}".format(e))
elif keytab: elif keytab:
join_args.append("-f") join_args.append("-f")
@@ -254,10 +254,10 @@ def main():
attempts=kinit_attempts) attempts=kinit_attempts)
except GSSError as e: except GSSError as e:
module.fail_json( module.fail_json(
msg="Kerberos authentication failed: {}".format(e)) msg="Kerberos authentication failed: {0}".format(e))
else: else:
module.fail_json( module.fail_json(
msg="Keytab file could not be found: {}".format(keytab)) msg="Keytab file could not be found: {0}".format(keytab))
elif password: elif password:
join_args.append("-w") join_args.append("-w")

View File

@@ -432,7 +432,7 @@ def main():
if options.ca_cert_files is not None: if options.ca_cert_files is not None:
for value in options.ca_cert_files: for value in options.ca_cert_files:
if not isinstance(value, list): if not isinstance(value, list):
raise ValueError("Expected list, got {!r}".format(value)) raise ValueError("Expected list, got {0!r}".format(value))
# this is what init() does # this is what init() does
value = value[-1] value = value[-1]
if not os.path.exists(value): if not os.path.exists(value):
@@ -575,13 +575,13 @@ def main():
hostname_source = "Machine's FQDN" hostname_source = "Machine's FQDN"
if hostname != hostname.lower(): if hostname != hostname.lower():
raise ScriptError( raise ScriptError(
"Invalid hostname '{}', must be lower-case.".format(hostname), "Invalid hostname '{0}', must be lower-case.".format(hostname),
rval=CLIENT_INSTALL_ERROR rval=CLIENT_INSTALL_ERROR
) )
if hostname in ('localhost', 'localhost.localdomain'): if hostname in ('localhost', 'localhost.localdomain'):
raise ScriptError( raise ScriptError(
"Invalid hostname, '{}' must not be used.".format(hostname), "Invalid hostname, '{0}' must not be used.".format(hostname),
rval=CLIENT_INSTALL_ERROR) rval=CLIENT_INSTALL_ERROR)
if hasattr(constants, "MAXHOSTNAMELEN"): if hasattr(constants, "MAXHOSTNAMELEN"):
@@ -589,7 +589,7 @@ def main():
validate_hostname(hostname, maxlen=constants.MAXHOSTNAMELEN) validate_hostname(hostname, maxlen=constants.MAXHOSTNAMELEN)
except ValueError as e: except ValueError as e:
raise ScriptError( raise ScriptError(
'invalid hostname: {}'.format(e), 'invalid hostname: {0}'.format(e),
rval=CLIENT_INSTALL_ERROR) rval=CLIENT_INSTALL_ERROR)
if hasattr(tasks, "is_nosssd_supported"): if hasattr(tasks, "is_nosssd_supported"):
@@ -695,7 +695,7 @@ def main():
rval=CLIENT_INSTALL_ERROR) rval=CLIENT_INSTALL_ERROR)
if ret == ipadiscovery.NOT_FQDN: if ret == ipadiscovery.NOT_FQDN:
raise ScriptError( raise ScriptError(
"{} is not a fully-qualified hostname".format(hostname), "{0} is not a fully-qualified hostname".format(hostname),
rval=CLIENT_INSTALL_ERROR) rval=CLIENT_INSTALL_ERROR)
if ret in (ipadiscovery.NO_LDAP_SERVER, ipadiscovery.NOT_IPA_SERVER) \ if ret in (ipadiscovery.NO_LDAP_SERVER, ipadiscovery.NOT_IPA_SERVER) \
or not ds.domain: or not ds.domain:

View File

@@ -171,7 +171,7 @@ def main():
# Print a warning if CA role is only installed on one server # Print a warning if CA role is only installed on one server
if len(ca_servers) == 1: if len(ca_servers) == 1:
msg = u''' msg = u'''
WARNING: The CA service is only installed on one server ({}). WARNING: The CA service is only installed on one server ({0}).
It is strongly recommended to install it on another server. It is strongly recommended to install it on another server.
Run ipa-ca-install(1) on another master to accomplish this. Run ipa-ca-install(1) on another master to accomplish this.
'''.format(ca_servers[0]) '''.format(ca_servers[0])

View File

@@ -469,7 +469,7 @@ def main():
env._finalize_core(**dict(constants.DEFAULT_CONFIG)) env._finalize_core(**dict(constants.DEFAULT_CONFIG))
# pylint: disable=no-member # pylint: disable=no-member
xmlrpc_uri = 'https://{}/ipa/xml'.format(ipautil.format_netloc(env.host)) xmlrpc_uri = 'https://{0}/ipa/xml'.format(ipautil.format_netloc(env.host))
if hasattr(ipaldap, "realm_to_ldapi_uri"): if hasattr(ipaldap, "realm_to_ldapi_uri"):
realm_to_ldapi_uri = ipaldap.realm_to_ldapi_uri realm_to_ldapi_uri = ipaldap.realm_to_ldapi_uri
else: else:
@@ -609,7 +609,7 @@ def main():
ansible_log.debug("-- REMOTE_API --") ansible_log.debug("-- REMOTE_API --")
ldapuri = 'ldaps://%s' % ipautil.format_netloc(config.master_host_name) ldapuri = 'ldaps://%s' % ipautil.format_netloc(config.master_host_name)
xmlrpc_uri = 'https://{}/ipa/xml'.format( xmlrpc_uri = 'https://{0}/ipa/xml'.format(
ipautil.format_netloc(config.master_host_name)) ipautil.format_netloc(config.master_host_name))
remote_api = create_api(mode=None) remote_api = create_api(mode=None)
remote_api.bootstrap(in_server=True, remote_api.bootstrap(in_server=True,

View File

@@ -450,7 +450,7 @@ def main():
if installer.ca_cert_files is not None: if installer.ca_cert_files is not None:
if not isinstance(installer.ca_cert_files, list): if not isinstance(installer.ca_cert_files, list):
ansible_module.fail_json( ansible_module.fail_json(
msg="Expected list, got {!r}".format(installer.ca_cert_files)) msg="Expected list, got {0!r}".format(installer.ca_cert_files))
for cert in installer.ca_cert_files: for cert in installer.ca_cert_files:
if not os.path.exists(cert): if not os.path.exists(cert):
ansible_module.fail_json(msg="'%s' does not exist" % cert) ansible_module.fail_json(msg="'%s' does not exist" % cert)

View File

@@ -334,7 +334,7 @@ def gen_env_boostrap_finalize_core(etc_ipa, default_config):
def api_bootstrap_finalize(env): def api_bootstrap_finalize(env):
# pylint: disable=no-member # pylint: disable=no-member
xmlrpc_uri = \ xmlrpc_uri = \
'https://{}/ipa/xml'.format(ipautil.format_netloc(env.host)) 'https://{0}/ipa/xml'.format(ipautil.format_netloc(env.host))
api.bootstrap(in_server=True, api.bootstrap(in_server=True,
context='installer', context='installer',
confdir=paths.ETC_IPA, confdir=paths.ETC_IPA,
@@ -479,7 +479,7 @@ def ansible_module_get_parsed_ip_addresses(ansible_module,
def gen_remote_api(master_host_name, etc_ipa): def gen_remote_api(master_host_name, etc_ipa):
ldapuri = 'ldaps://%s' % ipautil.format_netloc(master_host_name) ldapuri = 'ldaps://%s' % ipautil.format_netloc(master_host_name)
xmlrpc_uri = 'https://{}/ipa/xml'.format( xmlrpc_uri = 'https://{0}/ipa/xml'.format(
ipautil.format_netloc(master_host_name)) ipautil.format_netloc(master_host_name))
remote_api = create_api(mode=None) remote_api = create_api(mode=None)
remote_api.bootstrap(in_server=True, remote_api.bootstrap(in_server=True,

View File

@@ -211,6 +211,7 @@ options:
random_serial_numbers: random_serial_numbers:
description: The installer random_serial_numbers setting description: The installer random_serial_numbers setting
type: bool type: bool
default: no
required: no required: no
allow_zone_overlap: allow_zone_overlap:
description: Create DNS zone even if it already exists description: Create DNS zone even if it already exists
@@ -1067,7 +1068,7 @@ def main():
try: try:
validate_domain_name(realm_name, entity="realm") validate_domain_name(realm_name, entity="realm")
except ValueError as e: except ValueError as e:
raise ScriptError("Invalid realm name: {}".format(unicode(e))) raise ScriptError("Invalid realm name: {0}".format(unicode(e)))
if not options.setup_adtrust: if not options.setup_adtrust:
# If domain name and realm does not match, IPA server will not be able # If domain name and realm does not match, IPA server will not be able

View File

@@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash -eu
master=$1 master=$1
if [ -z "$master" ]; then if [ -z "$master" ]; then

View File

@@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash -eu
NUM=${1-1000} NUM=${1-1000}
FILE="groups.json" FILE="groups.json"

View File

@@ -40,7 +40,7 @@ def pytest_configure(config):
if os.path.exists(config_dir): if os.path.exists(config_dir):
inventory_path = os.path.join(config_dir, "test.inventory.yml") inventory_path = os.path.join(config_dir, "test.inventory.yml")
inventory = get_inventory(inventory_path) inventory = get_inventory(inventory_path)
print("Configuring execution using {}".format(inventory_path)) print("Configuring execution using {0}".format(inventory_path))
ipaservers = inventory["all"]["children"]["ipaserver"]["hosts"] ipaservers = inventory["all"]["children"]["ipaserver"]["hosts"]
ipaserver = list(ipaservers.values())[0] ipaserver = list(ipaservers.values())[0]
private_key = os.path.join(config_dir, "id_rsa") private_key = os.path.join(config_dir, "id_rsa")

View File

@@ -1,55 +0,0 @@
plugins/module_utils/ansible_freeipa_module.py compile-2.6!skip
plugins/module_utils/ansible_freeipa_module.py import-2.6!skip
plugins/module_utils/ansible_freeipa_module.py pylint:ansible-bad-function
plugins/modules/ipaclient_get_facts.py compile-2.6!skip
plugins/modules/ipaclient_get_facts.py import-2.6!skip
plugins/modules/ipaclient_api.py pylint:ansible-format-automatic-specification
plugins/modules/ipaclient_join.py pylint:ansible-format-automatic-specification
plugins/modules/ipaclient_test.py pylint:ansible-format-automatic-specification
plugins/modules/ipaconfig.py compile-2.6!skip
plugins/modules/ipaconfig.py import-2.6!skip
plugins/modules/ipadnsrecord.py compile-2.6!skip
plugins/modules/ipadnsrecord.py import-2.6!skip
plugins/modules/ipadnsrecord.py pylint:ansible-format-automatic-specification
plugins/modules/ipadnsrecord.py pylint:use-maxsplit-arg
plugins/modules/ipareplica_enable_ipa.py pylint:ansible-format-automatic-specification
plugins/modules/ipareplica_prepare.py pylint:ansible-format-automatic-specification
plugins/modules/ipareplica_test.py pylint:ansible-format-automatic-specification
plugins/modules/iparole.py compile-2.6!skip
plugins/modules/iparole.py import-2.6!skip
plugins/modules/ipaserver_setup_ca.py compile-2.6!skip
plugins/modules/ipaserver_setup_ca.py import-2.6!skip
plugins/modules/ipaserver_test.py pylint:ansible-format-automatic-specification
plugins/modules/ipaservice.py compile-2.6!skip
plugins/modules/ipaservice.py import-2.6!skip
plugins/modules/ipasudorule.py compile-2.6!skip
plugins/modules/ipasudorule.py import-2.6!skip
plugins/modules/ipavault.py compile-2.6!skip
plugins/modules/ipavault.py import-2.6!skip
roles/ipaclient/library/ipaclient_api.py pylint:ansible-format-automatic-specification
roles/ipaclient/library/ipaclient_join.py pylint:ansible-format-automatic-specification
roles/ipaclient/library/ipaclient_test.py pylint:ansible-format-automatic-specification
roles/ipareplica/library/ipareplica_enable_ipa.py pylint:ansible-format-automatic-specification
roles/ipareplica/library/ipareplica_prepare.py pylint:ansible-format-automatic-specification
roles/ipareplica/library/ipareplica_test.py pylint:ansible-format-automatic-specification
roles/ipaserver/library/ipaserver_test.py pylint:ansible-format-automatic-specification
roles/ipareplica/module_utils/ansible_ipa_replica.py pylint:ansible-format-automatic-specification
tests/external-signed-ca-with-automatic-copy/external-ca.sh shebang!skip
tests/pytests/conftest.py pylint:ansible-format-automatic-specification
tests/sanity/sanity.sh shebang!skip
tests/user/users.sh shebang!skip
tests/user/users_absent.sh shebang!skip
tests/group/groups.sh shebang!skip
tests/utils.py pylint:ansible-format-automatic-specification
utils/ansible-doc-test shebang!skip
utils/build-galaxy-release.sh shebang!skip
utils/build-srpm.sh shebang!skip
utils/changelog shebang!skip
utils/check_test_configuration.py shebang!skip
utils/galaxyfy-README.py shebang!skip
utils/galaxyfy-module-EXAMPLES.py shebang!skip
utils/galaxyfy-playbook.py shebang!skip
utils/galaxyfy.py shebang!skip
utils/gen_modules_docs.sh shebang!skip
utils/lint_check.sh shebang!skip
utils/new_module shebang!skip

View File

@@ -1,37 +0,0 @@
plugins/module_utils/ansible_freeipa_module.py pylint:ansible-bad-function
plugins/modules/ipaclient_api.py pylint:ansible-format-automatic-specification
plugins/modules/ipaclient_join.py pylint:ansible-format-automatic-specification
plugins/modules/ipaclient_test.py pylint:ansible-format-automatic-specification
plugins/modules/ipadnsrecord.py pylint:ansible-format-automatic-specification
plugins/modules/ipadnsrecord.py pylint:use-maxsplit-arg
plugins/modules/ipareplica_enable_ipa.py pylint:ansible-format-automatic-specification
plugins/modules/ipareplica_prepare.py pylint:ansible-format-automatic-specification
plugins/modules/ipareplica_test.py pylint:ansible-format-automatic-specification
plugins/modules/ipaserver_test.py pylint:ansible-format-automatic-specification
roles/ipaclient/library/ipaclient_api.py pylint:ansible-format-automatic-specification
roles/ipaclient/library/ipaclient_join.py pylint:ansible-format-automatic-specification
roles/ipaclient/library/ipaclient_test.py pylint:ansible-format-automatic-specification
roles/ipareplica/library/ipareplica_enable_ipa.py pylint:ansible-format-automatic-specification
roles/ipareplica/library/ipareplica_prepare.py pylint:ansible-format-automatic-specification
roles/ipareplica/library/ipareplica_test.py pylint:ansible-format-automatic-specification
roles/ipaserver/library/ipaserver_test.py pylint:ansible-format-automatic-specification
roles/ipareplica/module_utils/ansible_ipa_replica.py pylint:ansible-format-automatic-specification
tests/external-signed-ca-with-automatic-copy/external-ca.sh shebang!skip
tests/pytests/conftest.py pylint:ansible-format-automatic-specification
tests/sanity/sanity.sh shebang!skip
tests/user/users.sh shebang!skip
tests/user/users_absent.sh shebang!skip
tests/group/groups.sh shebang!skip
tests/utils.py pylint:ansible-format-automatic-specification
utils/ansible-doc-test shebang!skip
utils/build-galaxy-release.sh shebang!skip
utils/build-srpm.sh shebang!skip
utils/changelog shebang!skip
utils/check_test_configuration.py shebang!skip
utils/galaxyfy-README.py shebang!skip
utils/galaxyfy-module-EXAMPLES.py shebang!skip
utils/galaxyfy-playbook.py shebang!skip
utils/galaxyfy.py shebang!skip
utils/gen_modules_docs.sh shebang!skip
utils/lint_check.sh shebang!skip
utils/new_module shebang!skip

View File

@@ -1,37 +0,0 @@
plugins/module_utils/ansible_freeipa_module.py pylint:ansible-bad-function
plugins/modules/ipaclient_api.py pylint:ansible-format-automatic-specification
plugins/modules/ipaclient_join.py pylint:ansible-format-automatic-specification
plugins/modules/ipaclient_test.py pylint:ansible-format-automatic-specification
plugins/modules/ipadnsrecord.py pylint:ansible-format-automatic-specification
plugins/modules/ipadnsrecord.py pylint:use-maxsplit-arg
plugins/modules/ipareplica_enable_ipa.py pylint:ansible-format-automatic-specification
plugins/modules/ipareplica_prepare.py pylint:ansible-format-automatic-specification
plugins/modules/ipareplica_test.py pylint:ansible-format-automatic-specification
plugins/modules/ipaserver_test.py pylint:ansible-format-automatic-specification
roles/ipaclient/library/ipaclient_api.py pylint:ansible-format-automatic-specification
roles/ipaclient/library/ipaclient_join.py pylint:ansible-format-automatic-specification
roles/ipaclient/library/ipaclient_test.py pylint:ansible-format-automatic-specification
roles/ipareplica/library/ipareplica_enable_ipa.py pylint:ansible-format-automatic-specification
roles/ipareplica/library/ipareplica_prepare.py pylint:ansible-format-automatic-specification
roles/ipareplica/library/ipareplica_test.py pylint:ansible-format-automatic-specification
roles/ipaserver/library/ipaserver_test.py pylint:ansible-format-automatic-specification
roles/ipareplica/module_utils/ansible_ipa_replica.py pylint:ansible-format-automatic-specification
tests/external-signed-ca-with-automatic-copy/external-ca.sh shebang!skip
tests/pytests/conftest.py pylint:ansible-format-automatic-specification
tests/sanity/sanity.sh shebang!skip
tests/user/users.sh shebang!skip
tests/user/users_absent.sh shebang!skip
tests/group/groups.sh shebang!skip
tests/utils.py pylint:ansible-format-automatic-specification
utils/ansible-doc-test shebang!skip
utils/build-galaxy-release.sh shebang!skip
utils/build-srpm.sh shebang!skip
utils/changelog shebang!skip
utils/check_test_configuration.py shebang!skip
utils/galaxyfy-README.py shebang!skip
utils/galaxyfy-module-EXAMPLES.py shebang!skip
utils/galaxyfy-playbook.py shebang!skip
utils/galaxyfy.py shebang!skip
utils/gen_modules_docs.sh shebang!skip
utils/lint_check.sh shebang!skip
utils/new_module shebang!skip

View File

@@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash -eu
TOPDIR=$(readlink -f "$(dirname "$0")/../..") TOPDIR=$(readlink -f "$(dirname "$0")/../..")
pushd "${TOPDIR}" >/dev/null || exit 1 pushd "${TOPDIR}" >/dev/null || exit 1

View File

@@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash -eu
NUM=${1-1000} NUM=${1-1000}
FILE="users.json" FILE="users.json"

View File

@@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash -eu
NUM=1000 NUM=1000
FILE="users_absent.json" FILE="users_absent.json"

View File

@@ -180,7 +180,7 @@ def run_playbook(playbook, allow_failures=False):
if allow_failures: if allow_failures:
return result return result
status_code_msg = "ansible-playbook return code: {}".format( status_code_msg = "ansible-playbook return code: {0}".format(
result.returncode result.returncode
) )
assert_msg = "\n".join( assert_msg = "\n".join(

View File

@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Authors: # Authors:

View File

@@ -125,7 +125,7 @@ done
for i in utils/*.py utils/new_module utils/changelog utils/ansible-doc-test; for i in utils/*.py utils/new_module utils/changelog utils/ansible-doc-test;
do do
sed -i '{s@/usr/bin/python*@%{python}@}' $i sed -i '{s@/usr/bin/env python*@%{python}@}' $i
done done

View File

@@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash -eu
# #
# Build Ansible Collection from ansible-freeipa repo # Build Ansible Collection from ansible-freeipa repo
# #

View File

@@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash -eu
git_version=$(git describe --tags | sed -e "s/^v//") git_version=$(git describe --tags | sed -e "s/^v//")
version=${git_version%%-*} version=${git_version%%-*}

View File

@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Authors: # Authors:

View File

@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
"""Check which tests are scheduled to be executed.""" """Check which tests are scheduled to be executed."""

View File

@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Authors: # Authors:

View File

@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Authors: # Authors:

View File

@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Authors: # Authors:

View File

@@ -1,4 +1,4 @@
#!/usr/bin/python #!/usr/bin/env python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Authors: # Authors:

View File

@@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash -eu
for i in roles/ipa*/*/*.py; do for i in roles/ipa*/*/*.py; do
python utils/gen_module_docs.py "$i" python utils/gen_module_docs.py "$i"

View File

@@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash -eu
INFO="\033[37;1m" INFO="\033[37;1m"
WARN="\033[33;1m" WARN="\033[33;1m"

View File

@@ -1,4 +1,4 @@
#!/bin/bash #!/bin/bash -eu
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Authors: # Authors: