Search code examples
amazon-ec2ansibleelastic-load-balancer

How to stop old instance from ELB in ansible?


I have playbook which creates and add instance to Load balancer, what is the way I can remove/stop old instance already assigned to ELB, I want to make sure that we stop the old instance first and then new 1s are added or vice verse. I am using AWS ELB and EC2 instance


Solution

  • I hope that might help you. Once you have the instance id then you can do whatever you want, I am just removing it from the ELB but you can use the ec2 module to remove it.

    ---
    - hosts: localhost
      connection: local
      gather_facts: no
      tasks:
       - name: Get the facts about the ELB
         ec2_elb_facts:
           names: rbgeek-dev-web-elb
           region: "eu-west-1"
         register: elb_facts
    
       - name: Instance(s) ID that are currently register to the ELB
         debug:
           msg: "{{ elb_facts.elbs.0.instances }}"
    
       - name: Tag the Old instances as zombie
         ec2_tag:
           resource: "{{ item }}"
           region: "eu-west-1"
           state: present
           tags:
             Instance_Status: "zombie"
         with_items: "{{ elb_facts.elbs.0.instances }}"
    
       - name: Refresh the ec2.py cache
         shell: ./inventory/ec2.py --refresh-cache
         changed_when: no
    
       - name: Refresh inventory
         meta: refresh_inventory
    
    
    # must check this step with ec2_remote_facts_module.html ##http://docs.ansible.com/ansible/ec2_remote_facts_module.html
    - hosts: tag_Instance_Status_zombie
      gather_facts: no
      tasks:
        - name: Get the facts about the zombie instances
          ec2_facts:
        - name: remove instance by instance id
          ec2:
            state: absent
            region: "eu-west-1"
            instance_ids: "{{ ansible_ec2_instance_id }}"
            wait: true
          delegate_to: localhost