워크플로우
Semaphore는 현재 각 작업 템플릿을 독립적인 단위로 취급합니다 — 여러 템플릿을 다단계 실행 파이프라인으로 연결하는 내장 방법이 없습니다. 이 기능은 워크플로우를 도입합니다 — 조건부 분기, 단계 간 변수 전달, 선택적 인간 승인 게이트를 갖춘 작업 템플릿의 방향 비순환 그래프(DAG)입니다. 설계는 AWX Workflow Job Templates, Rundeck 작업 워크플로우, Jenkins/GitLab CI 파이프라인 개념을 참고합니다.
Pro
- 워크플로우 템플릿 — 조건(
on_success,on_failure,always)이 있는 방향 간선으로 연결된 작업 템플릿 노드의 DAG를 정의하는 새로운 최상위 엔티티를 도입하여 프로젝트 내에서 다단계 자동화 파이프라인을 가능하게 합니다. (#3182, #2334, #1383, #836) - 워크플로우 실행 엔진 — 간선 조건을 준수하고 독립적인 분기를 병렬로 실행하며, 여러 부모를 가진 노드에 ALL 수렴을 적용하여 토폴로지 순서로 워크플로우 노드를 실행합니다. (#2281, #3088)
- 워크플로우 실행 대시보드 — 노드별 상태(대기 중, 실행 중, 성공, 실패, 건너뜀)가 표시된 DAG 그래프, 클릭 가능한 노드 로그, 전체 타이밍을 보여주는 워크플로우 실행의 통합 뷰를 제공합니다.
- 노드 간 변수 전달 — 작업 템플릿이 출력 변수를 생성(알려진 파일 또는 Ansible
set_stats경유)하고 하위 노드에 추가 변수로 자동 주입할 수 있도록 합니다. (#3182) - 워크플로우 스케줄링 및 API 트리거 — 워크플로우의 cron 스케줄링, API 트리거 실행, webhook 트리거를 지원하며 워크플로우 수준의 선택적 설문 변수를 포함합니다. (#3088)
- 비주얼 워크플로우 편집기 — 실시간 DAG 검증, 노드 위치 지정, 간선의 조건 선택기를 갖춘 UI에서 워크플로우를 설계하는 드래그 앤 드롭 그래픽 편집기.
- 노드별 오버라이드 — 워크플로우 노드 수준에서 템플릿의 인벤토리, 자격 증명, 변수 그룹 또는 CLI 인수를 오버라이드하여 단일 워크플로우 내에서 다른 환경 간에 동일한 템플릿을 재사용할 수 있습니다.
- 승인 게이트 — 구성 가능한 타임아웃, 승인자 알림, UI 또는 API에서의 승인/거부 작업을 통해 지정된 지점에서 워크플로우 실행을 일시 중지하고 인간의 승인을 기다립니다.
Enterprise
- 워크플로우 RBAC — 워크플로우 생성, 편집, 실행, 승인을 위한 세분화된 권한, 역할 기반 승인 게이트 할당 및 감사 로깅.
- 프로젝트 간 워크플로우 — 워크플로우에서 다른 프로젝트의 작업 템플릿을 참조하여 인프라, 애플리케이션, 모니터링 프로젝트에 걸친 조직 전체 자동화 파이프라인을 가능하게 합니다.
- 워크플로우 버전 관리 및 롤백 — diff가 포함된 워크플로우 정의의 버전 기록을 유지하고, 이전 버전을 복원하며, 각 실행에 사용된 버전을 기록합니다.
LDAP 및 OpenID 그룹 매핑
Semaphore는 인증을 위해 LDAP 및 OpenID Connect(OIDC)를 지원하지만, 통합은 로그인에서 멈춥니다 — ID 공급자 그룹 멤버십을 기반으로 한 자동 역할 또는 프로젝트 할당이 없습니다. 모든 OIDC/LDAP 사용자는 첫 로그인 후 수동으로 프로젝트 및 역할에 할당해야 합니다. 또한 OIDC 리다이렉트 처리, 클레임 파싱, LDAP 구성에 인증 경험을 불안정하게 만드는 여러 버그가 있습니다.
Community
- 클레임별 OIDC 로그인 제한 — 특정 클레임 값(예: 필수 그룹 멤버십 또는 이메일 도메인)을 가진 사용자만 로그인하도록 허용합니다. (#2626, #2938)
- SSO 자동 로그인 — 로그인 화면을 우회하고 OIDC/SSO 공급자로 직접 리다이렉트하며, SSO가 다운된 경우를 위한 복구용 안전 URL을 제공합니다. (#2548, #2899)
- OIDC PKCE 지원 — RFC 9700에서 권장하는 대로 OIDC 인가 코드 흐름에 Proof Key for Code Exchange를 추가합니다. (#3072)
- OIDC 환경 변수 구성 — 설정 파일만이 아닌 환경 변수를 통해 OIDC 공급자를 구성할 수 있어, 컨테이너에서의 시크릿 관리를 간소화합니다. (#2528, #3120)
- web_host/web_root 사용 시 OIDC 리다이렉트 수정 —
web_host가 비어 있거나web_root가 하위 경로로 설정된 경우 OIDC 로그인 후 404 오류를 해결합니다. (#2681, #1524, #2532, #3121) - OIDC 클레임 처리 수정 —
username_claim이 무시되고,email클레임이 인식되지 않으며,client_secret_file이 잘못된 요청을 생성하는 문제를 해결합니다. (#1731, #2818, #3122) - LDAP 클레임 표현식 수정 — LDAP 매핑에서 깨진 템플릿 표현식을 해결합니다(예:
mail | {{ .username }}@domain.com이<no value>로 해석되는 문제). (#3127) - LDAP 사용자 이름 할당 수정 — LDAP 사용자가 무작위로 생성된 문자열 대신 실제 LDAP 사용자 이름을 받도록 합니다. (#3688)
- LDAP 로컬 인증 폴백 — LDAP가 활성화된 경우에도 로컬 관리자 계정이 로그인할 수 있도록 허용하여, LDAP 서버가 다운된 경우 잠금을 방지합니다. (#1363)
- LDAP 디버그 로깅 — 문제 해결이 가능하도록 LDAP 인증 실패에 대한 유용한 로그 출력을 추가합니다. (#2932)
- OIDC/LDAP 사용자-로컬 계정 연결 — 중복을 생성하지 않고 기존 로컬 계정을 외부 ID 공급자로 변환하거나 연결할 수 있습니다. (#3339)
- OIDC 공급자 로그아웃 — Semaphore에서 로그아웃할 때 IdP 세션(예: Keycloak)을 종료하여 적절한 계정 전환을 가능하게 합니다. (#1496)
Pro
- LDAP 자격 증명을 접근 키에 동기화 — 선택적으로 로그인 시 LDAP 비밀번호가 변경되면 접근 키 비밀번호를 자동 업데이트하여 Ansible 자격 증명을 동기화 상태로 유지합니다. (#3696)
Enterprise
- OIDC 그룹-역할 매핑 — OIDC 클레임(예:
groups클레임)을 기반으로 Semaphore 역할 및 프로젝트 멤버십을 자동 할당하여, 첫 로그인 후 수동 사용자 설정을 제거합니다. (#1499, #2483) - LDAP 그룹-역할 매핑 — 그룹 멤버십을 통한 관리자 역할 할당을 포함하여 Active Directory/LDAP 그룹을 Semaphore 역할에 매핑합니다. (#3226, #1316)
- LDAP/OIDC 통합 전체 RBAC — 외부 ID 공급자 그룹에서의 자동 역할 할당으로 세분화된 역할 기반 접근 제어(글로벌 관리자, 프로젝트 관리자, 프로젝트 사용자, 읽기 전용)를 구현합니다. (#891)
- 플러그형 인증 아키텍처 — 여러 인증 백엔드를 지원하고 새 공급자 추가를 간소화하기 위해 인증을 공급자 인터페이스로 추상화합니다. (#465, #1820)
- 사용자 삭제 시 고아 데이터 수정 — 사용자를 삭제할 때
project__user매핑을 정리하여 팀 뷰 충돌을 방지합니다. (#3514)
내장 인벤토리 관리 시스템
오늘날 Semaphore는 인벤토리를 불투명한 blob으로 취급합니다 — 사용자는 원시 INI/YAML을 단일 텍스트 상자에 붙여넣거나 저장소의 파일을 가리킵니다. 호스트를 추가하거나, 호스트를 그룹으로 구성하거나, UI에서 호스트 및 그룹 변수를 설정하는 구조화된 방법이 없습니다. 이 기능은 내장 인벤토리 관리 시스템을 도입합니다: 호스트, 그룹, 변수가 Semaphore에 저장되고 웹 인터페이스에서 직접 편집 가능한 일급 객체이며, 표준 Ansible 인벤토리로 완전히 내보낼 수 있는 구조화된 UI 관리 인벤토리 편집기(AWX 인벤토리와 유사)입니다.
Community
- 구조화된 호스트 및 그룹 편집기 — 원시 인벤토리 텍스트 상자를 직접 편집하는 대신 UI를 통해 호스트, 호스트의 주소/별칭, 호스트 그룹을 관리하며, 호스트 및 그룹에 대한 추가/제거/이름 변경 작업을 제공합니다. (#836)
- UI에서의 호스트 및 그룹 변수 —
host_vars및group_vars를 호스트별 및 그룹별 구조화된 키/값 쌍으로 정의하여, 연결 설정 및 사용자 정의 변수를 더 이상 인벤토리 본문에 직접 삽입할 필요가 없습니다. - 개선된 인라인 인벤토리 편집기 — 작은 인벤토리 텍스트 상자를 YAML/INI 구문 강조 및 검증 기능이 있는 더 크고 크기 조정 가능한 편집기로 교체하여 기존 인라인 편집 모드를 실제로 사용 가능하게 만듭니다. (#698, #1650)
- 기존 인벤토리 가져오기 — 기존 INI/YAML 인벤토리 파일을 가져오거나 그 내용을 붙여넣어 구조화된 호스트, 그룹, 변수로 파싱하여 관리 인벤토리를 부트스트랩합니다.
- 선언적 인벤토리 정의 — Semaphore가 관리하는 YAML 문서를 통해 인벤토리(호스트, 그룹, 변수)를 선언적으로 정의하여, 프로젝트 및 템플릿과 함께 버전 관리되고 재현 가능한 인벤토리 설정을 가능하게 합니다. (#3109)
- 표준 Ansible 인벤토리로 내보내기 — 작업 실행 시 관리 인벤토리를 표준 Ansible 인벤토리 파일로 렌더링하여, 인벤토리가 어떻게 작성되었든 플레이북과
ansible-inventory가 정확히 동일한 구조를 볼 수 있도록 합니다.
Pro
- 재사용 가능한 호스트 그룹 — 호스트 그룹을 한 번 정의하고 여러 인벤토리 및 프로젝트에서 공유하여, 그룹 멤버십 또는 그룹 변수의 변경이 해당 그룹이 사용되는 모든 곳에 전파되도록 합니다.
- 인벤토리 변경 기록 — 호스트, 그룹, 변수 변경의 diff와 함께 인벤토리별 개정 기록을 유지하고 이전 버전을 복원할 수 있습니다.
Enterprise
- 범위 지정 호스트 관리 역할 — 전체 프로젝트 관리 권한을 부여하지 않고도 지정된 인벤토리에서 호스트를 추가, 편집, 제거할 수 있는(그리고 사전 정의된 템플릿을 실행할 수 있는) 운영자 스타일 역할을 도입합니다. (#2989)
- 인벤토리 변경 승인 — 보호된 인벤토리에 대한 변경이 적용되기 전에 검토/승인을 요구하며, 누가 어떤 호스트, 그룹, 변수를 언제 변경했는지에 대한 감사 추적을 제공합니다.
유연한 알림 시스템
Semaphore UI의 현재 알림 시스템은 config.json을 통해서만 구성되며, 제한된 채널 세트(이메일, Telegram, Slack, MS Teams)를 지원하고, 프로젝트별 사용자 정의가 최소화된 글로벌 수준에서 작동합니다. 이 기능은 UI에서 관리 가능하고, 확장 가능하며, 프로젝트 및 템플릿 단위로 구성할 수 있도록 알림을 처음부터 재설계합니다.
Community
- 확장 가능한 채널 아키텍처 — 채널별 구현으로 알림 채널에 대한 공통 인터페이스를 정의하여 핵심 로직을 수정하지 않고도 새 채널을 쉽게 추가할 수 있습니다. 한 번에 많은 공급자를 포괄하기 위해 범용 알림 라이브러리(예:
nikoksr/notify) 또는 게이트웨이(예: Apprise) 채택을 고려합니다. (#2325, #1290) - UI 관리 알림 구성 — 알림 설정을 설정 파일에서 웹 UI로 이동하여 프로젝트별 및 템플릿별 세분성을 지원하고, 동일한 채널 유형의 여러 인스턴스를 지원합니다. (#3387, #1821, #3588)
- 템플릿 기반 메시지 사용자 정의 — 데이터베이스가 아닌 디스크의 파일로 저장되는 사용자 정의 메시지 템플릿을 지원합니다.
- 프로젝트별 채널 선택 — 프로젝트 설정을 통해 프로젝트별로 활성화할 알림 채널을 구성할 수 있습니다. (#3588)
- 아웃바운드 웹훅 이벤트 — 이벤트 유형(START, SUCCESS, FAILURE)을 정의하고, 구성 가능한 URL, 헤더 및 HMAC 인증을 사용하여 프로젝트별 웹훅 템플릿을 생성할 수 있습니다. (#1825, #2594, #3066)
- 새로운 알림 채널 — Discord (#2924), Ntfy (#3383), Google Chat (#1148), Rocket.Chat (#1091), Pushover (#2594) 지원을 추가합니다.
- “Fixed” 알림 — GitLab CI 복구 알림과 유사하게, 실패 후 첫 번째 성공 실행 시 알림을 전송합니다. (#3380)
- 템플릿별 모든 알림 비활성화 — 기존 “성공 알림 비활성화” 체크박스와 함께 “모든 알림 비활성화” 옵션을 추가합니다. (#3724)
- 성공 시 이메일 발송 — 성공 알림 경로에 이메일을 포함합니다(현재 성공 시 Telegram/Slack/MS Teams만 발송됨). (#3503)
- 알림 내 작업 URL 수정 — 모든 채널(이메일, Slack, MS Teams)이 상대 경로가 아닌 스키마와 호스트가 포함된 정규화된 작업 URL을 수신하도록 합니다. (#2097, #2311, #3292)
- 이메일 전송 문제 수정 — SMTP 포트 465(암시적 TLS) 지원, TLS 전 인증 순서, Date 헤더 형식 문제를 해결합니다. (#2201, #2971, #3542, #3209)
- Telegram 스레드/토픽 지원 — 프로젝트별 및 템플릿별로 구성 가능한
message_thread_id를 통해 특정 Telegram 그룹 스레드에 알림을 보낼 수 있습니다. (#3493, #1456) - Slack 템플릿 개선 — Slack Workflow Builder 호환성을 위해 최상위 필드(
title,text,color)를 노출합니다. (#2607) - 알림 프록시 지원 — 시스템 전체 프록시 없이도 아웃바운드 알림 요청에 대한 HTTP 프록시를 구성할 수 있습니다. (#1484)
Pro
- Pro 전용 알림 채널 — Pro 플랜에서만 특정 알림 채널을 지원합니다.
- 장시간 실행 작업 알림 — 작업이 구성 가능한 기간 임계값을 초과하면 알림을 트리거합니다. (#1393)
Enterprise
- 알림 감사 로그 — 전송 상태, 타임스탬프, 수신자 세부 정보와 함께 전송된 모든 알림의 검색 가능한 로그를 유지합니다. 실패 시 수신자 컨텍스트를 포함하도록 오류 로깅을 개선합니다. (#3410)
- 인시던트 관리 플랫폼 통합 — 자동 인시던트 생성 및 수명 주기 추적을 위한 PagerDuty, Opsgenie, ServiceNow와의 네이티브 통합.
- 역할 기반 알림 접근 제어 — 조직의 역할 및 권한에 따라 알림 규칙 및 채널을 구성할 수 있는 사용자를 제한합니다.
사용자 소유 시크릿
Semaphore의 키 저장소는 현재 모든 프로젝트 구성원이 공유합니다. 프로젝트 접근 권한이 있는 모든 사용자가 저장된 모든 자격 증명을 사용할 수 있으며, 경우에 따라 볼 수도 있습니다. 이는 팀 구성원이 자신의 자격 증명에만 접근해야 하는 다중 사용자 환경에서 보안 문제를 야기합니다. 또한 키 저장소에는 암호화, 시크릿 업데이트, 참조 무결성과 관련된 여러 버그가 있으며, 외부 시크릿 관리 시스템과의 통합이 부족합니다.
Community
- 개인 키 저장소 — 개인 자격 증명(SSH 키, sudo 비밀번호)이 다른 프로젝트 구성원과 격리되고 프로젝트 수준 키 저장소를 통해 공유되지 않도록 사용자별 키 저장소를 제공합니다. (#1483, #1373)
- 시크릿 업데이트 동작 수정 — 시크릿 환경 변수를 편집하면 성공한 것처럼 보이지만 실제로 값이 저장되지 않는 문제를 해결합니다. (#2546)
- 프로세스 목록에서 시크릿 숨기기 — OS 프로세스 목록에 표시되는 명령줄 인수를 통해 시크릿 extra-vars를 전달하는 것을 중지합니다. 보안 메커니즘(예: 임시 파일, stdin)을 사용합니다. (#3219)
- 키 저장소의 SSH 인증서 지원 — 인증서 기반 인증 워크플로를 위해 SSH 키와 함께 SSH 인증서를 저장할 수 있습니다. (#3171)
- SSH 공개 키 표시 — 편의를 위해 키 저장소 UI에 저장된 SSH 키의 공개 키 부분을 표시합니다. (#1643)
- Docker 시크릿 지원 —
_FILEenv var 패턴(예:POSTGRES_PASSWORD_FILE)을 지원하여 환경 변수를 통해 전달하는 대신 Docker/Kubernetes 시크릿을 마운트하고 읽을 수 있습니다. (#1268) - Docker에서 암호화 키 처리 수정 —
SEMAPHORE_ACCESS_KEY_ENCRYPTIONenv var가 존중되고 컨테이너 재시작 시 임의의 키로 덮어쓰이지 않도록 합니다. (#2228, #3068, #3204) - 키 저장소 이름 변경 시 참조 깨짐 수정 — 키 저장소 항목의 이름을 변경하면 연결된 모든 인벤토리와 템플릿이 깨지는 문제를 해결합니다. (#3188)
- Vault 비밀번호 API 수정 — 중복 키 제약 조건 오류 없이 REST API를 통해 Ansible Vault 비밀번호를 설정 및 업데이트할 수 있습니다. (#3413, #2773)
Pro
- 외부 시크릿 저장소 통합 — Semaphore 데이터베이스에 시크릿을 저장하는 대신 런타임에 HashiCorp Vault, Azure Key Vault, AWS KMS 또는 Bitwarden에서 가져옵니다. (#2248, #658)
Enterprise
- 글로벌 접근 키 — 중앙 관리 및 프로젝트 간 연결을 통해 키 저장소 항목을 프로젝트 간에 중복 없이 공유합니다. (#110)
- 시크릿 접근 감사 추적 — 컴플라이언스 및 포렌식을 위해 키 저장소 항목 및 시크릿 변수의 모든 접근 및 사용을 기록합니다.
requirements.yml용 자격 증명 자세히
Ansible 플레이북은 종종 비공개 Git 저장소에 있는 비공개 역할 및 컬렉션을 requirements.yml에 선언합니다. Semaphore는 현재 해당 저장소에 대해 ansible-galaxy install을 인증하는 일급 방법이 없습니다 — 사용자는 URL에 토큰을 삽입하거나, SSH 키를 러너 이미지에 굽거나, 사용자 정의 준비 스크립트를 유지하는 방법에 의존합니다. 이 기능을 통해 사용자는 하나 이상의 키 저장소 자격 증명을 작업 템플릿(또는 플레이북 실행)에 연결하고, 역할 및 컬렉션이 확인되는 준비 단계에서 자동으로 사용되도록 할 수 있습니다.
Community
- 플레이북 실행에 자격 증명 연결 —
requirements.yml에 나열된 비공개 역할 및 컬렉션을 비공개 Git 저장소에서 가져올 수 있도록ansible-galaxy install중에 적용되는 하나 이상의 키 저장소 항목(SSH 키, Git 토큰, 사용자 이름/비밀번호)을 작업 템플릿에서 선택할 수 있습니다. (#3677, #3708, #897) - 호스트 패턴별 자격 증명 매핑 — 여러 자격 증명이 연결된 경우, 이를 호스트 이름 패턴(예:
github.com,gitlab.internal)에 매핑하여 각 비공개 소스가 충돌 없이 올바른 키 또는 토큰을 사용하도록 합니다. (#3677) - galaxy install 단계로의 env var 전파 수정 — 토큰 기반 인증이
requirements.yml에 대해 작동하도록, 환경 변수(시크릿 변수 포함)가 플레이북 실행 중뿐만 아니라ansible-galaxy install중에도 내보내지도록 합니다. (#2966, #3178) - 플레이북별 requirements 파일 — 서로 다른 의존성 세트를 가진 여러 플레이북을 그룹화하는 프로젝트를 위해 템플릿 수준에서 기본
roles/requirements.yml/collections/requirements.yml경로를 재정의할 수 있습니다. (#1366) - 사용자 정의
ansible-galaxyCLI 인수 —ansible-galaxy install에 전달되는 추가 인수(예:--ignore-certs,--force, 사용자 정의 서버)를 위한 필드를 노출하여 에어갭 및 내부 Galaxy 미러 설정을 포괄합니다. (#2348)
영구 저장소 캐시
현재 Semaphore는 각 작업 템플릿마다 별도의 디렉토리에 저장소를 클론(또는 풀)하는데, 대규모 저장소의 경우 속도가 느리고 디스크 I/O를 낭비합니다. 이 기능은 저장소별 플래그를 추가하여 AWX가 프로젝트 업데이트를 처리하는 방식과 유사하게 백그라운드에서 주기적으로 업데이트되는 공유 영구 클론으로 전환합니다. 활성화하면 해당 저장소를 참조하는 모든 템플릿이 단일 작업 복사본을 공유하며(Semaphore에서 로컬 저장소에 이미 사용되는 동일한 모델), 개별 작업 실행 시 더 이상 클론이나 풀을 트리거하지 않습니다.
Community
- 저장소 설정의 “Cache Repository” 플래그 — 각 저장소에 토글을 추가하여 활성화 시 작업 실행마다 클론하는 대신 단일 영구 클론을 유지합니다. 클론은 해당 저장소를 사용하는 모든 템플릿에서 공유되며, 로컬 저장소가 이미 가지고 있는 동작과 일치합니다. (#1212)
- 백그라운드 주기적 동기화 — 캐시 플래그가 활성화되면 작업 시작 시가 아닌 백그라운드 워커에서 설정 가능한 간격(예: 5분마다)으로 업데이트를 풀하여 작업이 항상 최근 체크아웃에 대해 즉시 실행됩니다.
- 수동 동기화 작업 — 저장소 UI에 “Sync Now” 버튼과 해당 API 엔드포인트를 제공하여 주기적 스케줄 외에 즉시 풀을 트리거할 수 있습니다.
- 강제 푸시/히스토리 재작성 복원력 — 업스트림 강제 푸시를 정상적으로 처리합니다(예:
git fetch --all && git reset --hard origin/<branch>). 일반 풀에서 실패하는 대신 올바르게 처리합니다. (#800) - 더티 작업 트리 복구 — 풀하기 전에 더티 작업 트리(예: 남아있는
.retry파일)를 자동으로 감지하고 정리하여 “local changes” 오류를 방지합니다. (#308) - 오래된 클론 정리 — 삭제되었거나 URL이 변경된 저장소의 캐시된 클론을 가비지 컬렉션하여 디스크 공간을 회수합니다. (#1497, #2679)
- 동기화 상태 가시성 — 저장소 상세 페이지에 마지막 동기화 타임스탬프와 상태(성공/실패)를 표시하여 사용자가 작업 복사본의 최신 상태를 알 수 있도록 합니다.
- 저장소별 동기화 스케줄 — 개별 저장소에서 글로벌 동기화 간격을 재정의할 수 있습니다(예: 변경이 잦은 저장소는 매분, 안정적인 저장소는 매시간).
템플릿별 다중 인벤토리
Ansible CLI는 기본적으로 여러 -i 인수를 전달하여 인벤토리를 구성할 수 있습니다(예: ansible-playbook -i common_vars.yml -i staging_hosts.yml). Semaphore는 현재 각 작업 템플릿을 단일 인벤토리로 제한하여, 사용자가 인벤토리 스크립트, 병합 파일 또는 추가 환경 변수와 같은 우회 방법을 사용해야 합니다. 이 기능은 해당 제한을 해제하고 더 광범위한 인벤토리 관리 격차를 해결합니다.
Community
- 다중 인벤토리 지원 — 단일 작업 템플릿에 여러 인벤토리를 연결하여 Ansible에 순차적
-i인수로 전달할 수 있습니다(예:ansible-playbook -i common_vars.yml -i staging_hosts.yml). 템플릿당 하나의 인벤토리 제한을 해결합니다. (#2093) - 선택적 인벤토리 필드 —
ansible.cfg에서 이미 인벤토리 소스를 지정한 경우 템플릿의 인벤토리 필드를 선택 사항으로 만듭니다. (#1574) - URL/HTTP 인벤토리 소스 — 원격 URL 또는 API 엔드포인트에서 인벤토리를 가져올 수 있도록 지원하며, 파일 시스템 접근이 없는 호스팅/SaaS 환경에 필수적입니다. (#1924)
- 런타임 인벤토리 선택 — 작업 실행 시 드롭다운을 통해 인벤토리를 선택할 수 있도록 하여 현재의 자유 텍스트 우회 방법을 대체합니다. (#1354)
- 예약 작업 인벤토리 지속성 수정 — 스케줄 대화 상자에서 선택한 인벤토리가 템플릿 기본값으로 되돌아가지 않고 실행 시 저장 및 사용되도록 합니다. (#3566, #3293)
- 프로젝트 내보내기/복원 시 인벤토리 저장소 링크 손실 수정 — 프로젝트 내보내기 중 인벤토리-저장소 연결이 삭제되고 가져오기 시 복원되지 않는 문제를 수정합니다. (#3369, #3177)
- 동적 인벤토리에 환경 변수 전달 — 컨테이너/호스트 환경 변수가 동적 인벤토리 스크립트 및 플러그인(예: Python 스크립트,
microsoft.ad.ldap)에서 사용 가능하도록 합니다. (#2724, #2783) - Git 기반 인벤토리 인증 수정 — 인벤토리용 원격 브랜치를 가져올 때 저장소 자격 증명을 사용하여 인증되지 않은 접근 시도를 수정합니다. (#3539)
- 호스트별 자격 증명 재정의 — 인벤토리에 정의된 호스트별
ansible_user및 연결 변수를 글로벌--extra-vars로 재정의하는 것을 중지합니다. 다중 사용자 인벤토리 패턴을 허용합니다. (#1464, #1621) - UI에서 인벤토리 내용 보기 — 검사 및 디버깅을 위해 파일 기반 및 동적 인벤토리 내용을 UI에 표시하며, 외부 저장소의 소스 파일에 대한 링크를 제공합니다. (#3169, #1555, #3543)
- 작업 컨텍스트에서 인벤토리 이름 노출 — 플레이북에서 활성 인벤토리를 참조할 수 있도록
semaphore_vars또는 환경 변수로 인벤토리 이름을 사용할 수 있게 합니다. (#1580)
Pro
- 인벤토리-러너 친화성 — 인벤토리 호스트를 러너 태그와 연결하여 대상 호스트에 네트워크 접근이 가능한 러너에만 작업이 디스패치되도록 하여 다중 네트워크 환경에서의 실패를 방지합니다. (#3322)
- 인벤토리별 다중 SSH 키 — 각 호스트가 고유한 SSH 키를 사용하는 플릿을 위해 단일 인벤토리에 여러 키 저장소 항목을 할당할 수 있습니다. (#3336)
- 하이퍼바이저 인벤토리 통합 — 하이퍼바이저 API(VMware, Proxmox)와의 네이티브 통합으로 동적 인벤토리를 자동 생성 및 갱신합니다. (#2709)
- 호스트 그룹 관리 API — 전체 인벤토리 페이로드를 다시 작성하지 않고 인벤토리 그룹에서 호스트를 추가/제거할 수 있는 API를 제공합니다. (#1560)
Enterprise
- 템플릿별 허용 인벤토리 제한 — 템플릿에 "인벤토리 묻기"가 활성화된 경우, 선택 가능한 인벤토리를 관리자가 정의한 허용 목록으로 제한하여 잘못된 환경을 실수로 대상으로 지정하는 것을 방지합니다. (#3587)
- 중앙 호스트 레지스트리 — 호스트 변경(예: 호스트 이름 또는 IP 업데이트)이 수동 편집 없이 해당 호스트를 참조하는 모든 인벤토리에 전파되도록 공유 호스트 관리 계층을 제공합니다. (#564)
- 호스트 팩트 저장 및 시각화 — 호스트별 Ansible 팩트를 저장하고 diff 및 히스토리 기능으로 작업 실행 전후 상태를 표시합니다. (#930)