PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/states/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/states/boto_sqs.py |
""" Manage SQS Queues .. versionadded:: 2014.7.0 Create and destroy SQS queues. Be aware that this interacts with Amazon's services, and so may incur charges. This module uses ``boto``, which can be installed via package, or pip. This module accepts explicit SQS credentials but can also utilize IAM roles assigned to the instance through Instance Profiles. Dynamic credentials are then automatically obtained from AWS API and no further configuration is necessary. More information available `here <http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html>`_. If IAM roles are not used you need to specify them either in a pillar file or in the minion's config file: .. code-block:: yaml sqs.keyid: GKTADJGHEIQSXMKKRBJ08H sqs.key: askdjghsdfjkghWupUjasdflkdfklgjsdfjajkghs It's also possible to specify ``key``, ``keyid`` and ``region`` via a profile, either passed in as a dict, or as a string to pull from pillars or minion config: .. code-block:: yaml myprofile: keyid: GKTADJGHEIQSXMKKRBJ08H key: askdjghsdfjkghWupUjasdflkdfklgjsdfjajkghs region: us-east-1 .. code-block:: yaml myqueue: boto_sqs.present: - region: us-east-1 - keyid: GKTADJGHEIQSXMKKRBJ08H - key: askdjghsdfjkghWupUjasdflkdfklgjsdfjajkghs - attributes: ReceiveMessageWaitTimeSeconds: 20 # Using a profile from pillars myqueue: boto_sqs.present: - region: us-east-1 - profile: mysqsprofile # Passing in a profile myqueue: boto_sqs.present: - region: us-east-1 - profile: keyid: GKTADJGHEIQSXMKKRBJ08H key: askdjghsdfjkghWupUjasdflkdfklgjsdfjajkghs """ import difflib import logging import salt.utils.json log = logging.getLogger(__name__) def __virtual__(): """ Only load if boto is available. """ if "boto_sqs.exists" in __salt__: return "boto_sqs" return (False, "boto_sqs module could not be loaded") def present( name, attributes=None, region=None, key=None, keyid=None, profile=None, ): """ Ensure the SQS queue exists. name Name of the SQS queue. attributes A dict of key/value SQS attributes. region Region to connect to. key Secret key to be used. keyid Access key to be used. profile A dict with region, key and keyid, or a pillar key (string) that contains a dict with region, key and keyid. """ ret = { "name": name, "result": True, "comment": [], "changes": {}, } r = __salt__["boto_sqs.exists"]( name, region=region, key=key, keyid=keyid, profile=profile, ) if "error" in r: ret["result"] = False ret["comment"].append(r["error"]) return ret if r["result"]: ret["comment"].append(f"SQS queue {name} present.") else: if __opts__["test"]: ret["result"] = None ret["comment"].append( f"SQS queue {name} is set to be created.", ) ret["changes"] = {"old": None, "new": name} return ret r = __salt__["boto_sqs.create"]( name, attributes=attributes, region=region, key=key, keyid=keyid, profile=profile, ) if "error" in r: ret["result"] = False ret["comment"].append( "Failed to create SQS queue {}: {}".format(name, r["error"]), ) return ret ret["comment"].append(f"SQS queue {name} created.") ret["changes"]["old"] = None ret["changes"]["new"] = name # Return immediately, as the create call also set all attributes return ret if not attributes: return ret r = __salt__["boto_sqs.get_attributes"]( name, region=region, key=key, keyid=keyid, profile=profile, ) if "error" in r: ret["result"] = False ret["comment"].append( "Failed to get queue attributes: {}".format(r["error"]), ) return ret current_attributes = r["result"] attrs_to_set = {} for attr, val in attributes.items(): _val = current_attributes.get(attr, None) if attr == "Policy": # Normalize by brute force if isinstance(_val, str): _val = salt.utils.json.loads(_val) if isinstance(val, str): val = salt.utils.json.loads(val) if _val != val: log.debug("Policies differ:\n%s\n%s", _val, val) attrs_to_set[attr] = salt.utils.json.dumps(val, sort_keys=True) elif str(_val) != str(val): log.debug("Attributes differ:\n%s\n%s", _val, val) attrs_to_set[attr] = val attr_names = ", ".join(attrs_to_set) if not attrs_to_set: ret["comment"].append("Queue attributes already set correctly.") return ret final_attributes = current_attributes.copy() final_attributes.update(attrs_to_set) def _yaml_safe_dump(attrs): """ Safely dump YAML using a readable flow style """ dumper = __utils__["yaml.get_dumper"]("IndentedSafeOrderedDumper") return __utils__["yaml.dump"](attrs, default_flow_style=False, Dumper=dumper) attributes_diff = "".join( difflib.unified_diff( _yaml_safe_dump(current_attributes).splitlines(True), _yaml_safe_dump(final_attributes).splitlines(True), ) ) if __opts__["test"]: ret["result"] = None ret["comment"].append( "Attribute(s) {} set to be updated:\n{}".format( attr_names, attributes_diff, ) ) ret["changes"] = {"attributes": {"diff": attributes_diff}} return ret r = __salt__["boto_sqs.set_attributes"]( name, attrs_to_set, region=region, key=key, keyid=keyid, profile=profile, ) if "error" in r: ret["result"] = False ret["comment"].append( "Failed to set queue attributes: {}".format(r["error"]), ) return ret ret["comment"].append( f"Updated SQS queue attribute(s) {attr_names}.", ) ret["changes"]["attributes"] = {"diff": attributes_diff} return ret def absent( name, region=None, key=None, keyid=None, profile=None, ): """ Ensure the named sqs queue is deleted. name Name of the SQS queue. region Region to connect to. key Secret key to be used. keyid Access key to be used. profile A dict with region, key and keyid, or a pillar key (string) that contains a dict with region, key and keyid. """ ret = {"name": name, "result": True, "comment": "", "changes": {}} r = __salt__["boto_sqs.exists"]( name, region=region, key=key, keyid=keyid, profile=profile, ) if "error" in r: ret["result"] = False ret["comment"] = str(r["error"]) return ret if not r["result"]: ret["comment"] = "SQS queue {} does not exist in {}.".format( name, region, ) return ret if __opts__["test"]: ret["result"] = None ret["comment"] = f"SQS queue {name} is set to be removed." ret["changes"] = {"old": name, "new": None} return ret r = __salt__["boto_sqs.delete"]( name, region=region, key=key, keyid=keyid, profile=profile, ) if "error" in r: ret["result"] = False ret["comment"] = str(r["error"]) return ret ret["comment"] = f"SQS queue {name} was deleted." ret["changes"]["old"] = name ret["changes"]["new"] = None return ret