cloud-init功能强大,可将用户数据注入VM实例,其现有模块提供了大量可能性。
虽然为了让它更易于使用,我想在下面定义我的自己的标记,例如核心,请参阅running coreos in openstack
中的详细信息#cloud-config
coreos:
etcd:
# generate a new token for each unique cluster from https://discovery.etcd.io/new
discovery: https://discovery.etcd.io/<token>
# multi-region and multi-cloud deployments need to use $public_ipv4
addr: $private_ipv4:4001
peer-addr: $private_ipv4:7001
units:
- name: etcd.service
command: start
- name: fleet.service
command: start
所以我可以使用我自己定义的标签/配置myapp
#cloud-config
myapp:
admin: admin
database: 192.168.2.3
我是cloud-init的新手,是否称为模块?它在文档http://cloudinit.readthedocs.org/en/latest/topics/modules.html
中为空您能提供一些信息来描述我如何编写自己的模块吗?
答案 0 :(得分:3)
您需要在合适的目录中编写“cc”模块,并修改一些配置。它不是非常简单,但肯定可行(我们经常使用它)。
找到cloudconfig模块的目录。在Amazon Linux上,这是/usr/lib/python2.6/site-packages/cloudinit/config/
,但目录位置在不同的云init版本和发行版中有所不同。找到这个的最简单方法是找到一个名为cc_mounts.py
的文件。
在您的案例cc_myapp.py
中添加新文件。复制一些现有脚本作为基础,以了解在那里写什么。重要的功能是def handle(name,cfg,cloud,log,args):
,它基本上是脚本的入口点。
实施您的逻辑。 cfg
参数有一个python对象,它是解析的YAML配置文件。所以对于你的情况你会做类似的事情:
myapp = cfg.get('myapp')
admin = myapp.get('admin')
database = myapp.get('database')
/etc/cloud/cloud.cfg.d/defaults.cfg
或直接添加到/etc/cloud/cloud.cfg
。有一些名为cloud_init_modules
,cloud_config_modules
等的键,它们对应于init进程的不同部分,您可以在其中运行脚本。如果这不能直接使用,您可能需要进行一些调查,以了解如何在系统上调用模块。例如,Amazon Linux过去在init.d脚本中有一个硬编码的模块列表,忽略配置文件中指定的任何列表。另请注意,默认情况下,您的脚本每个实例只运行一次,这意味着重新运行cloud-init将不会再次运行您的脚本。您需要通过在列出模块的配置文件中将frequency
设置为always
来将脚本标记为每次启动,或者删除标记文件,说明脚本已运行,该文件位于{{ 1}}喜欢/var/lib/cloud
。
答案 1 :(得分:0)
为您粘贴我的便条:
config:在VM中安装cloud-init
之后,如果您想拥有使用passwd访问的root权限,请执行以下简单配置
修改/etc/cloud/cloud.cfg,如下所示
users:
- defaults
disable_root:0
ssh_pwauth: 1
注意:ssh_pwauth
:&#34;它会自动修改PasswordAuthentication
中的sshd_config
,1
表示yes
使用方法:
可以使用cloud-init
配置user data
的行为。在实例开始时用户可以填写用户数据(用户数据限制为16K)。
主要有几种方法可以做(测试):
用户数据脚本
$ cat myscript.sh
#!/bin/sh
echo "Hello World. The time is now $(date -R)!" | tee /root/output.txt
启动实例时,添加参数--user-data myscript.sh
,实例将在启动期间运行一次脚本,并且只运行一次。
它是基于YAML的,请参阅http://bazaar.launchpad.net/~cloud-init-dev/cloud-init/trunk/files/head:/doc/examples/
运行脚本
#cloud-config
runcmd:
- [ ls, -l, / ]
- [ sh, -xc, "echo $(date) ': hello world!'" ]
- [ sh, -c, echo "=========hello world'=========" ]
- ls -l /root
- [ wget, "http://slashdot.org", -O, /tmp/index.html ]
更改主机名,密码
#cloud-config
chpasswd:
list: |
root:123456
expire: False
ssh_pwauth: True
hostname: test
包含格式 运行url脚本,它将下载URL脚本并执行它们的顺序,这有助于集中管理脚本。
#include
http://hostname/script1
http://hostname/scrpt2