2017-11-18 1 views
0

Ich versuche chroot für sftp-Benutzer einzurichten, so dass sie Benutzer-/Gruppennamen unter ls -l gemäß this article sehen können. Zu diesem Zweck muss ich Ausgabe getent Befehl erhalten und es in /chroots/{{ user.username }}/etc/passwd Akte legen.Ansible: Parsing/Verkettung der Ausgabe des Getent-Moduls

Ich versuche ansible verwenden Sie diesen Befehl getent passwd sftpuser > /chroots/sftpuser/etc/passwd zu ersetzen, wie folgt:

- name: get {{ user.username }} user info 
    getent: 
    database: passwd 
    key: "{{ user.username }}" 

- debug: 
    var: getent_passwd 

- name: create /chroots/{{ user.username }}/etc/passwd file 
    lineinfile: 
    path: /chroots/{{ user.username }}/etc/passwd 
    line: "{{ getent_passwd | from_json }}" 
    state: present 
    create: yes 
    owner: root 
    group: root 
    mode: '0644' 

Die 'getent_passwd' sieht wie folgt aus:

ok: [cf1] => { 
    "getent_passwd": { 
     "testuser1": [ 
      "x", 
      "1001", 
      "1002", 
      "", 
      "/home/testuser1", 
      "/usr/sbin/nologin" 
     ] 
    } 
} 

Aber ich bekomme diese Fehlermeldung: FAILED! => {"failed": true, "msg": "Unexpected templating type error occurred on ({{ getent_passwd | from_json }}): expected string or buffer"}

  1. Was ist der richtige Weg, um diese Werte von getent_passwd zu erhalten in eine flache Saite mit ":" verbunden?
  2. Ist es sicher, Genent Modul mit key: "root" auf diese Weise statt echo "root:x:0:0:not really root:::" >> /chroots/sftpuser/etc/passwd zu verwenden?
  3. kann man getent passwd user1 user2 laufen lassen - ist es möglich, zwei Schlüssel zum Ansible's getent Modul irgendwie zu liefern?

Antwort

1

What is the proper way to get those values supplied by getent_passwd into one flat string joined by ":"?

beispielsweise eine Vorlage mit Jinja2 join filter Verwendung:

- debug: 
    msg: "{{ user.username }}:{{getent_passwd[user.username]|join(':')}}" 

One can run getent passwd user1 user2 - is it possible to supply two keys to the ansible's getent module somehow?

No. Entweder eine einzelne oder alle.

Verwenden Sie eine äußere Schleife, um Werte im ersten Fall anzufordern, oder filtern Sie die resultierende Liste in der zweiten.

Verwandte Themen