Я думал, что оператор when будет запускать только задание IF, если statresult существует.
Он может это сделать, но вам нужно обработать ваше условное выражение, например, его Python.
when: 'domainexists' in item
Обновление. Итак, при втором просмотре вашей пьесы, я вижу некоторые другие проблемы, которые вам нужно будет исправить, прежде чем это сработает.
- создается впечатление, что вы лечите
with_items
, как будто предоставляете доступ к глобальной переменнойitems
, которую затем изменяете и пытаетесь использовать в будущих задачах. Это не так. Любые петли стиляwith_X
- это то, что он зациклирует задачу с любым списком, который вы ему даете. Кроме того, документация Ansible рекомендует не использовать петлиwith_X
, так какloop
стал рекомендуемым способом петли с Ansible 2.5.- В вашей первой игре Don 't сохранить ваш результат stat в
item
. Храните его в своей собственной переменной, так какitem
- специальная переменная, используемая для циклов. Это может быть любое другое имя, которое вы хотите. Кроме того, не стоит беспокоиться о сохранении его с помощью собственного ключа, просто укажите ему простое имя переменной, напримерexistant_domain_list
, а неexistant_domain_list.statresult
.- Вы зарегистрировались на
item.statresult
, но никогда не используете это снова в вашем плейбуке. Возможно, это потому, что вы делаете # 1. Когда вы регистрируете результат, он доступен для нисходящих задач в playbook автоматически (пока вы используете свое собственное имя переменной).Кроме этого, это намного лучше, чем я сделал моя первая игра-головоломка Ansible лет назад! У вас есть хорошее представление о предполагаемой функциональности инструмента.
Я должен был упомянуть, что мой ввод также использует Awesomplete (и jQuery). По этой причине связывание нормальных событий, таких как keyup, не работает (событие будет срабатывать всякий раз, когда пользователь вводит ключ). Мне удалось добиться нужной функциональности с помощью события awesomplete-selectcomplete следующим образом (это добавит скрытый элемент ввода со значением id из строки вида «String [id]»):
$("#my-input").on('awesomplete-selectcomplete',function(){
var fullStr = this.value;
//alert(fullStr);
var regex = /\[[0-9]+\]/g;
var match = regex.exec(fullStr);
//alert(match[0]);
if (match != null) // match found for [id]
{
var fullName = fullStr.substr(0,fullStr.lastIndexOf("[")-1);
var x = match[0];
var id = x.substr(1, x.lastIndexOf("]")-1);
//alert(id);
$('#fwd-form').prepend('<input type="hidden" name="h_uid" value="' + id + '">');
$('#my-input').val(fullName);
}
});
Если вы не используете какой-либо фреймворк, поддерживающий связывание, вам следует прослушивать входные события и обновлять скрытый входной сигнал на основе этого.
Это функция, которая может дать вам идею:
let realInput = document.getElementById('real-input');
let userInput = document.getElementById('user-input');
userInput.addEventListener('input', function(value) {
const inputValue = value.target.value;
realInput.value = inputValue; // update the hidden input
const userInputResult = inputValue.match(/\[[^\[]*\]/); // the regex for [numberic_id]
if (userInputResult) {
userInput.value = inputValue.substring(0, [userInputResult.index - 1]); // -1 is to remove the space between the 'string' and the '[numeric_id]'
}
});