Шаги (Host)¶
-
class
carnival.
Step
(**context)¶ Объект, предназначенный для выполнения группы комманд с какой-то целью. Вызывается из класса carnival.Task для выполнения комманд (carnival.cmd) на определенных хостах.
Может требовать наличие определенных контекстных переменных для работы, указав их в аргументах метода run. Может вернуть значение для дальнейшего использования.
В следующем примере переменная disk_name будет передана в run, а install пропущена.
>>> host = Host( >>> # Адрес >>> "1.2.3.4", >>> >>> # Контекст хоста >>> disk_name="/dev/sda1", install=['nginx', 'htop', ] >>> ) >>> ... >>> class DiskUsage(Step): >>> def run(self, disk_name: str): >>> ...
-
__init__
(**context)¶ Параметры: context – Переменные контекста, назначенные при вызове Шага
-
run
(**kwargs)¶ Метод который нужно определить для выполнения комманд
Параметры: kwargs – Автоматические подставляемые переменные контекста
-
Работа с контекстом¶
- Существует несколько видов контекста:
- Специальные переменные контекста
- Контекст хоста (Host.__init__(…, **context))
- Контекст шага (Step.__init__(**context))
- Специальные переменные контекста:
- secrets - секреты из модуля secrets
- host - host, на котором вызвано выполнение.
Перегрузка контекста¶
Список необходимых переменных контекста для шага строится автоматически из сигнатуры метода Step.run из переменных контекста хоста и шага. Специальные переменные контекста имеют самый низкий приоритет. Если существует переменная контекста хоста с таким же именем - она будет иметь более высокий приоритет, и перезапишет значение в аргументе 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)
>>>