@@ -28,31 +28,29 @@ def private_key_validator(value):
2828
2929
3030class AdminUser (models .Model ):
31+ """
32+ Ansible use admin user as devops user to run adHoc and Playbook
33+ """
3134 BECOME_METHOD_CHOICES = (
3235 ('sudo' , 'sudo' ),
3336 ('su' , 'su' ),
3437 )
3538 id = models .UUIDField (default = uuid .uuid4 , primary_key = True )
3639 name = models .CharField (max_length = 128 , unique = True , verbose_name = _ ('Name' ))
3740 username = models .CharField (max_length = 16 , verbose_name = _ ('Username' ))
38- _password = models .CharField (
39- max_length = 256 , blank = True , null = True , verbose_name = _ ('Password' ))
40- _private_key = models .TextField (max_length = 4096 , blank = True , null = True , verbose_name = _ ('SSH private key' ),
41- validators = [private_key_validator ,])
41+ _password = models .CharField (max_length = 256 , blank = True , null = True , verbose_name = _ ('Password' ))
42+ _private_key = models .TextField (max_length = 4096 , blank = True , null = True , verbose_name = _ ('SSH private key' ), validators = [private_key_validator ,])
4243 become = models .BooleanField (default = True )
4344 become_method = models .CharField (choices = BECOME_METHOD_CHOICES , default = 'sudo' , max_length = 4 )
4445 become_user = models .CharField (default = 'root' , max_length = 64 )
4546 become_pass = models .CharField (default = '' , max_length = 128 )
46- _public_key = models .TextField (
47- max_length = 4096 , blank = True , verbose_name = _ ('SSH public key' ))
47+ _public_key = models .TextField (max_length = 4096 , blank = True , verbose_name = _ ('SSH public key' ))
4848 comment = models .TextField (blank = True , verbose_name = _ ('Comment' ))
4949 date_created = models .DateTimeField (auto_now_add = True , null = True )
50- created_by = models .CharField (
51- max_length = 32 , null = True , verbose_name = _ ('Created by' ))
50+ created_by = models .CharField (max_length = 32 , null = True , verbose_name = _ ('Created by' ))
5251
53- def __unicode__ (self ):
52+ def __str__ (self ):
5453 return self .name
55- __str__ = __unicode__
5654
5755 @property
5856 def password (self ):
@@ -134,33 +132,22 @@ class SystemUser(models.Model):
134132 ('K' , 'Public key' ),
135133 )
136134 id = models .UUIDField (default = uuid .uuid4 , primary_key = True )
137- name = models .CharField (max_length = 128 , unique = True ,
138- verbose_name = _ ('Name' ))
135+ name = models .CharField (max_length = 128 , unique = True , verbose_name = _ ('Name' ))
139136 username = models .CharField (max_length = 16 , verbose_name = _ ('Username' ))
140- _password = models .CharField (
141- max_length = 256 , blank = True , verbose_name = _ ('Password' ))
142- protocol = models .CharField (
143- max_length = 16 , choices = PROTOCOL_CHOICES , default = 'ssh' , verbose_name = _ ('Protocol' ))
144- _private_key = models .TextField (
145- max_length = 8192 , blank = True , verbose_name = _ ('SSH private key' ))
146- _public_key = models .TextField (
147- max_length = 8192 , blank = True , verbose_name = _ ('SSH public key' ))
148- auth_method = models .CharField (choices = AUTH_METHOD_CHOICES , default = 'K' ,
149- max_length = 1 , verbose_name = _ ('Auth method' ))
137+ _password = models .CharField (max_length = 256 , blank = True , verbose_name = _ ('Password' ))
138+ protocol = models .CharField (max_length = 16 , choices = PROTOCOL_CHOICES , default = 'ssh' , verbose_name = _ ('Protocol' ))
139+ _private_key = models .TextField (max_length = 8192 , blank = True , verbose_name = _ ('SSH private key' ))
140+ _public_key = models .TextField (max_length = 8192 , blank = True , verbose_name = _ ('SSH public key' ))
141+ auth_method = models .CharField (choices = AUTH_METHOD_CHOICES , default = 'K' , max_length = 1 , verbose_name = _ ('Auth method' ))
150142 auto_push = models .BooleanField (default = True , verbose_name = _ ('Auto push' ))
151- sudo = models .TextField (
152- max_length = 4096 , default = '/sbin/ifconfig' , verbose_name = _ ('Sudo' ))
153- shell = models .CharField (
154- max_length = 64 , default = '/bin/bash' , verbose_name = _ ('Shell' ))
143+ sudo = models .TextField (default = '/sbin/ifconfig' , verbose_name = _ ('Sudo' ))
144+ shell = models .CharField (max_length = 64 , default = '/bin/bash' , verbose_name = _ ('Shell' ))
155145 date_created = models .DateTimeField (auto_now_add = True )
156- created_by = models .CharField (
157- max_length = 32 , blank = True , verbose_name = _ ('Created by' ))
158- comment = models .TextField (
159- max_length = 128 , blank = True , verbose_name = _ ('Comment' ))
146+ created_by = models .CharField (max_length = 32 , blank = True , verbose_name = _ ('Created by' ))
147+ comment = models .TextField (max_length = 128 , blank = True , verbose_name = _ ('Comment' ))
160148
161- def __unicode__ (self ):
149+ def __str__ (self ):
162150 return self .name
163- __str__ = __unicode__
164151
165152 @property
166153 def password (self ):
@@ -182,9 +169,24 @@ def private_key(self):
182169 def private_key (self , private_key_raw ):
183170 self ._private_key = signer .sign (private_key_raw )
184171
172+ @property
173+ def private_key_file (self ):
174+ if not self .private_key :
175+ return None
176+ project_dir = settings .PROJECT_DIR
177+ tmp_dir = os .path .join (project_dir , 'tmp' )
178+ key_name = md5 (self ._private_key .encode ()).hexdigest ()
179+ key_path = os .path .join (tmp_dir , key_name )
180+ if not os .path .exists (key_path ):
181+ self .private_key .write_private_key_file (key_path )
182+ return key_path
183+
185184 @property
186185 def public_key (self ):
187- return signer .unsign (self ._public_key )
186+ if self ._public_key :
187+ return signer .unsign (self ._public_key )
188+ else :
189+ return None
188190
189191 @public_key .setter
190192 def public_key (self , public_key_raw ):
@@ -213,7 +215,8 @@ def _to_secret_json(self):
213215 'shell' : self .shell ,
214216 'sudo' : self .sudo ,
215217 'password' : self .password ,
216- 'public_key' : self .public_key
218+ 'public_key' : self .public_key ,
219+ 'private_key_file' : self .private_key_file ,
217220 }
218221
219222 @property
0 commit comments