cronicle 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 397f41f3a15c86c5307a304e878fdf755ee47474
4
- data.tar.gz: 57a0933ff281f922f79bcef23304d570e563d56a
3
+ metadata.gz: 90a9b9808f5544209161321c06c465715a6f07dd
4
+ data.tar.gz: 3a63c1278482a6a6af9dc9e57c3a873ac81989ed
5
5
  SHA512:
6
- metadata.gz: aba44a6c955bfc541ddf83d010031656935800cfca10b7c4dc88194201bddb8149762b5a7d93754363c691ff12a22da71950ba6b959326464bd6a8c2992fc538
7
- data.tar.gz: 5772cd0031968bc5e026dc773190baffdff5d98c376ea4b8c7e119e19143d4a29f765519c4938f484027fec583d5b11684d70c4f3ec6b11c4fda57dc22d90683
6
+ metadata.gz: f85ee6ee7e0e12e391282895c63400bf627ad6f7f8b30b541b2a56badcbdca2627d5d57408fb502e421246243154d174983da49877601a179257f96a69d1fc29
7
+ data.tar.gz: ffe7a07a5c8f8bbd1faa49e06495f4027ba59eb32229c9e92b0ef8546340a2eab330518e799abffb00f41bda340d599b56ba15f6751264f3c98ea1f22115f43c
data/README.md CHANGED
@@ -88,6 +88,21 @@ puts "hello"
88
88
 
89
89
  ## Jobfile example
90
90
 
91
+ ```ruby
92
+ on servers: :your_hostname do
93
+ job :my_job, user: "ec2-user", schedule: "* * * * *" do
94
+ puts "hello"
95
+ end
96
+
97
+ job :my_job2, user: "ec2-user", schedule: "* * * * *", content: <<-EOS
98
+ #!/bin/sh
99
+ echo hello
100
+ EOS
101
+ end
102
+ ```
103
+
104
+ ### User bundler
105
+
91
106
  ```ruby
92
107
  on servers: :your_hostname do
93
108
  job :my_job, user: "ec2-user", schedule: "* * * * *", bundle: 'ruby-mysql' do
@@ -97,11 +112,6 @@ on servers: :your_hostname do
97
112
  p col1, col2
98
113
  end
99
114
  end
100
-
101
- job :my_job2, user: "ec2-user", schedule: "* * * * *", content: <<-EOS
102
- #!/bin/sh
103
- echo hello
104
- EOS
105
115
  end
106
116
  ```
107
117
 
@@ -2,6 +2,19 @@
2
2
  # vi: set ft=ruby :
3
3
  VAGRANTFILE_API_VERSION = "2"
4
4
 
5
+ def set_aws_config(aws, override)
6
+ aws.access_key_id = ENV["AWS_ACCESS_KEY_ID"]
7
+ aws.secret_access_key = ENV["AWS_SECRET_ACCESS_KEY"]
8
+ aws.keypair_name = ENV["EC2_KEYPAIR_NAME"]
9
+ aws.instance_type = "t1.micro"
10
+ aws.region = ENV["AWS_REGION"] || 'us-east-1'
11
+ aws.terminate_on_shutdown = true
12
+
13
+ override.ssh.private_key_path = ENV["EC2_PRIVATE_KEY_PATH"] || ENV["EC2_KEYPAIR_NAME"] + ".pem"
14
+ override.ssh.pty = true
15
+ override.vm.boot_timeout = 180
16
+ end
17
+
5
18
  Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
6
19
  config.vm.box = "dummy"
7
20
  config.vm.box_url = "https://github.com/mitchellh/vagrant-aws/raw/master/dummy.box"
@@ -10,47 +23,29 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
10
23
 
11
24
  config.vm.define :amazon_linux do |machine|
12
25
  machine.vm.provider :aws do |aws, override|
13
- aws.access_key_id = ENV["AWS_ACCESS_KEY_ID"]
14
- aws.secret_access_key = ENV["AWS_SECRET_ACCESS_KEY"]
15
- aws.keypair_name = ENV["EC2_KEYPAIR_NAME"]
16
- aws.instance_type = "m1.large"
17
- aws.region = ENV["AWS_REGION"] || 'us-east-1'
18
- aws.terminate_on_shutdown = true
19
- aws.ami = ENV["AMAZON_LINUX_AMI"] || "ami-8e682ce6"
26
+ set_aws_config(aws, override)
20
27
 
28
+ aws.ami = ENV["AMAZON_LINUX_AMI"] || "ami-8e682ce6"
21
29
  override.ssh.username = "ec2-user"
22
- override.ssh.private_key_path = ENV["EC2_PRIVATE_KEY_PATH"] || ENV["EC2_KEYPAIR_NAME"] + ".pem"
23
- override.ssh.pty = true
24
30
 
25
31
  override.vm.provision "shell", inline: <<-SH
26
32
  echo cronicle | passwd --stdin ec2-user
27
33
  echo 'ec2-user ALL=(ALL) ALL' > /etc/sudoers.d/cloud-init
28
34
  SH
29
-
30
- override.vm.boot_timeout = 180
31
35
  end
32
36
  end
33
37
 
34
38
  config.vm.define :ubuntu do |machine|
35
39
  machine.vm.provider :aws do |aws, override|
36
- aws.access_key_id = ENV["AWS_ACCESS_KEY_ID"]
37
- aws.secret_access_key = ENV["AWS_SECRET_ACCESS_KEY"]
38
- aws.keypair_name = ENV["EC2_KEYPAIR_NAME"]
39
- aws.instance_type = "m1.large"
40
- aws.region = ENV["AWS_REGION"] || 'us-east-1'
41
- aws.terminate_on_shutdown = true
42
- aws.ami = ENV['UBUNTU_AMI'] || "ami-84562dec"
40
+ set_aws_config(aws, override)
43
41
 
42
+ aws.ami = ENV['UBUNTU_AMI'] || "ami-84562dec"
44
43
  override.ssh.username = "ubuntu"
45
- override.ssh.private_key_path = ENV["EC2_PRIVATE_KEY_PATH"] || ENV["EC2_KEYPAIR_NAME"] + ".pem"
46
- override.ssh.pty = true
47
44
 
48
45
  override.vm.provision "shell", inline: <<-SH
49
46
  echo ubuntu:cronicle | chpasswd
50
47
  echo 'ubuntu ALL=(ALL) ALL' > /etc/sudoers.d/90-cloud-init-users
51
48
  SH
52
-
53
- override.vm.boot_timeout = 180
54
49
  end
55
50
  end
56
51
  end
@@ -30,7 +30,7 @@ class Cronicle::DSL::Context::Job
30
30
  raise ArgumentError, "Job `#{name}`: :user is required"
31
31
  end
32
32
 
33
- opts.assert_valid_keys(:schedule, :user, :content, :bundle)
33
+ opts.assert_valid_keys(:schedule, :user, :content, :bundle, :locals, :header)
34
34
 
35
35
  if opts[:content] and block
36
36
  raise ArgumentError, 'Can not pass :content and block to `job` method'
@@ -38,6 +38,10 @@ class Cronicle::DSL::Context::Job
38
38
  raise ArgumentError, "Job `#{name}`: :context or block is required"
39
39
  end
40
40
 
41
+ unless opts[:locals].nil? or opts[:locals].kind_of?(Hash)
42
+ raise TypeError, "Job `#{name}`: :locals is wrong argument type (expected Hash)"
43
+ end
44
+
41
45
  job_hash = @result[name][:job]
42
46
  job_hash[:name] = name
43
47
  job_hash[:user] = opts.fetch(:user).to_s
@@ -52,12 +56,20 @@ class Cronicle::DSL::Context::Job
52
56
  source = block.to_raw_source(:strip_enclosure => true).each_line.to_a
53
57
  source = source.shift + source.join.unindent
54
58
 
55
- job_hash[:content] = <<-RUBY
56
- #!/usr/bin/env ruby
57
- #{source}
58
- RUBY
59
+ job_hash[:content] = "#!/usr/bin/env ruby\n"
60
+
61
+ opts.fetch(:locals, {}).each do |name, value|
62
+ job_hash[:content] << "#{name} = #{value.inspect}\n"
63
+ end
64
+
65
+ job_hash[:content] << "#{source}\n"
59
66
  else
60
67
  job_hash[:content] = opts[:content].to_s.unindent
61
68
  end
69
+
70
+ if opts[:header]
71
+ index = (job_hash[:content] =~ /^[^#]/) || 0
72
+ job_hash[:content].insert(index, "#{opts[:header]}\n")
73
+ end
62
74
  end
63
75
  end
@@ -1,3 +1,3 @@
1
1
  module Cronicle
2
- VERSION = '0.1.5'
2
+ VERSION = '0.1.6'
3
3
  end
@@ -210,4 +210,43 @@ describe 'Cronicle::Client#exec' do
210
210
  EOS
211
211
  end
212
212
  end
213
+
214
+ context 'with locals/header' do
215
+ let(:jobfile) do
216
+ <<-RUBY.unindent
217
+ on servers: /amazon_linux/ do
218
+ job :foo, user: 'ec2-user', locals: {foo: 'BAR'} do
219
+ puts foo
220
+ end
221
+ end
222
+
223
+ on servers: /ubuntu/ do
224
+ job :foo, user: :ubuntu, header: 'FOO=100', content: <<-SH
225
+ #!/bin/sh
226
+ echo $FOO
227
+ SH
228
+ end
229
+ RUBY
230
+ end
231
+
232
+ before do
233
+ cronicle(:exec, :foo, logger: logger) { jobfile }
234
+ end
235
+
236
+ it do
237
+ expect(amzn_out).to eq <<-EOS.unindent
238
+ foo on amazon_linux/ec2-user> Execute job
239
+ foo on amazon_linux/ec2-user>\s
240
+ foo on amazon_linux/ec2-user> BAR
241
+ EOS
242
+ end
243
+
244
+ it do
245
+ expect(ubuntu_out).to eq <<-EOS.unindent
246
+ foo on ubuntu/ubuntu> Execute job
247
+ foo on ubuntu/ubuntu>\s
248
+ foo on ubuntu/ubuntu> 100
249
+ EOS
250
+ end
251
+ end
213
252
  end
@@ -120,7 +120,7 @@ def cronicle(*args)
120
120
  command = args.shift
121
121
  options = args.last.kind_of?(Hash) ? args.pop : {}
122
122
 
123
- tempfile(`vagrant ssh-config`) do |ssh_config|
123
+ tempfile(vagrant_ssh_config) do |ssh_config|
124
124
  SSHKit::Backend::Netssh.configure do |ssh|
125
125
  ssh.ssh_options = {:config => ssh_config.path}
126
126
  end
@@ -134,6 +134,10 @@ def cronicle(*args)
134
134
  end
135
135
  end
136
136
 
137
+ def vagrant_ssh_config
138
+ @vagrant_ssh_config ||= `vagrant ssh-config`
139
+ end
140
+
137
141
  def cronicle_client(options = {})
138
142
  options = {
139
143
  :sudo_password => 'cronicle'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cronicle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-10 00:00:00.000000000 Z
11
+ date: 2015-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sourcify