Начальная форма соли кашу


Какая начальная форма у слова раствор соли и соли кашу — edufaq.ru

Какая начальная форма у слова раствор соли и соли кашу — edufaq.ru
  • 1 Ответ (-а, -ов)

    У них вообще нет начальных форм

    ©2020 edufaq.ru. Все права защищены. Запрещено использование материалов сайта без согласия его авторов и обратной ссылки.

    Рецепт китайской каши - постная свинина и яйца Century

    Этот рецепт китайской каши - один из самых любимых китайцев на завтрак. Каша (отвар) называется постной свининой и яичной кашей Century (皮蛋瘦肉粥).

    Многие думают, что единственный способ получить кашу с гладкой бархатистостью - варить кашу на медленном огне в течение долгих часов. В этом рецепте каши я опишу способ получения этой текстуры в два раза быстрее.

    Дымящаяся миска с китайской овсянкой (или «Джук», если переводится фонетически) творит чудеса, чтобы облегчить насморк или просто наполнить живот.Китайская каша - это незаменимая еда, когда кто-то заболевает и сидит на жидкой диете. Он вкусный, легко усваивается и универсален для добавления ингредиентов. Когда овощи добавляются в мясную кашу, это превращается в полноценную еду в одной кастрюле.

    Примечание: Если вы встретите какой-либо рецепт китайского отвара, это просто еще одно название рецепта китайской каши!

    Советы и хитрости

    Хотите приготовить фантастический котелок из каши? Нет проблем.

    Пожалуйста, прочтите эти советы и рекомендации, прежде чем распечатывать рецепт каши.(Рецепт сразу после подсказок.)

    Эта кулинарная заметка была написана, пока я готовила, тестировала, плюс мои наблюдения за тем, как это делала моя мама (мама всегда готовит лучше всех 🙂), а также информацию из книг, видео и статей.

    1. Как приготовить рис для получения шелковистой гладкой текстуры

    (Традиционный метод замораживания по сравнению со сверхбыстрым замораживанием)

    Традиционный метод

    Кантонская каша славится своей шелковистой текстурой. Традиционно для получения желаемой текстуры требуется более часа кипячения.К счастью, вы можете заморозить рис перед кипячением, чтобы ускорить процесс.

    Вот шаги
    • Замочить . Замочите рис в воде на один час. (Помогает смягчить рис.)
    • Соль . Добавьте к рису немного соли и масла и оставьте на полчаса.
    • Полоскание . Дважды промойте рис водой.
    • Кипятить . Добавьте рис в кипящую воду и приступайте к приготовлению каши.

    Замочите рис, добавив соль и масло, чтобы размягчить рисовые зерна.Этот шаг сократит время приготовления риса, пока он не станет шелковистым и однородным.

    Используйте замороженный рис в этом рецепте каши, чтобы значительно сократить время варки.
    Вот так он выглядит до замораживания Вот как он выглядит после замораживания

    Метод замораживания (это наука!)

    В этом рецепте каши , мы сократили время вдвое, используя метод замораживания.

    Вот шаги
    • Промыть .Дважды промойте рис водой. Слитый.
    • Соль . Добавьте к рису немного соли и масла.
    • Заморозить . Заморозьте рис на ночь или хотя бы до тех пор, пока он не застынет.
    • Кипятить . На следующий день залить замороженным рисом кипяток и приступить к приготовлению каши.
    Как это работает

    Когда рис замораживается, вода внутри рисовых зерен превращается в лед. Поскольку объем льда на десять процентов больше воды, он изменит структуру рисового зерна.В результате рисовое зерно после замораживания легко распадается на более мелкие кусочки. Таким образом, общая поверхность рисовых зерен резко увеличивается, а крахмал разрушается намного быстрее, что сокращает время, необходимое для достижения бархатистой текстуры.

    Промойте рис только дважды Почему?

    Мы привыкли многократно промывать рис, пока вода не станет прозрачной, перед тем, как пропарить рис. Но почему в этом рецепте каши нужно всего два полоскания?

    Причина: дважды промыть рис, чтобы удалить загрязнения.Дальнейшее полоскание удалит крахмал, необходимый для образования бархатистой каши.

    Для приготовления каши можно использовать длиннозерный или короткозерный рис. Из короткозернистого риса получается более густая каша из-за более высокого содержания крахмала. Вам нужно использовать больше воды или уменьшить количество риса, если используется короткозерный рис.

    2. Соотношение воды и риса для лучшего рецепта каши

    Соотношение воды и риса - ключ к приготовлению идеальной китайской каши. Соотношение воды и риса, которое я использую в этом рецепте, составляет 15: 1.Этого количества воды достаточно, чтобы варить кашу до тех пор, пока рисовые зерна не распадутся, образуя шелковистый гладкий осадок.

    Однако фактическое количество воды зависит от нагрева плиты, количества каши в кастрюле и от того, заморожен ли рис.

    Используйте больше воды, если вы не уверены. Если воды недостаточно, вы можете добавить воду, но это должна быть кипящая вода.

    Добавление холодной воды приводит к разделению каши на два слоя, подобно тому, как масло отделяется от воды в майонезе.

    3. Как сразу усилить вкус ингредиентов

    Выбор ингредиентов отличается от одного рецепта китайской каши от другого. Для создания шелковистой гладкой основы для каши можно использовать любые ингредиенты.

    Свинина и яйца века (также называемые тысячелетними яйцами) используются в этом знаменитом рецепте кантонской каши, но вы можете заменить его курицей, говяжьим фаршем, рыбным филе, креветками и другими морепродуктами.

    Вы также можете заменить измельченную постную свинину остатками индейки на День Благодарения.Если вы это сделаете, добавьте приготовленное мясо индейки в кашу после того, как она будет готова. Вы можете варить мясо индейки в течение нескольких секунд, чтобы нагреть его, или просто подавать его поверх каши в миске.

    Другие рецепты каш ​​могут включать в себя сухие гребешки как часть морепродуктов в каше, тонко нарезанную говядину, говяжьи шарики, арахис и пюре из тыквы.

    Ниже приведены подробные сведения о каждом из ингредиентов в этом рецепте каши:

    Свинина

    Свиная вырезка - любимый отруб для этой каши.

    Вот шаги по подготовке свинины перед приготовлением:
    • Разделка . Свинину нарезать крупными кусками. (Толщина около 2 см, длина 10 см.)
    • Маринат. Мариновать солью и растительным маслом на ночь (или хотя бы на полдня) в холодильнике.
    • Бланш. Бланшируйте свинину в кипящей воде в течение одной минуты, чтобы удалить кровь и загрязнения. Слитый.
    • Повар . Варить вместе с рисом до готовности каши.

    Не беспокойтесь о том, что в маринаде слишком много соли.При бланшировании излишки соли смываются. Мясо нарезать крупными кусками, потому что мы хотим сварить его вместе с рисом.

    Яйцо века (китайский: 皮蛋)

    Я согласен, что яйца века для некоторых людей отвратительны. Они выглядят странно, ужасно пахнут и напоминают мутировавшего младенца Годзиллы. У них есть другие названия, от которых я не знаю, как они произошли: столетние яйца, тысячелетние яйца, тысячелетние яйца, но на самом деле это консервированные яйца.

    Яйца века - традиционный китайский деликатес.Куриные или утиные яйца хранятся в смеси из глины, золы, соли, негашеной извести от 15 до 20 дней. Со временем цвет желтка становится темно-зеленым со сливочной консистенцией и сильным ароматом из-за присутствия сероводорода и аммиака, а яичный белок превращается в темно-коричневое полупрозрачное желе с соленым вкусом.

    Странно? Вы никогда не узнаете его вкуса, если никогда не попробуете. Это будет для вас приятным сюрпризом.

    Яйцо Века (до удаления скорлупы Яйцо Века (после удаления скорлупы
    Вот шаги по приготовлению яиц Века:
    • Разрезать .Яйца аккуратно нарезать небольшими кусочками. Будьте осторожны, он довольно мягкий.
    • Повар . Половину из них добавить в кашу на раннем этапе приготовления.
    • Гарнир . Добавьте остаток в последние пять минут, чтобы после приготовления они остались четко очерченными.

    Яйцо Century является щелочным продуктом, который помогает рису быстро распадаться. Со временем они полностью растворятся в каше, если нарезать их очень маленькими кусочками. Вот почему вам следует зарезервировать некоторые из них, чтобы добавить их в последние минуты, чтобы они оставались целыми при подаче.

    Другое: имбирь, зеленый лук, соленые яйца и салат

    Теперь вы можете понять, почему каша такая вкусная. В рецепте каши это больше, чем просто свинина и вековые яйца.

    Имбирь

    - Нарежьте имбирь тонким жульеном.
    - Используйте половину, чтобы приготовить кашу.
    - Замочите вторую половину в воде, чтобы уменьшить сильный вкус. Выложите его поверх каши в качестве дополнения.

    Зеленый лук

    - Нарежьте лук на мелкие кусочки.
    - Мариновать с легким соевым соусом.
    - Зачерпните чайную ложку маринованного лука-шалота в каше для подачи.

    Соленые яйца

    - соленые яйца тщательно вымыть.
    - Положите сырые яйца в кашу и тушите вместе. (Очень похоже на приготовление яйца вкрутую).
    - Вынуть из кипящей каши. Яйца разбить и нарезать небольшими кусочками.
    - Верните половину кусочков яиц в кашу и продолжайте готовить.
    - Оставшуюся часть оставьте как аккомпанемент для подачи.

    Салат-латук

    - Нарежьте салат соломкой.
    - Смешайте с солью, поместите на дуршлаг или сито на 30 минут.
    - Салат высушенный и выжатый.
    - Положите немного салата на дно миски. Залить кипящей кашей и подавать.

    Этот шаг предназначен для удаления сырого привкуса и избытка воды, влияющих на вкус каши.

    4. Варите на медленном огне до желаемой густоты.

    Следуйте инструкциям, чтобы приготовить шелковистую и успокаивающую, но не липкую или слишком густую кашу:

    - Для приготовления используйте горячую воду, чтобы уменьшить липкость на дне
    - Варить каша традиционным способом, если нет ограничений по времени.Чем дольше вы готовите, тем более шелковистой будет текстура.
    - Сначала используйте сильный огонь, чтобы быстро измельчить рисовые зерна.
    - Уменьшить до кипения, как при приготовлении тушеного мяса. Сильный огонь может сделать мясо жестким.
    - Время от времени помешивайте кашу, так как она может прилипнуть к дну кастрюли.

    5. Полюбуйтесь прекрасным украшением.

    Морось соевого соуса и несколько капель кунжутного масла на горячей каше делают ее бесконечной чашей комфорта. Украсить кашу тертой свининой, маринованным зеленым луком, яйцами В.соленые яйца, немного тертого имбиря и свежего нарезанного зеленого лука.

    Посмотрите это видео - как нарезать лук для украшения каши.

    Время приготовления 20 минут

    Время приготовления 1 час

    Общее время 1 час 20 минут

    Ингредиенты

    Для риса

    Для свинины

    • 400 г корейки или куриной грудки мясо
    • 2 чайные ложки соли
    • 1 столовая ложка растительного масла

    Другие ингредиенты

    Инструкции

    Для риса

    1. Рис дважды промойте водой.Замочите рис в воде на три часа. Удалите лишнюю воду. Смешайте рис с двумя чайными ложками растительного масла и одной чайной ложкой масла. Положите его в емкость и храните в морозильной камере на ночь. Масло помогает добиться шелковистой текстуры каши.

    Для свинины

    1. Нарежьте корейку на десять см длиной и около 2 см толщиной,
    2. Замаринуйте свиную корейку. Поместите его в пакет с застежкой-молнией или пластиковый контейнер и оставьте в холодильнике в течение 12 часов.
    3. Смойте излишки соли с поверхности мяса.Бланшируйте мясо несколько секунд в кипящей воде, чтобы удалить загрязнения и кровь.

    Для салата

    1. Нарезать кашу соломкой.
    2. Добавьте к нему чайную ложку соли и хорошо перемешайте.
    3. Слейте воду, поместив ее в дуршлаг.
    4. Выжмите салат, чтобы удалить излишки воды.

    Для других ингредиентов

    1. Нарежьте яйцо века на небольшие кусочки.
    2. Нарезать сваренное вкрутую соленое яйцо небольшими кусочками.
    3. Нарезать имбирь тонким жульеном.
    4. Нарежьте лук на короткие отрезки 2–3 мм. Замариновать легким соевым соусом.

    Для приготовления каши

    1. Наполните кастрюлю 3,6 литрами воды. Довести до кипения.
    2. Добавить в кашу маринованную свинину (после бланширования).
    3. Добавьте замороженный рис в кипящую воду на сильном огне. Доведите воду до сильного кипения и непрерывно помешивайте около десяти минут.
    4. Добавьте половину имбиря, яйцо века и кусочки соленого яйца.
    5. Уменьшите огонь до слабого огня и тушите, пока рисовые зерна не рассыплются, а текстура каши не станет гладкой и шелковистой.
    6. Убрать свинину. Нарежьте свинину небольшими кусочками.

    Для подачи

    1. Положите салат на дно миски.
    2. Выложить кипящую кашу поверх салата.
    3. На кашу выложить тертую свинину, имбирь, маринованный зеленый лук, соленое яйцо, яйцо века.
    4. Добавьте немного молотого белого перца и несколько капель кунжутного масла.Обслуживание

    Рекомендуемые продукты

    Я как партнер Amazon и участник других партнерских программ зарабатываю на соответствующих покупках.

    Пищевая ценность:

    Урожайность:

    4

    Размер порции:

    4 порции
    Количество на порцию: Калорий: 518 Всего жиров: 25 г Насыщенных жиров: 5 г Трансжиров: 0 г Ненасыщенных жиров: 17 г Холестерин углеводов: 257 мг Углеводы: 307 мг натрия 1 г Протеин: 47 г

    Эти данные были предоставлены и рассчитаны Nutritionix 27.05.2019

    .

    Формулы соли

    Формулы представляют собой предварительно записанные состояния соли. Они так же открыты, как и Salt States сами по себе и могут использоваться для таких задач, как установка пакета, настройка, и запуск службы, настройка пользователей или разрешений и многие другие распространенные задачи.

    Все официальные формулы соли находятся в отдельных репозиториях Git в Организация "солевых формул" на GitHub:

    В качестве простого примера, чтобы установить популярный веб-сервер Apache (используя обычный по умолчанию для базового дистрибутива) просто включите формула apache из верхнего файла:

    Установка

    Каждая формула соли - это отдельный репозиторий Git, созданный как добавляемый дополнение к существующему дереву состояния соли.Формулы можно установить в следующими способами.

    Добавление формулы в качестве удаленного GitFS

    Одной из целей разработки серверной части файлового сервера GitFS от Salt было облегчение многоразового использования. Состояния. GitFS - это быстрый и естественный способ использования формул.

    1. Установите все необходимые зависимости и настройте GitFS.

    2. Добавьте один или несколько URL-адресов репозитория формул в качестве удаленных в gitfs_remotes список в файле конфигурации Salt Master:

       gitfs_remotes: - https: // github.com / соли-формулы / апач-формула - https://github.com/saltstack-formulas/memcached-formula 

      Мы настоятельно рекомендуем создать ответвление репозитория формул на свой собственный GitHub. учетная запись, чтобы избежать неожиданных изменений в вашей инфраструктуре.

      Многие формулы соли - очень активные репозитории, поэтому вносите новые изменения с забота. Кроме того, любые дополнения, которые вы вносите в вилку, можно легко отправить обратно. вверх по течению с быстрым запросом на извлечение!

    3. Перезапустите мастер соли.

    Начиная с версии 2018.3.0, использование формул с GitFS теперь намного больше удобно для развертываний, в которых используется множество различных сред файловых серверов (то есть saltenvs). Использование all_saltenvs параметр, файлы из одной ветки / тега git будут отображаться во всех средах. См. Здесь для получения дополнительной информации об этой функции.

    Добавление каталога формул вручную

    Формулы - это просто каталоги, которые можно скопировать в локальную файловую систему. с помощью Git для клонирования репозитория или путем загрузки и расширения tarball или zip-файл репозитория.Структура каталогов предназначена для работы с file_roots в конфигурации мастера Salt.

    1. Клонировать или загрузить репозиторий в каталог:

       mkdir -p / SRV / формулы cd / SRV / формулы git clone https://github.com/saltstack-formulas/apache-formula.git # или mkdir -p / SRV / формулы cd / SRV / формулы wget https://github.com/saltstack-formulas/apache-formula/archive/master.tar.gz tar xf apache-formula-master.tar.gz 
    2. Добавить новый каталог в file_roots :

       file_roots: основание: - / срв / соль - / SRV / формулы / апач-формула 
    3. Перезапустите Salt Master.

    Использование

    Каждая формула предназначена для немедленного использования с разумными настройками по умолчанию без любая дополнительная конфигурация. Многие формулы также можно настроить, включая данные в Pillar; см. файл pillar.example в каждом репозитории формул для доступных опций.

    Включение формулы в существующее дерево состояний

    Формула

    может быть включена в существующий файл sls . Это часто бывает полезно, когда состояние, которое вы пишете, должно быть , требуется или расширить состояние, определенное в формула.

    Вот пример состояния, которое использует формулу Эпеля в требуется декларация , которая предписывает Salt не устанавливать python26 пакет до тех пор, пока репозиторий EPEL также не будет установлен:

     включают: - эпель python26: pkg.installed: - требовать: - упак .: эпель 

    Включение формулы из верхнего файла

    Некоторые Formula выполняют полностью автономные установки, которые не ссылки из других файлов состояния.Обычно лучше всего включать эти Формула прямо из главного файла.

    Например, самый простой способ настроить развертывание OpenStack на одном машина должна включать автономную формулу openstack прямо из a файл top.sls :

     база: 'myopenstackmaster': - openstack 

    Также можно быстро развернуть OpenStack на нескольких выделенных машинах. выполняется непосредственно из главного файла и может выглядеть примерно так:

     база: 'контроллер': - openstack.горизонт - openstack.keystone 'гипер- *': - openstack.nova - openstack.glance 'место хранения-*': - openstack.swift 

    Настройка формулы с помощью Pillar

    Формулы соли

    разработаны для немедленной работы без дополнительных конфигурация. Однако многие Formula поддерживают дополнительную конфигурацию и настройка через Pillar. Примеры доступных опций могут можно найти в файле с именем pillar.example в корневом каталоге каждого Репозиторий формул.

    Использование формулы с собственными состояниями

    Помните, что формулы являются обычными состояниями соли и могут использоваться со всеми солями. механизмы нормального состояния. Формула может потребоваться от других государств с требуются объявления, их можно изменить с помощью extension , они могут заставить смотреть другие состояния с версией реквизитов _in.

    В следующем примере используется стандартная формула apache вместе с настраиваемое состояние для создания виртуального хоста в системе Debian / Ubuntu и перезагрузки Служба Apache при изменении виртуального хоста.

     # Включить исходную формулу апачей. включают: - apache # Используйте реквизит watch_in, чтобы перезагрузить состояние службы apache # apache при изменении состояния my-example-com-vhost. мой-пример-ком-vhost: файл: - удалось - имя: / etc / apache2 / sites-available / my-example-com - watch_in: - сервис: apache 

    Не стесняйтесь читать исходники каждой формулы!

    Сообщение о проблемах и внесение дополнений

    Каждая формула - это отдельный репозиторий на GitHub.Если вы столкнулись с ошибкой Формула, пожалуйста, отправьте вопрос в соответствующий репозиторий! Отправить исправления и дополнения как запрос на перенос. Добавьте советы и рекомендации в вики-репозиторий.

    Написание формул

    Каждая формула - это отдельный репозиторий в организации saltstack-formulas на GitHub.

    Примите участие в создании новых формул

    На данный момент лучший способ создать новые репозитории формул - это создать репозиторий в вашей учетной записи на GitHub и уведомить сотрудника SaltStack, когда готово.Мы добавим вас в команду авторов на организация saltstack-формул и помощь в переносе репозитория. Отправьте пинг сотруднику SaltStack в IRC ( #salt на Freenode), присоединитесь к #formulas канал на солевой слабине (соединен с # saltstack-formulas на Freenode) или отправьте электронное письмо в список рассылки пользователей соли. Обратите внимание, что Журналы IRC доступны по адресу https://freenode.logbot.info/salt и https://freenode.logbot.info/saltstack-formulas соответственно.

    В этой организации много репозиториев! Члены команды могут управлять на какие репозитории они подписаны на странице просмотра GitHub: https: // github.com / просмотр.

    Члены команды авторов могут принять участие в проверке пул запросы по всей Организации. В некоторых репозиториях будут регулярные участники и некоторые репозитории не будут. Когда вы участвуете в репозиторий не забудьте связаться с любыми другими участниками по запросу большие запросы или критические изменения.

    В общем, лучше всего проверить еще одного участника и объединить все просит вас открыть. Не стесняйтесь упоминать других постоянных участников в репозиторий и запросить обзор.Однако есть много формул репозиториев, поэтому, если у репозитория еще нет постоянных участников или если ваш запрос на перенос остается открытым более пары дней, не стесняйтесь "селфи-слияние" - ваш собственный запрос на перенос.

    Стиль

    Ремонтопригодность, удобочитаемость и возможность многократного использования - все это признаки хорошей Salt sls. файл. В этом разделе содержится несколько предложений и примеров.

     # Развернуть стабильную главную ветку, если версия не переопределена путем передачи # Столб в интерфейсе командной строки или через Reactor.deploy_myapp: git.latest: - имя: [email protected]/myco/myapp.git - версия: {{salt.pillar.get ('myapp: version', 'master')}} 
    Используйте описательный идентификатор состояния

    ID состояния используется как уникальный идентификатор, на который можно ссылаться через другие состояния в реквизитах. Он должен быть уникальным в все дерево состояний (это ключ в словаре, после все).

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

    Используйте модуль . функция обозначение

    Так называемая нотация «короткого объявления» предпочтительна для ссылки на состояние модули и функции состояния. Он обеспечивает последовательную схему module.function совместно используется с Salt States, Reactor, Salt Мой, Планировщик, а также с CLI.

     # Do apache: pkg.installed: - имя: httpd # Не apache: упак .: - установлены - имя: httpd 

    Компилятор состояния Salt преобразует "короткие декады" в более длинный формат. при компиляции дружественной человеку структуры высшего государства в машинно-дружественная lowstate структура.

    Укажите имя параметр

    Используйте уникальный и постоянный идентификатор для идентификатора штата и зарезервируйте имя для данные с изменчивостью.

    Объявление имени является обязательным параметром для всех государственные функции. Идентификатор состояния будет неявно использоваться как имя , если это не так. явно установлен в состоянии.

    Во многих функциях состояния параметр name используется для данных, которые изменяются. такие как имена пакетов для конкретных ОС, пути файловых систем для конкретных ОС, репозиторий адреса и др.Каждый раз, когда идентификатор состояния меняет все ссылки на этот идентификатор также необходимо изменить. Используйте постоянный идентификатор при записи состояния в первый раз в это состояние соответствует требованиям завтрашнего дня и позволит упростить рефакторинг в будущем.

    Полегче на Джиндзя!

    Шаблоны

    Jinja обеспечивают огромную гибкость и мощность при создании Salt sls файлы. Это также может создать неразрешимый клубок логики и данных. Говорящий в целом, Jinja лучше всего использовать, когда его хранят отдельно от состояний (насколько это возможно).

    Ниже приведены рекомендации и примеры того, как можно эффективно использовать Jinja.

    Знать порядок оценки и исполнения

    Знания высокого уровня о том, как компилируются и запускаются состояния Salt, полезно, когда письменные состояния.

    По умолчанию модуль рендеринга в Salt настроен на Jinja, переданный в YAML. Каждый - отдельный шаг. Каждый шаг не знает ни предыдущего, ни следующего шаг. Jinja не знает YAML, YAML не знает Jinja; они не могут поделиться переменные или взаимодействовать.

    • Все, что производит шаг Jinja, должно быть действительным YAML.

    • Все, что производит шаг YAML, должно быть действительными данными высокого состояния структура. (Это также верно для последнего шага для любого из альтернативных рендереров в Salt.)

    • Highstate можно рассматривать как удобную для человека структуру данных; легко написать и легко читается.

    • Компилятор состояния Salt проверяет высокое состояние и компилирует его в низкое состояние.

    • Низкое состояние можно рассматривать как машинную структуру данных.Это список словарей, каждый из которых отображает непосредственно вызов функции.

    • Система состояний Salt наконец запускается и выполняется на каждом «фрагменте» в младшем штат. Помните, что реквизиты оцениваются во время выполнения.

    • Результат для каждого вызова функции добавляется в "рабочий" словарь, который это окончательный результат в конце выполнения состояния.

    Полный порядок оценки и исполнения:

     Jinja -> YAML -> Highstate -> low state -> выполнение 
    Избегайте изменения базовой системы с помощью Jinja

    Избегайте вызова команд из Jinja, которые изменяют базовую систему.Команды запуск через Jinja, не соблюдайте сухой режим Salt ( test = True )! Это обычно в конфликте с идемпотентной природой Соли, если только выполняемая команда также идемпотентна.

    Проверьте локальную систему

    Обычно Джиндзя в Соляных штатах используется для сбора информации о базовая система. Словарь зерен , доступный в контексте Jinja, отличный пример общих данных, которые уже собрала сама Salt. Менее распространенные значения часто можно найти, выполнив команды.Например:

     {% set is_selinux_enabled = salt.cmd.run ('sestatus') == '1'%} 

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

    Сбор внешних данных

    Одним из наиболее распространенных способов использования Jinja является извлечение внешних данных в состояние файл. Внешние данные могут поступать откуда угодно, например, из вызовов API или запросов к базе данных, но чаще всего это происходит из плоских файлов в файловой системе или данных Pillar от Мастера соли.Например:

     {% set some_data = salt.pillar.get ('some_data', {'нормальное значение по умолчанию': True})%} {# или #} {% import_yaml 'path / to / file.yaml' as some_data%} {# или #} {% import_json 'path / to / file.json' as some_data%} {# или #} {% import_text 'путь / к / ssh_key.pub' как ssh_pub_key%} {# или #} {% from 'path / to / other_file.jinja' импортировать some_data с контекстом%} 

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

    Легкие условные выражения и циклы

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

    Отделяйте операторы потока управления Jinja от состояний насколько это возможно для создания читаемых состояний. Ограничьте Jinja внутри состояний простой переменной поиски.

    Ниже приведен простой пример читаемого цикла:

     {% для пользователя в соли.pillar.get ('список_пользователей', [])%} {# Обеспечьте уникальные идентификаторы состояния при зацикливании. #} {{user.name}} - {{loop.index}}: user.present: - имя: {{user.name}} - оболочка: {{user.shell}} {% endfor%} 

    По возможности старайтесь не помещать условные выражения Jinja в состояния Salt. Страдает удобочитаемость, и правильный отступ YAML трудно увидеть в окружающий визуальный шум. Параметризация (обсуждается ниже) и переменные оба полезных метода, чтобы избежать этого. Например:

     {# ---- Плохой пример ---- #} apache: упак.установлены: {% if grains.os_family == 'RedHat'%} - имя: httpd {% elif grains.os_family == 'Debian'%} - имя: apache2 {% endif%} {# ---- Лучший пример ---- #} {% if grains.os_family == 'RedHat'%} {% set name = 'httpd'%} {% elif grains.os_family == 'Debian'%} {% set name = 'apache2'%} {% endif%} apache: pkg.installed: - имя: {{имя}} {# ---- Хороший пример ---- #} {% set name = { 'RedHat': 'httpd', 'Debian': 'apache2', } .get (grains.os_family)%} apache: упак.установлены: - имя: {{имя}} 

    Словари полезны для эффективного "пространства имён" коллекции переменных. Это полезно при параметризации (обсуждается ниже). Словари также легко комбинируются и сливаются. И они могут быть напрямую сериализованы в YAML, который часто проще, чем пытаться создать действительный YAML с помощью шаблонов. Для пример:

     {# ---- Плохой пример ---- #} haproxy_conf: file.managed: - имя: /etc/haproxy/haproxy.cfg - шаблон: jinja {% if 'external_loadbalancer' в зернах.роли%} - источник: salt: //haproxy/external_haproxy.cfg {% elif 'internal_loadbalancer' в grains.roles%} - источник: salt: //haproxy/internal_haproxy.cfg {% endif%} - контекст: {% if 'external_loadbalancer' в grains.roles%} ssl_termination: Верно {% elif 'internal_loadbalancer' в grains.roles%} ssl_termination: Ложь {% endif%} {# ---- Лучший пример ---- #} {% load_yaml как haproxy_defaults%} common_settings: bind_port: 80 internal_loadbalancer: источник: соль: // haproxy / internal_haproxy.cfg настройки: bind_port: 8080 ssl_termination: Ложь external_loadbalancer: источник: соль: //haproxy/external_haproxy.cfg настройки: ssl_termination: Верно {% endload%} {% if 'external_loadbalancer' в grains.roles%} {% set haproxy = haproxy_defaults ['external_loadbalancer']%} {% elif 'internal_loadbalancer' в grains.roles%} {% set haproxy = haproxy_defaults ['internal_loadbalancer']%} {% endif%} {% do haproxy.settings.update (haproxy_defaults.common_settings)%} haproxy_conf: файл.удалось: - имя: /etc/haproxy/haproxy.cfg - шаблон: jinja - источник: {{haproxy.source}} - контекст: {{haproxy.settings | yaml ()}} 

    В приведенном выше примере все еще есть возможности для улучшения. Например, извлечение во внешний файл или замена условного оператора if-elif на вызов функции для более лаконичной фильтрации правильных данных. Однако государство сам по себе простой и разборчивый, данные отдельные, а также простые и разборчивые. И эти предлагаемые улучшения могут быть внесены в будущем без переделать состояние вообще!

    Избегайте сложной логики и программирования

    Jinja - это не Python.Он был создан программистами Python и разделяет многие семантика и некоторый синтаксис, но он не позволяет использовать произвольную функцию Python вызовы или импорт Python. Jinja - это быстрый и эффективный язык шаблонов, но синтаксис может быть многословным и визуально шумным.

    Когда использование Jinja в файле sls становится немного сложнее - длинные цепочки операторов if-elif-elif-else, вложенных условий, сложного словаря слияния, желая использовать наборы - вместо этого рассмотрите возможность использования другой соли средство визуализации, например средство визуализации Python.Как правило, если трудно читать будет сложно поддерживать - переключитесь на более удобный для чтения формат.

    Использовать альтернативные средства визуализации очень просто, используя синтаксис Salt "she-bang". вверху файла. Средство визуализации Python должно просто возвращать правильный структура данных высокого состояния. Последующий Пример - дерево состояний двух файлов sls, простого и сложного.

    /srv/salt/top.sls :

     база: '*': - common_configuration - role_configuration 

    / srv / salt / common_configuration.sls :

     common_users: user.present: - имена: - Ларри - кудрявый - мо 

    / srv / salt / roles_configuration :

     #! Py def run (): list_of_roles = набор () # В этом примере идентификатор миньона имеет вид 'web-03-dev'. # Легко получить доступ к словарю зерна: пытаться: app, instance_number, environment = __grains __ ["id"]. split ("-") номер_экземпляра = int (номер_экземпляра) кроме ValueError: app, instance_number, environment = ["Неизвестно", 0, "dev"] list_of_roles.добавить (приложение) если app == "web" и environment == "dev": list_of_roles.add ("основной") list_of_roles.add ("вторичный") elif app == "web" и environment == "staging": если instance_number == 0: list_of_roles.add ("основной") еще: list_of_roles.add ("вторичный") # Легко перекрестный вызов модулей исполнения Salt: если __salt __ ["myutils.query_valid_ec2_instance"] (): list_of_roles.add ("is_ec2_instance") возвращение { "set_roles_grains": { "зерна.присутствует ": [{" name ":" roles "}, {" value ": list (list_of_roles)},], }, } 
    Макросы Jinja

    В файлах Salt sls макросы Jinja полезны для одного и только для одного: создание мини-шаблонов, которые можно повторно использовать и отображать по запросу. Не падай в ловушку мышления о макросах как о функциях; Jinja - это не Python (см. выше).

    Макросы полезны для создания повторно используемых параметризованных состояний. Например:

     {% macro user_state (state_id, user_name, shell = '/ bin / bash', groups = [])%} {{state_id}}: пользователь.настоящее время: - имя: {{user_name}} - оболочка: {{shell}} - группы: {{группы | json ()}} {% endmacro%} {% для user_info в salt.pillar.get ('my_users', [])%} {{user_state ('user_number_' ~ loop.index, ** user_info)}} {% endfor%} 
    Макросы

    также полезны для создания одноразовых "сериализаторов", которые могут принимать структуру данных и запишите ее как файл конфигурации для конкретного домена. Для Например, следующий макрос можно использовать для записи файла конфигурации php.ini:

    / срв / соль / php.sls :

     php_ini: file.managed: - имя: /etc/php.ini - источник: salt: //php.ini.tmpl - шаблон: jinja - контекст: php_ini_settings: {{salt.pillar.get ('php_ini', {}) | json ()}} 

    /srv/pillar/php.sls :

     php_ini: PHP: двигатель: 'Вкл' short_open_tag: 'Выкл.' error_reporting: 'E_ALL & ~ E_DEPRECATED & ~ E_STRICT' 

    /srv/salt/php.ini.tmpl :

     {% макрос php_ini_serializer (данные)%} {% для section_name, name_val_pairs в данных.Предметы() %} [{{section_name}}] {% для имени, значение в name_val_pairs.items () -%} {{name}} = "{{val}}" {% endfor%} {% endfor%} {% endmacro%} ; Файл находится под управлением Salt в <{{source}}>. ; Ваши изменения будут перезаписаны. {{php_ini_serializer (php_ini_settings)}} 

    Абстрагирование статических значений по умолчанию в поисковой таблице

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

    Очевидным и распространенным примером этого являются имена пакетов для конкретной платформы и пути к файловой системе.Другой пример - нормальные значения по умолчанию для приложения, или общие настройки в компании или организации. Организация таких данных как словарь (он же хэш-карта, таблица поиска, ассоциативный массив) часто предоставляет легкое пространство имен и позволяет быстро и легко выполнять поиск. К тому же, использование словаря позволяет легко объединять и переопределять статические значения в таблице поиска с динамическими значениями, полученными из Pillar.

    Строгое соглашение в формулах соли - размещение специфичных для платформы данных, например в виде имен пакетов и путей файловой системы в файл с именем map.Джинджа который помещается рядом с файлами состояния.

    Ниже приводится пример формулы MySQL. Функция grains.filter_by выполняет поиск в этой таблице, используя зернистость os_family (по умолчанию).

    В результате переменная mysql назначается подмножеству таблица поиска для текущей платформы. Это позволяет государствам ссылаться на Например, имя пакета, не беспокоясь о базовой ОС.В синтаксис для ссылки на значение - это обычный поиск по словарю в Jinja, например {{mysql ['service']}} или сокращенное обозначение {{mysql.service}} .

    map.jinja :

     {% set mysql = salt ['grains.filter_by'] ({ 'Debian': { 'сервер': 'mysql-сервер', 'клиент': 'MySQL-клиент', 'сервис': 'MySQL', 'config': '/etc/mysql/my.cnf', 'python': 'python-mysqldb', }, 'Красная Шапка': { 'сервер': 'mysql-сервер', 'клиент': 'MySQL', 'сервис': 'mysqld', 'config': '/ etc / my.cnf ', 'python': 'MySQL-питон', }, 'Gentoo': { 'сервер': 'dev-db / mysql', 'клиент': 'dev-db / mysql', 'сервис': 'MySQL', 'config': '/etc/mysql/my.cnf', 'python': 'dev-python / mysql-python', }, }, merge = salt ['pillar.get'] ('mysql: lookup'))%} 

    Значения, определенные в файле карты, могут быть получены для текущей платформы в любом файл состояния, используя следующий синтаксис:

     {% from "mysql / map.jinja" импортировать mysql с контекстом%} mysql-сервер: упак.установлены: - имя: {{mysql.server}} service.running: - имя: {{mysql.service}} 
    Организация данных столпа

    Считается оптимальным использовать в формулах ожидание все параметры, связанные с формулой, которые будут помещены под ключ поиска второго уровня , в основном пространстве имен, предназначенном для хранения данных для конкретных сервис / программное обеспечение / и т. д., управляемый по формуле:

     MySQL: уважать: версия: 5.7.11 
    Сбор общих ценностей

    Общие значения могут быть собраны в базовый словарь .это сводит к минимуму повторение одинаковых значений в каждом из lookup_dict подкаталоги. Теперь только те значения, которые отличается от базового, должно быть указано заместителями:

    map.jinja :

     {% set mysql = salt ['grains.filter_by'] ({ 'дефолт': { 'сервер': 'mysql-сервер', 'клиент': 'MySQL-клиент', 'сервис': 'MySQL', 'config': '/etc/mysql/my.cnf', 'python': 'python-mysqldb', }, 'Debian': { }, 'Красная Шапка': { 'клиент': 'MySQL', 'сервис': 'mysqld', 'config': '/ etc / my.cnf ', 'python': 'MySQL-питон', }, 'Gentoo': { 'сервер': 'dev-db / mysql', 'клиент': 'dev-db / mysql', 'python': 'dev-python / mysql-python', }, }, merge = salt ['pillar.get'] ('mysql: lookup'), base = 'default')%} 
    Переопределение значений в таблице поиска

    Разрешить переопределение статических значений в таблицах поиска. Это простой шаблон, который еще раз увеличивает гибкость и возможность повторного использования файлов состояния.

    Аргумент слияния в filter_by указывает расположение словаря в Pillar, который можно использовать для переопределения значения, возвращенные из таблицы поиска.Если значение существует в Pillar, оно будет имеют приоритет.

    Это полезно, когда программное обеспечение или файлы конфигурации установлены на в нестандартных местах или на неподдерживаемых платформах. Например, следующие Pillar заменит значение config из приведенного выше вызова.

     MySQL: уважать: конфигурация: /usr/local/etc/mysql/my.cnf 

    Примечание

    Защита расширения содержимого специальными символами

    При создании шаблона имейте в виду, что в YAML есть специальные символы для цитирование, потоки и другая особая структура и содержание.Когда Джиндзя подстановка может содержать специальные символы, которые будут неправильно анализироваться Необходимо соблюдать осторожность с YAML. Рекомендуется использовать yaml_encode или yaml_dquote фильтры Jinja:

     {% - установить foo = 7,7%} {% - установить полосу = нет%} {% - set baz = true%} {% - set zap = 'Слово дня - «соленый». %} {% - set zip = '"Быстрая коричневая лисица ..."'%} foo: {{foo | yaml_encode}} бар: {{bar | yaml_encode}} baz: {{baz | yaml_encode}} zap: {{zap | yaml_encode}} zip: {{zip | yaml_dquote}} 

    Вышеупомянутое будет отображаться как показано ниже:

     foo: 7.7 bar: null baz: правда зап: "Слово дня \" солёное \ "." zip: "\" Быстрая коричневая лисица. . . \ "" 

    Функция filter_by выполняет простой поиск по словарю, но также позволяет получать данные из Pillar и переопределение данных, хранящихся в таблице поиска. Тот же рабочий процесс можно легко выполняется без использования filter_by ; другие словари помимо данных из Столб также можно использовать.

     {% set lookup_table = {...}%} {% do lookup_table.update (salt.pillar.get ('my: custom: data'))%} 
    Когда использовать таблицы поиска

    Файл map.jinja является условным обозначением в формулах соли. Это большее шаблон полезен для большого количества данных в самых разных рабочих процессах. Этот шаблон не ограничивается извлечением данных из одного файла или источника данных. Этот шаблон полезен, например, в States, Pillar и Reactor.

    Работа со структурой данных вместо, скажем, файла конфигурации позволяет данным быть собранными из нескольких источников (локальные файлы, удаленный столп, база данных запросы и т. д.), объединенные, переопределенные и найденные.

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

    Информация о платформе

    Очевидный образец, широко используемый в формулах соли, извлекает информация о платформе, такая как имена пакетов и пути к файловой системе в файл с именем map.jinja . Шаблон подробно объяснен выше.

    Вменяемые значения по умолчанию

    Настройки приложения могут хорошо подойти для этого шаблона.Магазин по умолчанию настройки вместе с самими состояниями и сохраняют переопределения и чувствительность настройки в Pillar. Объедините оба в один словарь, а затем напишите файл конфигурации или настроек приложения.

    В приведенном ниже примере хранится большая часть файла Apache Tomcat server.xml . рядом с состояниями Tomcat, а затем позволяет обновлять или дополнять значения через Столб. (В этом примере используется формат BadgerFish для преобразования JSON в XML.)

    / SRV / salt / tomcat / по умолчанию.yaml :

     Сервер: '@port': '8005' '@shutdown': ВЫКЛЮЧЕНИЕ GlobalNamingResources: Ресурс: '@auth': контейнер '@description': база данных пользователей, которую можно обновлять и сохранять. '@factory': org.apache.catalina.users.MemoryUserDatabaseFactory '@name': UserDatabase '@pathname': conf / tomcat-users.xml '@type': org.apache.catalina.UserDatabase # <... вырезать ...> 

    /srv/pillar/tomcat.sls :

     приложение X: server_xml_overrides: Сервер: Обслуживание: '@name': Каталина Разъем: '@port': '8009' '@protocol': AJP / 1.3 '@redirectPort': '8443' # <... вырезать ...> 

    /srv/salt/tomcat/server_xml.sls :

     {% import_yaml 'tomcat / defaults.yaml' как server_xml_defaults%} {% set server_xml_final_values ​​= salt.pillar.get ( 'appX: server_xml_overrides', по умолчанию = server_xml_defaults, merge = True) %} appX_server_xml: file.serialize: - имя: /etc/tomcat/server.xml - набор данных: {{server_xml_final_values ​​| json ()}} - форматтер: xml_badgerfish 

    Файл .состояние сериализации может обеспечить сокращение для создания некоторых файлов из структур данных. Есть также много примеры в Salt Formulas создания одноразовых "сериализаторов" (часто как Jinja макросы), которые переформатируют структуру данных в определенный формат файла конфигурации. Для Например, посмотрите на состояния nginx vhosts или на шаблон файла php.ini.

    Информация для окружающей среды

    Одно состояние можно использовать повторно, если оно параметризовано, как описано в раздел ниже, отделив данные, которые состояние будет использовать, от состояния, которое выполняет работу.Это может быть разница между развертыванием Application X и Application Y , или разница между производством и разработкой. Для пример:

    /srv/salt/app/deploy.sls :

     {# Загрузить файл карты. #} {% import_yaml 'app / defaults.yaml' как app_defaults%} {# Извлеките соответствующее подмножество для приложения, настроенного на текущем машина (в этом примере настроена через зерно). #} {% app = app_defaults.get (salt.grains.get ('role'))%} {# Разрешить значениям из Pillar (необязательно) обновлять значения из справочника стол.#} {% do app_defaults.update (salt.pillar.get ('myapp', {}))%} deploy_application: git.latest: - имя: {{app.repo_url}} - версия: {{app.version}} - цель: {{app.deploy_dir}} myco / myapp / развернуто: event.send: - данные: версия: {{app.version}} - на изменениях: - git: deploy_application 

    /srv/salt/app/defaults.yaml :

     приложение X: repo_url: [email protected]/myco/appX.git цель: / var / www / appX версия: мастер приложение: repo_url: git @ github.com / myco / appY.git цель: / var / www / appY версия: v1.2.3.4 

    Файлы SLS специального назначения

    Каждый файл sls в формуле должен стремиться к одной цели. Это увеличивает возможность повторного использования этого файла за счет предотвращения объединения несвязанных задач все вместе.

    В качестве примера, базовая формула Apache должна устанавливать только Apache httpd сервер и запустите службу httpd. Это основное ожидаемое поведение, когда установка Apache. Он не должен выполнять дополнительных изменений, таких как установка Файл конфигурации Apache или создайте vhosts.

    Если формула является одноцелевой, как в приведенном выше примере, другие формулы и также другие состояния могут включать и использовать эту формулу с реквизитами и другими глобальными аргументами состояния без включения нежелательных или непреднамеренных побочных эффектов.

    Ниже приведен пример передовой практики многократно используемой формулы Apache. (Это для краткости пропускает параметры, специфичные для платформы. Смотрите полный apache-formula для подробностей.)

     # apache / init.sls apache: pkg.installed: [...] service.running: [...] # apache / mod_wsgi.sls включают: - apache mod_wsgi: pkg.installed: [...] - требовать: - пакет: apache # apache / conf.sls включают: - apache apache_conf: file.managed: [...] - watch_in: - сервис: apache 

    Чтобы проиллюстрировать плохой пример, предположим, что приведенная выше формула Apache установила Apache и также создал vhost по умолчанию. Состояние mod_wsgi не может включать формулу Apache для создания этого дерева зависимостей без установки ненужный дефолтный vhost.

    Формулы должны быть многоразовыми. Избегайте сцепления несвязанные действия вместе.

    Параметризация

    Параметризация - ключевая особенность Salt Formulas , а также Salt Состояния. Параметризация позволяет повторно использовать одну формулу во многих операционные системы; для повторного использования в производстве, разработке или постановке среды; и для повторного использования многими людьми с разными целями.

    Написание состояний, указание порядка и зависимостей - это та часть, которая принимает дольше всего писать и тестировать.Заполнение этих состояний данными, такими как пользователи или имена пакетов или расположение файлов - самая простая часть. Сколько пользователей, что это за пользователи названы, или где находятся файлы, все детали реализации, которые должен быть параметризован . Это разделение между состоянием и данными, которые заполняет состояние, создает формулу многократного использования.

    В приведенном ниже примере данные, заполняющие состояние, могут поступать откуда угодно. - он может быть жестко запрограммирован наверху состояния, он может поступать из внешнего файл, он может исходить из Pillar, он может исходить из вызова функции выполнения или он может поступать из запроса к базе данных.Само состояние не меняется откуда берутся данные. Производственные данные будут отличаться от данных разработки будет варьироваться от данных от одной компании к другой, однако само государство остается тот же самый.

     {% set user_list = [ {'name': 'larry', 'shell': 'bash'}, {'name': 'curly', 'shell': 'bash'}, {'name': 'moe', 'shell': 'zsh'}, ]%} {# или #} {% set user_list = salt ['pillar.get'] ('user_list')%} {# или #} {% load_json "default_users.json" как user_list%} {# или #} {% set user_list = salt ['acme_utils.get_user_list '] ()%} {% для пользователя в list_list%} {{user.name}}: user.present: - имя: {{user.name}} - оболочка: {{user.shell}} {% endfor%} 

    Конфигурация

    Формулы

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

    Например, формула для установки Apache не должна изменять значение по умолчанию Файл конфигурации Apache, установленный пакетом ОС.Однако Apache формула должна включать состояние для изменения или отмены значения по умолчанию Файл конфигурации.

    Столб отменяет

    Поиск столбцов должен использовать сейф get () и должен предоставить значение по умолчанию. Создайте локальные переменные с помощью Jinja устанавливает конструкцию , чтобы повысить удобочитаемость и избежать потенциально сотен или тысячи вызовов функций в большом дереве состояний.

     {% from "apache / map.jinja" импортировать apache с контекстом%} {% set settings = соль ['столб.получить '] (' apache ', {})%} mod_status: file.managed: - имя: {{apache.conf_dir}} - источник: {{settings.get ('mod_status_conf', 'salt: //apache/mod_status.conf')}} - шаблон: {{settings.get ('template_engine', 'jinja')}} 

    Любые значения по умолчанию, используемые в формуле, также должны быть задокументированы в файл pillar.example в корне репозитория. Комментарии должны быть широко используется для объяснения назначения каждого значения конфигурации. К тому же, пользователи должны иметь возможность копировать и вставлять содержимое этого файла в свои собственные Столп для внесения любых желаемых изменений.

    Создание сценариев

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

     {% if '/ storage' в соли ['mount.active'] ()%} /usr/local/etc/myfile.conf: файл: - символическая ссылка - цель: /storage/myfile.conf {% endif%} 

    Макросы Jinja для инкапсуляции логики или условных выражений не рекомендуются в пользу написание пользовательских модулей исполнения на Python.

    Структура репозитория

    Базовый репозиторий формул должен иметь следующую структуру:

     фу-формула | - foo / | | - карта.Джиндзя | | - init.sls | `- bar.sls | - CHANGELOG.rst | - ЛИЦЕНЗИЯ | - pillar.example | - README.rst `- ВЕРСИЯ 

    См. Также

    шаблон-формула

    Репозиторий шаблонов формул имеет предварительно созданный макет, который служит базовой структурой для нового хранилища формул. Просто скопируйте файлы оттуда и редактируйте их.

    README.rst

    README должен подробно описать каждый доступный файл .sls , объяснив, что он есть, имеет ли он какие-либо зависимости от других формул, имеет ли он целевая платформа, а также любые другие инструкции или советы по установке или использованию.

    Пример скелета для файла README.rst :

     === фу === Установите и настройте сервис FOO. **НОТА** См. Полную инструкцию по установке и использованию Salt Formulas.  `_. Доступные состояния ================ .. содержание :: :местный: `фу` ------- Установите пакет foo и включите службу. `foo.bar` ----------- Установите пакет bar. 

    ИЗМЕНЕНИЕ.rst

    Файл CHANGELOG.rst должен детализировать отдельные версии, их дату выпуска и набор маркеров для каждой версии с указанием общие изменения в данной версии формулы.

    Пример скелета для файла CHANGELOG.rst :

    CHANGELOG.rst :

     формула foo =========== 0.0.2 (01.01.2013) - Реорганизованный макет файла формулы - Исправлено имя файла, используемое для шаблона выскочки журнала. - Разрешить сообщение столбца по умолчанию, если не указано иное 

    Управление версиями

    Формула

    версируется в соответствии с семантическим управлением версиями, https: // semver.org /.

    Примечание

    Учитывая номер версии MAJOR.MINOR.PATCH, увеличьте:

    1. ОСНОВНАЯ версия при внесении несовместимых изменений API,

    2. НЕЗАВИСИМАЯ версия, когда вы добавляете функциональность обратно совместимым образом, и

    3. PATCH, когда вы исправляете обратно совместимые ошибки.

    Дополнительные метки для метаданных предварительной версии и сборки доступны как расширения к ГЛАВНОМУ МИНОРУ.Формат PATCH.

    Версии формул

    отслеживаются с помощью тегов Git, а также файла VERSION в репозитории формул. ВЕРСИЯ Файл должен содержать текущий выпущенная версия конкретной формулы.

    .

    Simple English Wikipedia, бесплатная энциклопедия

    В химии соль - это любое нейтральное химическое соединение, состоящее из катионов (положительных ионов), прикрепленных к анионам (отрицательные ионы). Основной вид соли - хлорид натрия.

    Смеси солей в воде называются электролитами. Электричество может проходить через электролиты, а также через расплавленные соли.

    Соли могут растопить лед, поскольку соли понижают температуру, необходимую для замерзания жидкости. [1] Из-за этого улицы иногда обрабатывают солью зимой, если температура лишь немного ниже нуля. [2]

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

    См. Также Поваренная соль
    Внутри соляной шахты в Румынии

    Слово «соль» на английском языке часто означает «поваренная соль» или «пищевая соль» (соль, которую можно есть). Этот вид соли состоит в основном из хлорида натрия (NaCl). Это один из немногих минералов, которые много употребляют в пищу люди, но его можно использовать не только для придания вкуса пище, но и для других целей.

    Существуют разные виды пищевой соли: нерафинированная (например, морская), очищенная (поваренная) и йодированная. Это кристаллическое твердое вещество белого, бледно-розового или светло-серого цвета. Обычно его берут из морской воды или каменных отложений. Природная морская соль имеет небольшие части и кусочки других минералов, кроме хлорида натрия. Каменные соли, которые можно есть, иногда имеют сероватый цвет из-за этих других минералов.

    Натрий (Na) и хлор (Cl) - два элемента, из которых состоит хлорид натрия.Оба они необходимы всем живым существам, включая человека, но их не всегда едят в виде соли, где они встречаются вместе в больших количествах. Некоторые народы, например, племя яномами в Южной Америке, едят очень мало соли. Соль используется для контроля количества воды в организме. Соленый аромат также является одним из основных вкусов. Тяга к соли может быть вызвана недостатком в организме минералов, таких как хлорид натрия.

    Слишком большое количество соли может повысить вероятность возникновения проблем со здоровьем, например, высокого кровяного давления.При приготовлении пищи соль используется в качестве консерванта, чтобы еда оставалась дольше, и в качестве приправы для аромата.

    Источники поваренной соли [изменить | изменить источник]

    Есть разные способы получить поваренную соль:

    Поскольку многие микробы не могут жить в соли, с давних времен ее использовали для консервирования пищи. Его использование в качестве пищевого консерванта помогало хранить большие объемы продуктов, отправлять их в долгий путь и есть в течение всего года. Это помогло расти населению, развиваться городам и прокормить солдат на войнах.Соль, вероятно, использовалась в Египте еще в 4000 году до нашей эры. В древние времена соль была более ценной, чем сейчас, потому что ее было трудно достать во многих местах, и ее можно было использовать не только для придания вкуса пище, но и для того, чтобы она прослужила дольше. Это позволяло хранить пищу после окончания сезона и брать ее с собой в длительные поездки.

    Люди часто обменивали соль на другие вещи. Он имел большую ценность в Китае, Турции, на Ближнем Востоке и в Африке. В Средиземноморье, включая Древний Рим, соль даже использовалась для денег.Слово зарплата происходит от латинского слова «соль», потому что они платили людям солью. После того, как люди научились добывать соль из океана, соль стала дешевле. Финикийцы были одними из первых, кто придумал, как это сделать, вылив на сушу морскую воду. Затем, когда она высохла, они собрали соль и продали ее.

    Еще одно применение соли было на войне, как способ наказать город, уничтожив урожай. Это называется «засолить землю». Говорят, что ассирийцы одними из первых сделали это со своими соседями.

    Цвет [изменить | изменить источник]

    Соли могут быть разных цветов, таких как: желтый (хромат натрия), оранжевый (дихромат калия), красный (сульфид ртути), лиловый (гексагидрат хлорида кобальта), синий (пентагидрат сульфата меди, гексацианоферрат железа), зеленый ( оксид никеля), бесцветный (сульфат магния), белый (диоксид титана) и черный (диоксид марганца). Большинство минералов и неорганических пигментов, а также многие синтетические органические красители представляют собой соли.

    .

    Корейская рисовая каша доенджан и шпинат - FutureDish

    Корейская рисовая каша доенджанг и шпинат. Когда мы росли, у нас всегда было за обеденным столом какой-нибудь тип Jjigae (корейское тушеное мясо). Часто это был традиционный Doenjang Jjigae. На следующее утро - спустя много времени после того, как моя мама ушла на работу - мне нравилось просыпаться медленно и в конце концов приготовить свой любимый завтрак ! Я быстро разогревал оставшееся тушеное мясо доенджан. Затем на сковороде разбейте 2 яйца и взбейте их.Когда тушеное мясо закипало, я добавляла несколько ложек свежего риса. Затем яичницу и все хорошо перемешать. Просто, но так душевно и комфортно. Это было и остается моим определением корейской пищи для души. Поэтому сегодня я хотел воссоздать это детское блюдо с небольшим поворотом - и горсткой шпината!

    Я получил этот рецепт от шеф-повара Пэк Чон Вона. Мне очень понравилась идея смешать шпинат с рисовой кашей на основе доенджан (также известной как джук). Моя любимая часть этого блюда заключается в том, что кусочки картофеля выделяют крахмал в бульон, когда он медленно кипит.Землистый вкус денджан, смешанный с ноткой картофельного вкуса, восхитителен. Кроме того, эта рисовая каша не требует приправы. На самом деле, вы можете найти его немного мягким. Но этот способ хорош - и идеально подходит для готовки, когда вы чувствуете себя неважно.

    Надеюсь, вы почините себе чашу и у вас будет несколько минут, чтобы подумать о прошедшем году! Нам - в Future Neighbor - повезло, что мы собрали в Интернете аудиторию, с которой мы можем готовить вместе, а также делиться своими знаниями / неудачами в этом безумном приключении ... называемом жизнью!

    -Daniel out 🙃🕺

    Ингредиенты

    Шпинат и рисовая каша Doenjang
    • 3 столовые ложки говяжьего фарша (или свинины, или рубленых грибов)
    • 1 столовая ложка растительного масла
    • 1 столовая ложка кунжутного масла
    • Приготовленный короткозернистый рис
    • 4 стакана воды
    • 2 столовые ложки пасты Doenjang
    • 1 столовая ложка измельченного чеснока (или 3 зубчика чеснока)
    • 1/2 стакана мелко нарезанного картофеля (1 картофель среднего размера)
    • 1/2 чашка мелко нарезанного лука (Или используйте 1/2 целого лука)
    • 2 большие пригоршни шпината
    • 2-3 стебля зеленого лука (каждый, размером с предплечье)
    Обжарка с беконом и капустой
    • 1/4 кочана зеленой капусты
    • 5-6 полосок бекона
    • Несколько ломтиков красного перца чили (по желанию)
    • Несколько встряхиваний соли (по желанию)
    • Несколько коктейлей из черного перца (по желанию)

    Instructio ns

    Рисовая каша со шпинатом и доенджанг
    • Выньте большую кастрюлю.Добавьте растительное масло (1 столовая ложка) и кунжутное масло (1 столовая ложка). Поставьте кастрюлю на средний или сильный огонь. Когда масло станет горячим, положите его в говяжий фарш (3 столовые ложки). Жарьте, помешивая, 1 минуту. Затем добавьте вареный короткозернистый рис (1 стакан) и продолжайте обжаривать, пока мясо не потеряет красный цвет. Затем добавьте воды (4 стакана).

    • Затем добавьте пасту Doenjang (2 столовые ложки). Затем измельченный чеснок (1 столовая ложка). Пока мы ждем закипания кастрюли, приготовим несколько овощей.

    • Нарежьте мелкими кубиками 1/2 луковицы и 1 картофелину среднего размера. Нарежьте их очень маленькими кусочками (см. Видео). Вместе они должны составить 1 стакан. Добавьте это в рагу.

    • Теперь убавьте кастрюлю до среднего огня, дайте бульону закипеть и убавьте (без крышки) примерно 15-20 минут.

    • Тем временем тщательно промойте шпинат (2 большие горсти). Дать шпинату несколько нарезок. Затем также нарежьте стебли зеленого лука тонкими кружками.

    • После 15-20 минут кипячения бульон должен уменьшиться и иметь консистенцию каши. (Примечание: если он слишком сильно уменьшился, просто добавьте несколько капель воды). Если консистенция хорошая, добавьте нарезанный шпинат (2 большие горсти). Осторожно добавьте шпинат в кашу. Затем добавьте ломтики зеленого лука. Дайте шпинату закипеть 2 минуты, чтобы он стал мягким. Выключите огонь.

    • Разложите кашу по мискам и сверху залейте кунжутом.(Необязательно: вы можете добавить несколько капель соевого соуса в каждую миску, если хотите, чтобы он был более приправленным).

    Простая жарка с беконом и капустой
    • Нарежьте бекон небольшими кусочками. Нарежьте зеленую капусту (1/4 целого) небольшими кусочками. Поставьте сковороду на сильный огонь. Когда он станет горячим, добавьте бекон и жарьте его до получения хрустящей корочки.

    • Затем добавьте кусочки капусты. А также нарезанный перец чили (по желанию).Жаркое движения, пока капуста не начнет потеть и не станет слегка полупрозрачной. (Примечание: не жарьте слишком долго - пока они не начнут потеть)

    • Дайте ему попробовать. Не стесняйтесь приправлять его несколькими щепотками соли и черного перца.

    .

    Смотрите также