isaac_toolbelt 0.1.4 → 0.1.5

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: 5f3e1214f405ca714c912eb639c9f667c4213d5e
4
- data.tar.gz: 304992c3e6f6723c91e44d08d51a4d12df5b48d1
3
+ metadata.gz: c67637613745d7fd01f327f5fe5f802e3bc4226c
4
+ data.tar.gz: 0c498e908136f756af59d50da74caeefad4c4c09
5
5
  SHA512:
6
- metadata.gz: 012a3b2dbc27614acbf650a056e298d9742b38c9a977aeb464fb8b7e62461de315b027602bf0e70d0fd237239e6991101ad6886f47358d48f73b89b8fa8630dd
7
- data.tar.gz: a01d906282a3a9f6cbf8d93118ffcd211e992bbf13cdc5be94f6bf2392da2f918cbc76e522db450054c6da2cabaffa7f74cf0c2d0e70db7b7358ae628e41a6f7
6
+ metadata.gz: 0f962fddab766f16c3313a1a567b402c3b0cefd3d2fc6a0b0d74a71bdb36c471a3052579d4b348c54634e48d831057d96bada1d18adc2c6539cc62ea1c7b1c38
7
+ data.tar.gz: 02ce1492a9ade4a54271feae9ca6c5b65c6b9374f4fb3b8dcfa67e0df0089bc93c48f171f14ae94d3d163191223b1e841f557e0600cf1c9c2b57a7040cebb7d6
@@ -9,6 +9,7 @@ require 'curb'
9
9
  require 'ruby-progressbar'
10
10
  require 'archive'
11
11
  require 'mkmf'
12
+ include SSHKit::DSL
12
13
 
13
14
  REQUIREMENTS_TXT = <<"EOF"
14
15
  cffi==1.4.2
@@ -81,6 +82,7 @@ module IsaacToolbelt
81
82
  TEMP_ROOT = '/var/isaac/tmp'
82
83
  ISAAC_CONF_PATH = '/etc/isaac.conf'
83
84
  ISAAC_EDISON_IMAGE_URL='https://s3-ap-northeast-1.amazonaws.com/isaac-os-images/edison/toFlash.tar.bz2'
85
+ ISAAC_EDISON_TEMPLATE_URL='https://codeload.github.com/xshellinc/isaac_template_python/zip/master'
84
86
 
85
87
 
86
88
  module Helper
@@ -166,6 +168,18 @@ module IsaacToolbelt
166
168
  end
167
169
  Process.waitall
168
170
  end
171
+
172
+ def current_mode
173
+ msg = ""
174
+ on "#{SSH_USERNAME}@#{DEVICE_IP_ADDRESS}" do
175
+ msg = capture(:systemctl, "is-active isaacd", raise_on_non_zero_exit: false)
176
+ end
177
+ if msg == "active" || msg == "activating"
178
+ return :production
179
+ else
180
+ return :development
181
+ end
182
+ end
169
183
  end
170
184
 
171
185
  class Local < Thor
@@ -315,13 +329,24 @@ module IsaacToolbelt
315
329
  uname = get_uname()
316
330
  conf = get_conf()
317
331
 
318
- rjust_count = 20
319
-
320
- print "Operating System: ".rjust(rjust_count, ' ')
321
- puts "#{uname}"
322
-
323
- print "Access Key: ".rjust(rjust_count, ' ')
324
- puts "#{conf['access_key']}"
332
+ puts "OS: #{uname}"
333
+ puts "Access Key: #{conf['access_key']}"
334
+
335
+ on "#{SSH_USERNAME}@#{DEVICE_IP_ADDRESS}" do
336
+ %w(usb0 wlan0).each do |interface|
337
+ ifconfig = capture(:ifconfig, "#{interface}")
338
+ lines = ifconfig.lines
339
+ puts "#{interface}"
340
+ lines[1..-1].each do |l|
341
+ puts " IPv4: #{l.split[1].split(":").last}" if l.include? "inet addr:"
342
+ if l.include? "inet6 addr:"
343
+ words = l.split
344
+ puts " IPv6: #{words[2]} #{words[3]}"
345
+ end
346
+ end
347
+ puts " HW Addr: #{lines[0].split.last}" if lines[0].include? "HWaddr"
348
+ end
349
+ end
325
350
  end
326
351
 
327
352
  desc 'config:access_key ACCESS_KEY', 'Set ISAAC Access Token'
@@ -352,27 +377,16 @@ module IsaacToolbelt
352
377
  end
353
378
 
354
379
  desc 'mode', 'Set modes whether production mode or development mode.'
355
- def mode(state)
380
+ def mode(m)
356
381
  waitfor
357
- SSHKit::Coordinator.new(host).each do
358
- if state == "development" then
359
- # stop isaacd
360
- execute :systemctl, *%w(stop isaacd)
361
- execute :systemctl, *%w(disable isaacd)
362
- # start isaac-local
363
- execute :systemctl, *%w(enable isaac-local)
364
- execute :systemctl, *%w(start isaac-local)
365
- elsif state == "production" then
366
- # stop isaac-local
367
- execute :systemctl, *%w(stop isaac-local)
368
- execute :systemctl, *%w(disable isaac-local)
369
- # start isaacd
370
- execute :systemctl, *%w(enable isaacd)
371
- execute :systemctl, *%w(start isaacd)
372
- else
373
- puts DEVICE_MODE
374
- end
382
+ if m == "development" || m == "dev" then
383
+ change_mode :development
384
+ elsif m == "production" then
385
+ change_mode :production
386
+ else
387
+ puts DEVICE_MODE
375
388
  end
389
+ puts "Current mode is #{current_mode}."
376
390
  end
377
391
 
378
392
  desc 'reboot', 'Reboot ISAAC OS'
@@ -382,7 +396,6 @@ module IsaacToolbelt
382
396
  end
383
397
  map 'reboot' => '_reboot'
384
398
 
385
-
386
399
  private
387
400
  def prepare_os_image
388
401
  easy = Curl::Easy.new
@@ -571,11 +584,67 @@ module IsaacToolbelt
571
584
  end
572
585
  return uname
573
586
  end
587
+
588
+ def change_mode(m)
589
+ if m == :development
590
+ if current_mode == :production
591
+ print "The device is in production mode. Do you wish to change to development mode [yN]: "
592
+ confirm = STDIN.gets.chomp.downcase
593
+ if confirm == "yes" || confirm == "y"
594
+ on "#{SSH_USERNAME}@#{DEVICE_IP_ADDRESS}" do
595
+ # stop isaacd
596
+ execute :systemctl, *%w(stop isaacd)
597
+ execute :systemctl, *%w(disable isaacd)
598
+ # start isaac-local
599
+ execute :systemctl, *%w(enable isaac-local)
600
+ execute :systemctl, *%w(start isaac-local)
601
+ end
602
+ else
603
+ puts "Device mode was not changed."
604
+ end
605
+ end
606
+ elsif m == :production
607
+ on "#{SSH_USERNAME}@#{DEVICE_IP_ADDRESS}" do
608
+ # stop isaac-local
609
+ execute :systemctl, *%w(stop isaac-local)
610
+ execute :systemctl, *%w(disable isaac-local)
611
+ # start isaacd
612
+ execute :systemctl, *%w(enable isaacd)
613
+ execute :systemctl, *%w(start isaacd)
614
+ end
615
+ end
616
+ return current_mode
617
+ end
618
+ end
619
+
620
+ class App < Thor
621
+ desc 'new <name>', 'Create a new Isaac <name> app'
622
+ def new(app_name)
623
+ # Create app directory
624
+ if Dir.exist? app_name
625
+ puts "ERROR: #{app_name} directory already exists."
626
+ exit(-1)
627
+ end
628
+ FileUtils.mkdir app_name
629
+ # Get a template
630
+ url = ISAAC_EDISON_TEMPLATE_URL
631
+ template_d = File.join(ISAAC_DIR, 'templates/edison')
632
+ FileUtils.mkdir_p template_d unless Dir.exist? template_d
633
+ template_fname = url.split(/\?/).first.split(/\//).last
634
+ template_f = File.join(template_d, template_fname)
635
+ Curl::Easy.download(url, template_f)
636
+ # Extract template archive
637
+ extract_d = File.join(template_d, "isaac_template_python-master")
638
+ Archive.extract(template_f, template_d)
639
+ # Copy to app directory
640
+ FileUtils.cp_r extract_d + "/.", app_name
641
+ end
574
642
  end
575
643
 
576
644
  class CLI < Thor
577
645
  register Local, 'local', 'local <COMMAND>', 'Run the app on local SBC'
578
646
  register Device, 'device', 'device <COMMAND>', 'Configure SBC connected via USB'
647
+ register App, 'app', 'app <COMMAND>', 'Isaac app'
579
648
 
580
649
  map %w(-v --version) => :version
581
650
  desc "version", "Show Isaac's version information"
@@ -1,3 +1,3 @@
1
1
  module IsaacToolbelt
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isaac_toolbelt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - xshell inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-09 00:00:00.000000000 Z
11
+ date: 2016-04-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler