# gce_mig – Create, Update or Destroy a Managed Instance Group (MIG)

- Synopsis
- Requirements
- Parameters
- Notes
- Examples
- Return Values
- Status

## Synopsis

- Create, Update or Destroy a Managed Instance Group (MIG). See https://cloud.google.com/compute/docs/instance-groups for an overview. Full install/configuration instructions for the gce* modules can be found in the comments of ansible/test/gce_tests.py.

## Requirements

The below requirements are needed on the host that executes this module.

- python >= 2.6
- apache-libcloud >= 1.2.0

## Parameters

Parameter | Choices/Defaults | Comments
--- | --- | ---
autoscaling - |  | A dictionary of configuration for the autoscaler. 'enabled (bool)', 'name (str)' and policy.max_instances (int) are required fields if autoscaling is used. See https://cloud.google.com/compute/docs/reference/beta/autoscalers for more information on Autoscaling.
credentials_file - |  | Path to the JSON file associated with the service account email
name - / required |  | Name of the Managed Instance Group.
named_ports - |  | Define named ports that backend services can forward data to. Format is a a list of name:port dictionaries.
project_id - |  | GCE project ID
service_account_email - |  | service account email
size - |  | Size of Managed Instance Group. If MIG already exists, it will be resized to the number provided here. Required for creating MIGs.

state
-

Choices:
- absent
- present ←

desired state of the resource

template - |  | Instance Template to be used in creating the VMs. See https://cloud.google.com/compute/docs/instance-templates to learn more about Instance Templates. Required for creating MIGs.
zone - / required |  | The GCE zone to use for this Managed Instance Group.

## Notes

Note

- Resizing and Recreating VM are also supported.
- An existing instance template is required in order to create a Managed Instance Group.

## Examples

    # Following playbook creates, rebuilds instances, resizes and then deletes a MIG.
    # Notes:
    # - Two valid Instance Templates must exist in your GCE project in order to run
    #   this playbook.  Change the fields to match the templates used in your
    #   project.
    # - The use of the 'pause' module is not required, it is just for convenience.
    - name: Managed Instance Group Example
      hosts: localhost
      gather_facts: False
      tasks:
        - name: Create MIG
          gce_mig:
            name: ansible-mig-example
            zone: us-central1-c
            state: present
            size: 1
            template: my-instance-template-1
            named_ports:
            - name: http
              port: 80
            - name: foobar
              port: 82

        - name: Pause for 30 seconds
          pause:
            seconds: 30

        - name: Recreate MIG Instances with Instance Template change.
          gce_mig:
            name: ansible-mig-example
            zone: us-central1-c
            state: present
            template: my-instance-template-2-small
            recreate_instances: yes

        - name: Pause for 30 seconds
          pause:
            seconds: 30

        - name: Resize MIG
          gce_mig:
            name: ansible-mig-example
            zone: us-central1-c
            state: present
            size: 3

        - name: Update MIG with Autoscaler
          gce_mig:
            name: ansible-mig-example
            zone: us-central1-c
            state: present
            size: 3
            template: my-instance-template-2-small
            recreate_instances: yes
            autoscaling:
              enabled: yes
              name: my-autoscaler
              policy:
                min_instances: 2
                max_instances: 5
                cool_down_period: 37
                cpu_utilization:
                  target: .39
                load_balancing_utilization:
                  target: 0.4

        - name: Pause for 30 seconds
          pause:
            seconds: 30

        - name: Delete MIG
          gce_mig:
            name: ansible-mig-example
            zone: us-central1-c
            state: absent
            autoscaling:
              enabled: no
              name: my-autoscaler

## Return Values

Common return values are documented here, the following are the fields unique to this module:

Key | Returned | Description
--- | --- | ---
created_autoscaler boolean | When the creation of an Autoscaler was attempted. | True if Autoscaler was attempted and created. False otherwise. Sample: True
created_instances list | When instances are created. | Names of instances created. Sample: ['ansible-mig-new-0k4y', 'ansible-mig-new-0zk5', 'ansible-mig-new-kp68']
deleted_autoscaler boolean | When the delete of an Autoscaler was attempted. | True if an Autoscaler delete attempted and succeeded. False returned if delete failed. Sample: True
deleted_instances list | When instances are deleted. | Names of instances deleted. Sample: ['ansible-mig-new-0k4y', 'ansible-mig-new-0zk5', 'ansible-mig-new-kp68']
name string | changed | Name of the Managed Instance Group. Sample: my-managed-instance-group
named_ports list | when named_ports are initially set or updated | list of named ports acted upon Sample: [{'name': 'http', 'port': 80}, {'name': 'foo', 'port': 82}]
recreated_instances list | When instances are recreated. | Names of instances recreated. Sample: ['ansible-mig-new-0k4y', 'ansible-mig-new-0zk5', 'ansible-mig-new-kp68']
resize_created_instances list | When a resize results in the creation of instances. | Names of instances created during resizing. Sample: ['ansible-mig-new-0k4y', 'ansible-mig-new-0zk5', 'ansible-mig-new-kp68']
resize_deleted_instances list | When a resize results in the deletion of instances. | Names of instances deleted during resizing. Sample: ['ansible-mig-new-0k4y', 'ansible-mig-new-0zk5', 'ansible-mig-new-kp68']
set_named_ports boolean | named_ports have been set | True if the named_ports have been set Sample: True
size integer | changed | Number of VMs in Managed Instance Group. Sample: 4
template string | changed | Instance Template to use for VMs. Must exist prior to using with MIG. Sample: my-instance-template
updated_autoscaler boolean | When the update of an Autoscaler was attempted. | True if an Autoscaler update was attempted and succeeded. False returned if update failed. Sample: True
updated_named_ports boolean | named_ports have been updated | True if the named_ports have been updated Sample: True
zone string | always | Zone in which to launch MIG. Sample: us-central1-b

## Status

- This module is not guaranteed to have a backwards compatible interface. [preview]
- This module is maintained by the Ansible Community. [community]

### Authors

- Tom Melendez (@supertom) <tom@supertom.com>

Hint

If you notice any issues in this documentation, you can edit this document to improve it.