Commit Graph

771 Commits (a4cddac368976f7fd7f97f5af0cf59d7fd032dfd)

Author SHA1 Message Date
Ryan Brown f35be48335 Support suspending scaling processes in `ec2_asg` module (#5562)
* Add support for suspending scaling processes
Ref: http://docs.aws.amazon.com/autoscaling/latest/userguide/as-suspend-resume-processes.html

* Set suspend_processes version_added to 2.3
9 years ago
Ryan Brown 7828b1adc1 Fixes: #4516 add placement_group argument for ec2_asg module (#5506) 9 years ago
einarc 8d1fe3b444 Avoid `TypeError` when desired_capacity is not provided to `ec2_asg` module (#5501)
Moving the "check if min_size/max_size/desired_capacity..." code to execute BEFORE the desired_capacity code is used in the following operation:
num_new_inst_needed = desired_capacity - len(new_instances)

Otherwise the following exception occurs when desired_capacity is not specified and you're replacing instances:
    num_new_inst_needed = desired_capacity - len(new_instances)
TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'

Stack Trace:

An exception occurred during task execution. The full traceback is:
Traceback (most recent call last):
  File "/var/lib/awx/.ansible/tmp/ansible-tmp-1478229985.74-62334493713074/ec2_asg", line 3044, in <module>
    main()
  File "/var/lib/awx/.ansible/tmp/ansible-tmp-1478229985.74-62334493713074/ec2_asg", line 3038, in main
    replace_changed, asg_properties=replace(connection, module)
  File "/var/lib/awx/.ansible/tmp/ansible-tmp-1478229985.74-62334493713074/ec2_asg", line 2778, in replace
    num_new_inst_needed = desired_capacity - len(new_instances)
TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'

fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "invocation": {"module_name": "ec2_asg"}, "module_stderr": "Traceback (most recent call last):\n  File \"/var/lib/awx/.ansible/tmp/ansible-tmp-1478229985.74-62334493713074/ec2_asg\", line 3044, in <module>\n    main()\n  File \"/var/lib/awx/.ansible/tmp/ansible-tmp-1478229985.74-62334493713074/ec2_asg\", line 3038, in main\n    replace_changed, asg_properties=replace(connection, module)\n  File \"/var/lib/awx/.ansible/tmp/ansible-tmp-1478229985.74-62334493713074/ec2_asg\", line 2778, in replace\n    num_new_inst_needed = desired_capacity - len(new_instances)\nTypeError: unsupported operand type(s) for -: 'NoneType' and 'int'\n", "module_stdout": "", "msg": "MODULE FAILURE", "parsed": false}
	to retry, use: --limit @
9 years ago
Zaius Dr 135c70bdd8 Improve `ec2` module Python3 Support (#5497)
Imported six module from ansible module_utils for backwards compatibility.
9 years ago
Ben Tomasik af645041e5 Set suspend_processes version_added to 2.3 9 years ago
Ben Tomasik f4bd008184 Add support for suspending scaling processes
Ref: http://docs.aws.amazon.com/autoscaling/latest/userguide/as-suspend-resume-processes.html
9 years ago
Andrew Gaffney d52d256196 Fix bare variable references in docs (#5554) 9 years ago
Ryan Brown 801f4f0bf4 Fix `cloudformation` error when stack-rollback fails (#5550)
In cases where a CFN stack could not complete (due to lack of
permissions or similar) but also failed to roll back, the gathering of
stack resources would fail because successfully deleted items in the
rollback would no longer have a `PhysicalResourceId` property.

This PR fixes that by soft-failing when there's no physical ID
associated to a resource.
9 years ago
Ryan S. Brown 4f83b809dc Fix doc examples for `ec2_elb_lb` module
The examples had the listeners as a list item for each param, when they
really need to be their own objects.
9 years ago
Ryan S. Brown 8cbb0dc13e Fail gracefully in `ec2_asg` module when there are no matching launch configurations 9 years ago
jctanner 2de97ac5bd replace type() with isinstance() (#5541)
Replace all use of type() with isintance()

Addresses https://github.com/ansible/ansible/issues/18310
9 years ago
Ryan S. Brown 45588171a8 Fix link in `cloudformation` module docs 9 years ago
Sean Summers aa5124af27 added requires for botocore with RoleARN support
Added a requires for the minimum botocore version required to support RoleARN
9 years ago
Sean Summers f31a71c4cf add role_arn to support Service Role
Add `role_arn` to support [AWS CloudFormation Service Role](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-servicerole.html)
9 years ago
mickael-ange 1ca20679dd Added aws and ec2 extends_documentation_fragment to cloud/amazon/rds module. (#3951) 9 years ago
Eduard Iskandarov d856c67cde Fixes: #4516 add placement_group argument for ec2_asg module 9 years ago
Jamie Dyer e69e1ca2c8 Make the RDS endpoint available if AWS returns it. Fixes #3865 (#4143) 9 years ago
Charles Paul 1163b4bb50 add id: back to documentation 9 years ago
Ryan S. Brown 98f6019d86 Remove unused YAML import from cloudformation 9 years ago
Ryan Brown 23da0fc2b8 Support native YAML in CloudFormation module (#5327)
Support the new native YAML format in the CloudFormation API. This means
the existing `template_format` parameter is deprecated. This commit also
adds a warning for the deprecated parameter.
9 years ago
Ryan S. Brown cd9e39420b Fix cloudformation module return parameter documentation
Always return stack outputs, even if only an empty dict
9 years ago
tedder d8b015d9c8 Cloudformation module fix unintentional changed=true
- Don't rewrite the result; this is causing 'changed=true' on update
- Move AWSRetry import to top since it's a decorator, and is needed at definition-time
9 years ago
tedder f040d63403 Boto3 rewrite of cloudformation module
- removed star-imports, which wasn't possible in Ansible 1.x
- boto doesn't have any of the modern features (most notably, changesets), so this rewrite goes all-in on boto3.
- tags are updateable, at least in boto3. Fix documentation.
- staying with "ansible yaml to json conversion" because I'm trying to keep this scoped properly. The next PR will have AWS-native yaml support.
- documented the output. Tried to leave it backwards-compatible but the changes to 'events' might break someone's flow. However, the existing data wasn't terribly useful so I don't assume it will hurt.
- split up the code into functions. This should make unit testing possible.
- added forward-facing code: 'six' for iterating, started using AWSRetry, common tag conversion.
- add todo list
- Pass `exception` parameter to fail_json
9 years ago
Ryan S. Brown d018a86f4f Fix `fail_json` invocation in `cloudformation` module 9 years ago
John R Barker 312f578f93 Bulk spelling improvement to modules-core (#5225)
* Correct spelling mistakes

* Correct more spelling issues

* merge conflict

* Revert typo in parms
9 years ago
John Barker 275fa3f055 Correct functional typos 9 years ago
jjshoe 745b1857d6 Catch the rare condition where ami creation failed, this is critical when you have a 10-15 minute wait on ami creation. This rarely happens, and is tough to reproduce, but it does happen. (#5106) 9 years ago
Elena Washington b4f6a25195 Make is so that the params param truly isn't required (fix for #3860) 9 years ago
Ryan Brown f1c2739163 Handle termination_protection parameter when restarting instances (#5076)
* Restart EC2 instances with multiple network interfaces

A previous bug, #3234, caused instances with multiple ENI's to fail when being
started or stopped because sourceDestCheck is a per-interface attribute, but we
use the boto global access to it (which only works when there's a single ENI).

This patch handles a variant of that bug that only surfaced when restarting an
instance, and catches the same type of exception.

* Default termination_protection to None instead of False

AWS defaults the value of termination_protection to False, so we don't
need to explicitly send `False` when the user hasn't specified a
termination protection level. Before this patch, the below pair of tasks
would:

1. Create an instance (enabling termination_protection)
2. Restart that instance (disabling termination_protection)

Now, the default None value would prevent the restart task from
disabling termination_protection.

```
- name: make an EC2 instance
  ec2:
    vpc_subnet_id: {{ subnet  }}
    instance_type: t2.micro
    termination_protection: yes
    exact_count: 1
    count_tag:
       Name: TestInstance
    instance_tags:
       Name: TestInstance
    group_id: {{ group }}
    image: ami-7172b611
    wait: yes
- name: restart a protected EC2 instance
  ec2:
    vpc_subnet_id: {{ subnet  }}
    state: restarted
    instance_tags:
       Name: TestInstance
    group_id: {{ group }}
    image: ami-7172b611
    wait: yes
```
9 years ago
Pradeep 4cb27d914f Typo Fix 9 years ago
Ryan Brown 75507e7569 Check status of finished spot instance requests (#4990)
Per #3877, the code to wait for spot instance requests to finish would
hang for the full wait time if any spot request failed for any reason.
This commit introduces status checks for spot requests, so if the
request fails, finishes, or is cancelled the task will fail/succeed
accordingly.

One edge case introduced here is tha if a user terminates the instance
associated with the request manually it won't fail the play, under the
presumption that the user *wants* the instance terminated.
9 years ago
Denis Tiago b2c6d39bec fix health instances count when we have more than one lb in asg 9 years ago
Ryan S. Brown 0f505378c3 Accept JSON type as the content of policy_json parameter on `iam_policy` module 9 years ago
René Moser 19be0da3b0 iam_cert: remove choice list for dup_ok type bool (#4940)
See 8879931f0c
9 years ago
Ryan S. Brown a435dbbb2d Fix version_added for ec2_asg feature 9 years ago
Shawn Siefkas a29fb59a72 Adding SNS notification support to ec2_asg module
Addresses #1844
9 years ago
Ryan Brown 2e1e3562b9 Stop sorting of termination_policies in `ec2_asg` (#4883)
The AWS API requires that any termination policy list that includes
`Default` must end with Default. The attribute sorting caused any list
of attributes to be lexically sorted, so a list like
`["OldestLaunchConfiguration", "Default"]` would be changed to
`["Default", "OldestLaunchConfiguration"]` because default is earlier
alphabetically. This caused calls to fail with BotoServerError per #4069

This commit also adds proper tracebacks to all botoservererror fail_json
calls.

Closes #4069
9 years ago
mzizzi 48d932643b cloudformation stack events itertools.imap bugfix (#4868) 9 years ago
Christopher Kotfila 2632aa630f Unpack AWS reservations while waiting to terminate (#4012)
Previously calculation of the number of instances that have been
terminated assumed all instances were in the first reservation returned
by AWS.  If this is not the case the calculated number of instances
terminated never reaches the number of instances and the module always
times out. By unpacking the instances we get an accurate number and the
module correctly exits.
9 years ago
Ryan Brown ae6992bf8c Handle EC2 instances with multiple network interfaces (#4766)
Currently instances with multiple ENI's can't be started or stopped
because sourceDestCheck is a per-interface attribute, but we use the
boto global access to it (which only works when there's a single ENI).

This patch handles multiple ENI's and applies the sourcedestcheck across
all interfaces the same way.

Fixes #3234
9 years ago
Ryan Brown 819fe45864 Fix failure when powering on/off EC2 instances by tag only. (#4767)
If you apply `wait=yes` and use `instance_tags` as your filter for
stopping/starting EC2 instances, this stack trace happens:

```
An exception occurred during task execution. The full traceback is:                                                                          │~
Traceback (most recent call last):                                                                                                           │~
  File "/tmp/ryansb/ansible_FwE8VR/ansible_module_ec2.py", line 1540, in <module>                                                            │~
    main()                                                                                                                                   │~
  File "/tmp/ryansb/ansible_FwE8VR/ansible_module_ec2.py", line 1514, in main                                                                │~
    (changed, instance_dict_array, new_instance_ids) = startstop_instances(module, ec2, instance_ids, state, instance_tags)                  │~
  File "/tmp/ryansb/ansible_FwE8VR/ansible_module_ec2.py", line 1343, in startstop_instances                                                 │~
    if len(matched_instances) < len(instance_ids):                                                                                           │~
TypeError: object of type 'NoneType' has no len()                                                                                            │~
                                                                                                                                             │~
fatal: [localhost -> localhost]: FAILED! => {"changed": false, "failed": true, "invocation": {"module_name": "ec2"}, "module_stderr": "Traceb│~
ack (most recent call last):\n  File \"/tmp/ryansb/ansible_FwE8VR/ansible_module_ec2.py\", line 1540, in <module>\n    main()\n  File \"/tmp/│~
ryansb/ansible_FwE8VR/ansible_module_ec2.py\", line 1514, in main\n    (changed, instance_dict_array, new_instance_ids) = startstop_instances│~
(module, ec2, instance_ids, state, instance_tags)\n  File \"/tmp/ryansb/ansible_FwE8VR/ansible_module_ec2.py\", line 1343, in startstop_insta│~
nces\n    if len(matched_instances) < len(instance_ids):\nTypeError: object of type 'NoneType' has no len()\n", "module_stdout": "", "msg": "│~
MODULE FAILURE", "parsed": false}
```

That's because the `instance_ids` variable is None if not supplied
in the task. That means the instances that result from the instance_tags
query aren't going to be included in the wait loop. To fix this, a list
needs to be kept of instances with matching tags and that list needs to
be added to `instance_ids` before the wait loop.
9 years ago
Abhijit Menon-Sen 55d51b3946 Fix spot instance creation by ignoring instance_initiated_shutdown_behavior (#4741)
Before this, all spot instance requests would fail because the code
_always_ called module.fail_json when the parameter was set (which it
always was, because the module parameter's default was set to 'stop').

As the comment said, this parameter doesn't make sense for spot
instances at all, so the error message was also misleading.
9 years ago
Florian Dambrine aac55fcc62 Fix ec2 module source_dest_check when running on non VPC instances (EC2 Classic) (#3243) 9 years ago
Matt Ferrante 624f813f60 Properly support tag updates on CloudFormation stack-update actions (#3638) 9 years ago
Kenny Woodson 269c06a4c9 Fix for validate rule. Ensure rule is a dict. (#4640) 10 years ago
Kenny Woodson 9b37dcb593 Getting rid of a None type error when no resource tags are defined. (#4638) 10 years ago
Ryan Brown 0c37949941 Remove spurious `changed` state on iam_policy module (#4381)
Due to a mixup of the group/role/user and policy names, policies with
the same name as the group/role/user they are attached to would never be
updated after creation. To fix that, we needed two changes to the logic
of policy comparison:

- Compare the new policy name to *all* matching policies, not just the
  first in lexicographical order
- Compare the new policy name to the matching ones, not to the IAM
  object the policy is attached to
10 years ago
Rick Mendes 02c47f5b0c Fixes #3144 (#4305) 10 years ago
Ilja Bauer acb7d873f8 Replaced use of bare variables with full variable syntax (#4149) 10 years ago
Richard Adams c8ca1a6211 Add parameter to `ec2` module to control instance shutdown behavior (stop|terminate) 10 years ago