Rajesh Kumar Duraisamy
Rajesh Kumar Duraisamy

Reputation: 797

How to change the host dynamically in ansible playbook

I need to change the host dynamically in ansible playbook

Below is my sample playbook

---
- name: Deployment Playbook  
  hosts:  “{{Servers}}”
  tasks:
    - name: deployment   
      shell: "deploy.sh {{DEPLOY_NAME}}"  

In above play I need to change the server with respect of DEPLOY_NAME

Example

If {{DEPLOY_NAME}}=APP

THEN {{Servers}} = 172.17.65.17

If {{DEPLOY_NAME}}=SCRIPT

THEN {{Servers}} = 172.17.65.66

Previously we passed this as inventory from AWX. But now we need to handle this on playbook.

So please help me on this issue

Upvotes: 1

Views: 4445

Answers (2)

Uttam
Uttam

Reputation: 596

---
- name: Deployment Playbook targetting Servers_1, will be skipped if DEPLOY_NAME is not APP
  hosts:  “{{Servers_1}}”
  tasks:
    - name: deployment   
      shell: "deploy.sh {{DEPLOY_NAME}}"
      when: DEPLOY_NAME == 'APP'

- name: Deployment Playbook targetting Servers_1, will be skipped if DEPLOY_NAME is not SCRIPT      
  hosts:  “{{Servers_2}}”
  tasks:
    - name: deployment   
      shell: "deploy.sh {{DEPLOY_NAME}}"
      when: DEPLOY_NAME == 'SCRIPT'

Upvotes: 2

carrotcakeslayer
carrotcakeslayer

Reputation: 1008

I don't think you can do that. What I think it may work for you, is to do this instead:

---
- name: Deployment Playbook  
  hosts:  localhost
  tasks:
    - name: deployment   
      shell: ssh root@{{ item.server }} deploy.sh {{ item.app }}
      loop:
        - { server: 'server1', app: 'app_1' }
        - { server: 'server1', app: 'app_1' }

You could even improve this, by using that "inventory from awx", loading it as a "vars_files" which contains this list. So your final loop will just iterate over that list. Like this:

---
- name: Deployment Playbook  
  hosts:  localhost

  vars_files:
    - your_list_file.yml

  tasks:
    - name: deployment   
      shell: ssh root@{{ item.server }} deploy.sh {{ item.app }}
      loop: "{{ your_list_variable }}"

Upvotes: 0

Related Questions