从列表中选择条目(创建用户)

时间:2017-08-01 11:47:56

标签: ansible

首先要做的事情 - 我不是一个Ansible wiz,我想有更好的方法可以做到这一点,但这就是我设法做到这一点的方法。 我需要在Linux服务器上创建用户,我使用它来从文件中读取用户参数并使用' with_items'创建所有用户参数。

这很有效。

我想添加一个选项,只从列表中创建一个用户。

这是我的yml脚本:

---
- hosts: all
  user: deploy
  become: yes

  tasks:
  - include_vars: ../variables/users.yml
    #  - command: echo {{ Guser }}
  - debug: msg={{ users }}

  - name: Create DevOps team users
    user: name={{ item.username }} shell=/bin/bash createhome=yes comment='Created by Ansi' groups={{ item.use_sudo }} uid={{ item.use_uid }} group={{ item.use_group }} state=present
    ignore_errors: yes
    with_items:
      - '{{ Guser }}'
    when: Guser is defined

这就是我运行它的方式:

ansible-playbook --extra-vars "Guser=gilil2" -l myserver /home/devops/roles/create-users/tasks/create_user_by_name.yml -u deploy

从我的variables / users.yml

剪断
---
users:
  - username: gilil
    use_sudo:
    use_uid: 2005
    use_group: users

  - username: gilil2
    use_sudo:
    use_uid: 1010
    use_group: users

  - username: gilil3
    use_sudo:
    use_uid: 1011
    use_group: users

1 个答案:

答案 0 :(得分:0)

使用selectattr Jinja2过滤器:

  - name: Create DevOps team users
    user: name={{ item.username }} shell=/bin/bash createhome=yes comment='Created by Ansi' groups={{ item.use_sudo }} uid={{ item.use_uid }} group={{ item.use_group }} state=present
    ignore_errors: yes
    with_items: "{{ users | selectattr('username','equalto',Guser|default('uknown')) | list }}"

这会将原始users列表缩减为username属性等于Guser vars'值的元素列表,或unknown如果Guser未定义。我假设没有用户使用uknown用户名,因此在这种情况下selectattr可以生成空列表。