Ansible 新手入门 - 根据类型将用户添加到服务器

Ansible 新手入门 - 根据类型将用户添加到服务器

我对 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

在我的 hosts 文件中定义有 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

我正在尝试弄清楚我的剧本究竟如何确定哪些用户被添加到哪些服务器 - 我知道我需要声明另一个变量以便我的剧本知道用户 1 被添加到 grp1 中的服务器,但我不知道如何做?

答案1

一个简单的方法:使用组变量

如果每个服务器只有一个用户,则可以在库存中定义它们(您需要调整您的游戏以不循环并使用newuservar 代替):

[grp1:vars]
newuser=user1

如果有更多用户,则需要 YAML 清单(而不是 ini)或使用组 var 文件:group_vars在包含清单文件的目录下创建一个名为的子目录,每个组一个文件,例如

$ cat grp1

userlist: 
   - user1
   - user2   

然后userlist针对每个组分别定义。

答案2

最简单的方法是通过主机变量或主机组变量。你可以在这里了解如何操作ansible 手册。另一个更高级的选项是通过自定义事实或脚本。您需要阅读有关变量排序的内容以避免意外行为。

另外,我想指出一些小的语法错误。你不能用 accolade({) 来开始声明。每行放置单个声明时请使用冒号。像这样:

库存文件:

[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  

组变量/grp1.yml:

---
userlist:
  - user1
  - user2
  - user3

host_vars/host5.yml

---
userlist:
  - user1
  - user4
  - user10

相关内容