Coud Foundry dev setup 分析以及chef学习

cf通过chef可以部署单节点实例。只需要按照 这里 的介绍即可安装。本文就尝试着分析一下整个部署的流程,同时也对chef进行一些学习。

vcap_dev_setup

好了,首先从最外部的脚本进入,就是bin/vcap_dev_setup。这是shell脚本,前面的内容全部忽略,到run_cmd apt-get $APT_CONFIG install -qym wget这一行开始,这里在安装wget,然后check下网络,关系不大。

然后开始安装chef,这里需要拿到一个key,如果失败,可以参看 这里 获取key。得到key之后update apt-get然后安装chef。

接下来会安装git,然后去github把最新版本的代码全部update下来。我们可以看代码:

cd $CLOUDFOUNDRY_HOME && git clone $VCAP_REPO && cd vcap && git submodule update --init && git checkout $VCAP_REPO_BRANCH 

就是这句,如果想看所有源码,就可以通过这些命令获得源码,如果单纯只是git clone的话,有些代码是没有的,比如services、uaa等都是没有的。当然在update之前,脚本会查看目标目录是否已经有vcap这个目录,如果有了,就不会再update了,所以如果有人已经安装完毕了,就可以直接把vcap目录拷贝过来,这样可以节省不少时间。

然后使用gem安装了rake,根据其comments里面所讲:  Our deployment code needs this gem. Using bundler seems like an overkill for the deployment code. So for now just manually install the required gem。也不是太懂,意会好了。

然后就调用chefsolo_launch.rb执行接下来的操作了。这里遇到过一个permission denied,因为我们代码从svn check下来,结果没有x权限,这个自己加上去就好了

chefsolo_launch.rb

这个文件前面大部分代码都在处理文件路径,这里列几个重要路径的default设置,其实自己都可以更改的:

cloudfoundry_home: /root/cloudfoundry

cloudfoundry_domain: vcap.me

deployment_spec: /root/cloudfoundry/.deployment/devbox/devbox.yml

deployment_config_path: /root/cloudfoundry/.deployment/devbox/config

然后各种参数,包括文件路径都被传入了一个叫做spec的hash(map)。同时JobManager通过job_dependencies.rake文件来得出每个job的依赖(job就是一个组建,比如cloud controller、health manager等),这些信息也被放入了spec。最终这些spec信息全部被写入了/tmp/solo.json文件,通过-j参数传给chef,我们可以看一下这个文件的内容:

  "cloudfoundry":{ 

    "home":"/root/cloudfoundry" 

  }, 

  "deployment":{ 

    "user":"root", 

    "name":"devbox", 

    "domain":"vcap.me", 

    "group":0 

  }, 

  "run_list":[ 

    "role[nats_server]", 

    "role[cloudfoundry]", 

    "role[router]", 

    "role[ccdb]", 

    "role[cloud_controller]", 

    "role[health_manager]", 

    "role[dea]", 

    "role[uaa]", 

    "role[uaadb]", 

    "role[redis_node]", 

    "role[mysql_node]", 

    "role[mongodb_node]", 

    "role[neo4j_node]", 

    "role[rabbitmq_node]", 

    "role[memcached_node]", 

    "role[redis_gateway]", 

    "role[mysql_gateway]", 

    "role[mongodb_gateway]", 

    "role[neo4j_gateway]", 

    "role[rabbitmq_gateway]", 

    "role[memcached_gateway]" 

  ], 

  "jobs":{ 

    "installed":null, 

    "install":{ 

      "all":null 

    } 

  } 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/83bc4e455173932982a7b921a3e8e96e.html