################### Шаги (Step) ################### .. autoclass:: carnival.Step :special-members: __init__ :members: run Работа с контекстом ======================= Существует несколько видов контекста: - Специальные переменные контекста - Переменные окружения, начинающиеся с префикса `CARNIVAL_CTX_`. Переменную CARNIVAL_CTX_WORKDIR можно получить по имени WORKDIR. Поддерживается `.env-файлы`. - Контекст хоста (`Host.__init__(..., **context)`). - Контекст шага (`Step.__init__(**context)`). Специальные переменные контекста: - `host` - host, на котором вызвано выполнение. Перегрузка контекста ====================== Список необходимых переменных контекста для шага строится автоматически из сигнатуры метода `Step.run` из переменных контекста хоста и шага, поддерживается `**kwargs`. - Специальные переменные контекста имеют самый низкий приоритет. Если существует переменная контекста хоста с таким же именем - она будет иметь более высокий приоритет, и перезапишет значение в аргументе `Step.run`. - Переменные окружения имеют приоритет выше, чем специальны переменные. - Переменные контекста шага имеют самый высокий приоритет, они перезаписывают любые другие переменные. >>> host = Host("1.2.3.4", disk_name="/dev/sda1", install=['nginx', 'htop', ]) >>> >>> class DiskUsage(Step): >>> def run(self, disk_name: str): >>> return cmd.cli.run(f"du -h {disk_name}") >>> >>> class FrontendDiskUsage(Task): >>> def run(self): >>> # получить использование диска `/dev/sda1` (`host.disk_name`) >>> self.step(DiskUsage(), host) >>> >>> # получить использование диска `/dev/sda2` >>> # (перегружается из контекста шага) >>> self.step(DiskUsage(disk_name="/dev/sda2"), host) >>>