|
@@ -1,4 +1,3 @@
|
|
-# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
"""
|
|
Manage EC2
|
|
Manage EC2
|
|
|
|
|
|
@@ -51,8 +50,6 @@ The below code deletes a key pair:
|
|
- key: askdjghsdfjkghWupUjasdflkdfklgjsdfjajkghs
|
|
- key: askdjghsdfjkghWupUjasdflkdfklgjsdfjajkghs
|
|
"""
|
|
"""
|
|
|
|
|
|
-# Import Python Libs
|
|
|
|
-from __future__ import absolute_import, print_function, unicode_literals
|
|
|
|
|
|
|
|
import logging
|
|
import logging
|
|
from time import sleep, time
|
|
from time import sleep, time
|
|
@@ -60,9 +57,6 @@ from time import sleep, time
|
|
import salt.utils.data
|
|
import salt.utils.data
|
|
import salt.utils.dictupdate as dictupdate
|
|
import salt.utils.dictupdate as dictupdate
|
|
from salt.exceptions import CommandExecutionError, SaltInvocationError
|
|
from salt.exceptions import CommandExecutionError, SaltInvocationError
|
|
-
|
|
|
|
-# Import salt libs
|
|
|
|
-from salt.ext import six
|
|
|
|
from salt.ext.six.moves import range
|
|
from salt.ext.six.moves import range
|
|
|
|
|
|
log = logging.getLogger(__name__)
|
|
log = logging.getLogger(__name__)
|
|
@@ -95,14 +89,14 @@ def key_present(
|
|
if upload_public is not None and "salt://" in upload_public:
|
|
if upload_public is not None and "salt://" in upload_public:
|
|
try:
|
|
try:
|
|
upload_public = __salt__["cp.get_file_str"](upload_public)
|
|
upload_public = __salt__["cp.get_file_str"](upload_public)
|
|
- except IOError as e:
|
|
|
|
|
|
+ except OSError as e:
|
|
log.debug(e)
|
|
log.debug(e)
|
|
- ret["comment"] = "File {0} not found.".format(upload_public)
|
|
|
|
|
|
+ ret["comment"] = "File {} not found.".format(upload_public)
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
return ret
|
|
return ret
|
|
if not exists:
|
|
if not exists:
|
|
if __opts__["test"]:
|
|
if __opts__["test"]:
|
|
- ret["comment"] = "The key {0} is set to be created.".format(name)
|
|
|
|
|
|
+ ret["comment"] = "The key {} is set to be created.".format(name)
|
|
ret["result"] = None
|
|
ret["result"] = None
|
|
return ret
|
|
return ret
|
|
if save_private and not upload_public:
|
|
if save_private and not upload_public:
|
|
@@ -111,29 +105,29 @@ def key_present(
|
|
)
|
|
)
|
|
if created:
|
|
if created:
|
|
ret["result"] = True
|
|
ret["result"] = True
|
|
- ret["comment"] = "The key {0} is created.".format(name)
|
|
|
|
|
|
+ ret["comment"] = "The key {} is created.".format(name)
|
|
ret["changes"]["new"] = created
|
|
ret["changes"]["new"] = created
|
|
else:
|
|
else:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
- ret["comment"] = "Could not create key {0} ".format(name)
|
|
|
|
|
|
+ ret["comment"] = "Could not create key {} ".format(name)
|
|
elif not save_private and upload_public:
|
|
elif not save_private and upload_public:
|
|
imported = __salt__["boto_ec2.import_key"](
|
|
imported = __salt__["boto_ec2.import_key"](
|
|
name, upload_public, region, key, keyid, profile
|
|
name, upload_public, region, key, keyid, profile
|
|
)
|
|
)
|
|
if imported:
|
|
if imported:
|
|
ret["result"] = True
|
|
ret["result"] = True
|
|
- ret["comment"] = "The key {0} is created.".format(name)
|
|
|
|
|
|
+ ret["comment"] = "The key {} is created.".format(name)
|
|
ret["changes"]["old"] = None
|
|
ret["changes"]["old"] = None
|
|
ret["changes"]["new"] = imported
|
|
ret["changes"]["new"] = imported
|
|
else:
|
|
else:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
- ret["comment"] = "Could not create key {0} ".format(name)
|
|
|
|
|
|
+ ret["comment"] = "Could not create key {} ".format(name)
|
|
else:
|
|
else:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
ret["comment"] = "You can either upload or download a private key "
|
|
ret["comment"] = "You can either upload or download a private key "
|
|
else:
|
|
else:
|
|
ret["result"] = True
|
|
ret["result"] = True
|
|
- ret["comment"] = "The key name {0} already exists".format(name)
|
|
|
|
|
|
+ ret["comment"] = "The key name {} already exists".format(name)
|
|
return ret
|
|
return ret
|
|
|
|
|
|
|
|
|
|
@@ -145,21 +139,21 @@ def key_absent(name, region=None, key=None, keyid=None, profile=None):
|
|
exists = __salt__["boto_ec2.get_key"](name, region, key, keyid, profile)
|
|
exists = __salt__["boto_ec2.get_key"](name, region, key, keyid, profile)
|
|
if exists:
|
|
if exists:
|
|
if __opts__["test"]:
|
|
if __opts__["test"]:
|
|
- ret["comment"] = "The key {0} is set to be deleted.".format(name)
|
|
|
|
|
|
+ ret["comment"] = "The key {} is set to be deleted.".format(name)
|
|
ret["result"] = None
|
|
ret["result"] = None
|
|
return ret
|
|
return ret
|
|
deleted = __salt__["boto_ec2.delete_key"](name, region, key, keyid, profile)
|
|
deleted = __salt__["boto_ec2.delete_key"](name, region, key, keyid, profile)
|
|
log.debug("exists is %s", deleted)
|
|
log.debug("exists is %s", deleted)
|
|
if deleted:
|
|
if deleted:
|
|
ret["result"] = True
|
|
ret["result"] = True
|
|
- ret["comment"] = "The key {0} is deleted.".format(name)
|
|
|
|
|
|
+ ret["comment"] = "The key {} is deleted.".format(name)
|
|
ret["changes"]["old"] = name
|
|
ret["changes"]["old"] = name
|
|
else:
|
|
else:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
- ret["comment"] = "Could not delete key {0} ".format(name)
|
|
|
|
|
|
+ ret["comment"] = "Could not delete key {} ".format(name)
|
|
else:
|
|
else:
|
|
ret["result"] = True
|
|
ret["result"] = True
|
|
- ret["comment"] = "The key name {0} does not exist".format(name)
|
|
|
|
|
|
+ ret["comment"] = "The key name {} does not exist".format(name)
|
|
return ret
|
|
return ret
|
|
|
|
|
|
|
|
|
|
@@ -252,7 +246,7 @@ def eni_present(
|
|
)
|
|
)
|
|
if "error" in r:
|
|
if "error" in r:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
- ret["comment"] = "Error when attempting to find eni: {0}.".format(
|
|
|
|
|
|
+ ret["comment"] = "Error when attempting to find eni: {}.".format(
|
|
r["error"]["message"]
|
|
r["error"]["message"]
|
|
)
|
|
)
|
|
return ret
|
|
return ret
|
|
@@ -286,12 +280,12 @@ def eni_present(
|
|
)
|
|
)
|
|
if "error" in result_create:
|
|
if "error" in result_create:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
- ret["comment"] = "Failed to create ENI: {0}".format(
|
|
|
|
|
|
+ ret["comment"] = "Failed to create ENI: {}".format(
|
|
result_create["error"]["message"]
|
|
result_create["error"]["message"]
|
|
)
|
|
)
|
|
return ret
|
|
return ret
|
|
r["result"] = result_create["result"]
|
|
r["result"] = result_create["result"]
|
|
- ret["comment"] = "Created ENI {0}".format(name)
|
|
|
|
|
|
+ ret["comment"] = "Created ENI {}".format(name)
|
|
ret["changes"]["id"] = r["result"]["id"]
|
|
ret["changes"]["id"] = r["result"]["id"]
|
|
else:
|
|
else:
|
|
_ret = _eni_attribute(
|
|
_ret = _eni_attribute(
|
|
@@ -357,7 +351,7 @@ def eni_present(
|
|
profile=profile,
|
|
profile=profile,
|
|
)
|
|
)
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
- msg = "Failed to assocaite the allocated EIP address with the ENI. The EIP {0}".format(
|
|
|
|
|
|
+ msg = "Failed to assocaite the allocated EIP address with the ENI. The EIP {}".format(
|
|
"was successfully released."
|
|
"was successfully released."
|
|
if _ret
|
|
if _ret
|
|
else "was NOT RELEASED."
|
|
else "was NOT RELEASED."
|
|
@@ -423,7 +417,7 @@ def _eni_attribute(metadata, attr, value, region, key, keyid, profile):
|
|
if metadata[attr] == value:
|
|
if metadata[attr] == value:
|
|
return ret
|
|
return ret
|
|
if __opts__["test"]:
|
|
if __opts__["test"]:
|
|
- ret["comment"] = "ENI set to have {0} updated.".format(attr)
|
|
|
|
|
|
+ ret["comment"] = "ENI set to have {} updated.".format(attr)
|
|
ret["result"] = None
|
|
ret["result"] = None
|
|
return ret
|
|
return ret
|
|
result_update = __salt__["boto_ec2.modify_network_interface_attribute"](
|
|
result_update = __salt__["boto_ec2.modify_network_interface_attribute"](
|
|
@@ -440,7 +434,7 @@ def _eni_attribute(metadata, attr, value, region, key, keyid, profile):
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
ret["comment"] = msg.format(attr, result_update["error"]["message"])
|
|
ret["comment"] = msg.format(attr, result_update["error"]["message"])
|
|
else:
|
|
else:
|
|
- ret["comment"] = "Updated ENI {0}.".format(attr)
|
|
|
|
|
|
+ ret["comment"] = "Updated ENI {}.".format(attr)
|
|
ret["changes"][attr] = {"old": metadata[attr], "new": value}
|
|
ret["changes"][attr] = {"old": metadata[attr], "new": value}
|
|
return ret
|
|
return ret
|
|
|
|
|
|
@@ -519,7 +513,7 @@ def eni_absent(
|
|
)
|
|
)
|
|
if "error" in r:
|
|
if "error" in r:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
- ret["comment"] = "Error when attempting to find eni: {0}.".format(
|
|
|
|
|
|
+ ret["comment"] = "Error when attempting to find eni: {}.".format(
|
|
r["error"]["message"]
|
|
r["error"]["message"]
|
|
)
|
|
)
|
|
return ret
|
|
return ret
|
|
@@ -548,7 +542,7 @@ def eni_absent(
|
|
)
|
|
)
|
|
if "error" in result_detach:
|
|
if "error" in result_detach:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
- ret["comment"] = "Failed to detach ENI: {0}".format(
|
|
|
|
|
|
+ ret["comment"] = "Failed to detach ENI: {}".format(
|
|
result_detach["error"]["message"]
|
|
result_detach["error"]["message"]
|
|
)
|
|
)
|
|
return ret
|
|
return ret
|
|
@@ -558,11 +552,11 @@ def eni_absent(
|
|
)
|
|
)
|
|
if "error" in result_delete:
|
|
if "error" in result_delete:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
- ret["comment"] = "Failed to delete ENI: {0}".format(
|
|
|
|
|
|
+ ret["comment"] = "Failed to delete ENI: {}".format(
|
|
result_delete["error"]["message"]
|
|
result_delete["error"]["message"]
|
|
)
|
|
)
|
|
return ret
|
|
return ret
|
|
- ret["comment"] = "Deleted ENI {0}".format(name)
|
|
|
|
|
|
+ ret["comment"] = "Deleted ENI {}".format(name)
|
|
ret["changes"]["id"] = None
|
|
ret["changes"]["id"] = None
|
|
if release_eip and "allocationId" in r["result"]:
|
|
if release_eip and "allocationId" in r["result"]:
|
|
_ret = __salt__["boto_ec2.release_eip_address"](
|
|
_ret = __salt__["boto_ec2.release_eip_address"](
|
|
@@ -889,7 +883,7 @@ def instance_present(
|
|
|
|
|
|
if _create:
|
|
if _create:
|
|
if __opts__["test"]:
|
|
if __opts__["test"]:
|
|
- ret["comment"] = "The instance {0} is set to be created.".format(name)
|
|
|
|
|
|
+ ret["comment"] = "The instance {} is set to be created.".format(name)
|
|
ret["result"] = None
|
|
ret["result"] = None
|
|
return ret
|
|
return ret
|
|
if image_name:
|
|
if image_name:
|
|
@@ -944,7 +938,7 @@ def instance_present(
|
|
)
|
|
)
|
|
if not r or "instance_id" not in r:
|
|
if not r or "instance_id" not in r:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
- ret["comment"] = "Failed to create instance {0}.".format(
|
|
|
|
|
|
+ ret["comment"] = "Failed to create instance {}.".format(
|
|
instance_name if instance_name else name
|
|
instance_name if instance_name else name
|
|
)
|
|
)
|
|
return ret
|
|
return ret
|
|
@@ -1000,7 +994,7 @@ def instance_present(
|
|
time.sleep(secs)
|
|
time.sleep(secs)
|
|
if not r:
|
|
if not r:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
- ret["comment"] = "Failed to lookup EIP {0}.".format(
|
|
|
|
|
|
+ ret["comment"] = "Failed to lookup EIP {}.".format(
|
|
public_ip or allocation_id
|
|
public_ip or allocation_id
|
|
)
|
|
)
|
|
return ret
|
|
return ret
|
|
@@ -1009,15 +1003,15 @@ def instance_present(
|
|
if r[0]["instance_id"] != instance_id:
|
|
if r[0]["instance_id"] != instance_id:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
ret["comment"] = (
|
|
ret["comment"] = (
|
|
- "EIP {0} is already associated with instance "
|
|
|
|
- "{1}.".format(
|
|
|
|
|
|
+ "EIP {} is already associated with instance "
|
|
|
|
+ "{}.".format(
|
|
public_ip if public_ip else allocation_id, r[0]["instance_id"]
|
|
public_ip if public_ip else allocation_id, r[0]["instance_id"]
|
|
)
|
|
)
|
|
)
|
|
)
|
|
return ret
|
|
return ret
|
|
else:
|
|
else:
|
|
if __opts__["test"]:
|
|
if __opts__["test"]:
|
|
- ret["comment"] = "Instance {0} to be updated.".format(name)
|
|
|
|
|
|
+ ret["comment"] = "Instance {} to be updated.".format(name)
|
|
ret["result"] = None
|
|
ret["result"] = None
|
|
return ret
|
|
return ret
|
|
r = __salt__["boto_ec2.associate_eip_address"](
|
|
r = __salt__["boto_ec2.associate_eip_address"](
|
|
@@ -1035,13 +1029,13 @@ def instance_present(
|
|
ret["changes"]["new"]["public_ip"] = ip
|
|
ret["changes"]["new"]["public_ip"] = ip
|
|
else:
|
|
else:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
- ret["comment"] = "Failed to attach EIP to instance {0}.".format(
|
|
|
|
|
|
+ ret["comment"] = "Failed to attach EIP to instance {}.".format(
|
|
instance_name if instance_name else name
|
|
instance_name if instance_name else name
|
|
)
|
|
)
|
|
return ret
|
|
return ret
|
|
|
|
|
|
if attributes:
|
|
if attributes:
|
|
- for k, v in six.iteritems(attributes):
|
|
|
|
|
|
+ for k, v in attributes.items():
|
|
curr = __salt__["boto_ec2.get_attribute"](
|
|
curr = __salt__["boto_ec2.get_attribute"](
|
|
k,
|
|
k,
|
|
instance_id=instance_id,
|
|
instance_id=instance_id,
|
|
@@ -1057,7 +1051,7 @@ def instance_present(
|
|
if __opts__["test"]:
|
|
if __opts__["test"]:
|
|
changed_attrs[
|
|
changed_attrs[
|
|
k
|
|
k
|
|
- ] = "The instance attribute {0} is set to be changed from '{1}' to '{2}'.".format(
|
|
|
|
|
|
+ ] = "The instance attribute {} is set to be changed from '{}' to '{}'.".format(
|
|
k, curr.get(k), v
|
|
k, curr.get(k), v
|
|
)
|
|
)
|
|
continue
|
|
continue
|
|
@@ -1075,7 +1069,7 @@ def instance_present(
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
ret[
|
|
ret[
|
|
"comment"
|
|
"comment"
|
|
- ] = "Failed to set attribute {0} to {1} on instance {2}.".format(
|
|
|
|
|
|
+ ] = "Failed to set attribute {} to {} on instance {}.".format(
|
|
k, v, instance_name
|
|
k, v, instance_name
|
|
)
|
|
)
|
|
return ret
|
|
return ret
|
|
@@ -1090,7 +1084,7 @@ def instance_present(
|
|
ret["changes"]["new"] = changed_attrs
|
|
ret["changes"]["new"] = changed_attrs
|
|
ret["result"] = None
|
|
ret["result"] = None
|
|
else:
|
|
else:
|
|
- ret["comment"] = "Instance {0} is in the correct state".format(
|
|
|
|
|
|
+ ret["comment"] = "Instance {} is in the correct state".format(
|
|
instance_name if instance_name else name
|
|
instance_name if instance_name else name
|
|
)
|
|
)
|
|
ret["result"] = True
|
|
ret["result"] = True
|
|
@@ -1111,8 +1105,8 @@ def instance_present(
|
|
remove = list(
|
|
remove = list(
|
|
current - desired
|
|
current - desired
|
|
) # Boto explicitly requires a list here and can't cope with a set...
|
|
) # Boto explicitly requires a list here and can't cope with a set...
|
|
- add = dict([(t, tags[t]) for t in desired - current])
|
|
|
|
- replace = dict([(t, tags[t]) for t in tags if tags.get(t) != curr_tags.get(t)])
|
|
|
|
|
|
+ add = {t: tags[t] for t in desired - current}
|
|
|
|
+ replace = {t: tags[t] for t in tags if tags.get(t) != curr_tags.get(t)}
|
|
# Tag keys are unique despite the bizarre semantics uses which make it LOOK like they could be duplicative.
|
|
# Tag keys are unique despite the bizarre semantics uses which make it LOOK like they could be duplicative.
|
|
add.update(replace)
|
|
add.update(replace)
|
|
if add or remove:
|
|
if add or remove:
|
|
@@ -1125,7 +1119,7 @@ def instance_present(
|
|
)
|
|
)
|
|
ret["changes"]["old"]["tags"] = curr_tags
|
|
ret["changes"]["old"]["tags"] = curr_tags
|
|
ret["changes"]["new"]["tags"] = tags
|
|
ret["changes"]["new"]["tags"] = tags
|
|
- ret["comment"] += " Tags would be updated on instance {0}.".format(
|
|
|
|
|
|
+ ret["comment"] += " Tags would be updated on instance {}.".format(
|
|
instance_name if instance_name else name
|
|
instance_name if instance_name else name
|
|
)
|
|
)
|
|
else:
|
|
else:
|
|
@@ -1138,7 +1132,7 @@ def instance_present(
|
|
keyid=keyid,
|
|
keyid=keyid,
|
|
profile=profile,
|
|
profile=profile,
|
|
):
|
|
):
|
|
- msg = "Error while deleting tags on instance {0}".format(
|
|
|
|
|
|
+ msg = "Error while deleting tags on instance {}".format(
|
|
instance_name if instance_name else name
|
|
instance_name if instance_name else name
|
|
)
|
|
)
|
|
log.error(msg)
|
|
log.error(msg)
|
|
@@ -1154,7 +1148,7 @@ def instance_present(
|
|
keyid=keyid,
|
|
keyid=keyid,
|
|
profile=profile,
|
|
profile=profile,
|
|
):
|
|
):
|
|
- msg = "Error while creating tags on instance {0}".format(
|
|
|
|
|
|
+ msg = "Error while creating tags on instance {}".format(
|
|
instance_name if instance_name else name
|
|
instance_name if instance_name else name
|
|
)
|
|
)
|
|
log.error(msg)
|
|
log.error(msg)
|
|
@@ -1237,7 +1231,7 @@ def instance_absent(
|
|
ret["result"] = None
|
|
ret["result"] = None
|
|
ret["comment"] = (
|
|
ret["comment"] = (
|
|
"Couldn't determine current status of instance "
|
|
"Couldn't determine current status of instance "
|
|
- "{0}.".format(instance_name or name)
|
|
|
|
|
|
+ "{}.".format(instance_name or name)
|
|
)
|
|
)
|
|
return ret
|
|
return ret
|
|
|
|
|
|
@@ -1252,7 +1246,7 @@ def instance_absent(
|
|
)
|
|
)
|
|
if not instances:
|
|
if not instances:
|
|
ret["result"] = True
|
|
ret["result"] = True
|
|
- ret["comment"] = "Instance {0} is already gone.".format(instance_id)
|
|
|
|
|
|
+ ret["comment"] = "Instance {} is already gone.".format(instance_id)
|
|
return ret
|
|
return ret
|
|
instance = instances[0]
|
|
instance = instances[0]
|
|
|
|
|
|
@@ -1267,13 +1261,13 @@ def instance_absent(
|
|
)
|
|
)
|
|
if no_can_do.get("disableApiTermination") is True:
|
|
if no_can_do.get("disableApiTermination") is True:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
- ret["comment"] = "Termination of instance {0} via the API is disabled.".format(
|
|
|
|
|
|
+ ret["comment"] = "Termination of instance {} via the API is disabled.".format(
|
|
instance_id
|
|
instance_id
|
|
)
|
|
)
|
|
return ret
|
|
return ret
|
|
|
|
|
|
if __opts__["test"]:
|
|
if __opts__["test"]:
|
|
- ret["comment"] = "The instance {0} is set to be deleted.".format(name)
|
|
|
|
|
|
+ ret["comment"] = "The instance {} is set to be deleted.".format(name)
|
|
ret["result"] = None
|
|
ret["result"] = None
|
|
return ret
|
|
return ret
|
|
|
|
|
|
@@ -1287,7 +1281,7 @@ def instance_absent(
|
|
)
|
|
)
|
|
if not r:
|
|
if not r:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
- ret["comment"] = "Failed to terminate instance {0}.".format(instance_id)
|
|
|
|
|
|
+ ret["comment"] = "Failed to terminate instance {}.".format(instance_id)
|
|
return ret
|
|
return ret
|
|
|
|
|
|
ret["changes"]["old"] = {"instance_id": instance_id}
|
|
ret["changes"]["old"] = {"instance_id": instance_id}
|
|
@@ -1315,7 +1309,7 @@ def instance_absent(
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
ret[
|
|
ret[
|
|
"comment"
|
|
"comment"
|
|
- ] = "Can't determine AllocationId for address {0}.".format(ip)
|
|
|
|
|
|
+ ] = "Can't determine AllocationId for address {}.".format(ip)
|
|
return ret
|
|
return ret
|
|
else:
|
|
else:
|
|
public_ip = instance.ip_address
|
|
public_ip = instance.ip_address
|
|
@@ -1334,7 +1328,7 @@ def instance_absent(
|
|
ret["changes"]["old"]["public_ip"] = public_ip or r[0]["public_ip"]
|
|
ret["changes"]["old"]["public_ip"] = public_ip or r[0]["public_ip"]
|
|
else:
|
|
else:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
- ret["comment"] = "Failed to release EIP {0}.".format(ip)
|
|
|
|
|
|
+ ret["comment"] = "Failed to release EIP {}.".format(ip)
|
|
return ret
|
|
return ret
|
|
|
|
|
|
return ret
|
|
return ret
|
|
@@ -1425,7 +1419,7 @@ def volume_absent(
|
|
)
|
|
)
|
|
if not instance_id:
|
|
if not instance_id:
|
|
ret["comment"] = (
|
|
ret["comment"] = (
|
|
- "Instance with Name {0} not found. Assuming "
|
|
|
|
|
|
+ "Instance with Name {} not found. Assuming "
|
|
"associated volumes gone.".format(instance_name)
|
|
"associated volumes gone.".format(instance_name)
|
|
)
|
|
)
|
|
return ret
|
|
return ret
|
|
@@ -1441,7 +1435,7 @@ def volume_absent(
|
|
ret["comment"] = "Volume matching criteria not found, assuming already absent"
|
|
ret["comment"] = "Volume matching criteria not found, assuming already absent"
|
|
return ret
|
|
return ret
|
|
if len(vols) > 1:
|
|
if len(vols) > 1:
|
|
- msg = "More than one volume matched criteria, can't continue in state {0}".format(
|
|
|
|
|
|
+ msg = "More than one volume matched criteria, can't continue in state {}".format(
|
|
name
|
|
name
|
|
)
|
|
)
|
|
log.error(msg)
|
|
log.error(msg)
|
|
@@ -1452,14 +1446,14 @@ def volume_absent(
|
|
log.info("Matched Volume ID %s", vol)
|
|
log.info("Matched Volume ID %s", vol)
|
|
|
|
|
|
if __opts__["test"]:
|
|
if __opts__["test"]:
|
|
- ret["comment"] = "The volume {0} is set to be deleted.".format(vol)
|
|
|
|
|
|
+ ret["comment"] = "The volume {} is set to be deleted.".format(vol)
|
|
ret["result"] = None
|
|
ret["result"] = None
|
|
return ret
|
|
return ret
|
|
if __salt__["boto_ec2.delete_volume"](volume_id=vol, force=True, **args):
|
|
if __salt__["boto_ec2.delete_volume"](volume_id=vol, force=True, **args):
|
|
- ret["comment"] = "Volume {0} deleted.".format(vol)
|
|
|
|
|
|
+ ret["comment"] = "Volume {} deleted.".format(vol)
|
|
ret["changes"] = {"old": {"volume_id": vol}, "new": {"volume_id": None}}
|
|
ret["changes"] = {"old": {"volume_id": vol}, "new": {"volume_id": None}}
|
|
else:
|
|
else:
|
|
- ret["comment"] = "Error deleting volume {0}.".format(vol)
|
|
|
|
|
|
+ ret["comment"] = "Error deleting volume {}.".format(vol)
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
return ret
|
|
return ret
|
|
|
|
|
|
@@ -1668,7 +1662,7 @@ def volume_present(
|
|
)
|
|
)
|
|
if not instance_id:
|
|
if not instance_id:
|
|
raise SaltInvocationError(
|
|
raise SaltInvocationError(
|
|
- "Instance with Name {0} not found.".format(instance_name)
|
|
|
|
|
|
+ "Instance with Name {} not found.".format(instance_name)
|
|
)
|
|
)
|
|
|
|
|
|
instances = __salt__["boto_ec2.find_instances"](
|
|
instances = __salt__["boto_ec2.find_instances"](
|
|
@@ -1680,15 +1674,15 @@ def volume_present(
|
|
filters.update({"tag:Name": volume_name})
|
|
filters.update({"tag:Name": volume_name})
|
|
vols = __salt__["boto_ec2.get_all_volumes"](filters=filters, **args)
|
|
vols = __salt__["boto_ec2.get_all_volumes"](filters=filters, **args)
|
|
if len(vols) > 1:
|
|
if len(vols) > 1:
|
|
- msg = "More than one volume matched volume name {0}, can't continue in state {1}".format(
|
|
|
|
|
|
+ msg = "More than one volume matched volume name {}, can't continue in state {}".format(
|
|
volume_name, name
|
|
volume_name, name
|
|
)
|
|
)
|
|
raise SaltInvocationError(msg)
|
|
raise SaltInvocationError(msg)
|
|
if len(vols) < 1:
|
|
if len(vols) < 1:
|
|
if __opts__["test"]:
|
|
if __opts__["test"]:
|
|
ret["comment"] = (
|
|
ret["comment"] = (
|
|
- "The volume with name {0} is set to be created and attached"
|
|
|
|
- " on {1}({2}).".format(volume_name, instance_id, device)
|
|
|
|
|
|
+ "The volume with name {} is set to be created and attached"
|
|
|
|
+ " on {}({}).".format(volume_name, instance_id, device)
|
|
)
|
|
)
|
|
ret["result"] = None
|
|
ret["result"] = None
|
|
return ret
|
|
return ret
|
|
@@ -1707,7 +1701,7 @@ def volume_present(
|
|
volume_id = _rt["result"]
|
|
volume_id = _rt["result"]
|
|
else:
|
|
else:
|
|
raise SaltInvocationError(
|
|
raise SaltInvocationError(
|
|
- "Error creating volume with name {0}.".format(volume_name)
|
|
|
|
|
|
+ "Error creating volume with name {}.".format(volume_name)
|
|
)
|
|
)
|
|
_rt = __salt__["boto_ec2.set_volumes_tags"](
|
|
_rt = __salt__["boto_ec2.set_volumes_tags"](
|
|
tag_maps=[
|
|
tag_maps=[
|
|
@@ -1721,9 +1715,7 @@ def volume_present(
|
|
if _rt["success"] is False:
|
|
if _rt["success"] is False:
|
|
raise SaltInvocationError(
|
|
raise SaltInvocationError(
|
|
"Error updating requested volume "
|
|
"Error updating requested volume "
|
|
- "{0} with name {1}. {2}".format(
|
|
|
|
- volume_id, volume_name, _rt["comment"]
|
|
|
|
- )
|
|
|
|
|
|
+ "{} with name {}. {}".format(volume_id, volume_name, _rt["comment"])
|
|
)
|
|
)
|
|
old_dict["volume_id"] = None
|
|
old_dict["volume_id"] = None
|
|
new_dict["volume_id"] = volume_id
|
|
new_dict["volume_id"] = volume_id
|
|
@@ -1733,26 +1725,26 @@ def volume_present(
|
|
volume_ids=[volume_id], return_objs=True, **args
|
|
volume_ids=[volume_id], return_objs=True, **args
|
|
)
|
|
)
|
|
if len(vols) < 1:
|
|
if len(vols) < 1:
|
|
- raise SaltInvocationError("Volume {0} do not exist".format(volume_id))
|
|
|
|
|
|
+ raise SaltInvocationError("Volume {} do not exist".format(volume_id))
|
|
vol = vols[0]
|
|
vol = vols[0]
|
|
if vol.zone != instance.placement:
|
|
if vol.zone != instance.placement:
|
|
raise SaltInvocationError(
|
|
raise SaltInvocationError(
|
|
- ("Volume {0} in {1} cannot attach to instance" " {2} in {3}.").format(
|
|
|
|
|
|
+ ("Volume {} in {} cannot attach to instance" " {} in {}.").format(
|
|
volume_id, vol.zone, instance_id, instance.placement
|
|
volume_id, vol.zone, instance_id, instance.placement
|
|
)
|
|
)
|
|
)
|
|
)
|
|
attach_data = vol.attach_data
|
|
attach_data = vol.attach_data
|
|
if attach_data is not None and attach_data.instance_id is not None:
|
|
if attach_data is not None and attach_data.instance_id is not None:
|
|
if instance_id == attach_data.instance_id and device == attach_data.device:
|
|
if instance_id == attach_data.instance_id and device == attach_data.device:
|
|
- ret["comment"] = "The volume {0} is attached on {1}({2}).".format(
|
|
|
|
|
|
+ ret["comment"] = "The volume {} is attached on {}({}).".format(
|
|
volume_id, instance_id, device
|
|
volume_id, instance_id, device
|
|
)
|
|
)
|
|
return ret
|
|
return ret
|
|
else:
|
|
else:
|
|
if __opts__["test"]:
|
|
if __opts__["test"]:
|
|
ret["comment"] = (
|
|
ret["comment"] = (
|
|
- "The volume {0} is set to be detached"
|
|
|
|
- " from {1}({2} and attached on {3}({4})."
|
|
|
|
|
|
+ "The volume {} is set to be detached"
|
|
|
|
+ " from {}({} and attached on {}({})."
|
|
).format(
|
|
).format(
|
|
attach_data.instance_id,
|
|
attach_data.instance_id,
|
|
attach_data.devic,
|
|
attach_data.devic,
|
|
@@ -1765,7 +1757,7 @@ def volume_present(
|
|
if __salt__["boto_ec2.detach_volume"](
|
|
if __salt__["boto_ec2.detach_volume"](
|
|
volume_id=volume_id, wait_for_detachement=True, **args
|
|
volume_id=volume_id, wait_for_detachement=True, **args
|
|
):
|
|
):
|
|
- ret["comment"] = "Volume {0} is detached from {1}({2}).".format(
|
|
|
|
|
|
+ ret["comment"] = "Volume {} is detached from {}({}).".format(
|
|
volume_id, attach_data.instance_id, attach_data.device
|
|
volume_id, attach_data.instance_id, attach_data.device
|
|
)
|
|
)
|
|
old_dict["instance_id"] = attach_data.instance_id
|
|
old_dict["instance_id"] = attach_data.instance_id
|
|
@@ -1773,7 +1765,7 @@ def volume_present(
|
|
else:
|
|
else:
|
|
raise SaltInvocationError(
|
|
raise SaltInvocationError(
|
|
(
|
|
(
|
|
- "The volume {0} is already attached on instance {1}({2})."
|
|
|
|
|
|
+ "The volume {} is already attached on instance {}({})."
|
|
" Failed to detach"
|
|
" Failed to detach"
|
|
).format(volume_id, attach_data.instance_id, attach_data.device)
|
|
).format(volume_id, attach_data.instance_id, attach_data.device)
|
|
)
|
|
)
|
|
@@ -1781,7 +1773,7 @@ def volume_present(
|
|
old_dict["instance_id"] = instance_id
|
|
old_dict["instance_id"] = instance_id
|
|
old_dict["device"] = None
|
|
old_dict["device"] = None
|
|
if __opts__["test"]:
|
|
if __opts__["test"]:
|
|
- ret["comment"] = "The volume {0} is set to be attached on {1}({2}).".format(
|
|
|
|
|
|
+ ret["comment"] = "The volume {} is set to be attached on {}({}).".format(
|
|
volume_id, instance_id, device
|
|
volume_id, instance_id, device
|
|
)
|
|
)
|
|
ret["result"] = None
|
|
ret["result"] = None
|
|
@@ -1792,7 +1784,7 @@ def volume_present(
|
|
ret["comment"] = " ".join(
|
|
ret["comment"] = " ".join(
|
|
[
|
|
[
|
|
ret["comment"],
|
|
ret["comment"],
|
|
- "Volume {0} is attached on {1}({2}).".format(
|
|
|
|
|
|
+ "Volume {} is attached on {}({}).".format(
|
|
volume_id, instance_id, device
|
|
volume_id, instance_id, device
|
|
),
|
|
),
|
|
]
|
|
]
|
|
@@ -1801,7 +1793,7 @@ def volume_present(
|
|
new_dict["device"] = device
|
|
new_dict["device"] = device
|
|
ret["changes"] = {"old": old_dict, "new": new_dict}
|
|
ret["changes"] = {"old": old_dict, "new": new_dict}
|
|
else:
|
|
else:
|
|
- ret["comment"] = "Error attaching volume {0} to instance {1}({2}).".format(
|
|
|
|
|
|
+ ret["comment"] = "Error attaching volume {} to instance {}({}).".format(
|
|
volume_id, instance_id, device
|
|
volume_id, instance_id, device
|
|
)
|
|
)
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
@@ -1912,16 +1904,16 @@ def private_ips_present(
|
|
if ips_not_added:
|
|
if ips_not_added:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
ret["comment"] = (
|
|
ret["comment"] = (
|
|
- "ips on eni: {0}\n"
|
|
|
|
- "attempted to add: {1}\n"
|
|
|
|
- "could not add the following ips: {2}\n".format(
|
|
|
|
|
|
+ "ips on eni: {}\n"
|
|
|
|
+ "attempted to add: {}\n"
|
|
|
|
+ "could not add the following ips: {}\n".format(
|
|
"\n\t- " + "\n\t- ".join(ret["changes"]["new"]),
|
|
"\n\t- " + "\n\t- ".join(ret["changes"]["new"]),
|
|
"\n\t- " + "\n\t- ".join(ips_to_add),
|
|
"\n\t- " + "\n\t- ".join(ips_to_add),
|
|
"\n\t- " + "\n\t- ".join(ips_not_added),
|
|
"\n\t- " + "\n\t- ".join(ips_not_added),
|
|
)
|
|
)
|
|
)
|
|
)
|
|
else:
|
|
else:
|
|
- ret["comment"] = "added ips: {0}".format(
|
|
|
|
|
|
+ ret["comment"] = "added ips: {}".format(
|
|
"\n\t- " + "\n\t- ".join(ips_to_add)
|
|
"\n\t- " + "\n\t- ".join(ips_to_add)
|
|
)
|
|
)
|
|
|
|
|
|
@@ -1931,18 +1923,15 @@ def private_ips_present(
|
|
|
|
|
|
else:
|
|
else:
|
|
# Testing mode, show that there were ips to add
|
|
# Testing mode, show that there were ips to add
|
|
- ret["comment"] = (
|
|
|
|
- "ips on eni: {0}\n"
|
|
|
|
- "ips that would be added: {1}\n".format(
|
|
|
|
- "\n\t- " + "\n\t- ".join(ret["changes"]["old"]),
|
|
|
|
- "\n\t- " + "\n\t- ".join(ips_to_add),
|
|
|
|
- )
|
|
|
|
|
|
+ ret["comment"] = "ips on eni: {}\n" "ips that would be added: {}\n".format(
|
|
|
|
+ "\n\t- " + "\n\t- ".join(ret["changes"]["old"]),
|
|
|
|
+ "\n\t- " + "\n\t- ".join(ips_to_add),
|
|
)
|
|
)
|
|
ret["changes"] = {}
|
|
ret["changes"] = {}
|
|
ret["result"] = None
|
|
ret["result"] = None
|
|
|
|
|
|
else:
|
|
else:
|
|
- ret["comment"] = "ips on eni: {0}".format(
|
|
|
|
|
|
+ ret["comment"] = "ips on eni: {}".format(
|
|
"\n\t- " + "\n\t- ".join(ret["changes"]["old"])
|
|
"\n\t- " + "\n\t- ".join(ret["changes"]["old"])
|
|
)
|
|
)
|
|
|
|
|
|
@@ -2029,10 +2018,10 @@ def private_ips_absent(
|
|
if private_ip == primary_private_ip:
|
|
if private_ip == primary_private_ip:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
ret["comment"] = (
|
|
ret["comment"] = (
|
|
- "You cannot unassign the primary private ip address ({0}) on an "
|
|
|
|
|
|
+ "You cannot unassign the primary private ip address ({}) on an "
|
|
"eni\n"
|
|
"eni\n"
|
|
- "ips on eni: {1}\n"
|
|
|
|
- "attempted to remove: {2}\n".format(
|
|
|
|
|
|
+ "ips on eni: {}\n"
|
|
|
|
+ "attempted to remove: {}\n".format(
|
|
primary_private_ip,
|
|
primary_private_ip,
|
|
"\n\t- " + "\n\t- ".join(ret["changes"]["old"]),
|
|
"\n\t- " + "\n\t- ".join(ret["changes"]["old"]),
|
|
"\n\t- " + "\n\t- ".join(private_ip_addresses),
|
|
"\n\t- " + "\n\t- ".join(private_ip_addresses),
|
|
@@ -2068,16 +2057,16 @@ def private_ips_absent(
|
|
if ips_not_removed:
|
|
if ips_not_removed:
|
|
ret["result"] = False
|
|
ret["result"] = False
|
|
ret["comment"] = (
|
|
ret["comment"] = (
|
|
- "ips on eni: {0}\n"
|
|
|
|
- "attempted to remove: {1}\n"
|
|
|
|
- "could not remove the following ips: {2}\n".format(
|
|
|
|
|
|
+ "ips on eni: {}\n"
|
|
|
|
+ "attempted to remove: {}\n"
|
|
|
|
+ "could not remove the following ips: {}\n".format(
|
|
"\n\t- " + "\n\t- ".join(ret["changes"]["new"]),
|
|
"\n\t- " + "\n\t- ".join(ret["changes"]["new"]),
|
|
"\n\t- " + "\n\t- ".join(ips_to_remove),
|
|
"\n\t- " + "\n\t- ".join(ips_to_remove),
|
|
"\n\t- " + "\n\t- ".join(ips_not_removed),
|
|
"\n\t- " + "\n\t- ".join(ips_not_removed),
|
|
)
|
|
)
|
|
)
|
|
)
|
|
else:
|
|
else:
|
|
- ret["comment"] = "removed ips: {0}".format(
|
|
|
|
|
|
+ ret["comment"] = "removed ips: {}".format(
|
|
"\n\t- " + "\n\t- ".join(ips_to_remove)
|
|
"\n\t- " + "\n\t- ".join(ips_to_remove)
|
|
)
|
|
)
|
|
|
|
|
|
@@ -2088,8 +2077,8 @@ def private_ips_absent(
|
|
else:
|
|
else:
|
|
# Testing mode, show that there were ips to remove
|
|
# Testing mode, show that there were ips to remove
|
|
ret["comment"] = (
|
|
ret["comment"] = (
|
|
- "ips on eni: {0}\n"
|
|
|
|
- "ips that would be removed: {1}\n".format(
|
|
|
|
|
|
+ "ips on eni: {}\n"
|
|
|
|
+ "ips that would be removed: {}\n".format(
|
|
"\n\t- " + "\n\t- ".join(ret["changes"]["old"]),
|
|
"\n\t- " + "\n\t- ".join(ret["changes"]["old"]),
|
|
"\n\t- " + "\n\t- ".join(ips_to_remove),
|
|
"\n\t- " + "\n\t- ".join(ips_to_remove),
|
|
)
|
|
)
|
|
@@ -2098,7 +2087,7 @@ def private_ips_absent(
|
|
ret["result"] = None
|
|
ret["result"] = None
|
|
|
|
|
|
else:
|
|
else:
|
|
- ret["comment"] = "ips on network interface: {0}".format(
|
|
|
|
|
|
+ ret["comment"] = "ips on network interface: {}".format(
|
|
"\n\t- " + "\n\t- ".join(ret["changes"]["old"])
|
|
"\n\t- " + "\n\t- ".join(ret["changes"]["old"])
|
|
)
|
|
)
|
|
|
|
|