首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ansible -为每个鱼用户安装我的鱼

Ansible -为每个鱼用户安装我的鱼
EN

Stack Overflow用户
提问于 2020-12-17 04:38:20
回答 1查看 476关注 0票数 0

我正在写一本剧本来安装“哦,我的鱼”给所有当地的鱼用户。

我希望触发本地fish用户的安装(默认shell设置为/usr/bin/fish)

如果“omf”未安装在其家庭中,则仅(请检查存在目录~/./目录)。

我在这里制作的东西

代码语言:javascript
复制
- name: Read local user database
  getent:
    database: passwd

- name: List local user of fish
  set_fact:
    fish_users: "{{ getent_passwd | dict2items | json_query('[? contains(value, `/usr/bin/fish`)].key') }}"

- name: Check if omf install for fish users
  stat:
    path: "/home/{{ item }}/.local/share/omf"
  loop: "{{ fish_users }}"
  register: omf_user_status

- name: Install omf when absent of fish user home
  block:
  - name: Get last omf repos
    git:
      repo: 'https://github.com/oh-my-fish/oh-my-fish'
      dest: '/tmp/omf'
      clone: yes

  - name: Installing omf for fish user
    become: yes
    become_user: "{{ item }}"
    command: /tmp/omf/bin/install -y --offline --noninteractive
    loop: "{{ fish_users }}"

  when: omf_user_status.item.stat.exists == 'False'

所以也许我的方法不好..。

目前,我可以得到“omf”,为所有鱼类用户安装。但是我真的很难生成一个可用的列表,只为没有omf的用户安装omf

很明显这种情况不起作用。

omf_user_status变量是一个dict,这里是一个内容示例。

代码语言:javascript
复制
"omf_user_status": {
        "changed": false, 
        "msg": "All items completed", 
        "results": [
            {
                "ansible_loop_var": "item", 
                "changed": false, 
                "failed": false, 
                "invocation": {
                    "module_args": {
                        "checksum_algorithm": "sha1", 
                        "follow": false, 
                        "get_attributes": true, 
                        "get_checksum": true, 
                        "get_md5": false, 
                        "get_mime": true, 
                        "path": "/home/test_ansible/.local/share/omf"
                    }
                }, 
                "item": "test_ansible", 
                "stat": {
                    "atime": 1608164175.7067902, 
                    "attr_flags": "e", 
                    "attributes": [
                        "extents"
                    ], 
                    "block_size": 4096, 
                    "blocks": 8, 
                    "charset": "binary", 
                    "ctime": 1608164176.1907954, 
                    "dev": 1800, 
                    "device_type": 0, 
                    "executable": true, 
                    "exists": true, 
                    "gid": 1343, 
                    "gr_name": "test_ansible", 
                    "inode": 397192, 
                    "isblk": false, 
                    "ischr": false, 
                    "isdir": true, 
                    "isfifo": false, 
                    "isgid": false, 
                    "islnk": false, 
                    "isreg": false, 
                    "issock": false, 
                    "isuid": false, 
                    "mimetype": "inode/directory", 
                    "mode": "0755", 
                    "mtime": 1608164176.1907954, 
                    "nlink": 12, 
                    "path": "/home/test_ansible/.local/share/omf", 
                    "pw_name": "test_ansible", 
                    "readable": true, 
                    "rgrp": true, 
                    "roth": true, 
                    "rusr": true, 
                    "size": 4096, 
                    "uid": 1343, 
                    "version": "3120069218", 
                    "wgrp": false, 
                    "woth": false, 
                    "writeable": true, 
                    "wusr": true, 
                    "xgrp": true, 
                    "xoth": true, 
                    "xusr": true
                }
            }
        ]
    }

干杯

EN

回答 1

Stack Overflow用户

发布于 2021-01-05 22:07:56

我终于让它与这段代码一起工作了。

代码语言:javascript
复制
- name: Register users who need omf
  set_fact:
    list_of_user: "{{ omf_user_status.results | rejectattr('stat.exists') | map(attribute='item') | list }}"

在这里,完全的拼图

代码语言:javascript
复制
# OMF install
- name: Read local user database
  getent:
    database: passwd

- name: List local user of fish
  set_fact:
    fish_users: "{{ getent_passwd | dict2items | json_query('[? contains(value, `/usr/bin/fish`)].key') }}"

- name: Check if omf is installed for fish users
  stat:
    path: "/home/{{ item }}/.local/share/omf"
  loop: "{{ fish_users }}"
  register: omf_user_status

- name: Register users who need omf
  set_fact:
    user_need_omf: "{{ omf_user_status.results | rejectattr('stat.exists') | map(attribute='item') | list }}"

- name: Install omf when absent of fish user's home
  block:
  - name: Get lastest omf from git 
    git:
      repo: 'https://github.com/oh-my-fish/oh-my-fish'
      dest: '/tmp/omf'
      clone: yes

  - name: Installing omf for fish user
    become: yes
    become_user: "{{ item }}"
    command: /tmp/omf/bin/install -y --offline --noninteractive
    loop: "{{ user_need_omf }}"

  - name: Cleanup omf install files
    file:
      path: '/tmp/omf'
      state: absent
  # only run this block if the user_need_omf list is not empty
  when: user_need_omf | length > 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65334800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档