tengine_job 0.6.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (133) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +23 -0
  4. data/Gemfile.lock +109 -0
  5. data/README.rdoc +20 -0
  6. data/Rakefile +42 -0
  7. data/VERSION +1 -0
  8. data/examples/0004_retry_one_layer.rb +24 -0
  9. data/examples/0004_retry_one_layer.sh +38 -0
  10. data/examples/0005_retry_two_layer.rb +54 -0
  11. data/examples/0005_retry_two_layer.sh +80 -0
  12. data/examples/0006_retry_three_layer.rb +58 -0
  13. data/examples/0006_retry_three_layer.sh +74 -0
  14. data/examples/0007_simple_jobnet.rb +7 -0
  15. data/examples/0021_dynamic_env.rb +20 -0
  16. data/examples/VERSION +1 -0
  17. data/examples/tengine_job_test.sh +10 -0
  18. data/lib/tengine/job.rb +94 -0
  19. data/lib/tengine/job/category.rb +54 -0
  20. data/lib/tengine/job/connectable.rb +43 -0
  21. data/lib/tengine/job/drivers/job_control_driver.rb +82 -0
  22. data/lib/tengine/job/drivers/job_execution_driver.rb +30 -0
  23. data/lib/tengine/job/drivers/jobnet_control_driver.rb +117 -0
  24. data/lib/tengine/job/drivers/schedule_driver.rb +30 -0
  25. data/lib/tengine/job/dsl_binder.rb +12 -0
  26. data/lib/tengine/job/dsl_evaluator.rb +18 -0
  27. data/lib/tengine/job/dsl_loader.rb +180 -0
  28. data/lib/tengine/job/edge.rb +150 -0
  29. data/lib/tengine/job/element_selector_notation.rb +169 -0
  30. data/lib/tengine/job/end.rb +32 -0
  31. data/lib/tengine/job/executable.rb +74 -0
  32. data/lib/tengine/job/execution.rb +141 -0
  33. data/lib/tengine/job/expansion.rb +37 -0
  34. data/lib/tengine/job/fork.rb +6 -0
  35. data/lib/tengine/job/job.rb +23 -0
  36. data/lib/tengine/job/jobnet.rb +173 -0
  37. data/lib/tengine/job/jobnet/builder.rb +150 -0
  38. data/lib/tengine/job/jobnet/job_state_transition.rb +167 -0
  39. data/lib/tengine/job/jobnet/jobnet_state_transition.rb +110 -0
  40. data/lib/tengine/job/jobnet/state_transition.rb +37 -0
  41. data/lib/tengine/job/jobnet_actual.rb +55 -0
  42. data/lib/tengine/job/jobnet_template.rb +10 -0
  43. data/lib/tengine/job/join.rb +6 -0
  44. data/lib/tengine/job/junction.rb +29 -0
  45. data/lib/tengine/job/killing.rb +30 -0
  46. data/lib/tengine/job/mm_compatibility.rb +6 -0
  47. data/lib/tengine/job/mm_compatibility/connectable.rb +13 -0
  48. data/lib/tengine/job/name_path.rb +31 -0
  49. data/lib/tengine/job/root.rb +16 -0
  50. data/lib/tengine/job/root_jobnet_actual.rb +39 -0
  51. data/lib/tengine/job/root_jobnet_template.rb +49 -0
  52. data/lib/tengine/job/script_executable.rb +235 -0
  53. data/lib/tengine/job/signal.rb +121 -0
  54. data/lib/tengine/job/start.rb +20 -0
  55. data/lib/tengine/job/stoppable.rb +15 -0
  56. data/lib/tengine/job/vertex.rb +172 -0
  57. data/lib/tengine_job.rb +3 -0
  58. data/spec/fixtures/rjn_0001_simple_jobnet_builder.rb +42 -0
  59. data/spec/fixtures/rjn_0002_simple_parallel_jobnet_builder.rb +42 -0
  60. data/spec/fixtures/rjn_0003_fork_join_jobnet_builder.rb +61 -0
  61. data/spec/fixtures/rjn_0004_parallel_jobnet_with_finally_fixture.rb +62 -0
  62. data/spec/fixtures/rjn_0005_retry_two_layer_fixture.rb +153 -0
  63. data/spec/fixtures/rjn_0008_expansion_fixture.rb +32 -0
  64. data/spec/fixtures/rjn_0009_tree_sequential_jobnet_builder.rb +174 -0
  65. data/spec/fixtures/rjn_0010_2jobs_and_1job_parallel_jobnet_builder.rb +39 -0
  66. data/spec/fixtures/rjn_0011_nested_fork_jobnet_builder.rb +96 -0
  67. data/spec/fixtures/rjn_0012_nested_and_finally_builder.rb +157 -0
  68. data/spec/fixtures/rjn_1004_hadoop_job_in_jobnet_fixture.rb +105 -0
  69. data/spec/fixtures/rjn_means_root_jobnet +0 -0
  70. data/spec/fixtures/test_credential_fixture.rb +12 -0
  71. data/spec/fixtures/test_server_fixture.rb +28 -0
  72. data/spec/mongoid.yml +35 -0
  73. data/spec/spec_helper.rb +56 -0
  74. data/spec/sshd/.gitignore +1 -0
  75. data/spec/sshd/id_rsa +51 -0
  76. data/spec/sshd/id_rsa.pub +1 -0
  77. data/spec/sshd/ssh_host_rsa_key +51 -0
  78. data/spec/sshd/ssh_host_rsa_key.pub +1 -0
  79. data/spec/sshd/sshd_config +10 -0
  80. data/spec/sshd/sshd_config.erb +11 -0
  81. data/spec/sshd/tengine_job_test.sh +6 -0
  82. data/spec/support/jobnet_fixture_builder.rb +145 -0
  83. data/spec/support/mongo_index_key_log.rb +91 -0
  84. data/spec/tengine/job/category_spec.rb +193 -0
  85. data/spec/tengine/job/connectable_spec.rb +94 -0
  86. data/spec/tengine/job/drivers/job_controll_driver/connection_error_spec.rb +236 -0
  87. data/spec/tengine/job/drivers/job_controll_driver/duplicated_job_start_spec.rb +302 -0
  88. data/spec/tengine/job/drivers/job_controll_driver/expansion_spec.rb +120 -0
  89. data/spec/tengine/job/drivers/job_controll_driver/stop_spec.rb +159 -0
  90. data/spec/tengine/job/drivers/job_controll_driver_spec.rb +623 -0
  91. data/spec/tengine/job/drivers/job_execution_driver_spec.rb +88 -0
  92. data/spec/tengine/job/drivers/jobnet_control_driver/nested_and_finally_spec.rb +472 -0
  93. data/spec/tengine/job/drivers/jobnet_control_driver/nested_jobnet_spec.rb +231 -0
  94. data/spec/tengine/job/drivers/jobnet_control_driver/stop_jobnet_spec.rb +202 -0
  95. data/spec/tengine/job/drivers/jobnet_control_driver_spec.rb +446 -0
  96. data/spec/tengine/job/drivers/schedule_driver_spec.rb +202 -0
  97. data/spec/tengine/job/dsl_binder_spec.rb +36 -0
  98. data/spec/tengine/job/dsl_loader_spec.rb +403 -0
  99. data/spec/tengine/job/dsls/0013_hadoop_job_run.rb +29 -0
  100. data/spec/tengine/job/dsls/0014_join_and_join.rb +19 -0
  101. data/spec/tengine/job/dsls/0015_fork_and_fork.rb +18 -0
  102. data/spec/tengine/job/dsls/0016_complex_fork_and_join.rb +20 -0
  103. data/spec/tengine/job/dsls/0017_finally.rb +15 -0
  104. data/spec/tengine/job/dsls/0018_expansion.rb +23 -0
  105. data/spec/tengine/job/dsls/0019_execute_job_on_event.rb +16 -0
  106. data/spec/tengine/job/dsls/0020_duplicated_jobnet_name.rb +16 -0
  107. data/spec/tengine/job/dsls/1060_test_dir1/1060_test_dir2/0013_hadoop_job_run.rb +29 -0
  108. data/spec/tengine/job/dsls/2003_expansion/expansion_5.rb +11 -0
  109. data/spec/tengine/job/dsls/VERSION +1 -0
  110. data/spec/tengine/job/dynamic_env_spec.rb +95 -0
  111. data/spec/tengine/job/edge_spec.rb +241 -0
  112. data/spec/tengine/job/element_selector_notation_spec.rb +354 -0
  113. data/spec/tengine/job/examples_spec.rb +62 -0
  114. data/spec/tengine/job/execution_spec.rb +100 -0
  115. data/spec/tengine/job/expansion_spec.rb +116 -0
  116. data/spec/tengine/job/hadoop_job_run_spec.rb +65 -0
  117. data/spec/tengine/job/job_spec.rb +4 -0
  118. data/spec/tengine/job/jobnet/1015_complecated_jobnet_spec.rb +72 -0
  119. data/spec/tengine/job/jobnet_actual_spec.rb +175 -0
  120. data/spec/tengine/job/jobnet_spec.rb +399 -0
  121. data/spec/tengine/job/jobnet_template_spec.rb +240 -0
  122. data/spec/tengine/job/killing_spec.rb +91 -0
  123. data/spec/tengine/job/reset_spec.rb +958 -0
  124. data/spec/tengine/job/reset_spec/4056_1_dump.txt +1 -0
  125. data/spec/tengine/job/root_jobnet_actual_spec.rb +89 -0
  126. data/spec/tengine/job/root_jobnet_template_spec.rb +248 -0
  127. data/spec/tengine/job/script_executable_spec.rb +132 -0
  128. data/spec/tengine/job/stoppable_spec.rb +176 -0
  129. data/spec/tengine/job/vertex_spec.rb +25 -0
  130. data/spec/tengine_job_spec.rb +4 -0
  131. data/tengine_job.gemspec +197 -0
  132. data/tmp/log/.gitignore +1 -0
  133. metadata +296 -0
@@ -0,0 +1,62 @@
1
+ # -*- coding: utf-8 -*-
2
+ # 以下のジョブネットについてテンプレートジョブネットや
3
+ # 実行用ジョブネットを扱うフィクスチャ生成のためのクラスです。
4
+ #
5
+ # in [jn0004]
6
+ # |--e3-->(j2)--e5-->|
7
+ # (S1)--e1-->(j1)--e2-->[F1] [J1]--e7-->(j4)--e8-->(E1)
8
+ # |--e4-->(j3)--e6-->|
9
+ #
10
+ # in [jn0004/finally]
11
+ # (S2) --e9-->(jn0004_f)-e10-->(E2)
12
+
13
+ class Rjn0004ParallelJobnetWithFinally < JobnetFixtureBuilder
14
+ include TestCredentialFixture
15
+ include TestServerFixture
16
+
17
+ DSL = <<-EOS
18
+ jobnet("jn0004", :instance_name => "test_server1", :credential_name => "test_credential1") do
19
+ boot_jobs("j1")
20
+ job("j1", "$HOME/0004_retry_one_layer.sh", :to => ["j2", "j3"])
21
+ job("j2", "$HOME/0004_retry_one_layer.sh", :to => "j4")
22
+ job("j3", "$HOME/0004_retry_one_layer.sh", :to => "j4")
23
+ job("j4", "$HOME/0004_retry_one_layer.sh")
24
+ finally do
25
+ job("jn0004_f", "$HOME/0004_retry_one_layer.sh")
26
+ end
27
+ end
28
+ EOS
29
+
30
+ def create(options = {})
31
+ root = new_root_jobnet("jn0004", {
32
+ :server_name => test_server1.name,
33
+ :credential_name => test_credential1.name
34
+ }.update(options || { }))
35
+ root.children << new_start
36
+ root.children << new_script("j1", :script => "$HOME/0004_retry_one_layer.sh")
37
+ root.children << new_fork
38
+ root.children << new_script("j2", :script => "$HOME/0004_retry_one_layer.sh")
39
+ root.children << new_script("j3", :script => "$HOME/0004_retry_one_layer.sh")
40
+ root.children << new_join
41
+ root.children << new_script("j4", :script => "$HOME/0004_retry_one_layer.sh")
42
+ root.children << new_finally
43
+ root.children << new_end
44
+ root.edges << new_edge(:S1, :j1)
45
+ root.edges << new_edge(:j1, :F1)
46
+ root.edges << new_edge(:F1, :j2)
47
+ root.edges << new_edge(:F1, :j3)
48
+ root.edges << new_edge(:j2, :J1)
49
+ root.edges << new_edge(:j3, :J1)
50
+ root.edges << new_edge(:J1, :j4)
51
+ root.edges << new_edge(:j4, :E1)
52
+ root.finally_vertex do |finally|
53
+ finally.children << new_start
54
+ finally.children << new_script("jn0004_f", :script => "$HOME/0004_retry_one_layer.sh")
55
+ finally.children << new_end
56
+ finally.edges << new_edge(:S2, :jn0004_f)
57
+ finally.edges << new_edge(:jn0004_f, :F2)
58
+ end
59
+ root.save!
60
+ root
61
+ end
62
+ end
@@ -0,0 +1,153 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require File.expand_path('test_credential_fixture', File.dirname(__FILE__))
4
+ require File.expand_path('test_server_fixture', File.dirname(__FILE__))
5
+
6
+ # 以下のジョブネットについてテンプレートジョブネットや
7
+ # 実行用ジョブネットを扱うフィクスチャ生成のためのクラスです。
8
+ #
9
+ # in [jn0005]
10
+ # |--e3-->(j2)--e5--->|
11
+ # (S1)--e1-->(j1)--e2-->[F1] [J1]-->e7-->(j4)--e8-->(E1)
12
+ # |--e4-->[jn4]--e6-->|
13
+ #
14
+ # in [jn0005/jn4]
15
+ # |--e11-->(j42)--e13-->|
16
+ # (S2)--e9-->(j41)--e10-->[F2] [J2]--e15-->(j44)--e16-->(E2)
17
+ # |--e12-->(j43)--e14-->|
18
+ #
19
+ # in [jn0005/jn4/finally]
20
+ # (S3)--e17-->(jn4_f)--e18-->(E3)
21
+ #
22
+ # in [jn0005/finally]
23
+ # (S4)--e19-->[jn0005_fjn]--e20-->(jn0005_f)--e21-->(E4)
24
+ #
25
+ # in [jn0005/finally/jn0005_fjn]
26
+ # (S5)--e22-->(jn0005_f1)--e23-->(jn0005_f1)--e24-->(E5)
27
+ #
28
+ # in [jn0005/finally/jn0005_fjn/finally]
29
+ # (S6)--e25-->(jn0005_fif)--e26-->(E6)
30
+
31
+ class Rjn0005RetryTwoLayerFixture < JobnetFixtureBuilder
32
+ include TestCredentialFixture
33
+ include TestServerFixture
34
+
35
+ DSL = <<-EOS
36
+ jobnet("jn0005", :instance_name => "test_server1", :credential_name => "test_credential1") do
37
+ boot_jobs("j1")
38
+ job("j1", "$HOME/0005_retry_two_layer.sh", :to => ["j2", "jn4"])
39
+ job("j2", "$HOME/0005_retry_two_layer.sh", :to => "j4")
40
+ jobnet("jn4", :to => "j4") do
41
+ boot_jobs("j41")
42
+ job("j41", "$HOME/0005_retry_two_layer.sh", :to => ["j42", "j43"])
43
+ job("j42", "$HOME/0005_retry_two_layer.sh", :to => "j44")
44
+ job("j43", "$HOME/0005_retry_two_layer.sh", :to => "j44")
45
+ job("j44", "$HOME/0005_retry_two_layer.sh")
46
+ finally do
47
+ job("jn4_f", "$HOME/0005_retry_two_layer.sh")
48
+ end
49
+ end
50
+ job("j4", "$HOME/0005_retry_two_layer.sh")
51
+ finally do
52
+ boot_jobs("jn0005_fjn")
53
+ jobnet("jn0005_fjn", :to => "jn0005_f") do
54
+ boot_jobs("jn0005_f1")
55
+ job("jn0005_f1", "$HOME/0005_retry_two_layer.sh", :to => ["jn0005_f2"])
56
+ job("jn0005_f2", "$HOME/0005_retry_two_layer.sh")
57
+ finally do
58
+ job("jn0005_fif","$HOME/0005_retry_two_layer.sh")
59
+ end
60
+ end
61
+ job("jn0005_f", "$HOME/0005_retry_two_layer.sh")
62
+ end
63
+ end
64
+ EOS
65
+
66
+ def create(options = {})
67
+ root = new_root_jobnet("jn0005", {
68
+ :server_name => test_server1.name,
69
+ :credential_name => test_credential1.name
70
+ }.update(options || { }))
71
+ # root
72
+ root.children << new_start
73
+ root.children << new_script("j1", :script => "$HOME/0005_retry_two_layer.sh")
74
+ root.children << new_fork
75
+ root.children << new_script("j2", :script => "$HOME/0005_retry_two_layer.sh")
76
+ root.children << new_jobnet("jn4")
77
+ root.children << new_join
78
+ root.children << new_script("j4", :script => "$HOME/0005_retry_two_layer.sh")
79
+ root.children << new_finally
80
+ root.children << new_end
81
+ root.edges << new_edge(:S1, :j1)
82
+ root.edges << new_edge(:j1, :F1)
83
+ root.edges << new_edge(:F1, :j2)
84
+ root.edges << new_edge(:F1, :jn4)
85
+ root.edges << new_edge(:j2, :J1)
86
+ root.edges << new_edge(:jn4, :J1)
87
+ root.edges << new_edge(:J1, :j4)
88
+ root.edges << new_edge(:j4, :E1)
89
+
90
+ self[:jn4].tap do |jn4|
91
+ jn4.children << new_start
92
+ jn4.children << new_script("j41", :script => "$HOME/0005_retry_two_layer.sh")
93
+ jn4.children << new_fork
94
+ jn4.children << new_script("j42", :script => "$HOME/0005_retry_two_layer.sh")
95
+ jn4.children << new_script("j43", :script => "$HOME/0005_retry_two_layer.sh")
96
+ jn4.children << new_join
97
+ jn4.children << new_script("j44", :script => "$HOME/0005_retry_two_layer.sh")
98
+ jn4.children << new_finally
99
+ jn4.children << new_end
100
+ jn4.edges << new_edge(:S2, :j41)
101
+ jn4.edges << new_edge(:j41, :F2)
102
+ jn4.edges << new_edge(:F2, :j42)
103
+ jn4.edges << new_edge(:F2, :j43)
104
+ jn4.edges << new_edge(:j42, :J2)
105
+ jn4.edges << new_edge(:j43, :J2)
106
+ jn4.edges << new_edge(:J2, :j44)
107
+ jn4.edges << new_edge(:j44, :E2)
108
+
109
+ self[:jn4f] = jn4.finally_vertex
110
+ self[:jn4f].tap do |jn4f|
111
+ jn4f.children << new_start
112
+ jn4f.children << new_script("jn4_f", :script => "$HOME/0005_retry_two_layer.sh")
113
+ jn4f.children << new_end
114
+ jn4f.edges << new_edge(:S3, :jn4_f)
115
+ jn4f.edges << new_edge(:jn4_f, :E3)
116
+ end
117
+ end
118
+
119
+ self[:finally] = root.finally_vertex
120
+ self[:finally].tap do |finally|
121
+ finally.children << new_start
122
+ finally.children << new_jobnet("jn0005_fjn")
123
+ finally.children << new_script("jn0005_f", :script => "$HOME/0005_retry_two_layer.sh")
124
+ finally.children << new_end
125
+ finally.edges << new_edge(:S4, :jn0005_fjn)
126
+ finally.edges << new_edge(:jn0005_fjn, :jn0005_f)
127
+ finally.edges << new_edge(:jn0005_f, :E4)
128
+
129
+ self[:jn0005_fjn].tap do |jn0005_fjn|
130
+ jn0005_fjn.children << new_start
131
+ jn0005_fjn.children << new_script("jn0005_f1", :script => "$HOME/0005_retry_two_layer.sh")
132
+ jn0005_fjn.children << new_script("jn0005_f2", :script => "$HOME/0005_retry_two_layer.sh")
133
+ jn0005_fjn.children << new_finally
134
+ jn0005_fjn.children << new_end
135
+ jn0005_fjn.edges << new_edge(:S5, :jn0005_f1)
136
+ jn0005_fjn.edges << new_edge(:jn0005_f1, :jn0005_f2)
137
+ jn0005_fjn.edges << new_edge(:jn0005_f2, :E5)
138
+
139
+ self[:jn0005_fjn_f] = jn0005_fjn.finally_vertex
140
+ self[:jn0005_fjn_f].tap do |jn0005_fjn_f|
141
+ jn0005_fjn_f.children << new_start
142
+ jn0005_fjn_f.children << new_script("jn0005_fif", :script => "$HOME/0005_retry_two_layer.sh")
143
+ jn0005_fjn_f.children << new_end
144
+ jn0005_fjn_f.edges << new_edge(:S6, :jn0005_fif)
145
+ jn0005_fjn_f.edges << new_edge(:jn0005_fif, :E6)
146
+ end
147
+ end
148
+ end
149
+
150
+ root.save!
151
+ root
152
+ end
153
+ end
@@ -0,0 +1,32 @@
1
+ # -*- coding: utf-8 -*-
2
+ # 以下のジョブネットについてテンプレートジョブネットや
3
+ # 実行用ジョブネットを扱うフィクスチャ生成のためのクラスです。
4
+ #
5
+ # in [rjn0008]
6
+ # (S1) --e1-->(rjn0001)--e2-->(rjn0002)--e3-->(E1)
7
+
8
+ class Rjn0008ExpansionFixture < JobnetFixtureBuilder
9
+ DSL = <<-EOS
10
+ jobnet("rjn0008") do
11
+ auto_sequence
12
+ expansion("rjn0001")
13
+ expansion("rjn0002")
14
+ end
15
+ EOS
16
+
17
+ def create(options = {})
18
+ root = new_root_jobnet("rjn0008", options)
19
+ root.children << Tengine::Job::Start.new
20
+ root.children << new_expansion("rjn0001")
21
+ root.children << new_expansion("rjn0002")
22
+ root.prepare_end
23
+ root.build_sequencial_edges
24
+ root.save!
25
+ self[:S1] = root.children[0]
26
+ self[:E1] = root.children[3]
27
+ self[:e1] = root.edges[0]
28
+ self[:e2] = root.edges[1]
29
+ self[:e3] = root.edges[2]
30
+ root
31
+ end
32
+ end
@@ -0,0 +1,174 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ require File.expand_path('test_credential_fixture', File.dirname(__FILE__))
4
+ require File.expand_path('test_server_fixture', File.dirname(__FILE__))
5
+
6
+ # 以下のジョブネットについてテンプレートジョブネットや
7
+ # 実行用ジョブネットを扱うフィクスチャ生成のためのクラスです。
8
+ #
9
+ # in [rjn0009]
10
+ # [S1] --e1-->[j1100]--e2-->[j1200]--e3-->[j1300]--e4-->[j1400]--e5-->[j1500]--e6-->[j1600]--e7-->[E1]
11
+ #
12
+ # [j1100]
13
+ # [S2]--e8-->(j1110)--e9-->(j1120)--e10-->[E2]
14
+ #
15
+ # [j1200]
16
+ # [S3]--e11-->(j1210)--e12-->[E3]
17
+ #
18
+ # [j1300]
19
+ # [S4]--e13-->(j1310)--e14-->[E4]
20
+ #
21
+ # [j1400]
22
+ # [S5]--e15-->(j1410)--e16-->[E5]
23
+ #
24
+ # [j1500]
25
+ # [S6]--e17-->[j1510]--e18-->[E6]
26
+ #
27
+ # [j1510]
28
+ # [S7]--e19-->(j1511)--e20-->[E7]
29
+ #
30
+ # [j1600]
31
+ # [S8]--e21-->[j1610]--e22-->[j1620]--e23-->[j1630]--e24-->[E8]
32
+ #
33
+ # [j1610]
34
+ # [S9]--e25-->(j1611)--e26-->(j1612)--e27-->[E9]
35
+ #
36
+ # [j1620]
37
+ # [S10]--e28-->(j1621)--e29-->[E10]
38
+ #
39
+ # [j1630]
40
+ # [S11]--e30-->(j1631)--e31-->[E11]
41
+ class Rjn0009TreeSequentialJobnetBuilder < JobnetFixtureBuilder
42
+ include TestCredentialFixture
43
+ include TestServerFixture
44
+
45
+ DSL = <<-EOS
46
+ jobnet("rjn0009") do
47
+ jobnet("j1100", :credential_name => "test_credential1", :server_name => "test_server1") do
48
+ job("j1110", "job_test j1110")
49
+ job("j1120", "job_test j1120")
50
+ end
51
+ jobnet("j1200", :credential_name => "test_credential1") do
52
+ job("j1210", "job_test j1210", :server_name => "mysql_master")
53
+ end
54
+ jobnet("j1300", :server_name => "mysql_master") do
55
+ job("j1310", "job_test j1310", :credential_name => "test_credential1")
56
+ end
57
+ jobnet("j1400") do
58
+ job("j1410", "job_test j1410", :credential_name => "test_credential1", :server_name => "mysql_master")
59
+ end
60
+ jobnet("j1500", :credential_name => "test_credential1", :server_name => "mysql_master") do
61
+ jobnet("j1510") do
62
+ job("j1511", "job_test j1511")
63
+ end
64
+ end
65
+ jobnet("j1600", :credential_name => "test_credential1", :server_name => "mysql_master") do
66
+ jobnet("j1610") do
67
+ job("j1611", "job_test j1611", :server_name => "test_server1") # server_nameを上書き
68
+ job("j1612", "job_test j1612", :credential_name => "gohan_ssh_pk") # credential_nameを上書き
69
+ end
70
+ jobnet("j1620", :server_name => "test_server1") do # server_nameを上書き
71
+ job("j1621", "job_test j1621")
72
+ end
73
+ jobnet("j1630", :credential_name => "gohan_ssh_pk") do # credential_nameを上書き
74
+ job("j1631", "job_test j1631")
75
+ end
76
+ end
77
+ end
78
+ EOS
79
+
80
+ def create(options = {})
81
+ resource_fixture = GokuAtEc2ApNortheast.new
82
+ resource_fixture.mysql_master
83
+
84
+ root = new_root_jobnet("rjn0009", options)
85
+ root.children << new_start
86
+ root.children << new_jobnet("j1100", :credential_name => test_credential1.name, :server_name => test_server1.name)
87
+ root.children << new_jobnet("j1200", :credential_name => test_credential1.name)
88
+ root.children << new_jobnet("j1300", :server_name => "mysql_master")
89
+ root.children << new_jobnet("j1400")
90
+ root.children << new_jobnet("j1500", :credential_name => test_credential1.name, :server_name => "mysql_master")
91
+ root.children << new_jobnet("j1600", :credential_name => test_credential1.name, :server_name => "mysql_master")
92
+ root.children << new_end
93
+ root.build_sequencial_edges{|edge| remember_edge(edge)}
94
+ check_edge_count(7)
95
+ raise "edge count error: expected 7 but #{@edge_count}\n" << root.edges.map(&:inspect).join("\n ") unless @edge_count == 7
96
+
97
+ j1100 = self[:j1100]
98
+ j1100.children << new_start
99
+ j1100.children << new_script("j1110", :script => "job_test j1110")
100
+ j1100.children << new_script("j1120", :script => "job_test j1120")
101
+ j1100.children << new_end
102
+ j1100.build_sequencial_edges{|edge| remember_edge(edge)}
103
+ check_edge_count(10)
104
+
105
+ j1200 = self[:j1200]
106
+ j1200.children << new_start
107
+ j1200.children << new_script("j1210", :script => "job_test j1210", :server_name => "mysql_master")
108
+ j1200.children << new_end
109
+ j1200.build_sequencial_edges{|edge| remember_edge(edge)}
110
+ check_edge_count(12)
111
+
112
+ j1300 = self[:j1300]
113
+ j1300.children << new_start
114
+ j1300.children << new_script("j1310", :script => "job_test j1310", :credential_name => test_credential1.name)
115
+ j1300.children << new_end
116
+ j1300.build_sequencial_edges{|edge| remember_edge(edge)}
117
+ check_edge_count(14)
118
+
119
+ j1400 = self[:j1400]
120
+ j1400.children << new_start
121
+ j1400.children << new_script("j1410", :script => "job_test j1410", :server_name => "mysql_master", :credential_name => test_credential1.name)
122
+ j1400.children << new_end
123
+ j1400.build_sequencial_edges{|edge| remember_edge(edge)}
124
+ check_edge_count(16)
125
+
126
+ j1500 = self[:j1500]
127
+ j1500.children << new_start
128
+ j1500.children << new_jobnet("j1510")
129
+ j1500.children << new_end
130
+ j1500.build_sequencial_edges{|edge| remember_edge(edge)}
131
+ check_edge_count(18)
132
+
133
+ j1510 = self[:j1510]
134
+ j1510.children << new_start
135
+ j1510.children << new_script("j1511", :script => "job_test j1511")
136
+ j1510.children << new_end
137
+ j1510.build_sequencial_edges{|edge| remember_edge(edge)}
138
+ check_edge_count(20)
139
+
140
+ j1600 = self[:j1600]
141
+ j1600.children << new_start
142
+ j1600.children << new_jobnet("j1610")
143
+ j1600.children << new_jobnet("j1620", :server_name => test_server1.name)
144
+ j1600.children << new_jobnet("j1630", :credential_name => "gohan_ssh_pk")
145
+ j1600.children << new_end
146
+ j1600.build_sequencial_edges{|edge| remember_edge(edge)}
147
+ check_edge_count(24)
148
+
149
+ j1610 = self[:j1610]
150
+ j1610.children << new_start
151
+ j1610.children << new_script("j1611", :script => "job_test j1611", :server_name => test_server1.name)
152
+ j1610.children << new_script("j1612", :script => "job_test j1612", :credential_name => "gohan_ssh_pk")
153
+ j1610.children << new_end
154
+ j1610.build_sequencial_edges{|edge| remember_edge(edge)}
155
+ check_edge_count(27)
156
+
157
+ j1620 = self[:j1620]
158
+ j1620.children << new_start
159
+ j1620.children << new_script("j1621", :script => "job_test j1621")
160
+ j1620.children << new_end
161
+ j1620.build_sequencial_edges{|edge| remember_edge(edge)}
162
+ check_edge_count(29)
163
+
164
+ j1630 = self[:j1630]
165
+ j1630.children << new_start
166
+ j1630.children << new_script("j1631", :script => "job_test j1631")
167
+ j1630.children << new_end
168
+ j1630.build_sequencial_edges{|edge| remember_edge(edge)}
169
+ check_edge_count(31)
170
+
171
+ root.save!
172
+ root
173
+ end
174
+ end
@@ -0,0 +1,39 @@
1
+ # -*- coding: utf-8 -*-
2
+ # 以下のジョブネットについてテンプレートジョブネットや
3
+ # 実行用ジョブネットを扱うフィクスチャ生成のためのクラスです。
4
+ #
5
+ # in [rjn0010]
6
+ # |-----e2----->(j11)-----e4----->|
7
+ # [S1]--e1-->[F1] [J1]--e7-->[E1]
8
+ # |--e3-->(j12)--e5-->(j13)--e6-->|
9
+
10
+ class Rjn00102jobsAnd1jobParallelJobnetBuilder < JobnetFixtureBuilder
11
+ DSL = <<-EOS
12
+ jobnet("rjn0010") do
13
+ boot_jobs("j11", "j12")
14
+ job("j11", "job_test j11")
15
+ job("j12", "job_test j12", :to => "j13")
16
+ job("j13", "job_test j13")
17
+ end
18
+ EOS
19
+
20
+ def create(options = {})
21
+ root = new_root_jobnet("rjn0010")
22
+ root.children << new_start
23
+ root.children << new_fork
24
+ root.children << new_script("j11", :script => "job_test j11")
25
+ root.children << new_script("j12", :script => "job_test j12")
26
+ root.children << new_script("j13", :script => "job_test j13")
27
+ root.children << new_join
28
+ root.children << new_end
29
+ root.edges << new_edge(:S1, :F1)
30
+ root.edges << new_edge(:F1, :j11)
31
+ root.edges << new_edge(:F1, :j12)
32
+ root.edges << new_edge(:j11, :J1)
33
+ root.edges << new_edge(:j12, :j13)
34
+ root.edges << new_edge(:j13, :J1)
35
+ root.edges << new_edge(:J1, :E1)
36
+ root.save!
37
+ root
38
+ end
39
+ end