mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-03-26 21:33:12 +00:00
modules bc*: use f-strings (#10945)
* modules bc*: use f-strings * no quotes or backticks inside f-strs * add changelog frag * rename chglof frag file * rename chglof frag file * copr: re-applied change maintain original logic
This commit is contained in:
@@ -329,7 +329,7 @@ def main():
|
||||
(rc, out, err) = be.destroy_be()
|
||||
|
||||
if rc != 0:
|
||||
module.fail_json(msg='Error while destroying BE: "%s"' % err,
|
||||
module.fail_json(msg=f'Error while destroying BE: "{err}"',
|
||||
name=be.name,
|
||||
stderr=err,
|
||||
rc=rc)
|
||||
@@ -344,7 +344,7 @@ def main():
|
||||
(rc, out, err) = be.create_be()
|
||||
|
||||
if rc != 0:
|
||||
module.fail_json(msg='Error while creating BE: "%s"' % err,
|
||||
module.fail_json(msg=f'Error while creating BE: "{err}"',
|
||||
name=be.name,
|
||||
stderr=err,
|
||||
rc=rc)
|
||||
@@ -363,7 +363,7 @@ def main():
|
||||
(rc, out, err) = be.activate_be()
|
||||
|
||||
if rc != 0:
|
||||
module.fail_json(msg='Error while activating BE: "%s"' % err,
|
||||
module.fail_json(msg=f'Error while activating BE: "{err}"',
|
||||
name=be.name,
|
||||
stderr=err,
|
||||
rc=rc)
|
||||
@@ -375,7 +375,7 @@ def main():
|
||||
(rc, out, err) = be.mount_be()
|
||||
|
||||
if rc != 0:
|
||||
module.fail_json(msg='Error while mounting BE: "%s"' % err,
|
||||
module.fail_json(msg=f'Error while mounting BE: "{err}"',
|
||||
name=be.name,
|
||||
stderr=err,
|
||||
rc=rc)
|
||||
@@ -388,7 +388,7 @@ def main():
|
||||
(rc, out, err) = be.unmount_be()
|
||||
|
||||
if rc != 0:
|
||||
module.fail_json(msg='Error while unmounting BE: "%s"' % err,
|
||||
module.fail_json(msg=f'Error while unmounting BE: "{err}"',
|
||||
name=be.name,
|
||||
stderr=err,
|
||||
rc=rc)
|
||||
|
||||
@@ -183,7 +183,7 @@ def main():
|
||||
if v is not None:
|
||||
body[k] = v
|
||||
|
||||
request_url = url + '/data/events/deployments/start'
|
||||
request_url = f"{url}/data/events/deployments/start"
|
||||
else:
|
||||
message = module.params['deployment_message']
|
||||
if message is not None:
|
||||
@@ -194,7 +194,7 @@ def main():
|
||||
else:
|
||||
body['status'] = 'failure'
|
||||
|
||||
request_url = url + '/data/events/deployments/end'
|
||||
request_url = f"{url}/data/events/deployments/end"
|
||||
|
||||
# Build the deployment object we return
|
||||
deployment = dict(token=token, url=url)
|
||||
@@ -209,7 +209,7 @@ def main():
|
||||
|
||||
# Send the data to bigpanda
|
||||
data = json.dumps(body)
|
||||
headers = {'Authorization': 'Bearer %s' % token, 'Content-Type': 'application/json'}
|
||||
headers = {'Authorization': f'Bearer {token}', 'Content-Type': 'application/json'}
|
||||
try:
|
||||
response, info = fetch_url(module, request_url, data=data, headers=headers)
|
||||
if info['status'] == 200:
|
||||
|
||||
@@ -153,7 +153,7 @@ def get_existing_deploy_key(module, bitbucket):
|
||||
module.fail_json(msg=error_messages['required_permission'])
|
||||
|
||||
if info['status'] != 200:
|
||||
module.fail_json(msg='Failed to retrieve the list of deploy keys: {0}'.format(info))
|
||||
module.fail_json(msg=f'Failed to retrieve the list of deploy keys: {info}')
|
||||
|
||||
res = next((v for v in content['values'] if v['label'] == module.params['label']), None)
|
||||
|
||||
@@ -186,10 +186,7 @@ def create_deploy_key(module, bitbucket):
|
||||
module.fail_json(msg=error_messages['invalid_key'])
|
||||
|
||||
if info['status'] != 200:
|
||||
module.fail_json(msg='Failed to create deploy key `{label}`: {info}'.format(
|
||||
label=module.params['label'],
|
||||
info=info,
|
||||
))
|
||||
module.fail_json(msg=f"Failed to create deploy key `{module.params['label']}`: {info}")
|
||||
|
||||
|
||||
def delete_deploy_key(module, bitbucket, key_id):
|
||||
@@ -209,10 +206,7 @@ def delete_deploy_key(module, bitbucket, key_id):
|
||||
module.fail_json(msg=error_messages['required_permission'])
|
||||
|
||||
if info['status'] != 204:
|
||||
module.fail_json(msg='Failed to delete deploy key `{label}`: {info}'.format(
|
||||
label=module.params['label'],
|
||||
info=info,
|
||||
))
|
||||
module.fail_json(msg=f"Failed to delete deploy key `{module.params['label']}`: {info}")
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
@@ -133,7 +133,7 @@ def update_ssh_key_pair(module, bitbucket):
|
||||
module.fail_json(msg=error_messages['invalid_params'])
|
||||
|
||||
if info['status'] != 200:
|
||||
module.fail_json(msg='Failed to create or update pipeline ssh key pair : {0}'.format(info))
|
||||
module.fail_json(msg=f'Failed to create or update pipeline ssh key pair : {info}')
|
||||
|
||||
|
||||
def delete_ssh_key_pair(module, bitbucket):
|
||||
@@ -149,7 +149,7 @@ def delete_ssh_key_pair(module, bitbucket):
|
||||
module.fail_json(msg=error_messages['invalid_params'])
|
||||
|
||||
if info['status'] != 204:
|
||||
module.fail_json(msg='Failed to delete pipeline ssh key pair: {0}'.format(info))
|
||||
module.fail_json(msg=f'Failed to delete pipeline ssh key pair: {info}')
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
@@ -149,7 +149,7 @@ def get_existing_known_host(module, bitbucket):
|
||||
module.fail_json(msg='Invalid `repository` or `workspace`.')
|
||||
|
||||
if info['status'] != 200:
|
||||
module.fail_json(msg='Failed to retrieve list of known hosts: {0}'.format(info))
|
||||
module.fail_json(msg=f'Failed to retrieve list of known hosts: {info}')
|
||||
|
||||
host = next((v for v in content['values'] if v['hostname'] == module.params['name']), None)
|
||||
|
||||
@@ -179,14 +179,14 @@ def get_host_key(module, hostname):
|
||||
sock = socket.socket()
|
||||
sock.connect((hostname, 22))
|
||||
except socket.error:
|
||||
module.fail_json(msg='Error opening socket to {0}'.format(hostname))
|
||||
module.fail_json(msg=f'Error opening socket to {hostname}')
|
||||
|
||||
try:
|
||||
trans = paramiko.transport.Transport(sock)
|
||||
trans.start_client()
|
||||
host_key = trans.get_remote_server_key()
|
||||
except paramiko.SSHException:
|
||||
module.fail_json(msg='SSH error on retrieving {0} server key'.format(hostname))
|
||||
module.fail_json(msg=f'SSH error on retrieving {hostname} server key')
|
||||
|
||||
trans.close()
|
||||
sock.close()
|
||||
@@ -227,10 +227,7 @@ def create_known_host(module, bitbucket):
|
||||
module.fail_json(msg=error_messages['invalid_params'])
|
||||
|
||||
if info['status'] != 201:
|
||||
module.fail_json(msg='Failed to create known host `{hostname}`: {info}'.format(
|
||||
hostname=module.params['hostname'],
|
||||
info=info,
|
||||
))
|
||||
module.fail_json(msg=f"Failed to create known host `{module.params['hostname']}`: {info}")
|
||||
|
||||
|
||||
def delete_known_host(module, bitbucket, known_host_uuid):
|
||||
@@ -247,10 +244,7 @@ def delete_known_host(module, bitbucket, known_host_uuid):
|
||||
module.fail_json(msg=error_messages['invalid_params'])
|
||||
|
||||
if info['status'] != 204:
|
||||
module.fail_json(msg='Failed to delete known host `{hostname}`: {info}'.format(
|
||||
hostname=module.params['name'],
|
||||
info=info,
|
||||
))
|
||||
module.fail_json(msg=f"Failed to delete known host `{module.params['name']}`: {info}")
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
@@ -122,7 +122,7 @@ def get_existing_pipeline_variable(module, bitbucket):
|
||||
# Look through the all response pages in search of variable we need
|
||||
page = 1
|
||||
while True:
|
||||
next_url = "%s?page=%s" % (variables_base_url, page)
|
||||
next_url = f"{variables_base_url}?page={page}"
|
||||
info, content = bitbucket.request(
|
||||
api_url=next_url,
|
||||
method='GET',
|
||||
@@ -132,7 +132,7 @@ def get_existing_pipeline_variable(module, bitbucket):
|
||||
module.fail_json(msg='Invalid `repository` or `workspace`.')
|
||||
|
||||
if info['status'] != 200:
|
||||
module.fail_json(msg='Failed to retrieve the list of pipeline variables: {0}'.format(info))
|
||||
module.fail_json(msg=f'Failed to retrieve the list of pipeline variables: {info}')
|
||||
|
||||
# We are at the end of list
|
||||
if 'pagelen' in content and content['pagelen'] == 0:
|
||||
@@ -161,10 +161,7 @@ def create_pipeline_variable(module, bitbucket):
|
||||
)
|
||||
|
||||
if info['status'] != 201:
|
||||
module.fail_json(msg='Failed to create pipeline variable `{name}`: {info}'.format(
|
||||
name=module.params['name'],
|
||||
info=info,
|
||||
))
|
||||
module.fail_json(msg=f"Failed to create pipeline variable `{module.params['name']}`: {info}")
|
||||
|
||||
|
||||
def update_pipeline_variable(module, bitbucket, variable_uuid):
|
||||
@@ -182,10 +179,7 @@ def update_pipeline_variable(module, bitbucket, variable_uuid):
|
||||
)
|
||||
|
||||
if info['status'] != 200:
|
||||
module.fail_json(msg='Failed to update pipeline variable `{name}`: {info}'.format(
|
||||
name=module.params['name'],
|
||||
info=info,
|
||||
))
|
||||
module.fail_json(msg=f"Failed to update pipeline variable `{module.params['name']}`: {info}")
|
||||
|
||||
|
||||
def delete_pipeline_variable(module, bitbucket, variable_uuid):
|
||||
@@ -199,10 +193,7 @@ def delete_pipeline_variable(module, bitbucket, variable_uuid):
|
||||
)
|
||||
|
||||
if info['status'] != 204:
|
||||
module.fail_json(msg='Failed to delete pipeline variable `{name}`: {info}'.format(
|
||||
name=module.params['name'],
|
||||
info=info,
|
||||
))
|
||||
module.fail_json(msg=f"Failed to delete pipeline variable `{module.params['name']}`: {info}")
|
||||
|
||||
|
||||
class BitBucketPipelineVariable(AnsibleModule):
|
||||
|
||||
@@ -107,7 +107,7 @@ class Bower(object):
|
||||
self.version = kwargs['version']
|
||||
|
||||
if kwargs['version']:
|
||||
self.name_version = self.name + '#' + self.version
|
||||
self.name_version = f"{self.name}#{self.version}"
|
||||
else:
|
||||
self.name_version = self.name
|
||||
|
||||
@@ -118,7 +118,7 @@ class Bower(object):
|
||||
if self.relative_execpath:
|
||||
cmd.append(os.path.join(self.path, self.relative_execpath, "bower"))
|
||||
if not os.path.isfile(cmd[-1]):
|
||||
self.module.fail_json(msg="bower not found at relative path %s" % self.relative_execpath)
|
||||
self.module.fail_json(msg=f"bower not found at relative path {self.relative_execpath}")
|
||||
else:
|
||||
cmd.append("bower")
|
||||
|
||||
@@ -140,7 +140,7 @@ class Bower(object):
|
||||
if not os.path.exists(self.path):
|
||||
os.makedirs(self.path)
|
||||
if not os.path.isdir(self.path):
|
||||
self.module.fail_json(msg="path %s is not a directory" % self.path)
|
||||
self.module.fail_json(msg=f"path {self.path} is not a directory")
|
||||
cwd = self.path
|
||||
|
||||
rc, out, err = self.module.run_command(cmd, check_rc=check_rc, cwd=cwd)
|
||||
|
||||
@@ -285,13 +285,13 @@ class BtrfsSubvolumeModule(object):
|
||||
if not filesystem.is_mounted():
|
||||
if not self.__automount:
|
||||
raise BtrfsModuleException(
|
||||
"Target filesystem uuid=%s is not currently mounted and automount=False."
|
||||
"Mount explicitly before module execution or pass automount=True" % filesystem.uuid)
|
||||
f"Target filesystem uuid={filesystem.uuid} is not currently mounted and automount=False."
|
||||
"Mount explicitly before module execution or pass automount=True")
|
||||
elif self.module.check_mode:
|
||||
# TODO is failing the module an appropriate outcome in this scenario?
|
||||
raise BtrfsModuleException(
|
||||
"Target filesystem uuid=%s is not currently mounted. Unable to validate the current"
|
||||
"state while running with check_mode=True" % filesystem.uuid)
|
||||
f"Target filesystem uuid={filesystem.uuid} is not currently mounted. Unable to validate the current"
|
||||
"state while running with check_mode=True")
|
||||
else:
|
||||
self.__mount_subvolume_id_to_tempdir(filesystem, self.__BTRFS_ROOT_SUBVOLUME_ID)
|
||||
filesystem.refresh()
|
||||
@@ -323,8 +323,7 @@ class BtrfsSubvolumeModule(object):
|
||||
return filesystem
|
||||
else:
|
||||
raise BtrfsModuleException(
|
||||
"Failed to automatically identify targeted filesystem. "
|
||||
"No explicit device indicated and found %d available filesystems." % len(filesystems)
|
||||
f"Failed to automatically identify targeted filesystem. No explicit device indicated and found {len(filesystems)} available filesystems."
|
||||
)
|
||||
|
||||
# Prepare unit of work
|
||||
@@ -372,10 +371,10 @@ class BtrfsSubvolumeModule(object):
|
||||
# No change required
|
||||
return
|
||||
elif self.__snapshot_conflict == "error":
|
||||
raise BtrfsModuleException("Target subvolume=%s already exists and snapshot_conflict='error'" % self.__name)
|
||||
raise BtrfsModuleException(f"Target subvolume={self.__name} already exists and snapshot_conflict='error'")
|
||||
|
||||
if source_subvolume is None:
|
||||
raise BtrfsModuleException("Source subvolume %s does not exist" % self.__snapshot_source)
|
||||
raise BtrfsModuleException(f"Source subvolume {self.__snapshot_source} does not exist")
|
||||
elif subvolume is not None and source_subvolume.id == subvolume.id:
|
||||
raise BtrfsModuleException("Snapshot source and target are the same.")
|
||||
else:
|
||||
@@ -397,9 +396,9 @@ class BtrfsSubvolumeModule(object):
|
||||
if subvolume.is_filesystem_root():
|
||||
raise BtrfsModuleException("Can not delete the filesystem's root subvolume")
|
||||
if not self.__recursive and len(subvolume.get_child_subvolumes()) > 0:
|
||||
raise BtrfsModuleException("Subvolume targeted for deletion %s has children and recursive=False."
|
||||
raise BtrfsModuleException(f"Subvolume targeted for deletion {subvolume.path} has children and recursive=False."
|
||||
"Either explicitly delete the child subvolumes first or pass "
|
||||
"parameter recursive=True." % subvolume.path)
|
||||
"parameter recursive=True.")
|
||||
|
||||
self.__stage_required_mount(subvolume.get_parent_subvolume())
|
||||
queue = self.__prepare_recursive_delete_order(subvolume) if self.__recursive else [subvolume]
|
||||
@@ -407,7 +406,7 @@ class BtrfsSubvolumeModule(object):
|
||||
for s in queue:
|
||||
if s.is_mounted():
|
||||
# TODO potentially unmount the subvolume if automount=True ?
|
||||
raise BtrfsModuleException("Can not delete mounted subvolume=%s" % s.path)
|
||||
raise BtrfsModuleException(f"Can not delete mounted subvolume={s.path}")
|
||||
if s.is_filesystem_default():
|
||||
self.__stage_set_default_subvolume(self.__BTRFS_ROOT_SUBVOLUME, self.__BTRFS_ROOT_SUBVOLUME_ID)
|
||||
self.__stage_delete_subvolume(s)
|
||||
@@ -436,7 +435,7 @@ class BtrfsSubvolumeModule(object):
|
||||
if self.__automount:
|
||||
self.__required_mounts.append(subvolume)
|
||||
else:
|
||||
raise BtrfsModuleException("The requested changes will require the subvolume '%s' to be mounted, but automount=False" % subvolume.path)
|
||||
raise BtrfsModuleException(f"The requested changes will require the subvolume '{subvolume.path}' to be mounted, but automount=False")
|
||||
|
||||
def __stage_create_subvolume(self, subvolume_path, intermediate=False):
|
||||
"""
|
||||
@@ -488,7 +487,7 @@ class BtrfsSubvolumeModule(object):
|
||||
elif op['action'] == self.__SET_DEFAULT_SUBVOLUME_OPERATION:
|
||||
self.__execute_set_default_subvolume(op)
|
||||
else:
|
||||
raise ValueError("Unknown operation type '%s'" % op['action'])
|
||||
raise ValueError(f"Unknown operation type '{op['action']}'")
|
||||
|
||||
def __execute_create_subvolume(self, operation):
|
||||
target_mounted_path = self.__filesystem.get_mountpath_as_child(operation['target'])
|
||||
@@ -521,7 +520,7 @@ class BtrfsSubvolumeModule(object):
|
||||
target_subvolume = self.__filesystem.get_subvolume_by_name(target)
|
||||
|
||||
if target_subvolume is None:
|
||||
raise BtrfsModuleException("Failed to find existing subvolume '%s'" % target)
|
||||
raise BtrfsModuleException(f"Failed to find existing subvolume '{target}'")
|
||||
else:
|
||||
target_id = target_subvolume.id
|
||||
|
||||
@@ -557,9 +556,9 @@ class BtrfsSubvolumeModule(object):
|
||||
# this check should be redundant
|
||||
if self.module.check_mode or not self.__automount:
|
||||
raise BtrfsModuleException("Unable to temporarily mount required subvolumes"
|
||||
"with automount=%s and check_mode=%s" % (self.__automount, self.module.check_mode))
|
||||
f" with automount={self.__automount} and check_mode={self.module.check_mode}")
|
||||
|
||||
cache_key = "%s:%d" % (filesystem.uuid, subvolid)
|
||||
cache_key = f"{filesystem.uuid}:{int(subvolid)}"
|
||||
# The subvolume was already mounted, so return the current path
|
||||
if cache_key in self.__temporary_mounts:
|
||||
return self.__temporary_mounts[cache_key]
|
||||
@@ -569,7 +568,7 @@ class BtrfsSubvolumeModule(object):
|
||||
self.__temporary_mounts[cache_key] = mountpoint
|
||||
|
||||
mount = self.module.get_bin_path("mount", required=True)
|
||||
command = [mount, "-o", "noatime,subvolid=%d" % subvolid, device, mountpoint]
|
||||
command = [mount, "-o", f"noatime,subvolid={int(subvolid)}", device, mountpoint]
|
||||
result = self.module.run_command(command, check_rc=True)
|
||||
|
||||
return mountpoint
|
||||
@@ -609,13 +608,13 @@ class BtrfsSubvolumeModule(object):
|
||||
elif action_type == self.__SET_DEFAULT_SUBVOLUME_OPERATION:
|
||||
return self.__format_set_default_subvolume_result(operation)
|
||||
else:
|
||||
raise ValueError("Unknown operation type '%s'" % operation['action'])
|
||||
raise ValueError(f"Unknown operation type '{operation['action']}'")
|
||||
|
||||
def __format_create_subvolume_result(self, operation):
|
||||
target = operation['target']
|
||||
target_subvolume = self.__filesystem.get_subvolume_by_name(target)
|
||||
target_id = target_subvolume.id if target_subvolume is not None else self.__UNKNOWN_SUBVOLUME_ID
|
||||
return "Created subvolume '%s' (%s)" % (target, target_id)
|
||||
return f"Created subvolume '{target}' ({target_id})"
|
||||
|
||||
def __format_create_snapshot_result(self, operation):
|
||||
source = operation['source']
|
||||
@@ -624,12 +623,12 @@ class BtrfsSubvolumeModule(object):
|
||||
target = operation['target']
|
||||
target_subvolume = self.__filesystem.get_subvolume_by_name(target)
|
||||
target_id = target_subvolume.id if target_subvolume is not None else self.__UNKNOWN_SUBVOLUME_ID
|
||||
return "Created snapshot '%s' (%s) from '%s' (%s)" % (target, target_id, source, source_id)
|
||||
return f"Created snapshot '{target}' ({target_id}) from '{source}' ({source_id})"
|
||||
|
||||
def __format_delete_subvolume_result(self, operation):
|
||||
target = operation['target']
|
||||
target_id = operation['target_id']
|
||||
return "Deleted subvolume '%s' (%s)" % (target, target_id)
|
||||
return f"Deleted subvolume '{target}' ({target_id})"
|
||||
|
||||
def __format_set_default_subvolume_result(self, operation):
|
||||
target = operation['target']
|
||||
@@ -638,7 +637,7 @@ class BtrfsSubvolumeModule(object):
|
||||
else:
|
||||
target_subvolume = self.__filesystem.get_subvolume_by_name(target)
|
||||
target_id = target_subvolume.id if target_subvolume is not None else self.__UNKNOWN_SUBVOLUME_ID
|
||||
return "Updated default subvolume to '%s' (%s)" % (target, target_id)
|
||||
return f"Updated default subvolume to '{target}' ({target_id})"
|
||||
|
||||
|
||||
def run_module():
|
||||
|
||||
@@ -159,7 +159,7 @@ def main():
|
||||
msg = module.params["msg"]
|
||||
notify = module.params["notify"]
|
||||
|
||||
URI = "https://%s.campfirenow.com" % subscription
|
||||
URI = f"https://{subscription}.campfirenow.com"
|
||||
NSTR = "<message><type>SoundMessage</type><body>%s</body></message>"
|
||||
MSTR = "<message><body>%s</body></message>"
|
||||
AGENT = "Ansible/1.2"
|
||||
@@ -168,7 +168,7 @@ def main():
|
||||
module.params['url_username'] = token
|
||||
module.params['url_password'] = 'X'
|
||||
|
||||
target_url = '%s/room/%s/speak.xml' % (URI, room)
|
||||
target_url = f'{URI}/room/{room}/speak.xml'
|
||||
headers = {'Content-Type': 'application/xml',
|
||||
'User-agent': AGENT}
|
||||
|
||||
@@ -176,16 +176,12 @@ def main():
|
||||
if notify:
|
||||
response, info = fetch_url(module, target_url, data=NSTR % html_escape(notify), headers=headers)
|
||||
if info['status'] not in [200, 201]:
|
||||
module.fail_json(msg="unable to send msg: '%s', campfire api"
|
||||
" returned error code: '%s'" %
|
||||
(notify, info['status']))
|
||||
module.fail_json(msg=f"unable to send msg: '{notify}', campfire api returned error code: '{info['status']}'")
|
||||
|
||||
# Send the message
|
||||
response, info = fetch_url(module, target_url, data=MSTR % html_escape(msg), headers=headers)
|
||||
if info['status'] not in [200, 201]:
|
||||
module.fail_json(msg="unable to send msg: '%s', campfire api"
|
||||
" returned error code: '%s'" %
|
||||
(msg, info['status']))
|
||||
module.fail_json(msg=f"unable to send msg: '{msg}', campfire api returned error code: '{info['status']}'")
|
||||
|
||||
module.exit_json(changed=True, room=room, msg=msg, notify=notify)
|
||||
|
||||
|
||||
@@ -116,13 +116,13 @@ class CapabilitiesModule(object):
|
||||
# If the file does not exist, the stderr will be (with rc == 0...):
|
||||
# '/foo (No such file or directory)'
|
||||
if rc != 0 or stderr != "":
|
||||
self.module.fail_json(msg="Unable to get capabilities of %s" % path, stdout=stdout.strip(), stderr=stderr)
|
||||
self.module.fail_json(msg=f"Unable to get capabilities of {path}", stdout=stdout.strip(), stderr=stderr)
|
||||
if stdout.strip() != path:
|
||||
if ' =' in stdout:
|
||||
# process output of an older version of libcap
|
||||
caps = stdout.split(' =')[1].strip().split()
|
||||
elif stdout.strip().endswith(")"): # '/foo (Error Message)'
|
||||
self.module.fail_json(msg="Unable to get capabilities of %s" % path, stdout=stdout.strip(), stderr=stderr)
|
||||
self.module.fail_json(msg=f"Unable to get capabilities of {path}", stdout=stdout.strip(), stderr=stderr)
|
||||
else:
|
||||
# otherwise, we have a newer version here
|
||||
# see original commit message of cap/v0.2.40-18-g177cd41 in libcap.git
|
||||
@@ -145,7 +145,7 @@ class CapabilitiesModule(object):
|
||||
cmd = [self.setcap_cmd, caps, path]
|
||||
rc, stdout, stderr = self.module.run_command(cmd)
|
||||
if rc != 0:
|
||||
self.module.fail_json(msg="Unable to set capabilities of %s" % path, stdout=stdout, stderr=stderr)
|
||||
self.module.fail_json(msg=f"Unable to set capabilities of {path}", stdout=stdout, stderr=stderr)
|
||||
else:
|
||||
return stdout
|
||||
|
||||
@@ -158,7 +158,7 @@ class CapabilitiesModule(object):
|
||||
i += 1
|
||||
except Exception:
|
||||
if op_required:
|
||||
self.module.fail_json(msg="Couldn't find operator (one of: %s)" % str(OPS))
|
||||
self.module.fail_json(msg=f"Couldn't find operator (one of: {OPS})")
|
||||
else:
|
||||
return (cap, None, None)
|
||||
op = cap[opind]
|
||||
|
||||
@@ -145,7 +145,7 @@ class Cargo(object):
|
||||
@path.setter
|
||||
def path(self, path):
|
||||
if path is not None and not os.path.isdir(path):
|
||||
self.module.fail_json(msg="Path %s is not a directory" % path)
|
||||
self.module.fail_json(msg=f"Path {path} is not a directory")
|
||||
self._path = path
|
||||
|
||||
def _exec(
|
||||
@@ -208,7 +208,7 @@ class Cargo(object):
|
||||
match = re.search(r'"(.+)"', data)
|
||||
if not match:
|
||||
self.module.fail_json(
|
||||
msg="No published version for package %s found" % name
|
||||
msg=f"No published version for package {name} found"
|
||||
)
|
||||
return match.group(1)
|
||||
|
||||
@@ -230,8 +230,7 @@ class Cargo(object):
|
||||
)
|
||||
if not package:
|
||||
self.module.fail_json(
|
||||
msg="Package %s not defined in source, found: %s"
|
||||
% (name, [x["name"] for x in manifest["packages"]])
|
||||
msg=f"Package {name} not defined in source, found: {[x['name'] for x in manifest['packages']]}"
|
||||
)
|
||||
return package["version"]
|
||||
|
||||
|
||||
@@ -105,7 +105,7 @@ def send(module, src, dest, msg, media, user_id, api_token, api_secret):
|
||||
Send the message
|
||||
"""
|
||||
AGENT = "Ansible"
|
||||
URI = "https://api.catapult.inetwork.com/v1/users/%s/messages" % user_id
|
||||
URI = f"https://api.catapult.inetwork.com/v1/users/{user_id}/messages"
|
||||
data = {'from': src, 'to': dest, 'text': msg}
|
||||
if media:
|
||||
data['media'] = media
|
||||
|
||||
@@ -169,7 +169,7 @@ def check_requests_dep(module):
|
||||
else:
|
||||
required_version = '2.0.0'
|
||||
if LooseVersion(requests.__version__) < LooseVersion(required_version):
|
||||
module.fail_json(msg="'requests' library version should be >= %s, found: %s." % (required_version, requests.__version__))
|
||||
module.fail_json(msg=f"'requests' library version should be >= {required_version}, found: {requests.__version__}.")
|
||||
|
||||
|
||||
def post_annotation(annotation, api_key):
|
||||
|
||||
@@ -129,7 +129,7 @@ def webex_msg(module):
|
||||
ansible = module.params
|
||||
|
||||
headers = {
|
||||
'Authorization': 'Bearer {0}'.format(ansible['personal_token']),
|
||||
'Authorization': f"Bearer {ansible['personal_token']}",
|
||||
'content-type': 'application/json'
|
||||
}
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ def gather_cloud_init_data_facts(module):
|
||||
filter = module.params.get('filter')
|
||||
if filter is None or filter == i:
|
||||
res['cloud_init_data_facts'][i] = dict()
|
||||
json_file = os.path.join(CLOUD_INIT_PATH, i + '.json')
|
||||
json_file = os.path.join(CLOUD_INIT_PATH, f"{i}.json")
|
||||
|
||||
if os.path.exists(json_file):
|
||||
with open(json_file, 'rb') as f:
|
||||
|
||||
@@ -498,15 +498,15 @@ class CloudflareAPI(object):
|
||||
|
||||
if self.type == 'SRV':
|
||||
if (self.proto is not None) and (not self.proto.startswith('_')):
|
||||
self.proto = '_{0}'.format(self.proto)
|
||||
self.proto = f'_{self.proto}'
|
||||
if (self.service is not None) and (not self.service.startswith('_')):
|
||||
self.service = '_{0}'.format(self.service)
|
||||
self.service = f'_{self.service}'
|
||||
|
||||
if self.type == 'TLSA':
|
||||
if (self.proto is not None) and (not self.proto.startswith('_')):
|
||||
self.proto = '_{0}'.format(self.proto)
|
||||
self.proto = f'_{self.proto}'
|
||||
if (self.port is not None):
|
||||
self.port = '_{0}'.format(self.port)
|
||||
self.port = f'_{self.port}'
|
||||
|
||||
if not self.record.endswith(self.zone):
|
||||
self.record = join_str('.', self.record, self.zone)
|
||||
@@ -518,7 +518,7 @@ class CloudflareAPI(object):
|
||||
def _cf_simple_api_call(self, api_call, method='GET', payload=None):
|
||||
if self.api_token:
|
||||
headers = {
|
||||
'Authorization': 'Bearer {0}'.format(self.api_token),
|
||||
'Authorization': f'Bearer {self.api_token}',
|
||||
'Content-Type': 'application/json',
|
||||
}
|
||||
else:
|
||||
@@ -532,7 +532,7 @@ class CloudflareAPI(object):
|
||||
try:
|
||||
data = json.dumps(payload)
|
||||
except Exception as e:
|
||||
self.module.fail_json(msg="Failed to encode payload as JSON: %s " % to_native(e))
|
||||
self.module.fail_json(msg=f"Failed to encode payload as JSON: {e} ")
|
||||
|
||||
resp, info = fetch_url(self.module,
|
||||
self.cf_api_endpoint + api_call,
|
||||
@@ -542,27 +542,27 @@ class CloudflareAPI(object):
|
||||
timeout=self.timeout)
|
||||
|
||||
if info['status'] not in [200, 304, 400, 401, 403, 429, 405, 415]:
|
||||
self.module.fail_json(msg="Failed API call {0}; got unexpected HTTP code {1}: {2}".format(api_call, info['status'], info.get('msg')))
|
||||
self.module.fail_json(msg=f"Failed API call {api_call}; got unexpected HTTP code {info['status']}: {info.get('msg')}")
|
||||
|
||||
error_msg = ''
|
||||
if info['status'] == 401:
|
||||
# Unauthorized
|
||||
error_msg = "API user does not have permission; Status: {0}; Method: {1}: Call: {2}".format(info['status'], method, api_call)
|
||||
error_msg = f"API user does not have permission; Status: {info['status']}; Method: {method}: Call: {api_call}"
|
||||
elif info['status'] == 403:
|
||||
# Forbidden
|
||||
error_msg = "API request not authenticated; Status: {0}; Method: {1}: Call: {2}".format(info['status'], method, api_call)
|
||||
error_msg = f"API request not authenticated; Status: {info['status']}; Method: {method}: Call: {api_call}"
|
||||
elif info['status'] == 429:
|
||||
# Too many requests
|
||||
error_msg = "API client is rate limited; Status: {0}; Method: {1}: Call: {2}".format(info['status'], method, api_call)
|
||||
error_msg = f"API client is rate limited; Status: {info['status']}; Method: {method}: Call: {api_call}"
|
||||
elif info['status'] == 405:
|
||||
# Method not allowed
|
||||
error_msg = "API incorrect HTTP method provided; Status: {0}; Method: {1}: Call: {2}".format(info['status'], method, api_call)
|
||||
error_msg = f"API incorrect HTTP method provided; Status: {info['status']}; Method: {method}: Call: {api_call}"
|
||||
elif info['status'] == 415:
|
||||
# Unsupported Media Type
|
||||
error_msg = "API request is not valid JSON; Status: {0}; Method: {1}: Call: {2}".format(info['status'], method, api_call)
|
||||
error_msg = f"API request is not valid JSON; Status: {info['status']}; Method: {method}: Call: {api_call}"
|
||||
elif info['status'] == 400:
|
||||
# Bad Request
|
||||
error_msg = "API bad request; Status: {0}; Method: {1}: Call: {2}".format(info['status'], method, api_call)
|
||||
error_msg = f"API bad request; Status: {info['status']}; Method: {method}: Call: {api_call}"
|
||||
|
||||
result = None
|
||||
try:
|
||||
@@ -580,23 +580,23 @@ class CloudflareAPI(object):
|
||||
try:
|
||||
result = json.loads(to_text(content, errors='surrogate_or_strict'))
|
||||
except (getattr(json, 'JSONDecodeError', ValueError)) as e:
|
||||
error_msg += "; Failed to parse API response with error {0}: {1}".format(to_native(e), content)
|
||||
error_msg += f"; Failed to parse API response with error {to_native(e)}: {content}"
|
||||
|
||||
# Without a valid/parsed JSON response no more error processing can be done
|
||||
if result is None:
|
||||
self.module.fail_json(msg=error_msg)
|
||||
|
||||
if 'success' not in result:
|
||||
error_msg += "; Unexpected error details: {0}".format(result.get('error'))
|
||||
error_msg += f"; Unexpected error details: {result.get('error')}"
|
||||
self.module.fail_json(msg=error_msg)
|
||||
|
||||
if not result['success']:
|
||||
error_msg += "; Error details: "
|
||||
for error in result['errors']:
|
||||
error_msg += "code: {0}, error: {1}; ".format(error['code'], error['message'])
|
||||
error_msg += f"code: {error['code']}, error: {error['message']}; "
|
||||
if 'error_chain' in error:
|
||||
for chain_error in error['error_chain']:
|
||||
error_msg += "code: {0}, error: {1}; ".format(chain_error['code'], chain_error['message'])
|
||||
error_msg += f"code: {chain_error['code']}, error: {chain_error['message']}; "
|
||||
self.module.fail_json(msg=error_msg)
|
||||
|
||||
return result, info['status']
|
||||
@@ -610,7 +610,7 @@ class CloudflareAPI(object):
|
||||
pagination = result['result_info']
|
||||
if pagination['total_pages'] > 1:
|
||||
next_page = int(pagination['page']) + 1
|
||||
parameters = ['page={0}'.format(next_page)]
|
||||
parameters = [f'page={next_page}']
|
||||
# strip "page" parameter from call parameters (if there are any)
|
||||
if '?' in api_call:
|
||||
raw_api_call, query = api_call.split('?', 1)
|
||||
@@ -618,7 +618,7 @@ class CloudflareAPI(object):
|
||||
else:
|
||||
raw_api_call = api_call
|
||||
while next_page <= pagination['total_pages']:
|
||||
raw_api_call += '?{0}'.format('&'.join(parameters))
|
||||
raw_api_call += f"?{'&'.join(parameters)}"
|
||||
result, status = self._cf_simple_api_call(raw_api_call, method, payload)
|
||||
data += result['result']
|
||||
next_page += 1
|
||||
@@ -631,10 +631,10 @@ class CloudflareAPI(object):
|
||||
|
||||
zones = self.get_zones(zone)
|
||||
if len(zones) > 1:
|
||||
self.module.fail_json(msg="More than one zone matches {0}".format(zone))
|
||||
self.module.fail_json(msg=f"More than one zone matches {zone}")
|
||||
|
||||
if len(zones) < 1:
|
||||
self.module.fail_json(msg="No zone found with name {0}".format(zone))
|
||||
self.module.fail_json(msg=f"No zone found with name {zone}")
|
||||
|
||||
return zones[0]['id']
|
||||
|
||||
@@ -643,8 +643,8 @@ class CloudflareAPI(object):
|
||||
name = self.zone
|
||||
param = ''
|
||||
if name:
|
||||
param = '?{0}'.format(urlencode({'name': name}))
|
||||
zones, status = self._cf_api_call('/zones{0}'.format(param))
|
||||
param = f"?{urlencode({'name': name})}"
|
||||
zones, status = self._cf_api_call(f'/zones{param}')
|
||||
return zones
|
||||
|
||||
def get_dns_records(self, zone_name=None, type=None, record=None, value=''):
|
||||
@@ -660,7 +660,7 @@ class CloudflareAPI(object):
|
||||
value = self.value
|
||||
|
||||
zone_id = self._get_zone_id()
|
||||
api_call = '/zones/{0}/dns_records'.format(zone_id)
|
||||
api_call = f'/zones/{zone_id}/dns_records'
|
||||
query = {}
|
||||
if type:
|
||||
query['type'] = type
|
||||
@@ -669,7 +669,7 @@ class CloudflareAPI(object):
|
||||
if value:
|
||||
query['content'] = value
|
||||
if query:
|
||||
api_call += '?{0}'.format(urlencode(query))
|
||||
api_call += f'?{urlencode(query)}'
|
||||
|
||||
records, status = self._cf_api_call(api_call)
|
||||
return records
|
||||
@@ -705,11 +705,11 @@ class CloudflareAPI(object):
|
||||
if not ((rr['type'] == self.type) and (rr['name'] == search_record) and (rr['content'] == content)):
|
||||
self.changed = True
|
||||
if not self.module.check_mode:
|
||||
result, info = self._cf_api_call('/zones/{0}/dns_records/{1}'.format(zone_id, rr['id']), 'DELETE')
|
||||
result, info = self._cf_api_call(f"/zones/{zone_id}/dns_records/{rr['id']}", 'DELETE')
|
||||
else:
|
||||
self.changed = True
|
||||
if not self.module.check_mode:
|
||||
result, info = self._cf_api_call('/zones/{0}/dns_records/{1}'.format(zone_id, rr['id']), 'DELETE')
|
||||
result, info = self._cf_api_call(f"/zones/{zone_id}/dns_records/{rr['id']}", 'DELETE')
|
||||
return self.changed
|
||||
|
||||
def ensure_dns_record(self):
|
||||
@@ -880,7 +880,7 @@ class CloudflareAPI(object):
|
||||
if self.module.check_mode:
|
||||
result = new_record
|
||||
else:
|
||||
result, info = self._cf_api_call('/zones/{0}/dns_records/{1}'.format(zone_id, records[0]['id']), 'PUT', new_record)
|
||||
result, info = self._cf_api_call(f"/zones/{zone_id}/dns_records/{records[0]['id']}", 'PUT', new_record)
|
||||
self.changed = True
|
||||
return result, self.changed
|
||||
else:
|
||||
@@ -888,7 +888,7 @@ class CloudflareAPI(object):
|
||||
if self.module.check_mode:
|
||||
result = new_record
|
||||
else:
|
||||
result, info = self._cf_api_call('/zones/{0}/dns_records'.format(zone_id), 'POST', new_record)
|
||||
result, info = self._cf_api_call(f'/zones/{zone_id}/dns_records', 'POST', new_record)
|
||||
self.changed = True
|
||||
return result, self.changed
|
||||
|
||||
|
||||
@@ -132,13 +132,13 @@ def main():
|
||||
except xmlrpc_client.Fault as e:
|
||||
module.fail_json(msg="Failed to log in to Cobbler '{url}' as '{username}'. {error}".format(url=url, error=to_text(e), **module.params))
|
||||
except Exception as e:
|
||||
module.fail_json(msg="Connection to '{url}' failed. {error}".format(url=url, error=to_text(e)))
|
||||
module.fail_json(msg=f"Connection to '{url}' failed. {e}")
|
||||
|
||||
if not module.check_mode:
|
||||
try:
|
||||
conn.sync(token)
|
||||
except Exception as e:
|
||||
module.fail_json(msg="Failed to sync Cobbler. {error}".format(error=to_text(e)))
|
||||
module.fail_json(msg=f"Failed to sync Cobbler. {e}")
|
||||
|
||||
elapsed = now() - start
|
||||
module.exit_json(elapsed=elapsed.seconds, **result)
|
||||
|
||||
@@ -254,7 +254,7 @@ def main():
|
||||
except xmlrpc_client.Fault as e:
|
||||
module.fail_json(msg="Failed to log in to Cobbler '{url}' as '{username}'. {error}".format(url=url, error=to_text(e), **module.params))
|
||||
except Exception as e:
|
||||
module.fail_json(msg="Connection to '{url}' failed. {error}".format(url=url, error=to_text(e), **module.params))
|
||||
module.fail_json(msg=f"Connection to '{url}' failed. {e}")
|
||||
|
||||
system = getsystem(conn, name, token)
|
||||
# result['system'] = system
|
||||
@@ -282,13 +282,13 @@ def main():
|
||||
|
||||
for key, value in module.params['properties'].items():
|
||||
if key not in system:
|
||||
module.warn("Property '{0}' is not a valid system property.".format(key))
|
||||
module.warn(f"Property '{key}' is not a valid system property.")
|
||||
if system[key] != value:
|
||||
try:
|
||||
conn.modify_system(system_id, key, value, token)
|
||||
result['changed'] = True
|
||||
except Exception as e:
|
||||
module.fail_json(msg="Unable to change '{0}' to '{1}'. {2}".format(key, value, e))
|
||||
module.fail_json(msg=f"Unable to change '{key}' to '{value}'. {e}")
|
||||
|
||||
else:
|
||||
# Create a new entry
|
||||
@@ -301,7 +301,7 @@ def main():
|
||||
try:
|
||||
conn.modify_system(system_id, key, value, token)
|
||||
except Exception as e:
|
||||
module.fail_json(msg="Unable to change '{0}' to '{1}'. {2}".format(key, value, e))
|
||||
module.fail_json(msg=f"Unable to change '{key}' to '{value}'. {e}")
|
||||
|
||||
# Add interface properties
|
||||
interface_properties = dict()
|
||||
@@ -311,10 +311,10 @@ def main():
|
||||
if key == 'name':
|
||||
continue
|
||||
if key not in IFPROPS_MAPPING:
|
||||
module.warn("Property '{0}' is not a valid system property.".format(key))
|
||||
module.warn(f"Property '{key}' is not a valid system property.")
|
||||
if not system or system['interfaces'][device][IFPROPS_MAPPING[key]] != value:
|
||||
result['changed'] = True
|
||||
interface_properties['{0}-{1}'.format(key, device)] = value
|
||||
interface_properties[f'{key}-{device}'] = value
|
||||
|
||||
if result['changed'] is True:
|
||||
conn.modify_system(system_id, "modify_interface", interface_properties, token)
|
||||
@@ -334,7 +334,7 @@ def main():
|
||||
try:
|
||||
conn.sync(token)
|
||||
except Exception as e:
|
||||
module.fail_json(msg="Failed to sync Cobbler. {0}".format(to_text(e)))
|
||||
module.fail_json(msg=f"Failed to sync Cobbler. {e}")
|
||||
|
||||
if state in ('absent', 'present'):
|
||||
result['system'] = getsystem(conn, name, token)
|
||||
|
||||
@@ -238,7 +238,7 @@ def main():
|
||||
|
||||
for option in default_options:
|
||||
if option in available_options:
|
||||
option = "--%s" % option
|
||||
option = f"--{option}"
|
||||
options.append(option)
|
||||
|
||||
option_params = {
|
||||
@@ -255,14 +255,14 @@ def main():
|
||||
|
||||
for param, option in option_params.items():
|
||||
if module.params.get(param) and option in available_options:
|
||||
option = "--%s" % option
|
||||
option = f"--{option}"
|
||||
options.append(option)
|
||||
|
||||
if module.check_mode:
|
||||
if 'dry-run' in available_options:
|
||||
options.append('--dry-run')
|
||||
else:
|
||||
module.exit_json(skipped=True, msg="command '%s' does not support check mode, skipping" % command)
|
||||
module.exit_json(skipped=True, msg=f"command '{command}' does not support check mode, skipping")
|
||||
|
||||
rc, out, err = composer_command(module, [command], arguments, options)
|
||||
|
||||
|
||||
@@ -232,7 +232,7 @@ try:
|
||||
if token:
|
||||
params['token'] = token
|
||||
return self.agent.http.put(consul.base.CB.bool(),
|
||||
'/v1/agent/service/deregister/%s' % service_id,
|
||||
f'/v1/agent/service/deregister/{service_id}',
|
||||
params=params)
|
||||
|
||||
python_consul_installed = True
|
||||
@@ -501,7 +501,7 @@ class ConsulCheck(object):
|
||||
if duration:
|
||||
duration_units = ['ns', 'us', 'ms', 's', 'm', 'h']
|
||||
if not any(duration.endswith(suffix) for suffix in duration_units):
|
||||
duration = "{0}s".format(duration)
|
||||
duration = f"{duration}s"
|
||||
return duration
|
||||
|
||||
def register(self, consul_api):
|
||||
@@ -603,7 +603,7 @@ def main():
|
||||
except SystemExit:
|
||||
raise
|
||||
except ConnectionError as e:
|
||||
module.fail_json(msg='Could not connect to consul agent at %s:%s, error was %s' % (p['host'], p['port'], str(e)))
|
||||
module.fail_json(msg=f"Could not connect to consul agent at {p['host']}:{p['port']}, error was {e}")
|
||||
except Exception as e:
|
||||
module.fail_json(msg=str(e))
|
||||
|
||||
|
||||
@@ -202,9 +202,9 @@ class ConsulAgentCheckModule(_ConsulModule):
|
||||
if operation == OPERATION_READ:
|
||||
return "agent/checks"
|
||||
if operation in [OPERATION_CREATE, OPERATION_UPDATE]:
|
||||
return "/".join([self.api_endpoint, "register"])
|
||||
return f"{self.api_endpoint}/register"
|
||||
if operation == OPERATION_DELETE:
|
||||
return "/".join([self.api_endpoint, "deregister", identifier])
|
||||
return f"{self.api_endpoint}/deregister/{identifier}"
|
||||
|
||||
return super(ConsulAgentCheckModule, self).endpoint_url(operation, identifier)
|
||||
|
||||
|
||||
@@ -230,9 +230,9 @@ class ConsulAgentServiceModule(_ConsulModule):
|
||||
|
||||
def endpoint_url(self, operation, identifier=None):
|
||||
if operation in [OPERATION_CREATE, OPERATION_UPDATE]:
|
||||
return "/".join([self.api_endpoint, "register"])
|
||||
return f"{self.api_endpoint}/register"
|
||||
if operation == OPERATION_DELETE:
|
||||
return "/".join([self.api_endpoint, "deregister", identifier])
|
||||
return f"{self.api_endpoint}/deregister/{identifier}"
|
||||
|
||||
return super(ConsulAgentServiceModule, self).endpoint_url(operation, identifier)
|
||||
|
||||
|
||||
@@ -153,12 +153,12 @@ def normalize_ttl(ttl):
|
||||
new_ttl = ""
|
||||
hours, remainder = divmod(ttl, 3600)
|
||||
if hours:
|
||||
new_ttl += "{0}h".format(hours)
|
||||
new_ttl += f"{hours}h"
|
||||
minutes, seconds = divmod(remainder, 60)
|
||||
if minutes:
|
||||
new_ttl += "{0}m".format(minutes)
|
||||
new_ttl += f"{minutes}m"
|
||||
if seconds:
|
||||
new_ttl += "{0}s".format(seconds)
|
||||
new_ttl += f"{seconds}s"
|
||||
return new_ttl
|
||||
|
||||
|
||||
|
||||
@@ -125,12 +125,12 @@ class ConsulBindingRuleModule(_ConsulModule):
|
||||
unique_identifiers = ["id"]
|
||||
|
||||
def read_object(self):
|
||||
url = "acl/binding-rules?authmethod={0}".format(self.params["auth_method"])
|
||||
url = f"acl/binding-rules?authmethod={self.params['auth_method']}"
|
||||
try:
|
||||
results = self.get(url)
|
||||
for result in results:
|
||||
if result.get("Description").startswith(
|
||||
"{0}: ".format(self.params["name"])
|
||||
f"{self.params['name']}: "
|
||||
):
|
||||
return result
|
||||
except RequestError as e:
|
||||
@@ -149,7 +149,7 @@ class ConsulBindingRuleModule(_ConsulModule):
|
||||
final = super(ConsulBindingRuleModule, self).prepare_object(existing, obj)
|
||||
name = self.params["name"]
|
||||
description = final.pop("Description", "").split(": ", 1)[-1]
|
||||
final["Description"] = "{0}: {1}".format(name, description)
|
||||
final["Description"] = f"{name}: {description}"
|
||||
return final
|
||||
|
||||
|
||||
|
||||
@@ -188,7 +188,7 @@ def execute(module):
|
||||
elif state == 'absent':
|
||||
remove_value(module)
|
||||
else:
|
||||
module.exit_json(msg="Unsupported state: %s" % (state, ))
|
||||
module.exit_json(msg=f"Unsupported state: {state}")
|
||||
|
||||
|
||||
def lock(module, state):
|
||||
@@ -201,8 +201,7 @@ def lock(module, state):
|
||||
|
||||
if not session:
|
||||
module.fail(
|
||||
msg='%s of lock for %s requested but no session supplied' %
|
||||
(state, key))
|
||||
msg=f'{state} of lock for {key} requested but no session supplied')
|
||||
|
||||
index, changed = _has_value_changed(consul_api, key, value)
|
||||
|
||||
@@ -239,7 +238,7 @@ def set_value(module):
|
||||
value = module.params.get('value')
|
||||
|
||||
if value is NOT_SET:
|
||||
raise AssertionError('Cannot set value of "%s" to `NOT_SET`' % key)
|
||||
raise AssertionError(f'Cannot set value of "{key}" to `NOT_SET`')
|
||||
|
||||
index, changed = _has_value_changed(consul_api, key, value)
|
||||
|
||||
@@ -320,8 +319,7 @@ def main():
|
||||
try:
|
||||
execute(module)
|
||||
except ConnectionError as e:
|
||||
module.fail_json(msg='Could not connect to consul agent at %s:%s, error was %s' % (
|
||||
module.params.get('host'), module.params.get('port'), e))
|
||||
module.fail_json(msg=f"Could not connect to consul agent at {module.params.get('host')}:{module.params.get('port')}, error was {e}")
|
||||
except Exception as e:
|
||||
module.fail_json(msg=str(e))
|
||||
|
||||
|
||||
@@ -178,7 +178,7 @@ def lookup_sessions(module, consul_module):
|
||||
sessions=session_by_id)
|
||||
|
||||
except Exception as e:
|
||||
module.fail_json(msg="Could not retrieve session info %s" % e)
|
||||
module.fail_json(msg=f"Could not retrieve session info {e}")
|
||||
|
||||
|
||||
def create_session(consul_module, name, behavior, ttl, node,
|
||||
@@ -191,7 +191,7 @@ def create_session(consul_module, name, behavior, ttl, node,
|
||||
"Behavior": behavior,
|
||||
}
|
||||
if ttl is not None:
|
||||
create_data["TTL"] = "%ss" % str(ttl) # TTL is in seconds
|
||||
create_data["TTL"] = f"{ttl}s" # TTL is in seconds
|
||||
create_session_response_dict = consul_module.put(
|
||||
'session/create',
|
||||
params={
|
||||
@@ -229,7 +229,7 @@ def update_session(module, consul_module):
|
||||
checks=checks,
|
||||
node=node)
|
||||
except Exception as e:
|
||||
module.fail_json(msg="Could not create/update session %s" % e)
|
||||
module.fail_json(msg=f"Could not create/update session {e}")
|
||||
|
||||
|
||||
def destroy_session(consul_module, session_id):
|
||||
@@ -245,8 +245,7 @@ def remove_session(module, consul_module):
|
||||
module.exit_json(changed=True,
|
||||
session_id=session_id)
|
||||
except Exception as e:
|
||||
module.fail_json(msg="Could not remove session with id '%s' %s" % (
|
||||
session_id, e))
|
||||
module.fail_json(msg=f"Could not remove session with id '{session_id}' {e}")
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
@@ -214,9 +214,7 @@ class CoprModule(object):
|
||||
Info about a repository and status code of the get request.
|
||||
"""
|
||||
repo_info = None
|
||||
url = "{0}://{1}/coprs/{2}/repo/{3}/dnf.repo?arch={4}".format(
|
||||
self.protocol, self.host, self.name, chroot, self.arch
|
||||
)
|
||||
url = f"{self.protocol}://{self.host}/coprs/{self.name}/repo/{chroot}/dnf.repo?arch={self.arch}"
|
||||
try:
|
||||
r = open_url(url)
|
||||
status_code = r.getcode()
|
||||
@@ -245,7 +243,7 @@ class CoprModule(object):
|
||||
version = "8"
|
||||
elif version == "stream-9":
|
||||
version = "9"
|
||||
chroot = "epel-{0}".format(version)
|
||||
chroot = f"epel-{version}"
|
||||
distribution = "epel"
|
||||
else:
|
||||
if str(status_code) != "404":
|
||||
@@ -254,7 +252,7 @@ class CoprModule(object):
|
||||
)
|
||||
else:
|
||||
self.raise_exception(
|
||||
"Chroot {0} does not exist in {1}".format(self.chroot, self.name)
|
||||
f"Chroot {self.chroot} does not exist in {self.name}"
|
||||
)
|
||||
|
||||
def _enable_repo(self, repo_filename_path, repo_content=None):
|
||||
@@ -272,23 +270,23 @@ class CoprModule(object):
|
||||
repo_content = self._download_repo_info()
|
||||
if self.ansible_module.params["includepkgs"]:
|
||||
includepkgs_value = ','.join(self.ansible_module.params['includepkgs'])
|
||||
repo_content = repo_content.rstrip('\n') + '\nincludepkgs={0}\n'.format(includepkgs_value)
|
||||
repo_content_strip = repo_content.rstrip('\n') # Python 3.11 does not allow backslash chars within f-string expressions
|
||||
repo_content = f"{repo_content_strip}\nincludepkgs={includepkgs_value}\n"
|
||||
if self.ansible_module.params["excludepkgs"]:
|
||||
excludepkgs_value = ','.join(self.ansible_module.params['excludepkgs'])
|
||||
repo_content = repo_content.rstrip('\n') + '\nexcludepkgs={0}\n'.format(excludepkgs_value)
|
||||
repo_content_strip = repo_content.rstrip('\n') # Python 3.11 does not allow backslash chars within f-string expressions
|
||||
repo_content = f"{repo_content_strip}\nexcludepkgs={excludepkgs_value}\n"
|
||||
if self._compare_repo_content(repo_filename_path, repo_content):
|
||||
return False
|
||||
if not self.check_mode:
|
||||
with open(repo_filename_path, "w+") as file:
|
||||
file.write(repo_content)
|
||||
os.chmod(
|
||||
repo_filename_path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH,
|
||||
)
|
||||
os.chmod(repo_filename_path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH)
|
||||
return True
|
||||
|
||||
def _get_repo_with_old_id(self):
|
||||
"""Try to get a repository with the old name."""
|
||||
repo_id = "{0}-{1}".format(self.user, self.project)
|
||||
repo_id = f"{self.user}-{self.project}"
|
||||
if repo_id in self.base.repos and "_copr" in self.base.repos[repo_id].repofile:
|
||||
file_name = self.base.repos[repo_id].repofile.split("/")[-1]
|
||||
try:
|
||||
@@ -325,7 +323,7 @@ class CoprModule(object):
|
||||
Returns:
|
||||
The repository that a user wants to enable, disable, or remove.
|
||||
"""
|
||||
repo_id = "copr:{0}:{1}:{2}".format(self.host, self.user, self.project)
|
||||
repo_id = f"copr:{self.host}:{self.user}:{self.project}"
|
||||
if repo_id not in self.base.repos:
|
||||
if self._get_repo_with_old_id() is None:
|
||||
return None
|
||||
@@ -347,7 +345,7 @@ class CoprModule(object):
|
||||
if self.check_mode:
|
||||
return True
|
||||
self._enable_repo(repo_filename_path)
|
||||
self._read_all_repos("copr:{0}:{1}:{2}".format(self.host, self.user, self.project))
|
||||
self._read_all_repos(f"copr:{self.host}:{self.user}:{self.project}")
|
||||
repo = self._get_copr_repo()
|
||||
for repo_id in repo.cfg.sections():
|
||||
repo_content_api = self._download_repo_info()
|
||||
@@ -420,12 +418,10 @@ class CoprModule(object):
|
||||
"""
|
||||
self.need_root()
|
||||
state = dict()
|
||||
repo_filename = "_copr:{0}:{1}:{2}.repo".format(self.host, self.user, self.project)
|
||||
state["repo"] = "{0}/{1}/{2}".format(self.host, self.user, self.project)
|
||||
repo_filename = f"_copr:{self.host}:{self.user}:{self.project}.repo"
|
||||
state["repo"] = f"{self.host}/{self.user}/{self.project}"
|
||||
state["repo_filename"] = repo_filename
|
||||
repo_filename_path = "{0}/_copr:{1}:{2}:{3}.repo".format(
|
||||
self.base.conf.get_reposdir, self.host, self.user, self.project
|
||||
)
|
||||
repo_filename_path = f"{self.base.conf.get_reposdir}/_copr:{self.host}:{self.user}:{self.project}.repo"
|
||||
if self.state == "enabled":
|
||||
enabled = self._enable_repo(repo_filename_path)
|
||||
state["msg"] = "enabled"
|
||||
@@ -466,7 +462,7 @@ class CoprModule(object):
|
||||
"""
|
||||
(distribution, version, codename) = distro.linux_distribution(full_distribution_name=False)
|
||||
base = CoprModule.get_base()
|
||||
return "{0}-{1}-{2}".format(distribution, version, base.conf.arch)
|
||||
return f"{distribution}-{version}-{base.conf.arch}"
|
||||
|
||||
@staticmethod
|
||||
def _sanitize_username(user):
|
||||
@@ -479,7 +475,7 @@ class CoprModule(object):
|
||||
Modified user name if it is a group name with @.
|
||||
"""
|
||||
if user[0] == "@":
|
||||
return "group_{0}".format(user[1:])
|
||||
return f"group_{user[1:]}"
|
||||
return user
|
||||
|
||||
|
||||
|
||||
@@ -223,7 +223,7 @@ class CPANMinus(ModuleHelper):
|
||||
line = out.split('\n')[0]
|
||||
match = re.search(r"version\s+([\d\.]+)\s+", line)
|
||||
if not match:
|
||||
self.do_raise("Failed to determine version number. First line of output: {0}".format(line))
|
||||
self.do_raise(f"Failed to determine version number. First line of output: {line}")
|
||||
self.vars.cpanm_version = match.group(1)
|
||||
|
||||
def _is_package_installed(self, name, locallib, version):
|
||||
@@ -232,12 +232,12 @@ class CPANMinus(ModuleHelper):
|
||||
|
||||
if name is None or name.endswith('.tar.gz'):
|
||||
return False
|
||||
version = "" if version is None else " " + version
|
||||
version = "" if version is None else f" {version}"
|
||||
|
||||
env = {"PERL5LIB": "%s/lib/perl5" % locallib} if locallib else {}
|
||||
env = {"PERL5LIB": f"{locallib}/lib/perl5"} if locallib else {}
|
||||
runner = CmdRunner(self.module, ["perl", "-le"], {"mod": cmd_runner_fmt.as_list()}, check_rc=False, environ_update=env)
|
||||
with runner("mod", output_process=process) as ctx:
|
||||
return ctx.run(mod='use %s%s;' % (name, version))
|
||||
return ctx.run(mod=f'use {name}{version};')
|
||||
|
||||
def sanitize_pkg_spec_version(self, pkg_spec, version):
|
||||
if version is None:
|
||||
@@ -249,9 +249,9 @@ class CPANMinus(ModuleHelper):
|
||||
if pkg_spec.endswith('.git'):
|
||||
if version.startswith('~'):
|
||||
self.do_raise(msg="operator '~' not allowed in version parameter when installing from git repository")
|
||||
version = version if version.startswith('@') else '@' + version
|
||||
version = version if version.startswith('@') else f"@{version}"
|
||||
elif version[0] not in ('@', '~'):
|
||||
version = '~' + version
|
||||
version = f"~{version}"
|
||||
return pkg_spec + version
|
||||
|
||||
def __run__(self):
|
||||
|
||||
@@ -135,7 +135,7 @@ class CronVar(object):
|
||||
self.cron_file = os.path.join('/etc/cron.d', cron_file)
|
||||
parent_dir = os.path.dirname(self.cron_file)
|
||||
if parent_dir and not os.path.isdir(parent_dir):
|
||||
module.fail_json(msg="Parent directory '{}' does not exist for cron_file: '{}'".format(parent_dir, cron_file))
|
||||
module.fail_json(msg=f"Parent directory '{parent_dir}' does not exist for cron_file: '{cron_file}'")
|
||||
else:
|
||||
self.cron_file = None
|
||||
|
||||
@@ -170,7 +170,7 @@ class CronVar(object):
|
||||
count += 1
|
||||
|
||||
def log_message(self, message):
|
||||
self.module.debug('ansible: "%s"' % message)
|
||||
self.module.debug(f'ansible: "{message}"')
|
||||
|
||||
def write(self, backup_file=None):
|
||||
"""
|
||||
@@ -244,18 +244,18 @@ class CronVar(object):
|
||||
def add_variable(self, name, value, insertbefore, insertafter):
|
||||
if insertbefore is None and insertafter is None:
|
||||
# Add the variable to the top of the file.
|
||||
self.lines.insert(0, "%s=%s" % (name, value))
|
||||
self.lines.insert(0, f"{name}={value}")
|
||||
else:
|
||||
newlines = []
|
||||
for l in self.lines:
|
||||
try:
|
||||
varname, dummy = self.parse_for_var(l) # Throws if not a var line
|
||||
if varname == insertbefore:
|
||||
newlines.append("%s=%s" % (name, value))
|
||||
newlines.append(f"{name}={value}")
|
||||
newlines.append(l)
|
||||
elif varname == insertafter:
|
||||
newlines.append(l)
|
||||
newlines.append("%s=%s" % (name, value))
|
||||
newlines.append(f"{name}={value}")
|
||||
else:
|
||||
raise CronVarError # Append.
|
||||
except CronVarError:
|
||||
@@ -274,7 +274,7 @@ class CronVar(object):
|
||||
if varname != name:
|
||||
raise CronVarError # Append.
|
||||
if not remove:
|
||||
newlines.append("%s=%s" % (name, value))
|
||||
newlines.append(f"{name}={value}")
|
||||
except CronVarError:
|
||||
newlines.append(l)
|
||||
|
||||
@@ -297,14 +297,14 @@ class CronVar(object):
|
||||
|
||||
if self.user:
|
||||
if platform.system() == 'SunOS':
|
||||
return "su %s -c '%s -l'" % (shlex_quote(self.user), shlex_quote(self.cron_cmd))
|
||||
return f"su {shlex_quote(self.user)} -c '{shlex_quote(self.cron_cmd)} -l'"
|
||||
elif platform.system() == 'AIX':
|
||||
return "%s -l %s" % (shlex_quote(self.cron_cmd), shlex_quote(self.user))
|
||||
return f"{shlex_quote(self.cron_cmd)} -l {shlex_quote(self.user)}"
|
||||
elif platform.system() == 'HP-UX':
|
||||
return "%s %s %s" % (self.cron_cmd, '-l', shlex_quote(self.user))
|
||||
return f"{self.cron_cmd} -l {shlex_quote(self.user)}"
|
||||
elif pwd.getpwuid(os.getuid())[0] != self.user:
|
||||
user = '-u %s' % shlex_quote(self.user)
|
||||
return "%s %s %s" % (self.cron_cmd, user, '-l')
|
||||
user = f'-u {shlex_quote(self.user)}'
|
||||
return f"{self.cron_cmd} {user} -l"
|
||||
|
||||
def _write_execute(self, path):
|
||||
"""
|
||||
@@ -313,11 +313,10 @@ class CronVar(object):
|
||||
user = ''
|
||||
if self.user:
|
||||
if platform.system() in ['SunOS', 'HP-UX', 'AIX']:
|
||||
return "chown %s %s ; su '%s' -c '%s %s'" % (
|
||||
shlex_quote(self.user), shlex_quote(path), shlex_quote(self.user), self.cron_cmd, shlex_quote(path))
|
||||
return f"chown {shlex_quote(self.user)} {shlex_quote(path)} ; su '{shlex_quote(self.user)}' -c '{self.cron_cmd} {shlex_quote(path)}'"
|
||||
elif pwd.getpwuid(os.getuid())[0] != self.user:
|
||||
user = '-u %s' % shlex_quote(self.user)
|
||||
return "%s %s %s" % (self.cron_cmd, user, shlex_quote(path))
|
||||
user = f'-u {shlex_quote(self.user)}'
|
||||
return f"{self.cron_cmd} {user} {shlex_quote(path)}"
|
||||
|
||||
|
||||
# ==================================================
|
||||
@@ -369,7 +368,7 @@ def main():
|
||||
os.umask(int('022', 8))
|
||||
cronvar = CronVar(module, user, cron_file)
|
||||
|
||||
module.debug('cronvar instantiated - name: "%s"' % name)
|
||||
module.debug(f'cronvar instantiated - name: "{name}"')
|
||||
|
||||
# --- user input validation ---
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ import os
|
||||
import traceback
|
||||
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
from ansible.module_utils.common.text.converters import to_bytes, to_native
|
||||
from ansible.module_utils.common.text.converters import to_bytes
|
||||
|
||||
|
||||
def main():
|
||||
@@ -115,7 +115,7 @@ def main():
|
||||
**module.params)
|
||||
|
||||
if 'opts' in state and (backing_device is not None or password is not None):
|
||||
module.fail_json(msg="cannot update 'backing_device' or 'password' when state=%s" % state,
|
||||
module.fail_json(msg=f"cannot update 'backing_device' or 'password' when state={state}",
|
||||
**module.params)
|
||||
|
||||
for arg_name, arg in (('name', name),
|
||||
@@ -123,15 +123,14 @@ def main():
|
||||
('password', password),
|
||||
('opts', opts)):
|
||||
if arg is not None and (' ' in arg or '\t' in arg or arg == ''):
|
||||
module.fail_json(msg="invalid '%s': contains white space or is empty" % arg_name,
|
||||
module.fail_json(msg=f"invalid '{arg_name}': contains white space or is empty",
|
||||
**module.params)
|
||||
|
||||
try:
|
||||
crypttab = Crypttab(path)
|
||||
existing_line = crypttab.match(name)
|
||||
except Exception as e:
|
||||
module.fail_json(msg="failed to open and parse crypttab file: %s" % to_native(e),
|
||||
exception=traceback.format_exc(), **module.params)
|
||||
module.fail_json(msg=f"failed to open and parse crypttab file: {e}", exception=traceback.format_exc(), **module.params)
|
||||
|
||||
if 'present' in state and existing_line is None and backing_device is None:
|
||||
module.fail_json(msg="'backing_device' required to add a new entry",
|
||||
@@ -349,7 +348,7 @@ class Options(dict):
|
||||
if v is None:
|
||||
ret.append(k)
|
||||
else:
|
||||
ret.append('%s=%s' % (k, v))
|
||||
ret.append(f'{k}={v}')
|
||||
return ','.join(ret)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user