gushiren

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
#!/usr/bin/python3
 
import os
import sys
import json
import urllib.request
import urllib.parse
import urllib.error
import subprocess
from cloudinit.sources.DataSourceConfigDrive import find_candidate_devs, read_config_drive
from cloudinit.util import mount_cb
 
 
def shell(cmd):
    sp = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out, err = sp.communicate()
    return out, err
 
# Before resetroot, We must ensure if 169.254.169.254 have gateway
for dev in find_candidate_devs():
    results = mount_cb(dev, read_config_drive)
    network_data = results.get("network_config")
    found = dev
    gateways = []
    if found:
        for line in network_data.splitlines():
            if line.startswith("gateway"):
                line = line.strip()
                split_up = line.split(None, 1)
                if len(split_up) <= 1:
                    continue
                gateway = split_up[1]
                gateways.append(gateway)
        break
 
if gateways:
    gateway = gateways[0]
    cmd = "route add -host 169.254.169.254 gw %s" % gateway
    out,err = shell(cmd)
 
 
# To reset password
data = urllib.request.urlopen("http://169.254.169.254/openstack/latest/meta_data.json").read().decode()
json_data = json.loads(data)
print(json_data)
  
meta = json_data.get("meta")
if meta:
    adminPass =  meta.get("admin_pass")
    if  adminPass:
        os.system("echo 'root:%s' | chpasswd" % adminPass)
        params = urllib.parse.urlencode({"delete":True}).encode(encoding='UTF8')
        f = urllib.request.urlopen("http://169.254.169.254/openstack/latest/password", params)
        f.read()
View Code

 

posted on 2018-09-12 18:01  gushiren  阅读(160)  评论(0编辑  收藏  举报