Commit b518bec

mo <mo.khan@gmail.com>
2019-07-25 20:38:03
extract intention revealing names for commands
1 parent dee37eb
Changed files (1)
lib
examine
lib/examine/cli/clair.rb
@@ -2,7 +2,7 @@ module Examine
   module CLI
     class Clair < Thor
       DOWNLOAD_PATH = 'https://github.com/arminc/clair-scanner/releases/download/'
-      DOWNLOADS = {
+      EXECUTABLES = {
         'x86-darwin' => 'clair-scanner_darwin_386',
         'x86-linux' => 'clair-scanner_linux_386',
         'x86_64-darwin' => 'clair-scanner_darwin_amd64',
@@ -16,12 +16,12 @@ module Examine
       desc 'start', 'start a clair server'
       def start
         ensure_docker_installed!
-        spawn 'docker run -d --name clair-db arminc/clair-db:latest'
-        wait_until('docker ps --filter="name=clair-db" --filter="status=running" --filter="expose=5432/tcp" | grep -v CONT')
+        spawn clair_db
+        wait_until clair_db_running?
 
-        spawn "docker run --restart=unless-stopped -p 6060:6060 --link clair-db:postgres -d --name clair arminc/clair-local-scan:#{options[:local_scan_version]}"
-        wait_until('docker ps --filter="name=clair" --filter="status=running" --filter="expose=6060/tcp" | grep -v CONT')
-        wait_until("curl -s #{options[:url]}/v1/namespaces > /dev/null")
+        spawn clair_local_scan(options[:local_scan_version])
+        wait_until clair_local_scan_running?
+        wait_until clair_local_scan_api_reachable?
       end
 
       method_option :ip, desc: 'ip address', default: nil, type: :string
@@ -81,7 +81,7 @@ module Examine
       end
 
       def clair_download_url
-        exe = DOWNLOADS["#{Gem::Platform.local.cpu}-#{Gem::Platform.local.os}"]
+        exe = EXECUTABLES["#{Gem::Platform.local.cpu}-#{Gem::Platform.local.os}"]
         return File.join(DOWNLOAD_PATH, options[:scanner_version], exe) if exe
 
         raise 'clair-scanner could not be found in your PATH. Download from https://github.com/arminc/clair-scanner/releases'
@@ -101,6 +101,26 @@ module Examine
       def ensure_docker_installed!
         raise 'docker was not detected on the system' unless executable_exists?('docker')
       end
+
+      def clair_db_running?
+        'docker ps --filter="name=clair-db" --filter="status=running" --filter="expose=5432/tcp" | grep -v CONT'
+      end
+
+      def clair_db
+        'docker run -d --name clair-db arminc/clair-db:latest'
+      end
+
+      def clair_local_scan(version)
+        "docker run --restart=unless-stopped -p 6060:6060 --link clair-db:postgres -d --name clair arminc/clair-local-scan:#{version}"
+      end
+
+      def clair_local_scan_running?
+        'docker ps --filter="name=clair" --filter="status=running" --filter="expose=6060/tcp" | grep -v CONT'
+      end
+
+      def clair_local_scan_api_reachable?(url = options[:url])
+        "curl -s #{url}/v1/namespaces > /dev/null"
+      end
     end
   end
 end