Синтаксическая ошибка при выполнении команды от Ansible - PullRequest
0 голосов
/ 29 января 2020

Помогите решить приведенную ниже синтаксическую ошибку, выданную из Ansible:

ОШИБКА! Синтаксическая ошибка при загрузке YAML. значения сопоставления не допускаются в этом контексте

Ошибка, по-видимому, находится в

'/ app / iap_workspace / portals / workpro / dev / sanity / ansible / system / log_check.yml ': строка 244, столбец 45

Но может быть в другом месте файла, в зависимости от точной проблемы синтаксиса.

Неправильные строки выглядят так:

   - name: load average
     raw: uptime | sed 's/.*load average: //' | awk -F\, '{print $3}'| bc | nawk -v thres=2.0 '{if($1 < thres) print "GOOD"; else print "BAD";}'
                                        ^ here

Я могу ошибаться, но похоже, что это может быть проблема с несбалансированными кавычками.

Если значение начинается с кавычки, убедитесь, что строка заканчивается одинаковым набором кавычек.

Например, этот произвольный пример:

foo: "bad" "wolf"

Может быть записан как:

foo: '"bad" "wolf"'

Ответы [ 2 ]

0 голосов
/ 31 января 2020

Исполняемая команда - uptime | sed 's /.* средняя загрузка: //' | awk -F \, '{print $ 3}' Нет пробела после средней загрузки: если вы поставите пробел после ":", ansible будет воспринимать как часть его собственного синтаксиса, например, как мы начинаем использовать любые атрибуты для ansible , Например - raw: (пробел) (ваша команда).

0 голосов
/ 29 января 2020

Эта команда не выбрасывает «плохо» с любым пороговым значением. Более того, мы хотим, чтобы средняя нагрузка равнялась 15 минутам, что означает 3-е значение. Что я могу видеть, так это то, что последняя позиция значения не является фиксированной. Так что вы можете дать команду, где мы можем получить 3-е значение, дифференцируя строки на s/.*load average?

Примерно так:

uptime | sed 's/.*load average: //' | awk -F\, '{print $3}'

...