lib/negroku/cli.rb in negroku-0.0.1 vs lib/negroku/cli.rb in negroku-0.0.2
- old
+ new
@@ -1,19 +1,38 @@
require 'thor'
require 'rainbow'
require 'highline/import'
+trap('INT') { exit }
+
class App < Thor
say "\n\n#############################################".bright()
say "## NEGROKU ##".bright()
say "#############################################\n".bright()
desc "create", "Create application. Intialize the capfile, also create the deploy.rb file in the config folder"
method_option :local_recipes, :type => :boolean, :aliases => "-l"
method_option :path, :type => :string, :aliases => "-p"
def create(name=nil)
+ # Get configuration
+ config = getConfig
+
+ # Test for config
+ if config.empty?
+ say "[WARNING]".foreground(:red)
+ say "It's recommended that you add some default settings to negroku before you create your app deployment\n\n"
+ say "For example you can add your most common git urls using:\n"
+ say "negroku repo add git@github.com:yourusername.git\n".foreground(:yellow)
+ say "Also you can add your deployment servers urls using:\n"
+ say "negroku target add my.deployment.com".foreground(:yellow)
+ say "negroku target add 104.284.3.1\n".foreground(:yellow)
+ unless yes? "Do you want to continue without adding default settings? [y/N]"
+ exit
+ end
+ end
+
say "We're about to create your application deploy setup\n".foreground(:green)
# Hash to hold the app info
data = {}
@@ -23,47 +42,90 @@
else
data[:application_name] = name
end
# The application code repository
- config = YAML.load_file(CONFIG_FILE) || {}
choose do |menu|
- say "\nREPOSITORIES".foreground(:yellow)
+ say "\nREPOSITORIES"
+ say "============"
menu.prompt = "Please choose your repository?".bright()
+ menu.select_by = :index
- config["repo"].each do |val|
- menu.choice(val) do |command|
- say("Using #{command}/#{data[:application_name]}.git")
+ # find local remote from git repo
+ if File.directory?(".git")
+ say "[INFO] The first repo was taken from the local git checkout remotes".color(:yellow)
+ local_repo = %x(git remote -v | grep origin | grep push | awk '{print $2}').gsub(/\n/,"")
+ menu.choice("#{local_repo}") do |command|
+ say("Using #{command}")
data[:repo] = command;
end
end
+ # adds the repos in the config file if there is one
+ if config[:repo]
+ config[:repo].each do |val|
+ repo_url = "#{val}/#{data[:application_name]}.git"
+ # skip if the repo url is the same as the local one
+ unless repo_url == local_repo
+ menu.choice(repo_url) do |command|
+ say("Using #{command}/#{data[:application_name]}.git")
+ data[:repo] = command;
+ end
+ end
+ end
+ else
+ say "[INFO] There are no repos in the default settings".color(:yellow)
+ end
+
+ # add other repo choice
menu.choice(:other) {
- data[:repo] = ask "Type the url and username e.g. git@github.com:username".bright()
+ data[:repo] = ask "Type the url and username e.g. git@github.com:username: ".bright()
}
end
# The application target deploy server
choose do |menu|
- say "\nTARGET SERVERS".foreground(:yellow)
+ say "\nTARGET SERVERS"
+ say "=============="
menu.prompt = "Please choose your deployment server?".bright()
+ menu.select_by = :index
- config["target"].each do |val|
- menu.choice(val) do |command|
- say("Using #{command}")
- data[:target_server] = command;
+ # Adds the targets in the config file if there is one
+ if config[:repo]
+ config[:target].each do |val|
+ menu.choice(val) do |command|
+ say("Using #{command}")
+ data[:target_server] = command;
+ end
end
+ else
+ say "[INFO] There are no target urls in the default settings".color(:yellow)
end
menu.choice(:other) {
- data[:target_server] = ask "Type the hostname or ip of the server to deploy to".bright()
+ data[:target_server] = ask "Type the hostname or ip of the server to deploy to:".bright()
}
end
+ # Add custom domain
+ say "\nCUSTOM DOMAIN"
+ say "============="
+ if yes? "Do you want to use #{data[:target_server].gsub(/^([a-z\d]*)/, data[:application_name])}? [Y/n]"
+ data[:domains] = data[:target_server].gsub(/^([a-z\d]*)/, data[:application_name])
+ else
+ data[:domains] = ask "Please enter the domains separated by spaces"
+ end
+
+
init(".", data)
+
+ say "\n\nWhat to do next?\n".bright()
+ say "You can try with cap -T to see the available tasks"
+ say "Also you can check the config/deploy.rb file, you may want to change some things there"
+ say "\n HAPPY DEPLOY".foreground(:green)
end
desc "deploy", "Deploy the application"
def deploy
put "I will deploy"
@@ -75,11 +137,11 @@
desc "add", "add new default repositories"
def add(url=nil)
if url.nil?
url = ask("Type the url and username e.g. git@github.com:username")
end
- saveConfig("add", "repo", url)
+ saveConfig(:add, :repo, url)
end
desc "remove", "remove some repo"
def remove
puts "I will remove a repo"
@@ -95,11 +157,11 @@
desc "add", "add new default target server"
def add(host=nil)
if host.nil?
host = ask("Type the host or ip for the target machine")
end
- saveConfig("add", "target", host)
+ saveConfig(:add, :target, host)
end
desc "remove", "remove some target"
def remove
puts "I will remove a target"
@@ -109,39 +171,65 @@
def list
puts "I will list the target servers"
end
end
-class Hosts < Thor
- desc "add", "add new default target server"
- def add(host=nil)
- if host.nil?
- host = ask("Type the host or ip for the target machine")
- end
- saveConfig("add", "target", host)
- end
-
- desc "remove", "remove some target"
- def remove
- puts "I will remove a target"
- end
-end
-
class Konfig < Thor
namespace "config"
desc "show", "Show the current configuration file"
def show
showConfig
end
end
+class RemoteEnv < Thor
+ namespace "env"
+
+ desc "show", "Show the current remote variables"
+ def show
+ `cap rbenv:vars:show`
+ end
+
+ desc "add", "Adds env variables to the remote server"
+ method_option :local, :type => :boolean, :aliases => "-l"
+ def add(key=nil, value=nil)
+
+ # Check if the paramenter were sent in the call
+ # Ask for the value if only the key was sent
+ if !key.nil? && value.nil?
+ value = ask("Please enter the value for #{key}:")
+ # If nothing was sent
+ elsif key.nil? && value.nil?
+ # Check if the .rbenv-vars file exists and offer get the info from there
+ if File.exist?(".rbenv-vars") && (yes? "Do you want to add variables from your local .rbenv-vars file [y/N]")
+ choose do |menu|
+ menu.prompt = "Please choose variable you want to add?".bright()
+ menu.select_by = :index
+
+ File.readlines(".rbenv-vars").each do |line|
+ menu.choice(line.gsub("\n","")) do |command|
+ key = command.split("=")[0]
+ value = command.split("=")[1]
+ end
+ end
+ end
+ else
+ key = ask("Please enter the variable key:")
+ value = ask("Please enter the value for #{key}:")
+ end
+ end
+
+ `cap rbenv:vars:add -s key=#{key} -s value=#{value}`
+ end
+end
+
module Negroku
class CLI < Thor
register(App, 'app', 'app [COMMAND]', 'Application')
register(Repo, 'repo', 'repo [COMMAND]', 'Repositories')
register(Target, 'target', 'target [COMMAND]', 'Target servers')
- register(Hosts, 'host', 'host [COMMAND]', 'Hosts')
register(Konfig, 'config', 'config [COMMAND]', 'Configuration')
+ register(RemoteEnv, 'env', 'env [COMMAND]', 'Remote environmental variables')
end
end
\ No newline at end of file