From eea56ea0e5f7b0303d758661bd3fbb497e78a5d9 Mon Sep 17 00:00:00 2001
From: ibuler <ibuler@qq.com>
Date: Fri, 20 Nov 2015 21:30:57 +0800
Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E4=B9=89=E9=80=9A=E7=94=A8=E6=A8=A1?=
 =?UTF-8?q?=E5=9D=97=E6=89=A7=E8=A1=8C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 jperm/ansible_api.py | 17 ++++++++---------
 jperm/perm_api.py    |  5 +++++
 jumpserver/api.py    | 13 +++++++++++--
 juser/user_api.py    |  2 +-
 4 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/jperm/ansible_api.py b/jperm/ansible_api.py
index f10d8957..e94b79dc 100644
--- a/jperm/ansible_api.py
+++ b/jperm/ansible_api.py
@@ -82,11 +82,13 @@ class MyInventory(object):
             hostport = host.get("port")
             username = host.get("username")
             password = host.get("password")
+            ssh_key = host.get("ssh_key")
             my_host = Host(name=hostname, port=hostport)
             my_host.set_variable('ansible_ssh_host', hostname)
             my_host.set_variable('ansible_ssh_port', hostport)
             my_host.set_variable('ansible_ssh_user', username)
             my_host.set_variable('ansible_ssh_pass', password)
+            my_host.set_variable('ansible_ssh_private_key_file', ssh_key)
             # set other variables 
             for key, value in host.iteritems():
                 if key not in ["hostname", "port", "username", "password"]:
@@ -156,12 +158,12 @@ class Command(MyInventory):
         if module_name not in ["raw", "command", "shell"]:
             raise CommandValueError("module_name",
                                     "module_name must be of the 'raw, command, shell'")
-        hoc = MyRunner(module_name=module_name,
-                       module_args=command,
-                       timeout=timeout,
-                       inventory=self.inventory,
-                       pattern=pattern,
-                       forks=forks,
+        hoc = Runner(module_name=module_name,
+                     module_args=command,
+                     timeout=timeout,
+                     inventory=self.inventory,
+                     pattern=pattern,
+                     forks=forks,
                      )
         self.results = hoc.run()
 
@@ -418,8 +420,6 @@ class Tasks(Command):
         return {"status": "failed", "msg": self.msg} if self.msg else {"status": "ok", "result": result}
 
 
-
-
 class CustomAggregateStats(callbacks.AggregateStats):
     """                                                                             
     Holds stats about per-host activity during playbook runs.                       
@@ -438,7 +438,6 @@ class CustomAggregateStats(callbacks.AggregateStats):
 
         self.results.append(runner_results)
 
-
     def summarize(self, host):
         """                                                                         
         Return information about a particular host                                  
diff --git a/jperm/perm_api.py b/jperm/perm_api.py
index 5496020e..1bcfe067 100644
--- a/jperm/perm_api.py
+++ b/jperm/perm_api.py
@@ -10,6 +10,11 @@ from jperm.models import PermRole
 from jperm.models import PermRule
 
 
+class PermGet(object):
+    def __init__(self):
+        pass
+
+
 def get_object_list(model, id_list):
     """根据id列表获取对象列表"""
     object_list = []
diff --git a/jumpserver/api.py b/jumpserver/api.py
index f9285c16..198b11bf 100644
--- a/jumpserver/api.py
+++ b/jumpserver/api.py
@@ -3,6 +3,7 @@
 import os, sys, time, re
 from Crypto.Cipher import AES
 import crypt
+import pwd
 from binascii import b2a_hex, a2b_hex
 import hashlib
 import datetime
@@ -44,6 +45,14 @@ def set_log(level):
     return logger_f
 
 
+def chown(path, user, group='', ):
+    if not group:
+        group = user
+    uid = pwd.getpwnam(user).pwd_uid
+    gid = pwd.getpwnam(group).gr_gid
+    os.chown(path, uid, gid)
+
+
 def page_list_return(total, current=1):
     """
     page
@@ -390,7 +399,7 @@ def bash(cmd):
     return subprocess.call(cmd, shell=True)
 
 
-def mkdir(dir_name, username='root', mode=0755):
+def mkdir(dir_name, username='', mode=0755):
     """
     insure the dir exist and mode ok
     目录存在,如果不存在就建立,并且权限正确
@@ -399,7 +408,7 @@ def mkdir(dir_name, username='root', mode=0755):
         os.makedirs(dir_name)
     os.chmod(dir_name, mode)
     if username:
-        bash('chown %s:%s %s' % (username, username, dir_name))
+        chown(dir_name, username)
 
 
 def http_success(request, msg):
diff --git a/juser/user_api.py b/juser/user_api.py
index 87e7b5cc..13dfb727 100644
--- a/juser/user_api.py
+++ b/juser/user_api.py
@@ -143,7 +143,7 @@ def gen_ssh_key(username, password='',
             with open(authorized_key_file, 'w') as auth_f:
                 auth_f.write(pub_f.read())
         os.chmod(authorized_key_file, 0600)
-        bash('chown %s:%s %s' % (username, username, authorized_key_file))
+        chown(authorized_key_file, username)
 
 
 def server_add_user(username, password, ssh_key_pwd, ssh_key_login_need):
-- 
2.18.0