package devopsmodules import ( "fmt" "rubric/utils" "strings" ) type Module struct { Key string Aliases []string Title string Description string Run func() } var All = []Module{ GitModule, DockerModule, KubernetesModule, CicdModule, AnsibleModule, TerraformModule, MonitoringModule, NginxModule, } func Find(key string) (Module, bool) { key = strings.ToLower(strings.TrimSpace(key)) for _, m := range All { if m.Key == key { return m, true } for _, a := range m.Aliases { if a == key { return m, true } } } return Module{}, false } func ListModules() { fmt.Printf("\n%s%sРазделы справочника DevOps:%s\n\n", utils.ColorBold, utils.ColorCyan, utils.ColorReset) for i, m := range All { fmt.Printf(" %s%d.%s %-14s — %s\n", utils.ColorDim, i+1, utils.ColorReset, utils.ColorYellow+utils.ColorBold+m.Key+utils.ColorReset, m.Title, ) } fmt.Println() } // Keywords возвращает ключевые слова для поиска по модулю func Keywords(key string) []string { kw := map[string][]string{ "git": { "git", "ветки", "branch", "merge", "rebase", "commit", "push", "pull", "clone", "stash", "tag", "cherry-pick", "bisect", "gitflow", "GitHub", "GitLab", "pull request", "PR", "конфликты", "conflicts", "remote", "origin", "HEAD", "diff", "log", "blame", "workflow", }, "docker": { "docker", "контейнеры", "containers", "образы", "images", "Dockerfile", "docker compose", "volumes", "тома", "networks", "сети", "registry", "Hub", "GHCR", "ECR", "podman", "buildx", "multi-stage", "RUN", "CMD", "ENTRYPOINT", "COPY", "FROM", "healthcheck", }, "kubernetes": { "kubernetes", "k8s", "kubectl", "Pod", "Deployment", "Service", "Ingress", "ConfigMap", "Secret", "Namespace", "PVC", "PV", "StatefulSet", "DaemonSet", "Job", "CronJob", "Helm", "chart", "RBAC", "Role", "ClusterRole", "HPA", "autoscaling", "kube", "node", "cluster", "контейнер", "оркестрация", }, "cicd": { "CI", "CD", "пайплайн", "pipeline", "GitHub Actions", "GitLab CI", "Jenkins", "ArgoCD", "GitOps", "workflow", "job", "runner", "артефакт", "artifact", "deploy", "деплой", "тесты", "автоматизация", "continuous integration", "continuous delivery", "YAML", }, "ansible": { "ansible", "playbook", "inventory", "инвентарь", "роли", "roles", "модули", "modules", "задачи", "tasks", "handlers", "шаблоны", "templates", "Jinja2", "vault", "секреты", "agentless", "SSH", "конфигурация", "автоматизация", "idempotent", }, "terraform": { "terraform", "IaC", "инфраструктура как код", "HCL", "провайдер", "provider", "ресурс", "resource", "state", "план", "plan", "apply", "destroy", "модуль", "module", "workspace", "backend", "S3", "AWS", "GCP", "Azure", "переменные", "output", "opentofu", "tofu", "форк", "fork", "MPL", "BSL", "лицензия", "license", "Linux Foundation", "state encryption", "шифрование state", }, "monitoring": { "мониторинг", "Prometheus", "Grafana", "AlertManager", "Loki", "метрики", "metrics", "алерты", "alerts", "PromQL", "LogQL", "dashboard", "дашборд", "exporter", "node exporter", "Tempo", "трассировка", "tracing", "observability", "наблюдаемость", "SIEM", "логи", "scrape", }, "nginx": { "nginx", "веб-сервер", "reverse proxy", "балансировка", "load balancing", "upstream", "virtual host", "server block", "SSL", "TLS", "HTTPS", "Let's Encrypt", "certbot", "HAProxy", "rate limiting", "кэширование", "cache", "gzip", "location", "proxy_pass", "CORS", }, } if v, ok := kw[key]; ok { return v } return []string{} }