天天看點

openstack 雲主機關機,自動running

問題描述:

    解決雲主機臨時關機,自動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

<code>""</code><code>"</code>

<code>@Item   :  cheetah v1.0</code>

<code>@Author :  william</code>

<code>@Group  :  System YunWei</code>

<code>@Date   :  2017-03-15</code>

<code>@E-mail :  [email protected]</code>

<code>@Funtion:</code>

<code>import</code> <code>os,sys,</code><code>time</code><code>,socket,json,threading,traceback,shutil,requests</code>

<code>reload(sys)  </code>

<code>sys.setdefaultencoding(</code><code>'utf8'</code><code>)  </code>

<code>import</code> <code>datetime</code>

<code>from keystoneclient.auth.identity </code><code>import</code> <code>v2</code>

<code>from keystoneclient.v2_0 </code><code>import</code> <code>client as kclient</code>

<code>from novaclient </code><code>import</code> <code>client as nclient</code>

<code>from cinderclient </code><code>import</code> <code>client as cindercli</code>

<code>from keystoneclient </code><code>import</code> <code>session</code>

<code>from oslo_log </code><code>import</code> <code>log as logging</code>

<code>def LOG(level,info):</code>

<code>    </code><code>fp = </code><code>open</code><code>(</code><code>'/var/log/nova/shutdonw.log'</code><code>,</code><code>'a'</code><code>)</code>

<code>    </code><code>fp.write(</code><code>"%s %s %s \n"</code><code>%(</code><code>time</code><code>.ctime(),level,info))</code>

<code>    </code><code>fp.close()</code>

<code>class Openstack(object):</code>

<code>    </code><code>def __init__(self):</code>

<code>        </code><code>version = </code><code>"v1.0"</code>

<code>    </code> 

<code>    </code><code>def get_node_instances(self):</code>

<code>        </code><code>ops_dict = dict()</code>

<code>        </code><code>auths = v2.Password(</code>

<code>              </code><code>auth_url = </code><code>'http://127.0.0.1:35357/v2.0/'</code><code>,</code>

<code>              </code><code>username = </code><code>'admin'</code><code>,</code>

<code>              </code><code>password = </code><code>'adminxxxx'</code><code>,</code>

<code>              </code><code>tenant_name = </code><code>'admin'</code><code>,</code>

<code>          </code><code>)</code>

<code>        </code><code># session connect </code>

<code>        </code><code>try:</code>

<code>            </code><code>sess = session.Session(auth=auths)</code>

<code>            </code><code>nova_client = nclient.Client(</code><code>'2'</code><code>,session=sess)</code>

<code>        </code><code>except:</code>

<code>            </code><code>LOG(</code><code>"Error"</code><code>,</code><code>'OpenStack %s auth conn faild '</code><code>%(k))</code>

<code>        </code><code># time sleep 3 ,get nova-manager service list result  </code>

<code>        </code><code>instances =  nova_client.servers.list(search_opts={</code><code>'all_tenants'</code><code>: 1})</code>

<code>        </code><code>for</code> <code>ins </code><code>in</code> <code>instances:</code>

<code>            </code><code>if</code> <code>ins.status == </code><code>'SHUTOFF'</code><code>:</code>

<code>                </code><code>time</code><code>.</code><code>sleep</code><code>(3)</code>

<code>                </code><code>ins.start()</code>

<code>                </code><code>LOG(</code><code>"INFO"</code><code>,</code><code>"%s,%s,%s"</code><code>%(ins.</code><code>id</code><code>,ins.name,ins.addresses))</code>

<code> </code> 

<code>if</code> <code>__name__ == </code><code>"__main__"</code><code>:</code>

<code>    </code><code>sc = Openstack()</code>

<code>    </code><code>sc.get_node_instances()</code>

<code>    </code><code>try:</code>

<code>        </code><code>pid = os.fork()</code>

<code>        </code><code>if</code> <code>pid &gt; 0 :</code>

<code>            </code><code>sys.</code><code>exit</code><code>(0)</code>

<code>        </code><code>os.setsid()</code>

<code>        </code><code>os.chdir(</code><code>'/'</code><code>)</code>

<code>        </code><code>sys.stdin = </code><code>open</code><code>(</code><code>"/dev/null"</code><code>,</code><code>"r+"</code><code>)</code>

<code>        </code><code>sys.stdout = os.dup(sys.stdin.fileno())</code>

<code>        </code><code>sys.stderr = os.dup(sys.stdin.fileno())</code>

<code>        </code><code>print </code><code>'yes'</code>

<code>        </code><code>while</code> <code>True:</code>

<code>            </code><code>LOG(</code><code>"INFO"</code><code>,</code><code>"Shutting start"</code><code>)</code>

<code>            </code><code>time</code><code>.</code><code>sleep</code><code>(6)</code>

<code>            </code><code>sc = Openstack()</code>

<code>            </code><code>sc.get_node_instances()</code>

<code>    </code><code>except IOError,e:</code>

<code>        </code><code>print e</code>

<code>        </code><code>LOG(</code><code>"Error"</code><code>,traceback.format_exc())</code>

本文轉自 swq499809608 51CTO部落格,原文連結:http://blog.51cto.com/swq499809608/1962082

繼續閱讀