2014-10-19 16 views
2

cloud-init將用戶數據注入到VM實例中功能強大,其現有模塊提供了很多可能性。如何在cloud-init中編寫自己的cloud-config?

雖然以使其更易於使用,我想在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 

定義我自己的標籤像下面coreos,看到的細節,這樣我可以有類似下面用我自己定義的標記/ config myapp

#cloud-config 
myapp: 
    admin: admin 
    database: 192.168.2.3 

我是新來的cloud-init,是不是叫做模塊?它在文檔中爲空http://cloudinit.readthedocs.org/en/latest/topics/modules.html

您能否提供一些信息來描述我如何編寫自己的模塊?

回答

3

你需要寫在合適的目錄下的「CC」模塊,並修改一些配置。這並不容易,但肯定是可行的(我們使用它很多)。

  1. 找到cloudconfig模塊的目錄。在Amazon Linux上,這是/usr/lib/python2.6/site-packages/cloudinit/config/,但目錄位置在不同的雲初始化版本和分發版中有所不同。找到這個最簡單的方法是找到一個名爲cc_mounts.py的文件。

  2. 在那裏添加一個新文件,在你的案例cc_myapp.py。複製一些現有腳本作爲基礎知道該寫什麼。重要功能是def handle(name,cfg,cloud,log,args):,它基本上是腳本的入口點。

  3. 實現你的邏輯。 cfg參數有一個python對象,它是解析的YAML配置文件。所以對於你的情況,你會做這樣的事情: myapp = cfg.get('myapp') admin = myapp.get('admin') database = myapp.get('database')

  4. 確保您的腳本被cloud-init調用。如果你的發行版使用標準的雲設置初始化,只需添加文件即可正常運行。否則,您可能需要將其添加到/etc/cloud/cloud.cfg.d/defaults.cfg或直接添加到/etc/cloud/cloud.cfg。有一些名爲cloud_init_modules,cloud_config_modules等的鍵,它們對應於init進程的不同部分,您可以在其中運行腳本。如果這不能直接使用,您可能需要進行一些調查以瞭解如何在您的系統上調用模塊。例如,Amazon Linux過去在init.d腳本中有一個硬編碼的模塊列表,忽略了配置文件中指定的任何列表。

另請注意,默認情況下,您的腳本每個實例只運行一次,這意味着重新運行的cloud-init將不會再次運行您的腳本。您需要將其標記爲腳本由配置文件中設置frequencyalways列出你的模塊每啓動之中,或刪除標記文件說,腳本運行,這/var/lib/cloud下住的地方像/var/lib/cloud/instances/i-86ecc763/sem/config_mounts

0

貼上我的筆記給你:

配置:安裝後,在VM cloud-init,如果u想擁有超級用戶權限使用passwd訪問,做簡單的配置如下

修改/ etc /雲/雲。 CFG喜歡下面

users: 
- defaults 
disable_root:0 
ssh_pwauth: 1 

注:ssh_pwauth:「它會修改PasswordAuthenticationsshd_config自動,1意味着yes

用法: cloud-init的行爲可以使用user data進行配置。用戶數據可以在實例開始時由用戶填寫(用戶數據限制爲16K)。

主要有幾種方法可以做到(測試):

  1. 用戶數據腳本

    $ 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 
    
    1. 包含格式 運行url腳本,它會下載URL腳本並執行它們的順序,這可以幫助集中管理腳本。

      #include 
      http://hostname/script1 
      http://hostname/scrpt2 
      
    +0

    這是一個英語社區 – Nabin 2014-10-23 15:36:14

    +0

    我澄清了這個問題,我的目標是找到一種方法來定製cloud-config中的標記 – 2014-10-24 00:28:04

    +0

    @Nabin:它已更新爲英語 – 2014-10-24 00:28:35

    相關問題