Цикл работает только для задачи, к которой он прикреплен. Чтобы обернуть несколько задач в цикл, вам нужно разделить их на другой файл, использовать оператор include для их загрузки, а затем присоединить цикл к этому оператору include.
В твоем случае ничего этого не требуется. Я думаю, что это должно сделать то, что вы ищете, предполагая, что file1.txt содержит список имен файлов, по одному на строку & amp; без расширения файла:
- host: localhost
connection: local
tasks:
- name: Convert each file listed in file1.txt
copy:
dest: "./{{ item | trim }}.json"
content: "{{ lookup('file', item + '.yml') | from_yaml | to_nice_json }}"
with_lines: cat ./file1.txt
connection: local
остановок. Ansible открывает SSH-соединение с локальным хостом. lookup('file', item + '.yml')
читает файл. item
- это имя переменной по умолчанию, которое используется в циклах для хранения содержимого каждого элемента цикла. with_lines
работает только локально, поэтому, если вам нужно выполнить это удаленно, вам нужно будет изменить это [ 119] Когда я искал то же, я нашел это очень хорошо работой универсального Блока проверки допустимости для Идентичных Полей. Я не нахожу его теперь, таким образом, я просто отправляю код...
<?php
class Zend_Validate_IdenticalField extends Zend_Validate_Abstract {
const NOT_MATCH = 'notMatch';
const MISSING_FIELD_NAME = 'missingFieldName';
const INVALID_FIELD_NAME = 'invalidFieldName';
/**
* @var array
*/
protected $_messageTemplates = array(
self::MISSING_FIELD_NAME =>
'DEVELOPMENT ERROR: Field name to match against was not provided.',
self::INVALID_FIELD_NAME =>
'DEVELOPMENT ERROR: The field "%fieldName%" was not provided to match against.',
self::NOT_MATCH =>
'Does not match %fieldTitle%.'
);
/**
* @var array
*/
protected $_messageVariables = array(
'fieldName' => '_fieldName',
'fieldTitle' => '_fieldTitle'
);
/**
* Name of the field as it appear in the $context array.
*
* @var string
*/
protected $_fieldName;
/**
* Title of the field to display in an error message.
*
* If evaluates to false then will be set to $this->_fieldName.
*
* @var string
*/
protected $_fieldTitle;
/**
* Sets validator options
*
* @param string $fieldName
* @param string $fieldTitle
* @return void
*/
public function __construct($fieldName, $fieldTitle = null) {
$this->setFieldName($fieldName);
$this->setFieldTitle($fieldTitle);
}
/**
* Returns the field name.
*
* @return string
*/
public function getFieldName() {
return $this->_fieldName;
}
/**
* Sets the field name.
*
* @param string $fieldName
* @return Zend_Validate_IdenticalField Provides a fluent interface
*/
public function setFieldName($fieldName) {
$this->_fieldName = $fieldName;
return $this;
}
/**
* Returns the field title.
*
* @return integer
*/
public function getFieldTitle() {
return $this->_fieldTitle;
}
/**
* Sets the field title.
*
* @param string:null $fieldTitle
* @return Zend_Validate_IdenticalField Provides a fluent interface
*/
public function setFieldTitle($fieldTitle = null) {
$this->_fieldTitle = $fieldTitle ? $fieldTitle : $this->_fieldName;
return $this;
}
/**
* Defined by Zend_Validate_Interface
*
* Returns true if and only if a field name has been set, the field name is available in the
* context, and the value of that field name matches the provided value.
*
* @param string $value
*
* @return boolean
*/
public function isValid($value, $context = null) {
$this->_setValue($value);
$field = $this->getFieldName();
if (empty($field)) {
$this->_error(self::MISSING_FIELD_NAME);
return false;
} elseif (!isset($context[$field])) {
$this->_error(self::INVALID_FIELD_NAME);
return false;
} elseif (is_array($context)) {
if ($value == $context[$field]) {
return true;
}
} elseif (is_string($context) && ($value == $context)) {
return true;
}
$this->_error(self::NOT_MATCH);
return false;
}
}
?>
вот то, как я сделан это :)
создайте вход первичной обработки, затем упаковывают второй вход передачи в ящики и добавляют Идентичный блок проверки допустимости с данными из предыдущего ввода пароля.
$password_2->addValidator('identical', false, $this->_request->getPost('password'));