How to configure playbook serial value by group var from inventory file?

I’ve tried to setup a group var “batch_deploy” in my inventory file and use it in playbook serial field.
But always got failed with following message.
Is there any concept I misunderstanding?

PLAYBOOK: playbook.yml *********************************************************************************************************

1 plays in playbook.yml

ERROR! The field ‘serial’ has an invalid value, which includes an undefined variable. The error was: ‘batch_deploy’ is undefined

The error appears to have been in ‘/vagrant/ansible/playbook.yml’: line 2, column 5, but may

be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:


  • name: test rolling update by batch size

^ here

exception type: <class ‘ansible.errors.AnsibleUndefinedVariable’>

exception: ‘batch_deploy’ is undefined

inventory.yml

`

> ERROR! The field 'serial' has an invalid value, which includes an
>> undefined variable. The error was: 'batch_deploy' is undefined

Ansible is complaining that you are referencing a variable
"batch_deploy", and that it is not defined anywhere.

inventory.yml
---
deployservers:
    vars:
         deploy_batch: 1

Here, the variable is called "deploy_batch".

playbook.yml
---
  - name: test rolling update by batch size
    hosts: deployservers
    serial: "{{ batch_deploy }}"

Here, the variable is called "batch_deploy". E.g. not the same as in
the inventory file (swapped batch/deploy in the name).

Best regards

This is because serial is a play level keyword and must be the same
for ALL hosts in play, so inventory data cannot be used to set it.

You cannot set 'batches' of hosts for all play if the batch size keeps
changing per host.

Thanks for the explaination.

Now I know the reason why I cannot set the value from inventory file.

And also thanks for branko to point out the inconsistence of variable names, I didn’t notice that. :stuck_out_tongue:

Brian Coca於 2018年2月9日星期五 UTC+8下午11時08分27秒寫道:

So Brain, how do we provide a serial value then? I also want to externalize it so that our operator can configure it.
Currently the way it supports is using extra variables --extra-vars.

Thanks and Regards,
Deepesh