cloud-init用于在创建虚拟机时通过元数据服务对虚拟机基本配置,包括常见的主机名,用户,密码等等。同时用户可以通过user_data自定义一些数据对虚拟机进行配置,可以有配置文件cloud-config或者直接给定脚本,支持常见的shell cmd python脚本
 
 
博客
 

cloud-init for windows

- 启动一个云主机,制作模板
- 安装cloudbase-init.msi程序,见百度云盘
- 修改代码,允许重复加载插件(测试时使用)
   >程序:C:\Program Files (x86)\Cloudbase Solutions\Cloudbase-Init\Python27\Lib\site-packages\cloudbaseinit\init.py
   >方法:_exec_plugin
   >修改为:
   

plugin_name = plugin.get_name()
status = self._get_plugin_status(osutils, instance_id, plugin_name)
LOG.info('Executing plugin \'%s\'', plugin_name)
try:
(status, reboot_required) = plugin.execute(service,
shared_data)
self._set_plugin_status(osutils, instance_id, plugin_name,
status)
return reboot_required
except Exception, ex:
LOG.error('plugin \'%(plugin_name)s\' failed with error '
'\'%(ex)s\'', {'plugin_name': plugin_name, 'ex': ex})
LOG.exception(ex)

  

 
- 编写测试脚本
 
import os

def test() :
fl = open('c:\hujin.log','wb')
fl.write('hello,world')
fl.close() if main == 'name':
test()

  

- 启动Cloud Initialization Service 服务
 
 
cloud-init for linux
待更新
 
 
源码流程说明
- 程序首先判断操作系统类型,加载对应的模块
- 加载服务,服务共分为四种:

  'cloudbaseinit.metadata.services.httpservice.HttpService',
'cloudbaseinit.metadata.services.configdrive.ConfigDriveService',
'cloudbaseinit.metadata.services.ec2service.EC2Service',
'cloudbaseinit.metadata.services.maasservice.MaaSHttpService'

  

目前openstack中我们会用第一种,使用http获取openstack的元数据服务
- 加载插件,插件共分为:

  'cloudbaseinit.plugins.windows.mtu.MTUPlugin',
'cloudbaseinit.plugins.windows.ntpclient.NTPClientPlugin',
'cloudbaseinit.plugins.windows.sethostname.SetHostNamePlugin',
'cloudbaseinit.plugins.windows.createuser.CreateUserPlugin',
'cloudbaseinit.plugins.windows.networkconfig.NetworkConfigPlugin',
'cloudbaseinit.plugins.windows.licensing.WindowsLicensingPlugin',
'cloudbaseinit.plugins.windows.sshpublickeys.'
'SetUserSSHPublicKeysPlugin',
'cloudbaseinit.plugins.windows.extendvolumes.ExtendVolumesPlugin',
'cloudbaseinit.plugins.windows.userdata.UserDataPlugin',
'cloudbaseinit.plugins.windows.setuserpassword.'
'SetUserPasswordPlugin',
'cloudbaseinit.plugins.windows.winrmlistener.'
'ConfigWinRMListenerPlugin',
'cloudbaseinit.plugins.windows.winrmcertificateauth.'
'ConfigWinRMCertificateAuthPlugin',
'cloudbaseinit.plugins.windows.localscripts.LocalScriptsPlugin',
上面windows中就是使用localscript插件
-  执行插件
- 根据配置重启机器
 
 
PS
目前主要功能有
  • 创建新用户
  • 修改用户密码
  • 添加用户到指定用户组
  • 获取用户home目录
  • 设置主机名
  • 获取网卡信息
  • 获取DHCP信息
  • 设置NTP
  • 设置静态IP
  • 判断服务是否存在
  • 获取服务状态
  • 设置服务启动模式
  • 启动服务
  • 关闭服务
  • 获取默认网关
  • 获取CD驱动
  • 获取物理磁盘
  • 创建防火墙规则
  • 删除防火墙规则
 

Cloud-init的更多相关文章

  1. openstack cloud init set password

    设置代理和password #!/bin/bash cd /home/ubuntu wget otcloud-gateway.bj.intel.com/script.tar.gz ]; then cu ...

  2. openstack 使用cloud init 和 console-log, nbd或者libguestfs 获取VM中的硬件信息。

    以获取PCI的信息为例. 基本代码: pci.py import base64 import guestfs from functools import partial import os impor ...

  3. 微信小程序调用云函数出错 Error: errCode: -404011 cloud function execution error | errMsg: cloud.callFunction:fail cloud function service error code -501005, error message Environment not found;

    错误异常: Error: errCode: -404011 cloud function execution error | errMsg: cloud.callFunction:fail cloud ...

  4. 分享使用tcb-router路由开发的云函数短信平台SDK

    上篇文章我们分享了如何使用纯的云函数开发的榛子短信短信(http://smsow.zhenzikj.com)SDK,由于微信对于未付费云函数个数的限制,这种方法存在缺陷,经过改进,使用tcb-rout ...

  5. 【微信小程序云开发】从陌生到熟悉

    前言 微信小程序在9月10号正式上线了云开发的功能,弱化后端和运维概念,以前开发一个小程序需要申请一个小程序,准备一个https的域名,开发需要一个前端一个服务端,有了云开发只有申请一个小程序,一个前 ...

  6. 小程序云开发--云函数上传文件或图片 base64

    云函数开发遇到的问题 在微信云开发环境当中,普通的用户并没有往云存储内写入文件的权限 所以普通用户想要使用wx.cloud.uploadFile显然是不现实的 但是我们同时也知道,云函数是后台服务端, ...

  7. 微信小程序http连接访问解决方案

    HTTP + 加密 + 认证 + 完整性保护 = HTTPS,小程序考虑到信息安全的问题,选用了更为稳定安全的https 来进行信息传递. HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全 ...

  8. 微信小程序云开发更换云开发环境

    小程序云开发环境初始化默认是第一个环境,但是我们可以指定环境id //app.js App({ onLaunch: function () { if (!wx.cloud) { console.err ...

  9. nodejs + 小程序云函数 生成小程序码

    前言:这个东西坑死我了 业务需求要生成小程序码 然后我找了两天的资料 运行 生成一堆的乱码 死活就是不能生成 最后看了一遍博客 套用了一下 自己又简单的改了一下  nodejs 我是刚刚接触  有很多 ...

  10. 微信小程序项目实战 - 菜谱大全

    1. 项目简介 最近研究小程序云开发,上线了一个有关菜品查询的小程序.包括搜索.分享转发.收藏.查看历史记录等功能.菜谱 API 来自聚合数据.云开发为开发者提供完整的云端支持,弱化后端和运维概念,无 ...

随机推荐

  1. clientHeight scrollHeight offsetHeight

    <div  style="height:200px;padding:10px;border:1px solid green;"></div> 对于上面的di ...

  2. 【2019年04月10日】股票的滚动市盈率PE最低排名

    仅根据最新的市盈率计算公式进行排名,无法对未来的业绩做出预测. 新钢股份(SH600782) - 滚动市盈率PE:3.87 - 滚动市净率PB:1.29 - 滚动年化股息收益率:1.31% - 钢铁 ...

  3. Git命令行大全

    git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch -r 查看远程所有分支 git ...

  4. SQL Server清空日志以及查看日志大小语句

    为了安全起见,使用的时候,先数据备份一遍 作者hongb:SQL Server:查看SQL日志文件大小命令:dbcc sqlperf(logspace) https://www.cnblogs.com ...

  5. Ubuntu 14.04 LTS 系统空间不足,输入密码后,无法进入桌面的解决办法

    问题场景:系统空间不足,在没有清理空间的情况下,重启机器,可能会出现,输入密码后,无法进入桌面的现象. 如何解决? 解决方法:以访客身份登录系统,可以看到你的ip地址,然后以ssh的方式登录你的主机, ...

  6. 【CF497E】Subsequences Return 矩阵乘法

    [CF497E]Subsequences Return 题意:设$s_k(x)$表示x在k进制下各位数的和mod k的值.给出k,现有序列$s_k(1),s_k(2),...s_k(n)$.求这个序列 ...

  7. 在mysql中给查询的结果添加序号列

    SELECT * FROM ( SELECT (@i:=@i+1) as i, id, data_send_time FROM jl_pims_machine_time mt,(select @i:= ...

  8. oracle 28000错误解决方法

    ORA-28000: the account is locked-的解决办法 ORA-28000: the account is locked 第一步:使用PL/SQL,登录名为system,数据库名 ...

  9. 12:Css3的概念和优势

    12:Css3的概念和优势 CSS3是css技术的升级版本,CSS3语言开发是朝着模块化发展的.以前的规范作为一个模块实在是太庞大而且比较复杂,所以,把它分解为一些小的模块,更多新的模块也被加入进来. ...

  10. Linux上配置http上网代理

    有些局域网环境上网需要使用代理上网,图形界面的很好解决就设置一下浏览器的代理就好了,但是Linux纯命令行的界面就需要手动配置了. 如果要全局用户使用应用于所有的Shell,就需要修改 /etc/pr ...