Как прочитать количество строк в многострочной переменной в Ansible

#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" так что я бы предположил, что в вашей системе что-то сломано