2017-11-18 17 views
0

this articleとしてls -lのユーザー/グループ名を表示できるように、sftpユーザー用にchrootを設定しようとしています。このためには、getentコマンドの出力を取得し、それを/chroots/{{ user.username }}/etc/passwdファイルに配置する必要があります。可能性:getentモジュールの出力を解析/連結する

私は次のようにこのコマンドgetent passwd sftpuser > /chroots/sftpuser/etc/passwdを置き換えるためにAnsibleを使用しよう:

- 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' 

次のように 'getent_passwdが' になります。

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

をしかし、私はこのエラーを取得する:FAILED! => {"failed": true, "msg": "Unexpected templating type error occurred on ({{ getent_passwd | from_json }}): expected string or buffer"}

  1. これらの値を取得する適切な方法は、getent_passwdです":"で結合された1つのフラット文字列に変換しますか?
  2. このようにkey: "root"のジェネリックモジュールをecho "root:x:0:0:not really root:::" >> /chroots/sftpuser/etc/passwdの代わりに使用するのは安全ですか?
  3. 実行可能getent passwd user1 user2 - 何とか2つのキーをansibleのgetentモジュールに供給できますか? join filterとJinja2のテンプレートを使用して、たとえば、

答えて

1

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

- 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?

号のいずれか単一のものまたはすべて。

外部ループを使用して最初のケースで値を要求するか、2番目のケースで結果のリストをフィルタリングします。

関連する問題