pec 0.7.3 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: de4afe55b26feafd85e2735f85bfd4bcf7cfd765
4
- data.tar.gz: c0bc229e8eb45d455d0a724aab16d0b360258a2d
3
+ metadata.gz: 392f342e2b27871767f7fe5948146787f87980a0
4
+ data.tar.gz: baf04990a37528b744de4c363dab705d10148148
5
5
  SHA512:
6
- metadata.gz: 397bde231b31ac5ea69cddacb767b4dfd05cfc9d6532ea58e98ce42b7c0b25d29ef55f854715fbd1ce018958f05e6d603528b0d6127b7b5e6fcd9adef67fb65d
7
- data.tar.gz: 18c9cd6461af6ed0f80841bf8e07bb5165479c52a0c8098ab57326a81c7c9a4f2ac1f49e37982a6cd9fe32b9131f45ec19619b767b0209d0aded1fc73c103a15
6
+ metadata.gz: eeb3951cf5e8aa8842f4a7c781b84146703c97b96f28ded998129ab7d3fbb1a5a916e2f8d0e13998d26aa8310c9d3a50f7e7906705fe68de8875102ae60decde
7
+ data.tar.gz: 0f1f0ab20596024f81aa30acb57c898ae8e6d2871e4221c63ea39b26630528bfb54414260a45ef1399a79ff1387b67a9ab54d4f8b0c2882792189a115de5e31d
data/README.md CHANGED
@@ -31,6 +31,7 @@ create - /user_data/web_server.yaml.sample
31
31
  ```
32
32
  # merge of yaml
33
33
  _default_: &def
34
+ os_type: centos
34
35
  tenant: your_tenant
35
36
  image: centos-7.1_chef-12.3_puppet-3.7
36
37
  flavor: m1.small
@@ -78,6 +79,7 @@ inludes:
78
79
  | tenant | ○ | your_tenant |
79
80
  | image | ○ | centos-7.1_chef-12.3_puppet-3.7 |
80
81
  | flavor | ○ | m1.small |
82
+ | os_type | - | centos(centos or ubuntu |
81
83
  | networks | - | [] |
82
84
  | security_group | - | [default,ssh] |
83
85
  | templates | - | [base.yaml,webserver.yaml] |
@@ -95,6 +97,7 @@ inludes:
95
97
  | allowed_address_pairs | | [10.1.1.2/24] |
96
98
 
97
99
  ※ bootproto=static is required
100
+
98
101
  Items other than the above are output to the configuration file with `KEY = value` format
99
102
 
100
103
  #### Includes
data/lib/pec.rb CHANGED
@@ -9,6 +9,7 @@ require "pec/version"
9
9
  require "pec/logger"
10
10
  require "pec/configure"
11
11
  require "pec/handler"
12
+ require "pec/coordinate"
12
13
  require "pec/command"
13
14
  require "pec/sample"
14
15
  require "pec/init"
@@ -56,7 +57,6 @@ module Pec
56
57
  end
57
58
  end
58
59
 
59
-
60
60
  def self.check_env
61
61
  %w(
62
62
  OS_AUTH_URL
@@ -66,6 +66,10 @@ module Pec
66
66
  raise "please set env #{name}" unless ENV[name]
67
67
  end
68
68
  end
69
+
70
+ def self.config_reset
71
+ @_configure = nil
72
+ end
69
73
  end
70
74
 
71
75
  class ::Hash
@@ -6,14 +6,13 @@ module Pec::Command
6
6
  Pec::Logger.info "make start #{config.name}"
7
7
 
8
8
  attribute = {name: config.name}
9
- config.keys.each do |k|
10
- Pec::Handler.constants.each do |c|
11
- _handler = Object.const_get("Pec::Handler::#{c}")
12
- attribute.deep_merge!(_handler.build(config)) if _handler.kind == k
13
- end
9
+ make_attribute(config, Pec::Handler) do |key, klass|
10
+ attribute.deep_merge!(klass.build(config))
14
11
  end
15
12
 
16
- attribute[:user_data] = Base64.encode64("#cloud-config\n" + attribute[:user_data].to_yaml) if attribute[:user_data]
13
+ make_attribute(attribute, Pec::Coordinate) do |key, klass|
14
+ attribute.deep_merge!(klass.build(config, attribute))
15
+ end
17
16
 
18
17
  Yao::Server.create(attribute)
19
18
  Pec::Logger.info "create success! #{config.name}"
@@ -21,5 +20,14 @@ module Pec::Command
21
20
  Pec::Logger.notice "already server: #{config.name}"
22
21
  end
23
22
  end
23
+
24
+ def self.make_attribute(source, klass)
25
+ source.keys.each do |k|
26
+ Object.const_get(klass.to_s).constants.each do |c|
27
+ object = Object.const_get("#{klass.to_s}::#{c}")
28
+ yield k, object if k.to_s == object.kind.to_s
29
+ end
30
+ end
31
+ end
24
32
  end
25
33
  end
@@ -0,0 +1,6 @@
1
+ module Pec
2
+ module Coordinate
3
+ autoload :Base, "pec/coordinate/base"
4
+ autoload :UserData, "pec/coordinate/user_data"
5
+ end
6
+ end
@@ -0,0 +1,10 @@
1
+ module Pec::Coordinate
2
+ class Base
3
+ class << self
4
+ attr_accessor :kind
5
+ def build(host, attribute)
6
+ raise "not defined method"
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,21 @@
1
+ module Pec::Coordinate
2
+ class UserData < Base
3
+ autoload :Base, "pec/coordinate/user_data/base"
4
+ autoload :Nic, "pec/coordinate/user_data/nic"
5
+ self.kind = 'user_data'
6
+
7
+ def self.build(host, attribute)
8
+ attribute.keys.each do |k|
9
+ Pec::Coordinate::UserData.constants.each do |c|
10
+ klass = Object.const_get("Pec::Coordinate::UserData::#{c}")
11
+
12
+ if klass.kind.to_s == k.to_s
13
+ attribute = klass.build(host, attribute)
14
+ end
15
+ end
16
+ end
17
+ attribute[:user_data] = Base64.encode64("#cloud-config\n" + attribute[:user_data].to_yaml) if attribute[:user_data]
18
+ attribute
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,10 @@
1
+ module Pec::Coordinate
2
+ class UserData::Base
3
+ class << self
4
+ attr_accessor :kind
5
+ def build
6
+ raise "undefine method build"
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,43 @@
1
+ module Pec::Coordinate
2
+ class UserData::Nic < Base
3
+ autoload :Base, "pec/coordinate/user_data/nic/base"
4
+ autoload :Rhel, "pec/coordinate/user_data/nic/rhel"
5
+ autoload :Ubuntu, "pec/coordinate/user_data/nic/ubuntu"
6
+ self.kind = 'networks'
7
+
8
+ class << self
9
+ NAME = 0
10
+ CONFIG = 1
11
+ def build(host, attribute)
12
+ _nic = Pec::Coordinate::UserData::Nic.constants.reject {|c|c.to_s.downcase == "base"}.find do |c|
13
+ host.os_type && Object.const_get("Pec::Coordinate::UserData::Nic::#{c}").os_type.include?(host.os_type)
14
+ end
15
+
16
+ nic = if _nic
17
+ Object.const_get("Pec::Coordinate::UserData::Nic::#{_nic}")
18
+ else
19
+ Pec::Coordinate::UserData::Nic::Rhel
20
+ end
21
+
22
+ attribute.deep_merge(
23
+ {
24
+ user_data: {
25
+ "write_files" => nic.gen_user_data(host.networks, ports(attribute))
26
+ }
27
+ }
28
+ )
29
+ end
30
+
31
+ def ports(attribute)
32
+ port_ids(attribute).map do |id|
33
+ Yao::Port.get(id)
34
+ end
35
+ end
36
+
37
+ def port_ids(attribute)
38
+ attribute[:networks].map {|n|n[:port]}
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,39 @@
1
+ module Pec::Coordinate
2
+ class UserData::Nic::Base
3
+ class << self
4
+ NAME = 0
5
+ CONFIG = 1
6
+ attr_accessor :os_type
7
+ def gen_user_data(networks, ports)
8
+ networks.map do |network|
9
+ port = ports.find {|p|p.name == network[NAME]}
10
+ path = network[CONFIG]['path'] || default_path(port)
11
+ {
12
+ 'content' => ifcfg_config(network, port),
13
+ 'owner' => "root:root",
14
+ 'path' => path,
15
+ 'permissions' => "0644"
16
+ }
17
+ end
18
+ end
19
+
20
+ def safe_merge(base, network)
21
+ # delete option column
22
+ mask_column = Pec::Handler::Networks.constants.map {|c| Object.const_get("Pec::Handler::Networks::#{c}").kind }
23
+ mask_config = network[CONFIG].reject {|k,v| mask_column.include?(k)}
24
+
25
+ base.merge(
26
+ mask_config
27
+ )
28
+ end
29
+
30
+ def default_path(port)
31
+ raise "undfined method default_path"
32
+ end
33
+
34
+ def ifcfg_config(network, port)
35
+ raise "undfined method ifcfg_config"
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,29 @@
1
+ module Pec::Coordinate
2
+ class UserData::Nic
3
+ class Rhel < Base
4
+ self.os_type = %w(centos rhel)
5
+ class << self
6
+ def ifcfg_config(network, port)
7
+ base = {
8
+ "name" => port.name,
9
+ "device" => port.name,
10
+ "type" => 'Ethernet',
11
+ "onboot" => 'yes',
12
+ "hwaddr" => port.mac_address
13
+ }
14
+ base.merge!(
15
+ {
16
+ "netmask" => IP.new(network[CONFIG]['ip_address']).netmask.to_s,
17
+ "ipaddr" => port.fixed_ips.first['ip_address']
18
+ }
19
+ ) if network[CONFIG]['bootproto'] == "static"
20
+ safe_merge(base, network).map {|k,v| "#{k.upcase}=#{v}"}.join("\n")
21
+ end
22
+
23
+ def default_path(port)
24
+ "/etc/sysconfig/network-scripts/ifcfg-#{port.name}"
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,46 @@
1
+ module Pec::Coordinate
2
+ class UserData::Nic
3
+ class Ubuntu < Base
4
+ self.os_type = %w(ubuntu)
5
+ class << self
6
+ def gen_user_data(networks, ports)
7
+ port_content = [
8
+ "auto lo\niface lo inet loopback"
9
+ ]
10
+
11
+ networks.map do |network|
12
+ port = ports.find {|p|p.name == network[NAME]}
13
+ port_content << ifcfg_config(network, port)
14
+ end
15
+ [
16
+ {
17
+ 'content' => port_content.join("\n"),
18
+ 'owner' => "root:root",
19
+ 'path' => networks.first[CONFIG]['path'] || default_path(nil),
20
+ 'permissions' => "0644"
21
+ }
22
+ ]
23
+ end
24
+
25
+ def ifcfg_config(network, port)
26
+ base = {
27
+ "auto" => port.name,
28
+ "iface #{port.name} inet" => network[CONFIG]['bootproto'],
29
+ }
30
+ base.merge!(
31
+ {
32
+ "address" => port.fixed_ips.first['ip_address'],
33
+ "netmask" => IP.new(network[CONFIG]['ip_address']).netmask.to_s,
34
+ "hwaddress ether" => port.mac_address
35
+ }
36
+ ) if network[CONFIG]['bootproto'] == "static"
37
+ safe_merge(base, network).reject {|k,v| k == "bootproto"}.map {|k,v| "#{k} #{v}"}.join("\n")
38
+ end
39
+
40
+ def default_path(port)
41
+ "/etc/network/interfaces"
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -11,21 +11,15 @@ module Pec::Handler
11
11
 
12
12
  def build(host)
13
13
  ports = []
14
- user_data = []
15
-
16
14
  host.networks.each do |network|
17
15
  validate(network)
18
16
  Pec::Logger.notice "port create start : #{network[NAME]}"
19
17
  port = create_port(host, network)
20
18
  Pec::Logger.notice "assgin ip : #{port.fixed_ips.first["ip_address"]}"
21
19
  ports << port
22
- user_data << gen_user_data(network, port)
23
20
  end
24
21
  {
25
- networks: ports.map {|port| { uuid: nil, port: port.id }},
26
- user_data: {
27
- 'write_files' => user_data
28
- }
22
+ networks: ports.map {|port| { uuid: nil, port: port.id }}
29
23
  }
30
24
  end
31
25
 
@@ -67,41 +61,6 @@ module Pec::Handler
67
61
  attribute
68
62
  end
69
63
 
70
- def gen_user_data(network, port)
71
- path = network[CONFIG]['path'] || "/etc/sysconfig/network-scripts/ifcfg-#{port.name}"
72
- {
73
- 'content' => ifcfg_config(network, port),
74
- 'owner' => "root:root",
75
- 'path' => path,
76
- 'permissions' => "0644"
77
- }
78
- end
79
-
80
- def ifcfg_config(network, port)
81
- base = {
82
- "name" => port.name,
83
- "device" => port.name,
84
- "type" => 'Ethernet',
85
- "onboot" => 'yes',
86
- "hwaddr" => port.mac_address
87
- }
88
- base.merge!(
89
- {
90
- "netmask" => IP.new(network[CONFIG]['ip_address']).netmask.to_s,
91
- "ipaddr" => port.fixed_ips.first['ip_address']
92
- }
93
- ) if network[CONFIG]['bootproto'] == "static"
94
-
95
- # delete option column
96
- mask_column = Pec::Handler::Networks.constants.map {|c| Object.const_get("Pec::Handler::Networks::#{c}").kind }
97
- mask_config = network[CONFIG].select {|k,v| !mask_column.include?(k)}
98
-
99
- base.merge!(
100
- mask_config
101
- )
102
- base.map {|k,v| "#{k.upcase}=#{v}"}.join("\n")
103
- end
104
-
105
64
  def security_group(host)
106
65
  tenant = Yao::Tenant.list.find {|t| t.name == host.tenant }
107
66
  ids = host.security_group.map do |name|
data/lib/pec/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Pec
2
- VERSION = "0.7.3"
2
+ VERSION = "0.7.4"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.3
4
+ version: 0.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - kazuhiko yamashita
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-29 00:00:00.000000000 Z
11
+ date: 2015-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -152,6 +152,14 @@ files:
152
152
  - lib/pec/command/up.rb
153
153
  - lib/pec/config_error.rb
154
154
  - lib/pec/configure.rb
155
+ - lib/pec/coordinate.rb
156
+ - lib/pec/coordinate/base.rb
157
+ - lib/pec/coordinate/user_data.rb
158
+ - lib/pec/coordinate/user_data/base.rb
159
+ - lib/pec/coordinate/user_data/nic.rb
160
+ - lib/pec/coordinate/user_data/nic/base.rb
161
+ - lib/pec/coordinate/user_data/nic/rhel.rb
162
+ - lib/pec/coordinate/user_data/nic/ubuntu.rb
155
163
  - lib/pec/handler.rb
156
164
  - lib/pec/handler/availability_zone.rb
157
165
  - lib/pec/handler/base.rb