cuken 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -4,10 +4,12 @@ source "http://rubygems.org"
4
4
  # gem "activesupport", ">= 2.3.5"
5
5
  group :default do
6
6
  gem 'aruba', "~> 0.3.6"
7
- gem 'chef', "~>0.9.12"
7
+ gem "cucumber", ">= 0"
8
+ gem 'chef', "~>0.10.0.rc.0"
8
9
  gem 'grit', "~>2.4.1"
9
10
  gem 'rvm', "~>1.5.2"
10
11
  gem 'open4'
12
+ gem "vagrant", "~>0.7.2"
11
13
  end
12
14
  # Add dependencies to develop your gem here.
13
15
  # Include everything needed to run rake, tests, features, etc.
data/Gemfile.lock CHANGED
@@ -1,28 +1,32 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ abstract (1.0.0)
5
+ archive-tar-minitar (0.5.2)
4
6
  aruba (0.3.6)
5
7
  childprocess (>= 0.1.7)
6
8
  cucumber (>= 0.10.0)
7
9
  rspec (>= 2.5.0)
8
10
  builder (3.0.0)
9
11
  bunny (0.6.0)
10
- chef (0.9.16)
12
+ chef (0.10.0.rc.0)
11
13
  bunny (>= 0.6.0)
12
14
  erubis
13
- extlib
14
15
  highline
15
- json (<= 1.4.6, >= 1.4.4)
16
+ json (<= 1.5.2, >= 1.4.4)
16
17
  mixlib-authentication (>= 1.1.0)
17
18
  mixlib-cli (>= 1.1.0)
18
19
  mixlib-config (>= 1.1.2)
19
- mixlib-log (>= 1.2.0)
20
+ mixlib-log (>= 1.3.0)
20
21
  moneta
21
- ohai (>= 0.5.7)
22
+ net-ssh (~> 2.1.3)
23
+ net-ssh-multi (~> 1.0.1)
24
+ ohai (>= 0.6.0)
22
25
  rest-client (< 1.7.0, >= 1.0.4)
26
+ treetop (~> 1.4.9)
23
27
  uuidtools
24
- childprocess (0.1.8)
25
- ffi (~> 1.0.6)
28
+ childprocess (0.1.7)
29
+ ffi (~> 0.6.3)
26
30
  cucumber (0.10.2)
27
31
  builder (>= 2.1.2)
28
32
  diff-lcs (>= 1.1.2)
@@ -30,23 +34,25 @@ GEM
30
34
  json (>= 1.4.6)
31
35
  term-ansicolor (>= 1.0.5)
32
36
  diff-lcs (1.1.2)
33
- erubis (2.7.0)
34
- extlib (0.9.15)
37
+ erubis (2.6.6)
38
+ abstract (>= 1.0.0)
35
39
  fakefs (0.3.1)
36
- ffi (1.0.7)
40
+ ffi (0.6.3)
37
41
  rake (>= 0.8.7)
38
- gherkin (2.3.5)
42
+ gherkin (2.3.6)
39
43
  json (>= 1.4.6)
40
44
  git (1.2.5)
41
45
  grit (2.4.1)
42
46
  diff-lcs (~> 1.1)
43
47
  mime-types (~> 1.15)
44
48
  highline (1.6.1)
49
+ i18n (0.5.0)
45
50
  jeweler (1.5.2)
46
51
  bundler (~> 1.0.0)
47
52
  git (>= 1.2.5)
48
53
  rake
49
- json (1.4.6)
54
+ json (1.5.1)
55
+ mario (0.0.6)
50
56
  mime-types (1.16)
51
57
  mixlib-authentication (1.1.4)
52
58
  mixlib-log
@@ -54,6 +60,14 @@ GEM
54
60
  mixlib-config (1.1.2)
55
61
  mixlib-log (1.3.0)
56
62
  moneta (0.6.0)
63
+ net-scp (1.0.4)
64
+ net-ssh (>= 1.99.1)
65
+ net-ssh (2.1.4)
66
+ net-ssh-gateway (1.0.1)
67
+ net-ssh (>= 1.99.1)
68
+ net-ssh-multi (1.0.1)
69
+ net-ssh (>= 1.99.2)
70
+ net-ssh-gateway (>= 0.99.0)
57
71
  ohai (0.6.2)
58
72
  mixlib-cli
59
73
  mixlib-config
@@ -61,6 +75,7 @@ GEM
61
75
  systemu
62
76
  yajl-ruby
63
77
  open4 (1.0.1)
78
+ polyglot (0.3.1)
64
79
  rake (0.8.7)
65
80
  rcov (0.9.9)
66
81
  reek (1.2.8)
@@ -89,7 +104,22 @@ GEM
89
104
  sexp_processor (3.0.5)
90
105
  systemu (2.2.0)
91
106
  term-ansicolor (1.0.5)
107
+ thor (0.14.6)
108
+ treetop (1.4.9)
109
+ polyglot (>= 0.3.1)
92
110
  uuidtools (2.1.2)
111
+ vagrant (0.7.3)
112
+ archive-tar-minitar (= 0.5.2)
113
+ erubis (~> 2.6.6)
114
+ i18n (~> 0.5.0)
115
+ json (~> 1.5.1)
116
+ mario (~> 0.0.6)
117
+ net-scp (~> 1.0.4)
118
+ net-ssh (~> 2.1.0)
119
+ thor (~> 0.14.6)
120
+ virtualbox (~> 0.8.3)
121
+ virtualbox (0.8.3)
122
+ ffi (~> 0.6.3)
93
123
  yajl-ruby (0.8.2)
94
124
  yard (0.6.8)
95
125
 
@@ -99,7 +129,7 @@ PLATFORMS
99
129
  DEPENDENCIES
100
130
  aruba (~> 0.3.6)
101
131
  bundler (~> 1.0.11)
102
- chef (~> 0.9.12)
132
+ chef (~> 0.10.0.rc.0)
103
133
  cucumber
104
134
  fakefs (~> 0.3.1)
105
135
  grit (~> 2.4.1)
@@ -111,4 +141,5 @@ DEPENDENCIES
111
141
  rr (~> 1.0.2)
112
142
  rspec (~> 2.5.0)
113
143
  rvm (~> 1.5.2)
144
+ vagrant (~> 0.7.2)
114
145
  yard (~> 0.6.0)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.8
1
+ 0.1.9
data/cuken.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{cuken}
8
- s.version = "0.1.8"
8
+ s.version = "0.1.9"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Hedgehog"]
12
- s.date = %q{2011-04-18}
12
+ s.date = %q{2011-04-21}
13
13
  s.description = %q{Reusable Cucumber steps and API for post-convergence system integration descriptions}
14
14
  s.email = %q{hedgehogshiatus@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -470,10 +470,12 @@ Gem::Specification.new do |s|
470
470
 
471
471
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
472
472
  s.add_runtime_dependency(%q<aruba>, ["~> 0.3.6"])
473
- s.add_runtime_dependency(%q<chef>, ["~> 0.9.12"])
473
+ s.add_runtime_dependency(%q<cucumber>, [">= 0"])
474
+ s.add_runtime_dependency(%q<chef>, ["~> 0.10.0.rc.0"])
474
475
  s.add_runtime_dependency(%q<grit>, ["~> 2.4.1"])
475
476
  s.add_runtime_dependency(%q<rvm>, ["~> 1.5.2"])
476
477
  s.add_runtime_dependency(%q<open4>, [">= 0"])
478
+ s.add_runtime_dependency(%q<vagrant>, ["~> 0.7.2"])
477
479
  s.add_development_dependency(%q<rr>, ["~> 1.0.2"])
478
480
  s.add_development_dependency(%q<rspec>, ["~> 2.5.0"])
479
481
  s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
@@ -486,10 +488,12 @@ Gem::Specification.new do |s|
486
488
  s.add_development_dependency(%q<fakefs>, ["~> 0.3.1"])
487
489
  else
488
490
  s.add_dependency(%q<aruba>, ["~> 0.3.6"])
489
- s.add_dependency(%q<chef>, ["~> 0.9.12"])
491
+ s.add_dependency(%q<cucumber>, [">= 0"])
492
+ s.add_dependency(%q<chef>, ["~> 0.10.0.rc.0"])
490
493
  s.add_dependency(%q<grit>, ["~> 2.4.1"])
491
494
  s.add_dependency(%q<rvm>, ["~> 1.5.2"])
492
495
  s.add_dependency(%q<open4>, [">= 0"])
496
+ s.add_dependency(%q<vagrant>, ["~> 0.7.2"])
493
497
  s.add_dependency(%q<rr>, ["~> 1.0.2"])
494
498
  s.add_dependency(%q<rspec>, ["~> 2.5.0"])
495
499
  s.add_dependency(%q<yard>, ["~> 0.6.0"])
@@ -503,10 +507,12 @@ Gem::Specification.new do |s|
503
507
  end
504
508
  else
505
509
  s.add_dependency(%q<aruba>, ["~> 0.3.6"])
506
- s.add_dependency(%q<chef>, ["~> 0.9.12"])
510
+ s.add_dependency(%q<cucumber>, [">= 0"])
511
+ s.add_dependency(%q<chef>, ["~> 0.10.0.rc.0"])
507
512
  s.add_dependency(%q<grit>, ["~> 2.4.1"])
508
513
  s.add_dependency(%q<rvm>, ["~> 1.5.2"])
509
514
  s.add_dependency(%q<open4>, [">= 0"])
515
+ s.add_dependency(%q<vagrant>, ["~> 0.7.2"])
510
516
  s.add_dependency(%q<rr>, ["~> 1.0.2"])
511
517
  s.add_dependency(%q<rspec>, ["~> 2.5.0"])
512
518
  s.add_dependency(%q<yard>, ["~> 0.6.0"])
@@ -82,12 +82,12 @@ module ::Cuken
82
82
  end
83
83
  ckbk_pth_opt = false if no_ckbk_pth_opt.is_a? TrueClass
84
84
  in_current_dir do
85
- unless chef.client_knife_path
86
- chef.client_knife_path = Pathname(chef.local_chef_repo).ascend { |d| h=d+'.chef'+'knife.rb'; break h if h.file? }
85
+ unless chef.knife_config_file
86
+ chef.knife_config_file = Pathname(chef.local_chef_repo).ascend { |d| h=d+'.chef'+'knife.rb'; break h if h.file? }
87
87
  end
88
- raise(RuntimeError, "chef.client_knife_path is required", caller) unless chef.client_knife_path
88
+ raise(RuntimeError, "chef.knife_config_file is required", caller) unless chef.knife_config_file
89
89
  end
90
- cmd += " -c #{chef.client_knife_path.expand_path.to_s}" if chef.client_knife_path.expand_path.exist?
90
+ cmd += " -c #{chef.knife_config_file.expand_path.to_s}" if chef.knife_config_file.expand_path.exist?
91
91
  cmd += " -o #{ckbk_pth}" if ckbk_pth_opt
92
92
  cmd += " --log_level debug" if chef.knife_debug
93
93
  chef.root_dir ||= current_dir
@@ -10,10 +10,9 @@ module ::Cuken
10
10
  :api_response,
11
11
  :exception,
12
12
  :chef_args,
13
- :client_knife_path,
14
13
  :client_name,
15
14
  :client_private_key_path,
16
- :config_file,
15
+ :knife_config_file,
17
16
  :cookbook,
18
17
  :cookbook_paths,
19
18
  :cookbooks_paths,
@@ -84,8 +83,8 @@ module ::Cuken
84
83
  @root_dir ||= Pathname.getwd
85
84
  end
86
85
 
87
- def config_file
88
- @config_file ||= (chef.root_dir + '/.chef/knife.rb')
86
+ def knife_config_file
87
+ @knife_config_file ||= (chef.root_dir + '/.chef/knife.rb')
89
88
  end
90
89
 
91
90
  def make_admin
@@ -62,7 +62,7 @@ module ::Cuken
62
62
  :admin => true,
63
63
  :file => chef.client_private_key_path,
64
64
  :no_editor => true,
65
- :config_file => chef.config_file}
65
+ :config_file => chef.knife_config_file}
66
66
  argv = ['client', 'create', data[:name], '--file', data[:file], '--config', data[:config_file],'--no-editor']
67
67
  argv << '--admin' if data[:admin]
68
68
  unless Pathname(chef.client_private_key_path).exist?
@@ -77,7 +77,7 @@ module ::Cuken
77
77
  def show_client(client_name)
78
78
  chef.client_private_key_path = chef.root_dir + "/.chef/#{client_name}.pem"
79
79
  data = {:name => client_name,
80
- :config_file => chef.config_file}
80
+ :config_file => chef.knife_config_file}
81
81
  argv = ['client', 'show', data[:name], '--config', data[:config_file],'--no-editor']
82
82
  argv << '--admin' if data[:admin]
83
83
  with_args *argv do
@@ -92,7 +92,7 @@ module ::Cuken
92
92
  :no_editor => true,
93
93
  :yes => true,
94
94
  :print_after => true,
95
- :config_file => chef.config_file}
95
+ :config_file => chef.knife_config_file}
96
96
  argv = ['client', 'delete', data[:name], '--no-editor', '--yes' ]
97
97
  with_args *argv do
98
98
  ::Chef::Application::Knife.new.run
@@ -110,12 +110,12 @@ module ::Cuken
110
110
  end
111
111
 
112
112
  def node_show(node_name, attr = :all)
113
- Pathname(chef.config_file).exist?.should be_true
114
- argv = ['node', 'show', node_name, '--no-editor', '--config', chef.config_file]
113
+ Pathname(chef.knife_config_file).exist?.should be_true
114
+ argv = ['node', 'show', node_name, '--no-editor', '--config', chef.knife_config_file]
115
115
  unless attr == :all
116
116
  argv << '--attribute' << attr
117
117
  end
118
- if Pathname(chef.config_file).exist?
118
+ if Pathname(chef.knife_config_file).exist?
119
119
  with_args *argv do
120
120
  ::Chef::Application::Knife.new.run
121
121
  end
@@ -126,8 +126,8 @@ module ::Cuken
126
126
  end
127
127
 
128
128
  def node_role_load(hsh)
129
- argv = ['node', 'run_list', 'add', hsh[:node], "role[#{hsh[:role]}]", '--no-editor', '--config', chef.config_file]
130
- if Pathname(chef.config_file).exist?
129
+ argv = ['node', 'run_list', 'add', hsh[:node], "role[#{hsh[:role]}]", '--no-editor', '--config', chef.knife_config_file]
130
+ if Pathname(chef.knife_config_file).exist?
131
131
  with_args *argv do
132
132
  ::Chef::Application::Knife.new.run
133
133
  end
@@ -138,8 +138,8 @@ module ::Cuken
138
138
  end
139
139
 
140
140
  def node_create(node_name)
141
- argv = ['node', 'create', node_name, '--no-editor', '--config', chef.config_file]
142
- if Pathname(chef.config_file).exist?
141
+ argv = ['node', 'create', node_name, '--no-editor', '--config', chef.knife_config_file]
142
+ if Pathname(chef.knife_config_file).exist?
143
143
  with_args *argv do
144
144
  ::Chef::Application::Knife.new.run
145
145
  end
@@ -23,7 +23,7 @@ World(::Cuken::Api::Chef::Knife)
23
23
 
24
24
  Given /^the Knife file "([^"]*)"$/ do |path|
25
25
  in_current_dir do
26
- chef.client_knife_path = Pathname(path).expand_path.realdirpath
26
+ chef.knife_config_file = Pathname(path).expand_path.realdirpath
27
27
  end
28
28
  end
29
29
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: cuken
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.8
5
+ version: 0.1.9
6
6
  platform: ruby
7
7
  authors:
8
8
  - Hedgehog
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-18 00:00:00 Z
13
+ date: 2011-04-21 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: aruba
@@ -24,41 +24,52 @@ dependencies:
24
24
  prerelease: false
25
25
  version_requirements: *id001
26
26
  - !ruby/object:Gem::Dependency
27
- name: chef
27
+ name: cucumber
28
28
  requirement: &id002 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
- - - ~>
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.9.12
33
+ version: "0"
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: *id002
37
37
  - !ruby/object:Gem::Dependency
38
- name: grit
38
+ name: chef
39
39
  requirement: &id003 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
43
43
  - !ruby/object:Gem::Version
44
- version: 2.4.1
44
+ version: 0.10.0.rc.0
45
45
  type: :runtime
46
46
  prerelease: false
47
47
  version_requirements: *id003
48
48
  - !ruby/object:Gem::Dependency
49
- name: rvm
49
+ name: grit
50
50
  requirement: &id004 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
54
54
  - !ruby/object:Gem::Version
55
- version: 1.5.2
55
+ version: 2.4.1
56
56
  type: :runtime
57
57
  prerelease: false
58
58
  version_requirements: *id004
59
59
  - !ruby/object:Gem::Dependency
60
- name: open4
60
+ name: rvm
61
61
  requirement: &id005 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ~>
65
+ - !ruby/object:Gem::Version
66
+ version: 1.5.2
67
+ type: :runtime
68
+ prerelease: false
69
+ version_requirements: *id005
70
+ - !ruby/object:Gem::Dependency
71
+ name: open4
72
+ requirement: &id006 !ruby/object:Gem::Requirement
62
73
  none: false
63
74
  requirements:
64
75
  - - ">="
@@ -66,10 +77,21 @@ dependencies:
66
77
  version: "0"
67
78
  type: :runtime
68
79
  prerelease: false
69
- version_requirements: *id005
80
+ version_requirements: *id006
81
+ - !ruby/object:Gem::Dependency
82
+ name: vagrant
83
+ requirement: &id007 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ version: 0.7.2
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: *id007
70
92
  - !ruby/object:Gem::Dependency
71
93
  name: rr
72
- requirement: &id006 !ruby/object:Gem::Requirement
94
+ requirement: &id008 !ruby/object:Gem::Requirement
73
95
  none: false
74
96
  requirements:
75
97
  - - ~>
@@ -77,10 +99,10 @@ dependencies:
77
99
  version: 1.0.2
78
100
  type: :development
79
101
  prerelease: false
80
- version_requirements: *id006
102
+ version_requirements: *id008
81
103
  - !ruby/object:Gem::Dependency
82
104
  name: rspec
83
- requirement: &id007 !ruby/object:Gem::Requirement
105
+ requirement: &id009 !ruby/object:Gem::Requirement
84
106
  none: false
85
107
  requirements:
86
108
  - - ~>
@@ -88,10 +110,10 @@ dependencies:
88
110
  version: 2.5.0
89
111
  type: :development
90
112
  prerelease: false
91
- version_requirements: *id007
113
+ version_requirements: *id009
92
114
  - !ruby/object:Gem::Dependency
93
115
  name: yard
94
- requirement: &id008 !ruby/object:Gem::Requirement
116
+ requirement: &id010 !ruby/object:Gem::Requirement
95
117
  none: false
96
118
  requirements:
97
119
  - - ~>
@@ -99,10 +121,10 @@ dependencies:
99
121
  version: 0.6.0
100
122
  type: :development
101
123
  prerelease: false
102
- version_requirements: *id008
124
+ version_requirements: *id010
103
125
  - !ruby/object:Gem::Dependency
104
126
  name: cucumber
105
- requirement: &id009 !ruby/object:Gem::Requirement
127
+ requirement: &id011 !ruby/object:Gem::Requirement
106
128
  none: false
107
129
  requirements:
108
130
  - - ">="
@@ -110,10 +132,10 @@ dependencies:
110
132
  version: "0"
111
133
  type: :development
112
134
  prerelease: false
113
- version_requirements: *id009
135
+ version_requirements: *id011
114
136
  - !ruby/object:Gem::Dependency
115
137
  name: bundler
116
- requirement: &id010 !ruby/object:Gem::Requirement
138
+ requirement: &id012 !ruby/object:Gem::Requirement
117
139
  none: false
118
140
  requirements:
119
141
  - - ~>
@@ -121,10 +143,10 @@ dependencies:
121
143
  version: 1.0.11
122
144
  type: :development
123
145
  prerelease: false
124
- version_requirements: *id010
146
+ version_requirements: *id012
125
147
  - !ruby/object:Gem::Dependency
126
148
  name: jeweler
127
- requirement: &id011 !ruby/object:Gem::Requirement
149
+ requirement: &id013 !ruby/object:Gem::Requirement
128
150
  none: false
129
151
  requirements:
130
152
  - - ~>
@@ -132,10 +154,10 @@ dependencies:
132
154
  version: 1.5.2
133
155
  type: :development
134
156
  prerelease: false
135
- version_requirements: *id011
157
+ version_requirements: *id013
136
158
  - !ruby/object:Gem::Dependency
137
159
  name: rcov
138
- requirement: &id012 !ruby/object:Gem::Requirement
160
+ requirement: &id014 !ruby/object:Gem::Requirement
139
161
  none: false
140
162
  requirements:
141
163
  - - ">="
@@ -143,10 +165,10 @@ dependencies:
143
165
  version: "0"
144
166
  type: :development
145
167
  prerelease: false
146
- version_requirements: *id012
168
+ version_requirements: *id014
147
169
  - !ruby/object:Gem::Dependency
148
170
  name: reek
149
- requirement: &id013 !ruby/object:Gem::Requirement
171
+ requirement: &id015 !ruby/object:Gem::Requirement
150
172
  none: false
151
173
  requirements:
152
174
  - - ~>
@@ -154,10 +176,10 @@ dependencies:
154
176
  version: 1.2.8
155
177
  type: :development
156
178
  prerelease: false
157
- version_requirements: *id013
179
+ version_requirements: *id015
158
180
  - !ruby/object:Gem::Dependency
159
181
  name: roodi
160
- requirement: &id014 !ruby/object:Gem::Requirement
182
+ requirement: &id016 !ruby/object:Gem::Requirement
161
183
  none: false
162
184
  requirements:
163
185
  - - ~>
@@ -165,10 +187,10 @@ dependencies:
165
187
  version: 2.1.0
166
188
  type: :development
167
189
  prerelease: false
168
- version_requirements: *id014
190
+ version_requirements: *id016
169
191
  - !ruby/object:Gem::Dependency
170
192
  name: fakefs
171
- requirement: &id015 !ruby/object:Gem::Requirement
193
+ requirement: &id017 !ruby/object:Gem::Requirement
172
194
  none: false
173
195
  requirements:
174
196
  - - ~>
@@ -176,7 +198,7 @@ dependencies:
176
198
  version: 0.3.1
177
199
  type: :development
178
200
  prerelease: false
179
- version_requirements: *id015
201
+ version_requirements: *id017
180
202
  description: Reusable Cucumber steps and API for post-convergence system integration descriptions
181
203
  email: hedgehogshiatus@gmail.com
182
204
  executables: []
@@ -633,7 +655,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
633
655
  requirements:
634
656
  - - ">="
635
657
  - !ruby/object:Gem::Version
636
- hash: 1162902324164620948
658
+ hash: 1954710544561302796
637
659
  segments:
638
660
  - 0
639
661
  version: "0"