Ansible에서 증가하는 포트 번호를 결정적이고 재현 가능하게 할당하는 방법은 무엇입니까?


12

저는 Ansible을 처음 사용하지만 특정 환경에서 설정해야 할 서비스에 해당하는 일련의 플레이 북을 유지 관리해야합니다. 포트, 인증서 등을 할당해야합니다. 이로 인해 기본적으로 항상 동일한 이름과 할당이있는 많은 파일이 생성됩니다.

대부분의 경우 service_name을 변수로 쉽게 재사용 할 수 있다고 생각하지만 IP, 포트 또는 기타 숫자 식별자에 매핑 할 때 아직 재현 가능한 방식으로 다른 숫자를 결정적으로 할당하는 방법을 찾지 못했습니다. 새로운 서비스가 추가 된 경우에도 동일합니다. SQLite 데이터베이스를 사용하여 서비스를 저장하고 ID에서 값을 생성하는 것을 고려했지만 Ansible과 통합하는 방법을 모릅니다.

증가하는 포트 번호를 할당하는 것은 완전히 새로운 것이 아니라고 가정합니다. 매일 많은 시스템 관리자가 수행해야 할 방법이 있어야합니다.

편집 : 다음 group_vars/all.yml과 같이 포트 번호 등을 직접 추가합니다 .

ports:
    service1:1024
    service2:1025
    service3:1026

추가 감옥 (BSD)을 만들고 실행되는 역할에 따라 인벤토리가 자동으로 생성됩니다.


2
어쨌든 인벤토리에 서비스를 추가해야하므로 수동으로 특정 포트 번호를 추가하지 못하는 이유는 무엇입니까? 또는 재고가 자동으로 생성되면 재고 생성 수준에서 문제를 해결해야합니다.
SztupY

Ansible 스 니펫을 포함 하시겠습니까? group_vars인벤토리 파일에 변수를 직접 사용 하거나 추가하고 있는지 확실하지 않습니다 . 인벤토리 생성 방법도 명확하지 않습니다.
Woodland Hunter

HashiCorp 's Consul과 같은 서비스 검색 도구를 사용해 보셨습니까?
Foghorn CTO

답변:


5

면책 조항 : Ansible을 사용하고 있지 않습니다.

내가 할 일은 임의의 "예측 가능한"숫자를 사용하는 것입니다. Ansible doc에 따르면 난수 생성기를 시드 할 수 있습니다.

Ansible 버전 2.3부터는 시드에서 난수 생성기를 초기화 할 수도 있습니다. 이런 식으로 임의의 대수의 숫자를 만들 수 있습니다.

"{{59 | random (seed = inventory_hostname)}} * * * * 루트 / script / from / cron"

따라서 귀하의 경우 포트 번호 (권한이 없다고 가정)는 다음과 같은 변수를 사용합니다.

port="{{ 32767 |random(start=1024,seed=service_name) }}"

클라이언트가 시작한 포트와 충돌하지 않도록 최대 값은 32767입니다 ( 이유는 임시 포트 참조 ).


그것은 내가 생각한 좋은 생각이지만 증가하는 부분을 불가능하게 만듭니다. 특정 포트 범위에서 논리적으로 관련된 특정 서비스를 갖는 것이 매우 바람직합니다.
midor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.