Ответ
В DevOps и автоматизации полиморфизм — это возможность использовать единый интерфейс (например, команду, функцию, модуль) для работы с разными типами данных или системами, где конкретное поведение определяется контекстом. Это ключ к созданию переиспользуемых и гибких скриптов.
Пример 1: Полиморфизм в модулях Ansible.
Модуль package ведет себя по-разному в зависимости от ОС:
- name: Install a package (Polymorphic task)
package:
name: nginx
state: present
# На Debian/Ubuntu выполнит `apt install nginx`
# На RHEL/CentOS выполнит `yum install nginx`
# На Alpine выполнит `apk add nginx`
Один и тот же модуль package адаптирует свою реализацию под менеджер пакетов целевой системы.
Пример 2: Функция в Python для работы с разными облачными провайдерами.
def create_vm(provider, config):
"""Полиморфная функция создания VM."""
if provider == "aws":
# Вызов boto3 EC2 client
response = ec2.run_instances(...)
return response['Instances'][0]['InstanceId']
elif provider == "gcp":
# Вызов google-cloud-compute client
instance = compute.instances().insert(...).execute()
return instance['id']
elif provider == "azure":
# Вызов azure-mgmt-compute client
poller = compute_client.virtual_machines.begin_create_or_update(...)
return poller.result().name
else:
raise ValueError(f"Unsupported provider: {provider}")
# Единый интерфейс для разных провайдеров
vm_id_aws = create_vm("aws", aws_config)
vm_id_gcp = create_vm("gcp", gcp_config)
Пример 3: Использование общих команд Linux для разных целей (ad-hoc полиморфизм).
Команда jq ведет себя по-разному в зависимости от переданного фильтра:
# Извлечение поля
cat data.json | jq '.name'
# Фильтрация массива
cat data.json | jq '.[] | select(.status == "up")'
# Форматирование вывода
cat data.json | jq -r '.[].ip'
Вывод для DevOps: Полиморфизм позволяет писать абстрактные playbook'и Ansible, Terraform-модули или скрипты CI/CD, которые могут работать с разнородным окружением (разные ОС, облака, версии ПО), уменьшая дублирование кода и упрощая поддержку.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶