You're getting your "target" variable from vars_prompt just fine. It's a 
'unicode object' (i.e. a string), so you can't use its non-existent 'ms' 
attribute. If you really want to pull in the "target" host interactively, 
the easiest fix is to restructure your "lparlist.yml" file like this:

---
lpars:
  lpar1:
      hmc: hmc1
      ms: ms1
  lpar2:
      hmc: hmc2
      ms: ms2

Note: it's no longer a list, so "lparlist.yml" may not be a great name.
Then you use "target" (which would be either "lpar1" or "lpar2") like so:

    - name: Start a logical partition.
      powervm_lpar_instance:
        hmc_host: "{{ lpars[target].hmc }}"
        hmc_auth: "{{ curr_hmc_auth }}"
        system_name: "{{ lpars[target].ms }}"
        vm_name: "{{ target }}"
        action: poweron

But if you do it that way, you've inadvertently re-implements the "hosts:" 
functionality. Given your inventory, I think you should hard-code the group 
in hosts:

hosts: hmc

and drop "vars_prompt" and "target" altogether. Limit the hosts on the 
command line when necessary:

ansible-playbook playbookname.yml --limit=hmc1

Then your playbook becomes

    - name: Start a logical partition.
      powervm_lpar_instance:
        hmc_host: "{{ inventory_hostname }}" # either 'hmc1' or 'hmc2'
        hmc_auth: "{{ curr_hmc_auth }}"
        system_name: "{{ item.value.ms }}" # either 'ms1' or 'ms2'
        vm_name: "{{ item.key }}"  # either 'lpar1' or 'lpar2'
        action: poweron
      loop: "{{ lpars | dict2items }}"
      where: item.value.hmc == inventory_hostname



On Monday, February 20, 2023 at 12:29:45 PM UTC-5 Kenady Inampudi wrote:

> need help in passing external variables using vars_prompt
>
> working example i have a list of servers in a vars_file lparlist.yml
>
> i need to use vars_prompt so i can provide the server name without editing 
> the playbook every time
>
>
> working example
>
> *inventory*
> cat inventory
> [hmc]
> hmc1
> hmc2
>
>
> *vars_file*
> cat lparlist.yml
>
> ---
> - lpar1:
>     hmc: hmc1
>     ms: ms1
> - lpar2:
>     hmc: hmc2
>     ms: ms2
>
> *actual playbook:*
>
> ---
> - name: Start a logical partition
>   hosts: "{{ lpar1.hmc }}"
>   collections:
>       - ibm.power_hmc
>   connection: local
>   vars_files:
>     - lparlist.yml
>   vars:
>     curr_hmc_auth:
>       username: username
>       password: password
>   tasks:
>     - name: Start a logical partition.
>       powervm_lpar_instance:
>         hmc_host: "{{ lpar1.hmc }}"
>         hmc_auth: "{{ curr_hmc_auth }}"
>         system_name: "{{ lpar1.ms }}"
>         vm_name: lpar1
>         action: poweron
>
>
>
> *output*
>
> PLAY [Start a logical partition] 
> *******************************************************************************************************************************************************************************
>
> TASK [Gathering Facts] 
> ********************************************************************************************************************************************************************************************
> ok: [hmc1]
>
> TASK [Start a logical partition.] 
> ******************************************************************************************************************************************************************************
> changed: [hmc1]
>
> PLAY RECAP 
> ********************************************************************************************************************************************************************************************************
> hmc1               : ok=2    changed=1    unreachable=0    failed=0   
>  skipped=0    rescued=0    ignored=0
>
>
>
> *not working playbook*
>
>
> ---
> - name: Start a logical partition
>   hosts: "{{ lpar1.hmc }}"
>   vars_prompt:
>     - name: target
>       prompt: Enter Server Name
>       private: false
>   collections:
>       - ibm.power_hmc
>   connection: local
>   vars_files:
>     - lparlist.yml
>   vars:
>     curr_hmc_auth:
>       username: username
>       password: password
>   tasks:
>     - name: Start a logical partition.
>       powervm_lpar_instance:
>         hmc_host: "{{ target.hmc }}"
>         hmc_auth: "{{ curr_hmc_auth }}"
>         system_name: "{{ target.ms }}"
>         vm_name: "{{ target }}"
>         action: poweron
>
>
> *output*
>
> PLAY [Start a logical partition] 
> *******************************************************************************************************************************************************************************
>
> TASK [Gathering Facts] 
> ********************************************************************************************************************************************************************************************
> ok: [hmc1]
>
> TASK [Start a logical partition.] 
> ******************************************************************************************************************************************************************************
> fatal: [hmc1]: FAILED! => {"msg": "The task includes an option with an 
> undefined variable. The error was: 'unicode object' has no attribute 
> 'ms'\n\nThe error appears to be in '/home/inampk48/hmc/p3/poweron.yml': 
> line 17, column 7, but may\nbe elsewhere in the file depending on the exact 
> syntax problem.\n\nThe offending line appears to be:"\n    - name: Start a 
> logical partition.\n      ^ here\n"}
>
>
> PLAY RECAP 
> ********************************************************************************************************************************************************************************************************
> hmc1               : ok=1    changed=0    unreachable=0    failed=1   
>  skipped=0    rescued=0    ignored=0
>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ansible-project+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/ff8063f4-a46d-4798-9e5e-324bc40fb80cn%40googlegroups.com.

Reply via email to