问题描述:

    解决云主机临时关机,自动running 云主机,减少登机器操作,采用的模块是openstack 组件相关模块,需要在控制节点上开发

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
"" "
@Item   :  cheetah v1.0
@Author :  william
@Group  :  System YunWei
@Date   :  2017-03-15
@E-mail :  swq.499809608@hotmail.com
@Funtion:
"" "
import  os,sys, time ,socket,json,threading,traceback,shutil,requests
 
reload(sys)  
sys.setdefaultencoding( 'utf8' )  
 
import  datetime
from keystoneclient.auth.identity  import  v2
from keystoneclient.v2_0  import  client as kclient
from novaclient  import  client as nclient
from cinderclient  import  client as cindercli
from keystoneclient  import  session
from oslo_log  import  log as logging
 
 
 
 
def LOG(level,info):
     fp =  open ( '/var/log/nova/shutdonw.log' , 'a' )
     fp.write( "%s %s %s \n" %( time .ctime(),level,info))
     fp.close()
 
class Openstack(object):
     def __init__(self):
         version =  "v1.0"
     
     def get_node_instances(self):
         ops_dict = dict()
 
         auths = v2.Password(
               auth_url =  'http://127.0.0.1:35357/v2.0/' ,
               username =  'admin' ,
               password =  'adminxxxx' ,
               tenant_name =  'admin' ,
           )
 
         # session connect 
         try:
             sess = session.Session(auth=auths)
             nova_client = nclient.Client( '2' ,session=sess)
         except:
             LOG( "Error" , 'OpenStack %s auth conn faild ' %(k))
     
         # time sleep 3 ,get nova-manager service list result  
         instances =  nova_client.servers.list(search_opts={ 'all_tenants' : 1})
 
         for  ins  in  instances:
             if  ins.status ==  'SHUTOFF' :
                 time . sleep (3)
                 ins.start()
                 LOG( "INFO" , "%s,%s,%s" %(ins. id ,ins.name,ins.addresses))
  
 
if  __name__ ==  "__main__" :
     sc = Openstack()
     sc.get_node_instances()
"" "
     
     try:
         pid = os.fork()
         if  pid > 0 :
             sys. exit (0)
         os.setsid()
         os.chdir( '/' )
         sys.stdin =  open ( "/dev/null" , "r+" )
         sys.stdout = os.dup(sys.stdin.fileno())
         sys.stderr = os.dup(sys.stdin.fileno())
         print  'yes'
 
         while  True:
             LOG( "INFO" , "Shutting start" )
             time . sleep (6)
             sc = Openstack()
             sc.get_node_instances()
     except IOError,e:
         print e
         LOG( "Error" ,traceback.format_exc())
 
"" "