天天看點

CloudFoundry源碼分析:Cloud Controller(1)平台資訊和使用者管理概述業務子產品平台資訊管理使用者資訊管理其他

概述

Cloud_Controller是Cloud Foundry的中心控制器,負責整個Cloud Foundry管理工作:包括平台資訊管理、使用者管理、應用管理、服務管理等。

業務子產品

Cloud_Controller是一個标準的rails應用(除了views部分)。通過路由表,我們可以發現Cloud_Controller的所有請求及處理入口,主要包括四個部分

(1)平台相關資訊(info),由DefaultController處理請求。

(2)使用者相關資訊(users),由UsersController處理請求,對應模型結構主要有User。

(3)應用相關資訊(apps),由AppsController處理請求,對應模型結構主要有App、AppCollaboration、Route及其他輔助類

(4)服務相關資訊(services),由ServicesController處理請求,對應模型結構主要有Service、ServiceConfig、ServiceBinding、BindingToken及其他輔助類

平台資訊管理

DefaultController包括info、runtime_info、service_info三個主要方法,分别對應vmc info、vmc runtimes和vmc services三個指令。

get    'info'                      => 'default#info',         :as => :cloud_info
  get    'info/services'             => 'default#service_info', :as => :cloud_service_info
  get    'info/runtimes'             => 'default#runtime_info', :as => :cloud_runtime_info
           

(1)info傳回平台的基本資訊

VMware's Cloud Application Platform
For support visit http://support.cloudfoundry.com

Target:   http://api.cloudfoundry.com (v0.999)
Client:   v0.3.21
           

如果目前使用者登入,傳回資訊将包括使用者資訊

User:     [email protected]
Usage:    Memory   (128.0M of 2.0G total)
          Services (1 of 16 total)
          Apps     (1 of 20 total)
           

(2)service_info傳回系統的服務資訊

傳回系統的對使用者可見的服務資訊,vmc services。

svcs = Service.active_services.select {|svc| svc.visible_to_user?(user)}
           
+------------+---------+---------------------------------------+
| Service    | Version | Description                           |
+------------+---------+---------------------------------------+
| mongodb    | 2.0     | MongoDB NoSQL store                   |
| mysql      | 5.1     | MySQL database service                |
| postgresql | 9.0     | PostgreSQL database service (vFabric) |
| rabbitmq   | 2.4     | RabbitMQ message queue                |
| redis      | 2.2     | Redis key-value store service         |
+------------+---------+---------------------------------------+
           

(3)runtime_info傳回系統的運作時資訊

+--------+-------------+-----------+
| Name   | Description | Version   |
+--------+-------------+-----------+
| node   | Node.js     | 0.4.12    |
| java7  | Java 7      | 1.7       |
| java   | Java 6      | 1.6       |
| node08 | Node.js     | 0.8.2     |
| node06 | Node.js     | 0.6.8     |
| ruby19 | Ruby 1.9    | 1.9.2p180 |
| ruby18 | Ruby 1.8    | 1.8.7     |
+--------+-------------+-----------+
           

使用者資訊管理

UsersController包括create、delete、update、info、list共5個主要方法。

get    'users'                     => 'users#list',           :as => :list_users
  post   'users'                     => 'users#create',         :as => :create_user
  get    'users/*email'              => 'users#info',           :as => :user_info
  delete 'users/*email'              => 'users#delete',         :as => :delete_user
  put    'users/*email'              => 'users#update',         :as => :update_user
  post   'users/*email/tokens'       => 'user_tokens#create',   :as => :create_token
           

(1)create建立新使用者

如果UAA認證開啟的話,就先經過UAA認證,生成賬号

user = user_account.create(body_params[:email], body_params[:password], body_params[:email])
           

然後建立User對象執行個體

user = ::User.new :email => body_params[:email]
user.set_and_encrypt_password(body_params[:password])
           

記錄存入users表。

(2)delete删除使用者

如果UAA認證開啟的話,就先經過UAA删除認證資訊

user_account.delete_by_name(params['email'])
           

然後删除使用者所有的服務和APP

target_user.service_configs.each { |cfg| cfg.unprovision }
           
target_user.apps.each do |app|
    if app.owner == target_user
      app.purge_all_resources!
      app.destroy
    end
end
           

最後删除使用者

target_user.destroy
           

(3)update更新使用者資訊,就是修改密碼

(4)info檢視使用者資訊

普通使用者隻能檢視自己的使用者資訊,管理使用者可以檢視所有使用者資訊

(5)list傳回使用者資訊及擁有的app資訊

其他

應用管理和服務管理子產品将單獨介紹。

繼續閱讀