#variables #parameters #count #ansible #multiline
Вопрос:
Я передаю многострочную переменную dest_host
из Дженкинса в Ansible, как показано ниже
ansible-playbook -i allmwhosts.hosts action.yml -e '{ dest_host: myhost1
myhost2 }' --tags validate
В ansible я хочу посчитать количество строк, присутствующих в dest_host
этом случае, равное 2.
Я могу подумать о command: "cat {{ dest_host }} | wc -l"
том, чтобы зарегистрировать вывод, а затем распечатать в качестве решения. Однако лучше ли это сделать в Ansible, чем использовать команду unix ?
Ответ №1:
Вот для чего нужен | length
фильтр
- debug:
msg: '{{ dest_host | length }}'
vars:
dest_host: "alphanbetan"
хотя имейте в виду, что ваш -e
не делает того, что вы думаете (о линиях), из-за скалярного складывания ямля
ansible -e '{ bob:
alpha
beta
}' -m debug -a var=bob -c local -i localhost, localhost
испускает
"bob": "alpha beta"
но | length
это все еще может помочь вам с помощью | split | length
Комментарии:
1.
{{ dest_host.split() | length }}
помогло решить эту проблему. Не могли бы вы, пожалуйста, обновить свой ответ ?2. Вы имеете в виду, что я должен обновить самое последнее предложение, где оно буквально заканчивается словами «с помощью
| split | length
«?3. да @mdaniel как
{{ dest_host | split | length }}
ошибки и{{ dest_host.split() | length }}
работает4. это не мой опыт, иначе я бы не написал это:
ansible -e '{bob: alpha beta }' -m debug -a msg='{{ bob | split | length }}' -c local -i localhost, localhost
-> >"msg": "2"
так что я бы предположил, что в вашей системе что-то сломано