Ansible - 서버 클래스 기준이 충족되면 사용자 생성

Ansible - 서버 클래스 기준이 충족되면 사용자 생성

저는 쉘 스크립트 모음에서 Ansible 플레이북으로 전환하는 새로운 Ansible 사용자입니다. 현재 사용자 관리 시스템에서는 해당 사용자에게 해당 서버 클래스, 위치 및 환경에 대한 액세스 권한이 부여된 경우(또는 이들 중 하나가 와일드카드/임의로 설정된 경우)에만 시스템에 사용자를 추가할 수 있습니다.

서버 클래스, 위치 및 환경은 다음과 같은 (루트 읽기/쓰기만 가능) 파일 형식으로 클라이언트 서버 자체에 로컬로 저장됩니다.

LD_CLASS="app"
LD_LOC="dfw"
LD_ENV="prod"

내가 원하는 것과 유사하다고 생각되는 몇 가지 예를 찾았습니다. Ansible 클라이언트에서 변수를 가져오는 방법과 추가하기 전에 3가지 클래스, 위치 및 환경 요구 사항이 모두 충족되는지 확인하는 방법은 여전히 ​​확실하지 않습니다. 사용자. 나는 다음과 같은 변수 파일을 구상합니다.

users:
 -name: user1
  uid: 60001
  gid: 60001
  class: app
  location: any
  env: dev
 -name: user2
  uid: 60002
  gid: 60002
  class: app
  location: dfw
  env: prod 

구성 중인 Ansible 클라이언트에서 수집된 변수를 기반으로 다음과 같은 사용자 모듈 항목을 사용합니다(실제로 이를 어떻게 수행할지 모르기 때문에 의사 코드에 유의하세요).

- user:
    name: '{{ item.name }}'
    state: '{ (If $LD_LOC matches location variable, or is set to any) & ($LD_ENV matches env variable, or is set to any) & ($LD_CLASS matches class variable, or is set to any) } present{% else %}absent{% endif %}'
    uid: '{{ item.uid }}'
   with_items: users

나는 ansible 역할에 의존하지 않고 대신 ansible 클라이언트 자체에서 클래스, 위치 및 환경 데이터를 가져오는 것을 선호합니다. 적어도 부분적으로는 이것이 현재 우리가 가지고 있는 시스템이고 일부를 유지하면서 ansible로 쉽게 전환하는 데 도움이 되기 때문입니다. 기존의 친숙한 도구. 내가 찾고 있는 것이 가능한 일인가?

답변1

이라는 기능이 있습니다.지역 사실앤서블에서:

  • "속성" 파일을 다음과 같이 수정하고 에 저장한 /etc/ansible/facts.d/server_meta.fact후 원하는 대로 권한을 적용하세요.

    [settings]
    ld_class=app
    ld_loc=dfw
    ld_env=prod
    
  • 그런 다음 플레이북을 실행하고 매개변수에서 해당 사실을 참조하세요 state.

    state: "{{ (ansible_local.server_meta.settings.ld_loc == 'dfw' and ansible_local.server_meta.settings.ld_class == 'app' and ansible_local.server_meta.settings.ld_env == 'prod' ) | ternary('present', 'absent') }}"
    

관련 정보