나는 ansible을 비교적 처음 접했고 user_type(내가 정의하려고 하는)에 따라 서버 그룹에 사용자를 추가하는 플레이북을 작성하려고 합니다...
그래서... 내 플레이북은 대략 다음과 같습니다....
- name: add user
user:
name={{ item }}
state=present
shell=/bin/bash
with_items: "{{ userlist }}"
tags: add_new_user
become: true
userlist
별도의 yml 파일에 정의되어 있습니다.
---
userlist:
user1
user2
user3
내 호스트 파일에 정의된 3개의 그룹이 있습니다.
[grp1]
192.168.0.0
192.168.0.1
[grp2]
192.168.0.0
192.168.0.3
[grp3]
192.168.0.4
내가 생각하는 것은 이러한 grp 유형을 내 사용자 목록에 추가하는 것이므로 다음과 같이 보일 것입니다.
---
userlist:
user1 grp1
user2 grp2
user3 grp3
나는 도대체 내 플레이북이 어떤 사용자가 어떤 서버에 추가되는지 알아내려고 노력하고 있습니다. 내 플레이북에서 user1이 grp1의 서버에 추가된다는 것을 알 수 있도록 다른 변수를 선언해야 한다는 것을 알고 있지만, 어떻게 해결할 수 없나요?
답변1
간단한 방법 중 하나: 사용그룹 변수:
서버당 사용자가 한 명뿐인 경우 인벤토리에서 사용자를 정의할 수 있습니다(반복되지 않고 newuser
대신 var로 사용하도록 플레이를 조정해야 함).
[grp1:vars]
newuser=user1
사용자가 더 많은 경우 ini 대신 YAML 인벤토리가 필요하거나 그룹 var 파일을 사용합니다. group_vars
그룹당 하나의 파일이 있는 인벤토리 파일이 포함된 디렉터리 아래에 호출되는 하위 디렉터리를 만듭니다.
$ cat grp1
userlist:
- user1
- user2
그런 다음 userlist
모든 그룹에 대해 별도로 정의됩니다.
답변2
쉬운 방법은 호스트 변수나 호스트 그룹 변수를 이용하는 것입니다. 여기에서 해당 작업을 수행하는 방법을 읽을 수 있습니다.앤서블 매뉴얼. 또 다른 고급 옵션은 사용자 정의 사실 또는 스크립트를 이용하는 것입니다. 예상치 못한 동작을 방지하려면 변수 순서에 대해 읽어야 합니다.
또한 몇 가지 작은 구문 오류를 지적하고 싶습니다. U는 칭찬({)으로 선언을 시작할 수 없습니다. 그리고 한 줄에 하나의 선언을 넣을 때는 콜론을 사용하세요. 다음과 같습니다:
재고_파일:
[grp1]
host1
host2
host3
[grp2]
host4
host5
host6
[grp3]
host1
host4
플레이북.yml:
- hosts: all
become: true
tasks:
- name: adding users to x
user:
name: "{{ item }} "
state: present
shell: /bin/bash
with_items: "{{ userlist }}"
tags: add_new_user
group_vars/grp1.yml:
---
userlist:
- user1
- user2
- user3
호스트_vars/host5.yml
---
userlist:
- user1
- user4
- user10