linux - 如何将迭代循环列表转换为字符串以在 Linux 中使用

标签 linux ssh ansible

我有一个 Ansible 角色,我想迭代它。

目标是从列表中创建新的用户帐户。剧本调用角色并发送列表进行迭代。

操作系统(Linux Debian 8.8)看到所有 var unicode“[u'user']”

执行的一些其他测试显示了新用户: ['测试'] [u'测试']

我真正想要的只是让 var 成为一个字符串,这样我就创建一个新用户并添加所需的 key 和其他文件。我还可以将 var 添加到 key 和其他文件的路径中。

我正在寻找一种简单的方法来“| to_string”,(不在 Ansible 中)
过滤器“to_yaml”删除了 unicode,但不删除“[]”,并在末尾添加“\n”。

用于各种 id_(type).pub 文件的 ssh key 副本的项目。

我已阅读:

Convert Ansible variable from Unicode to ASCII

代码

Playbook:

  vars_files:
    - /home/admin/common/vars/UserList 

  gather_facts: False

  roles:
    - { role: common, "{{ UserList }}" }
UserList file

---
UserList:
  - 'test'
...
role/common/main.yml 

---

  - name: Add user to server
    user:
      name: "{{ UserList }}"
      shell: /bin/bash

  - name: make direcotry
    file:
      path: "/home/{{ UserList }}/.ssh"
      state: directory

  - name: Copy ssh public key to user/.ssh/_key_.pub
    copy:
      src: "/home/{{ UserList }}/.ssh/{{ item }}"
      dest: "/home/{{ UserList }}/.ssh/{{ item }}"
      mode: 600
      force: no
    with_items:
      - id_rsa.pub
      - id_dsa.pub
      - id_ecdsa.pub
...

不同的形式,但仍然出现如下错误。

roles: 
  - role: common
  with_items: 
  - "{{ UserList }}"

错误

(item=id_rsa.pub) => {"失败": true, "调用": {"module_args": {"dest": "/home/[u'test']/.ssh/id_rsa.pub", "force": false, "mode": 600, "src": "/home/[u'test']/.ssh/id_rsa.pub"}, "module_name": "复制"}, "item": "id_rsa.pub", "msg": "找不到 src=/home/[u'test']/.ssh/id_rsa.pub"}

最佳答案

解决方法

我找到了解决我的问题的方法。我会谨慎地将其称为解决方案。对于这种情况就足够了。我需要使用内置的 {{ item }} 来“循环”我的 var。然后 {{ item }} 用作字符串,我可以创建我需要的路径。我还可以使用“with_nested”迭代一系列项目。

  - name: create empty file
    file:
      path: "{{ '/home/' + item + '/.ssh/authorized_keys' }}"
      state: touch
    with_items:
      - "{{ UserList }}"


  - name: Copy ssh public key to user/.ssh/_key_.pub
    copy:
      src: "{{ '/home/' + item[1] + '/.ssh/' + item[0] }}"
      dest: "{{ '/home/' + item[1] + '/.ssh/' + item[0] }}"
      mode: 600
      force: no
    with_nested:
      - [ 'id_rsa.pub' , 'id_dsa.pub' , 'id_ecdsa.pub' ]
      - "{{ UserList }}"

关于linux - 如何将迭代循环列表转换为字符串以在 Linux 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56359441/

相关文章:

javascript - 在 Node :7 image; libgs. 中安装 ghostscript4js 所以找不到

ssh - 如何为同一主机使用多个 SSH key ?

loops - Ansible - 迭代两个列表但使用第一个列表的索引

yaml - 在 Ansible-YAML 中使用相对路径引用多维数组中的另一个元素

windows - 如何解决这个 ansible kerberos 错误?

linux - 为什么 Linux accept() 不返回 EINTR?

Linux 命令或脚本计算文本文件中重复的一堆行?

cryptography - Linux内核是否支持RSA加密/解密?

ssh - 如何关闭卡住的 SSH session ?

ssh - 使用来自网关的 key 通过网关进行 Fabric Connect