Module: Pec

Defined in:
lib/pec.rb,
lib/pec/cli.rb,
lib/pec/core.rb,
lib/pec/init.rb,
lib/pec/logger.rb,
lib/pec/sample.rb,
lib/pec/command.rb,
lib/pec/handler.rb,
lib/pec/version.rb,
lib/pec/configure.rb,
lib/pec/config_file.rb

Defined Under Namespace

Modules: Command, Core, Handler Classes: CLI, ConfigError, ConfigFile, Configure, Init, Logger, PortError

Constant Summary collapse

VERSION =
"0.8.7"

Class Method Summary collapse

Class Method Details

.check_envObject



81
82
83
84
85
86
87
88
89
# File 'lib/pec.rb', line 81

def self.check_env
  %w(
    OS_AUTH_URL
    OS_USERNAME
    OS_PASSWORD
  ).each do |name|
    raise "please set env #{name}" unless ENV[name]
  end
end

.config_resetObject



100
101
102
103
104
105
106
107
108
109
# File 'lib/pec.rb', line 100

def self.config_reset
  %w(
    _configure
    _tenant_list
    _server_list
    _flavor_list
  ).each do |name|
    instance_variable_set("@#{name}".to_sym, nil)
  end
end

.configureObject



45
46
47
48
# File 'lib/pec.rb', line 45

def self.configure
  load_config unless @_configure
  @_configure
end

.fetch_server(config) ⇒ Object



59
60
61
# File 'lib/pec.rb', line 59

def self.fetch_server(config)
  server_list(config).find {|s|s.name == config.name}
end

.flavor_list(server) ⇒ Object



76
77
78
79
# File 'lib/pec.rb', line 76

def self.flavor_list(server)
  @_flavor_list ||= {}
  @_flavor_list[server.tenant_id] ||= Yao::Flavor.list
end

.get_tenant_id(config) ⇒ Object



63
64
65
# File 'lib/pec.rb', line 63

def self.get_tenant_id(config)
  config.tenant_id || tenant_list.find {|tenant| tenant.name == config.tenant}.id
end

.init_yao(_tenant_name) ⇒ Object



20
21
22
23
24
25
26
27
28
29
# File 'lib/pec.rb', line 20

def self.init_yao(_tenant_name)
  return unless reload_yao?(_tenant_name)
  check_env
  Yao.configure do
    auth_url "#{ENV["OS_AUTH_URL"]}/tokens"
    username ENV["OS_USERNAME"]
    password ENV["OS_PASSWORD"]
    tenant_name _tenant_name
  end
end

.load_config(config_name = "Pec.yaml") ⇒ Object



35
36
37
38
39
40
41
42
43
# File 'lib/pec.rb', line 35

def self.load_config(config_name="Pec.yaml")
  @_configure ||= []
  ConfigFile.new(config_name).load.to_hash.reject {|k,v| k[0].match(/\_/) || k.match(/^includes$/) }.each do |config|
    @_configure << Pec::Configure.new(config)
  end
rescue => e
  Pec::Logger.critical "configure error!"
  raise e
end

.options(opt = nil) ⇒ Object



111
112
113
114
115
# File 'lib/pec.rb', line 111

def self.options(opt=nil)
  @_opt ||= {}
  @_opt = opt if opt
  @_opt
end

.processor_matching(source, klass) ⇒ Object



91
92
93
94
95
96
97
98
# File 'lib/pec.rb', line 91

def self.processor_matching(source, klass)
  source.keys.each do |k|
    Object.const_get(klass.to_s).constants.each do |c|
      object = Object.const_get("#{klass.to_s}::#{c}")
      yield object if  k.to_s == object.kind.to_s
    end
  end
end

.reload_yao?(_tenant_name) ⇒ Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/pec.rb', line 31

def self.reload_yao?(_tenant_name)
  @_last_tenant = _tenant_name if _tenant_name != @_last_tenant
end

.server_list(config) ⇒ Object



67
68
69
70
# File 'lib/pec.rb', line 67

def self.server_list(config)
  @_server_list ||= {}
  @_server_list[config.tenant] ||= Yao::Server.list_detail({tenant_id: get_tenant_id(config)})
end

.servers(filter_hosts, not_fetch) ⇒ Object



50
51
52
53
54
55
56
57
# File 'lib/pec.rb', line 50

def self.servers(filter_hosts, not_fetch)
  self.configure.each do |config|
    next if filter_hosts.size > 0 && filter_hosts.none? {|name| config.name.match(/^#{name}/)}
    Pec.init_yao(config.tenant)
    server = fetch_server(config) unless not_fetch
    yield(server, config)
  end
end

.tenant_listObject



72
73
74
# File 'lib/pec.rb', line 72

def self.tenant_list
  @_tenant_list ||= Yao::Tenant.list
end