rhc 0.80.5 → 0.81.14
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.
- data/bin/rhc-chk +31 -24
- data/bin/rhc-create-app +99 -265
- data/bin/rhc-create-domain +98 -17
- data/bin/rhc-ctl-app +14 -38
- data/bin/rhc-snapshot +1 -1
- data/bin/rhc-tail-files +1 -1
- data/bin/rhc-user-info +29 -22
- data/lib/rhc-common.rb +301 -26
- metadata +5 -5
    
        data/bin/rhc-create-domain
    CHANGED
    
    | @@ -78,8 +78,11 @@ libra_server = get_var('libra_server') | |
| 78 78 | 
             
            debug = get_var('debug') == 'false' ? nil : get_var('debug')
         | 
| 79 79 |  | 
| 80 80 |  | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 81 | 
            +
            ssh_key_file_path = get_kfile(false)
         | 
| 82 | 
            +
            ssh_pub_key_file_path = get_kpfile(ssh_key_file_path, opt['alter'])
         | 
| 83 | 
            +
             | 
| 84 | 
            +
            ssh_config = "#{ENV['HOME']}/.ssh/config"
         | 
| 85 | 
            +
            ssh_config_d = "#{ENV['HOME']}/.ssh/"
         | 
| 83 86 |  | 
| 84 87 | 
             
            if opt["help"]
         | 
| 85 88 | 
             
                p_usage
         | 
| @@ -113,7 +116,6 @@ end | |
| 113 116 | 
             
            #
         | 
| 114 117 | 
             
            # Add a new namespace to configs
         | 
| 115 118 | 
             
            #
         | 
| 116 | 
            -
             | 
| 117 119 | 
             
            def add_rhlogin_config(rhlogin, uuid)
         | 
| 118 120 | 
             
                f = open(File.expand_path(config_path), 'a')
         | 
| 119 121 | 
             
                unless config.get_value('default_rhlogin')
         | 
| @@ -124,32 +126,108 @@ def add_rhlogin_config(rhlogin, uuid) | |
| 124 126 | 
             
                f.close
         | 
| 125 127 | 
             
            end
         | 
| 126 128 |  | 
| 129 | 
            +
            #
         | 
| 130 | 
            +
            # Check / add new host to ~/.ssh/config
         | 
| 131 | 
            +
            #
         | 
| 132 | 
            +
            def add_ssh_config_host(rhc_domain, ssh_key_file_path, ssh_config, ssh_config_d)
         | 
| 133 | 
            +
              
         | 
| 134 | 
            +
              puts "Checking ~/.ssh/config"
         | 
| 135 | 
            +
              ssh_key_file_name = File.basename(ssh_key_file_path)
         | 
| 136 | 
            +
              if ssh_key_file_path =~ /^#{ENV['HOME']}/
         | 
| 137 | 
            +
                ssh_key_file_path = ssh_key_file_path[ENV['HOME'].length..-1]
         | 
| 138 | 
            +
                if ssh_key_file_path =~ /^\// || ssh_key_file_path =~ /^\\/
         | 
| 139 | 
            +
                  ssh_key_file_path = '~' + ssh_key_file_path
         | 
| 140 | 
            +
                else
         | 
| 141 | 
            +
                  ssh_key_file_path = '~/' + ssh_key_file_path
         | 
| 142 | 
            +
                end
         | 
| 143 | 
            +
              end
         | 
| 144 | 
            +
              if (ssh_key_file_name != 'id_rsa')
         | 
| 145 | 
            +
                found = false
         | 
| 146 | 
            +
             | 
| 147 | 
            +
                begin
         | 
| 148 | 
            +
                    File.open(ssh_config, "r") do |sline|
         | 
| 149 | 
            +
                        while(line = sline.gets)
         | 
| 150 | 
            +
                            if line.to_s.index("Host *.#{rhc_domain}") == 0
         | 
| 151 | 
            +
                                found = true
         | 
| 152 | 
            +
                                break
         | 
| 153 | 
            +
                            end
         | 
| 154 | 
            +
                        end
         | 
| 155 | 
            +
                    end
         | 
| 156 | 
            +
                rescue Errno::EACCES
         | 
| 157 | 
            +
                    puts "Could not read from #{ssh_config}"
         | 
| 158 | 
            +
                    puts "Reason: " + $!
         | 
| 159 | 
            +
                    puts
         | 
| 160 | 
            +
                    puts "Please correct this first.  Then run rerun."
         | 
| 161 | 
            +
                    puts
         | 
| 162 | 
            +
                    exit 213
         | 
| 163 | 
            +
                rescue Errno::ENOENT
         | 
| 164 | 
            +
                    puts "Could not find #{ssh_config}.  This is ok, continuing"
         | 
| 165 | 
            +
                end
         | 
| 166 | 
            +
                if found
         | 
| 167 | 
            +
                    puts "Found #{rhc_domain} in ~/.ssh/config... No need to adjust"
         | 
| 168 | 
            +
                else
         | 
| 169 | 
            +
                    puts "    Adding #{rhc_domain} to ~/.ssh/config"
         | 
| 170 | 
            +
                    begin
         | 
| 171 | 
            +
                        f = File.open(ssh_config, "a")
         | 
| 172 | 
            +
                        f.puts <<SSH
         | 
| 173 | 
            +
             | 
| 174 | 
            +
            # Added by rhc-create-domain on #{`date`}
         | 
| 175 | 
            +
            Host *.#{rhc_domain}
         | 
| 176 | 
            +
                IdentityFile #{ssh_key_file_path}
         | 
| 177 | 
            +
                VerifyHostKeyDNS yes
         | 
| 178 | 
            +
                StrictHostKeyChecking no
         | 
| 179 | 
            +
                UserKnownHostsFile ~/.ssh/libra_known_hosts
         | 
| 180 | 
            +
             | 
| 181 | 
            +
            SSH
         | 
| 182 | 
            +
                        f.close
         | 
| 183 | 
            +
                    rescue Errno::EACCES
         | 
| 184 | 
            +
                        puts "Could not write to #{ssh_config}"
         | 
| 185 | 
            +
                        puts "Reason: " + $!
         | 
| 186 | 
            +
                        puts
         | 
| 187 | 
            +
                        puts "Please correct this first.  Then run rerun."
         | 
| 188 | 
            +
                        puts
         | 
| 189 | 
            +
                        exit 214
         | 
| 190 | 
            +
                    rescue Errno::ENOENT
         | 
| 191 | 
            +
                        # Make directory and config if they do not exist
         | 
| 192 | 
            +
                        puts "Could not find directory: " + $!
         | 
| 193 | 
            +
                        puts "creating"
         | 
| 194 | 
            +
                        FileUtils.mkdir_p ssh_config_d
         | 
| 195 | 
            +
                        file = File.open(ssh_config, 'w')
         | 
| 196 | 
            +
                        file.close
         | 
| 197 | 
            +
                        retry
         | 
| 198 | 
            +
                    end
         | 
| 199 | 
            +
                end
         | 
| 200 | 
            +
             | 
| 201 | 
            +
                File.chmod(0700, ssh_config_d)
         | 
| 202 | 
            +
                File.chmod(0600, ssh_config)
         | 
| 203 | 
            +
              end
         | 
| 204 | 
            +
            end
         | 
| 205 | 
            +
             | 
| 127 206 |  | 
| 128 207 | 
             
            #
         | 
| 129 | 
            -
            # Check to see if a  | 
| 208 | 
            +
            # Check to see if a ssh_key_file_path exists, if not create it.
         | 
| 130 209 | 
             
            #
         | 
| 131 210 |  | 
| 132 | 
            -
            if File.readable?( | 
| 133 | 
            -
                puts "OpenShift Express key found at #{ | 
| 211 | 
            +
            if File.readable?(ssh_key_file_path)
         | 
| 212 | 
            +
                puts "OpenShift Express key found at #{ssh_key_file_path}.  Reusing..."
         | 
| 134 213 | 
             
            else
         | 
| 135 | 
            -
                puts "Generating OpenShift Express ssh key to #{ | 
| 214 | 
            +
                puts "Generating OpenShift Express ssh key to #{ssh_key_file_path}"
         | 
| 136 215 | 
             
                # Use system for interaction
         | 
| 137 | 
            -
                system("ssh-keygen -t rsa -f '#{ | 
| 216 | 
            +
                system("ssh-keygen -t rsa -f '#{ssh_key_file_path}'")
         | 
| 138 217 | 
             
            end
         | 
| 139 218 |  | 
| 140 | 
            -
            ssh_key = File.open( | 
| 219 | 
            +
            ssh_key = File.open(ssh_pub_key_file_path).gets.chomp.split(' ')[1]
         | 
| 141 220 |  | 
| 142 | 
            -
            puts "Contacting https://#{libra_server}"
         | 
| 143 221 | 
             
            data = {'namespace' => opt['namespace'],
         | 
| 144 | 
            -
             | 
| 145 | 
            -
             | 
| 222 | 
            +
                    'rhlogin' => opt['rhlogin'],
         | 
| 223 | 
            +
                    'ssh' => ssh_key}
         | 
| 146 224 | 
             
            if (opt['alter'])
         | 
| 147 | 
            -
              data[ | 
| 225 | 
            +
              data[:alter] = true
         | 
| 148 226 | 
             
              not_found_message = "A user with rhlogin '#{opt['rhlogin']}' does not have a registered domain.  Be sure to run rhc-create-domain without -a|--alter first."
         | 
| 149 227 | 
             
              user_info = RHC::get_user_info(libra_server, opt['rhlogin'], password, @http, true, not_found_message)
         | 
| 150 228 | 
             
            end
         | 
| 151 229 | 
             
            if debug
         | 
| 152 | 
            -
              data[ | 
| 230 | 
            +
              data[:debug] = true
         | 
| 153 231 | 
             
            end
         | 
| 154 232 | 
             
            RHC::print_post_data(data)
         | 
| 155 233 | 
             
            json_data = RHC::generate_json(data)
         | 
| @@ -163,6 +241,7 @@ if response.code == '200' | |
| 163 241 | 
             
                    RHC::print_response_success(json_resp)
         | 
| 164 242 | 
             
                    json_rhlogininfo = JSON.parse(json_resp['data'])
         | 
| 165 243 | 
             
                    add_rhlogin_config(json_rhlogininfo['rhlogin'], json_rhlogininfo['uuid'])
         | 
| 244 | 
            +
                    add_ssh_config_host(json_rhlogininfo['rhc_domain'], ssh_key_file_path, ssh_config, ssh_config_d)
         | 
| 166 245 |  | 
| 167 246 | 
             
                    if opt['alter'] != ''
         | 
| 168 247 | 
             
                        puts <<EOF
         | 
| @@ -199,11 +278,13 @@ EOF | |
| 199 278 | 
             
                                  dns_success = false
         | 
| 200 279 | 
             
                              end
         | 
| 201 280 | 
             
                          end
         | 
| 281 | 
            +
                          puts "You can use rhc-user-info to view any url changes.  Be sure to update any links"
         | 
| 282 | 
            +
                          puts "including the url in your local git config: <local_git_repo>/.git/config"
         | 
| 202 283 | 
             
                        end
         | 
| 203 284 | 
             
                        if dns_success
         | 
| 204 | 
            -
                          puts "Alteration successful. | 
| 285 | 
            +
                          puts "Alteration successful."
         | 
| 205 286 | 
             
                        else
         | 
| 206 | 
            -
                          puts "Alteration successful but at least one of the urls is still updating in DNS. | 
| 287 | 
            +
                          puts "Alteration successful but at least one of the urls is still updating in DNS."
         | 
| 207 288 | 
             
                        end
         | 
| 208 289 | 
             
                        puts ""
         | 
| 209 290 | 
             
                    end
         | 
| @@ -214,4 +295,4 @@ EOF | |
| 214 295 | 
             
            else
         | 
| 215 296 | 
             
                RHC::print_response_err(response)
         | 
| 216 297 | 
             
            end
         | 
| 217 | 
            -
            exit  | 
| 298 | 
            +
            exit 1
         | 
    
        data/bin/rhc-ctl-app
    CHANGED
    
    | @@ -35,12 +35,13 @@ Control an OpenShift express app | |
| 35 35 | 
             
              -a|--app   application   Application name  (alphanumeric) (required)
         | 
| 36 36 | 
             
              -l|--rhlogin rhlogin     Red Hat login (RHN or OpenShift login with OpenShift Express access) (#{rhlogin})
         | 
| 37 37 | 
             
              -p|--password password   RHLogin password  (optional, will prompt)
         | 
| 38 | 
            -
              -c|--command command     (start|stop|force-stop|restart|reload|status|destroy)
         | 
| 38 | 
            +
              -c|--command command     (start|stop|force-stop|restart|reload|status|destroy|add-alias|remove-alias)
         | 
| 39 39 | 
             
              -L|--embedded-list       List supported embedded cartridges
         | 
| 40 40 | 
             
              -e|--embed               (add|remove|stop|start|restart|status|reload)-$cartridge eg: add-mysql-5.1
         | 
| 41 41 | 
             
              -b|--bypass              Bypass warnings
         | 
| 42 42 | 
             
              -d|--debug               Print Debug info
         | 
| 43 43 | 
             
              -h|--help                Show Usage info
         | 
| 44 | 
            +
              --alias                  Specify server alias (when using add/remove-alias)
         | 
| 44 45 | 
             
              --config  path           Path of alternate config file
         | 
| 45 46 | 
             
              --timeout #              Timeout, in seconds, for connection
         | 
| 46 47 |  | 
| @@ -69,6 +70,7 @@ begin | |
| 69 70 | 
             
                    ["--embed",      "-e", GetoptLong::REQUIRED_ARGUMENT],
         | 
| 70 71 | 
             
                    ["--password",   "-p", GetoptLong::REQUIRED_ARGUMENT],
         | 
| 71 72 | 
             
                    ["--app",        "-a", GetoptLong::REQUIRED_ARGUMENT],
         | 
| 73 | 
            +
                    ["--alias",      GetoptLong::REQUIRED_ARGUMENT],
         | 
| 72 74 | 
             
                    ["--config", GetoptLong::REQUIRED_ARGUMENT],
         | 
| 73 75 | 
             
                    ["--command",    "-c", GetoptLong::REQUIRED_ARGUMENT],
         | 
| 74 76 | 
             
                    ["--timeout", GetoptLong::REQUIRED_ARGUMENT]
         | 
| @@ -121,14 +123,14 @@ unless opt["embed"] or opt["command"] | |
| 121 123 | 
             
            end
         | 
| 122 124 |  | 
| 123 125 | 
             
            if opt["command"]
         | 
| 124 | 
            -
              unless opt["command"] =~ /^(start|stop|force-stop|restart|reload|status|destroy)$/
         | 
| 125 | 
            -
                puts "Invalid command '#{opt["command"]}' specified.  Valid commands are (start|stop|force-stop|restart|reload|status|destroy)"
         | 
| 126 | 
            +
              unless opt["command"] =~ /^(start|stop|force-stop|restart|reload|status|destroy|add-alias|remove-alias)$/
         | 
| 127 | 
            +
                puts "Invalid command '#{opt["command"]}' specified.  Valid commands are (start|stop|force-stop|restart|reload|status|destroy|add-alias|remove-alias)"
         | 
| 126 128 | 
             
                p_usage
         | 
| 127 129 | 
             
              end
         | 
| 128 130 | 
             
            elsif opt["embed"]
         | 
| 129 131 | 
             
              action = opt['embed'].split('-')[0]
         | 
| 130 132 | 
             
              unless action =~ /^(add|remove|start|stop|restart|status|reload)$/
         | 
| 131 | 
            -
                puts "Invalid embed action '#{action}' specified.  Valid embed actions are (add|remove|start|stop|restart|status|reload)"
         | 
| 133 | 
            +
                puts "Invalid embed action '#{action}' specified.  Valid embed actions are (add|remove|start|stop|restart|status|reload|add-alias|remove-alias)"
         | 
| 132 134 | 
             
                p_usage
         | 
| 133 135 | 
             
              end
         | 
| 134 136 | 
             
            end
         | 
| @@ -137,23 +139,17 @@ unless opt['rhlogin'] && opt['app'] && (opt['command'] || opt['embed']) | |
| 137 139 | 
             
                p_usage
         | 
| 138 140 | 
             
            end
         | 
| 139 141 |  | 
| 142 | 
            +
            if opt['command'] and (opt['alias'] and !(opt['command'] =~ /-alias$/)) || ((opt['command'] =~ /-alias$/) and ! opt['alias'])
         | 
| 143 | 
            +
                puts "When specifying alias make sure to use -c add-alias or -c remove-alias"
         | 
| 144 | 
            +
                p_usage
         | 
| 145 | 
            +
            end
         | 
| 146 | 
            +
             | 
| 147 | 
            +
             | 
| 140 148 | 
             
            password = opt['password']
         | 
| 141 149 | 
             
            if !password
         | 
| 142 150 | 
             
              password = RHC::get_password
         | 
| 143 151 | 
             
            end
         | 
| 144 152 |  | 
| 145 | 
            -
            user_info = RHC::get_user_info(libra_server, opt['rhlogin'], password, @http, debug, false)
         | 
| 146 | 
            -
            app = user_info['app_info'][opt['app']]
         | 
| 147 | 
            -
            if app
         | 
| 148 | 
            -
              framework = app['framework']
         | 
| 149 | 
            -
            else
         | 
| 150 | 
            -
              puts "Application not found: #{opt['app']}"
         | 
| 151 | 
            -
              exit 101
         | 
| 152 | 
            -
            end
         | 
| 153 | 
            -
            #
         | 
| 154 | 
            -
            # Send Warning
         | 
| 155 | 
            -
            #
         | 
| 156 | 
            -
             | 
| 157 153 | 
             
            opt["command"] = "deconfigure" if opt["command"] == "destroy"
         | 
| 158 154 |  | 
| 159 155 | 
             
            if !opt["bypass"] and opt["command"] == "deconfigure"
         | 
| @@ -176,6 +172,7 @@ WARNING | |
| 176 172 | 
             
                end
         | 
| 177 173 | 
             
            end
         | 
| 178 174 |  | 
| 175 | 
            +
            framework = nil
         | 
| 179 176 | 
             
            if opt['embed']
         | 
| 180 177 | 
             
                action = opt['embed'].split('-')[0]
         | 
| 181 178 | 
             
                # override action if it's in the mapper
         | 
| @@ -187,25 +184,4 @@ else | |
| 187 184 | 
             
                url = URI.parse("https://#{libra_server}/broker/cartridge")
         | 
| 188 185 | 
             
            end
         | 
| 189 186 |  | 
| 190 | 
            -
             | 
| 191 | 
            -
                            :action => action,
         | 
| 192 | 
            -
                            :app_name => "#{opt['app']}",
         | 
| 193 | 
            -
                            :rhlogin => "#{opt['rhlogin']}"
         | 
| 194 | 
            -
                            }
         | 
| 195 | 
            -
            if debug
         | 
| 196 | 
            -
              data['debug'] = "true"
         | 
| 197 | 
            -
            end
         | 
| 198 | 
            -
             | 
| 199 | 
            -
            json_data = RHC::generate_json(data)
         | 
| 200 | 
            -
            puts "Submitting form: #{json_data}" if debug
         | 
| 201 | 
            -
             | 
| 202 | 
            -
            puts "Contacting https://#{libra_server}"
         | 
| 203 | 
            -
             | 
| 204 | 
            -
            response = RHC::http_post(@http, url, json_data, password)
         | 
| 205 | 
            -
             | 
| 206 | 
            -
            if response.code == '200'
         | 
| 207 | 
            -
                json_resp = JSON.parse(response.body)
         | 
| 208 | 
            -
                RHC::print_response_success(json_resp, true)
         | 
| 209 | 
            -
            else
         | 
| 210 | 
            -
                RHC::print_response_err(response)
         | 
| 211 | 
            -
            end
         | 
| 187 | 
            +
            RHC::ctl_app(libra_server, @http, opt['app'], opt['rhlogin'], password, action, opt['embed'], framework, opt['alias'])
         | 
    
        data/bin/rhc-snapshot
    CHANGED
    
    
    
        data/bin/rhc-tail-files
    CHANGED
    
    
    
        data/bin/rhc-user-info
    CHANGED
    
    | @@ -102,7 +102,7 @@ if opt['info'] | |
| 102 102 | 
             
                puts "User Info"
         | 
| 103 103 | 
             
                puts "========="
         | 
| 104 104 | 
             
                puts "Namespace: #{user_info['user_info']['namespace']}"
         | 
| 105 | 
            -
                puts "    UUID: #{user_info['user_info']['uuid']}"
         | 
| 105 | 
            +
                #puts "    UUID: #{user_info['user_info']['uuid']}"
         | 
| 106 106 | 
             
                puts "   RHLogin: #{user_info['user_info']['rhlogin']}"
         | 
| 107 107 | 
             
                puts " ssh_key: #{user_info['user_info']['ssh_key']}"
         | 
| 108 108 | 
             
            end
         | 
| @@ -112,27 +112,34 @@ if opt['apps'] | |
| 112 112 |  | 
| 113 113 | 
             
                puts "Application Info"
         | 
| 114 114 | 
             
                puts "================"
         | 
| 115 | 
            -
                user_info['app_info']. | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 115 | 
            +
                unless user_info['app_info'].empty?
         | 
| 116 | 
            +
                  user_info['app_info'].each do |key, val|
         | 
| 117 | 
            +
                      puts key
         | 
| 118 | 
            +
                      puts "    Framework: #{val['framework']}"
         | 
| 119 | 
            +
                      puts "     Creation: #{val['creation_time']}"
         | 
| 120 | 
            +
                      puts "         UUID: #{val['uuid']}"
         | 
| 121 | 
            +
                      puts "      Git URL: ssh://#{val['uuid']}@#{key}-#{user_info['user_info']['namespace']}.#{user_info['user_info']['rhc_domain']}/~/git/#{key}.git/"
         | 
| 122 | 
            +
                      puts "   Public URL: http://#{key}-#{user_info['user_info']['namespace']}.#{user_info['user_info']['rhc_domain']}/"
         | 
| 123 | 
            +
                      if val['aliases'] && !val['aliases'].empty?
         | 
| 124 | 
            +
                        puts "      Aliases: #{val['aliases'].join(', ')}"
         | 
| 125 | 
            +
                      end
         | 
| 126 | 
            +
                      puts ""
         | 
| 127 | 
            +
                      puts " Embedded: "
         | 
| 128 | 
            +
                      if val['embedded'] && !val['embedded'].empty? 
         | 
| 129 | 
            +
                          val['embedded'].each do |embed_key, embed_val|
         | 
| 130 | 
            +
                              if embed_val.has_key?('info') && !embed_val['info'].empty?
         | 
| 131 | 
            +
                                  puts "      #{embed_key} - #{embed_val['info']}"
         | 
| 132 | 
            +
                              else
         | 
| 133 | 
            +
                                  puts "      #{embed_key}"
         | 
| 134 | 
            +
                              end
         | 
| 135 | 
            +
                          end
         | 
| 136 | 
            +
                      else
         | 
| 137 | 
            +
                          puts "      None"
         | 
| 138 | 
            +
                      end
         | 
| 139 | 
            +
                      puts ""
         | 
| 140 | 
            +
                  end
         | 
| 141 | 
            +
                else
         | 
| 142 | 
            +
                  puts "No applications found.  You can use rhc-create-app to create new applications."
         | 
| 136 143 | 
             
                end
         | 
| 137 144 |  | 
| 138 145 | 
             
            end
         | 
    
        data/lib/rhc-common.rb
    CHANGED
    
    | @@ -42,13 +42,23 @@ module RHC | |
| 42 42 | 
             
              @mydebug = false
         | 
| 43 43 | 
             
              broker_version = "?.?.?"
         | 
| 44 44 | 
             
              api_version = "?.?.?"
         | 
| 45 | 
            +
              
         | 
| 46 | 
            +
              DEBUG_INGORE_KEYS = {
         | 
| 47 | 
            +
                'result' => nil,
         | 
| 48 | 
            +
                'debug' => nil,
         | 
| 49 | 
            +
                'exit_code' => nil,
         | 
| 50 | 
            +
                'messages' => nil,
         | 
| 51 | 
            +
                'data' => nil,
         | 
| 52 | 
            +
                'api' => nil,
         | 
| 53 | 
            +
                'broker' => nil
         | 
| 54 | 
            +
              }
         | 
| 45 55 |  | 
| 46 56 | 
             
              def self.timeout(val)
         | 
| 47 57 | 
             
                if val
         | 
| 48 58 | 
             
                  @mytimeout = val.to_i
         | 
| 49 59 | 
             
                  unless @mytimeout > 0 
         | 
| 50 60 | 
             
                    puts 'Timeout must be specified as a number greater than 0'
         | 
| 51 | 
            -
                    exit  | 
| 61 | 
            +
                    exit 1
         | 
| 52 62 | 
             
                  end
         | 
| 53 63 | 
             
                end
         | 
| 54 64 | 
             
              end
         | 
| @@ -77,11 +87,10 @@ module RHC | |
| 77 87 | 
             
              end
         | 
| 78 88 |  | 
| 79 89 | 
             
              def self.get_cartridges_list(libra_server, net_http, cart_type="standalone", print_result=nil)
         | 
| 80 | 
            -
                puts " | 
| 81 | 
            -
                puts " (please excuse the delay)"
         | 
| 90 | 
            +
                puts "Obtaining list of cartridges (please excuse the delay)..."
         | 
| 82 91 | 
             
                data = {'cart_type' => cart_type}
         | 
| 83 92 | 
             
                if @mydebug
         | 
| 84 | 
            -
                  data[ | 
| 93 | 
            +
                  data[:debug] = true
         | 
| 85 94 | 
             
                end
         | 
| 86 95 | 
             
                print_post_data(data)
         | 
| 87 96 | 
             
                json_data = generate_json(data)
         | 
| @@ -96,7 +105,7 @@ module RHC | |
| 96 105 | 
             
                begin
         | 
| 97 106 | 
             
                  json_resp = JSON.parse(response.body)
         | 
| 98 107 | 
             
                rescue JSON::ParserError
         | 
| 99 | 
            -
                  exit  | 
| 108 | 
            +
                  exit 1
         | 
| 100 109 | 
             
                end
         | 
| 101 110 | 
             
                update_server_api_v(json_resp)
         | 
| 102 111 | 
             
                if print_result
         | 
| @@ -105,7 +114,7 @@ module RHC | |
| 105 114 | 
             
                begin
         | 
| 106 115 | 
             
                  carts = (JSON.parse(json_resp['data']))['carts']
         | 
| 107 116 | 
             
                rescue JSON::ParserError
         | 
| 108 | 
            -
                  exit  | 
| 117 | 
            +
                  exit 1
         | 
| 109 118 | 
             
                end
         | 
| 110 119 | 
             
                carts
         | 
| 111 120 | 
             
              end
         | 
| @@ -173,11 +182,9 @@ module RHC | |
| 173 182 | 
             
              end
         | 
| 174 183 |  | 
| 175 184 | 
             
              def self.get_user_info(libra_server, rhlogin, password, net_http, print_result, not_found_message=nil)
         | 
| 176 | 
            -
             | 
| 177 | 
            -
                puts "Contacting https://#{libra_server}"
         | 
| 178 185 | 
             
                data = {'rhlogin' => rhlogin}
         | 
| 179 186 | 
             
                if @mydebug
         | 
| 180 | 
            -
                  data[ | 
| 187 | 
            +
                  data[:debug] = true
         | 
| 181 188 | 
             
                end
         | 
| 182 189 | 
             
                print_post_data(data)
         | 
| 183 190 | 
             
                json_data = generate_json(data)
         | 
| @@ -199,12 +206,12 @@ module RHC | |
| 199 206 | 
             
                  else
         | 
| 200 207 | 
             
                    print_response_err(response)
         | 
| 201 208 | 
             
                  end
         | 
| 202 | 
            -
                  exit  | 
| 209 | 
            +
                  exit 1
         | 
| 203 210 | 
             
                end
         | 
| 204 211 | 
             
                begin
         | 
| 205 212 | 
             
                  json_resp = JSON.parse(response.body)
         | 
| 206 213 | 
             
                rescue JSON::ParserError
         | 
| 207 | 
            -
                  exit  | 
| 214 | 
            +
                  exit 1
         | 
| 208 215 | 
             
                end
         | 
| 209 216 | 
             
                update_server_api_v(json_resp)
         | 
| 210 217 | 
             
                if print_result
         | 
| @@ -213,7 +220,7 @@ module RHC | |
| 213 220 | 
             
                begin
         | 
| 214 221 | 
             
                  user_info = JSON.parse(json_resp['data'].to_s)
         | 
| 215 222 | 
             
                rescue JSON::ParserError
         | 
| 216 | 
            -
                  exit  | 
| 223 | 
            +
                  exit 1
         | 
| 217 224 | 
             
                end
         | 
| 218 225 | 
             
                user_info
         | 
| 219 226 | 
             
              end
         | 
| @@ -224,6 +231,9 @@ module RHC | |
| 224 231 | 
             
                  print "Password: "
         | 
| 225 232 | 
             
                  system "stty -echo"
         | 
| 226 233 | 
             
                  password = gets.chomp
         | 
| 234 | 
            +
                rescue Interrupt
         | 
| 235 | 
            +
                  puts "\n"
         | 
| 236 | 
            +
                  exit 1
         | 
| 227 237 | 
             
                ensure
         | 
| 228 238 | 
             
                  system "stty echo"
         | 
| 229 239 | 
             
                end
         | 
| @@ -234,6 +244,7 @@ module RHC | |
| 234 244 | 
             
              def self.http_post(http, url, json_data, password)
         | 
| 235 245 | 
             
                req = http::Post.new(url.path)
         | 
| 236 246 |  | 
| 247 | 
            +
                puts "Contacting #{url.scheme}://#{url.host}" if @mydebug
         | 
| 237 248 | 
             
                req.set_form_data({'json_data' => json_data, 'password' => password})
         | 
| 238 249 | 
             
                http = http.new(url.host, url.port)
         | 
| 239 250 | 
             
                http.open_timeout = @mytimeout
         | 
| @@ -263,14 +274,14 @@ module RHC | |
| 263 274 | 
             
                if (!@mydebug)
         | 
| 264 275 | 
             
                  puts "Re-run with -d for more information."
         | 
| 265 276 | 
             
                end
         | 
| 266 | 
            -
                exit_code =  | 
| 277 | 
            +
                exit_code = 1
         | 
| 267 278 | 
             
                if response.content_type == 'application/json'
         | 
| 268 279 | 
             
                  puts "JSON response:"
         | 
| 269 280 | 
             
                  begin
         | 
| 270 281 | 
             
                    json_resp = JSON.parse(response.body)
         | 
| 271 282 | 
             
                    exit_code = print_json_body(json_resp)
         | 
| 272 283 | 
             
                  rescue JSON::ParserError
         | 
| 273 | 
            -
                    exit_code =  | 
| 284 | 
            +
                    exit_code = 1
         | 
| 274 285 | 
             
                  end
         | 
| 275 286 | 
             
                elsif @mydebug
         | 
| 276 287 | 
             
                  puts "HTTP response from server is #{response.body}"
         | 
| @@ -288,18 +299,18 @@ module RHC | |
| 288 299 | 
             
                end
         | 
| 289 300 | 
             
              end
         | 
| 290 301 |  | 
| 291 | 
            -
              def self.print_response_success(json_resp,  | 
| 302 | 
            +
              def self.print_response_success(json_resp, print_result=false)
         | 
| 292 303 | 
             
                if @mydebug
         | 
| 293 304 | 
             
                  puts "Response from server:"
         | 
| 294 | 
            -
                  print_json_body(json_resp)
         | 
| 295 | 
            -
                elsif  | 
| 305 | 
            +
                  print_json_body(json_resp, print_result)
         | 
| 306 | 
            +
                elsif print_result
         | 
| 296 307 | 
             
                  print_json_body(json_resp)
         | 
| 297 308 | 
             
                else
         | 
| 298 309 | 
             
                  print_response_messages(json_resp)
         | 
| 299 310 | 
             
                end
         | 
| 300 311 | 
             
              end
         | 
| 301 312 |  | 
| 302 | 
            -
              def self.print_json_body(json_resp)
         | 
| 313 | 
            +
              def self.print_json_body(json_resp, print_result=true)
         | 
| 303 314 | 
             
                print_response_messages(json_resp)
         | 
| 304 315 | 
             
                exit_code = json_resp['exit_code']
         | 
| 305 316 | 
             
                if @mydebug
         | 
| @@ -311,20 +322,20 @@ module RHC | |
| 311 322 | 
             
                    puts "Exit Code: #{exit_code}"
         | 
| 312 323 | 
             
                    if (json_resp.length > 3)
         | 
| 313 324 | 
             
                      json_resp.each do |k,v|
         | 
| 314 | 
            -
                        if (k | 
| 325 | 
            +
                        if !DEBUG_INGORE_KEYS.has_key?(k)
         | 
| 315 326 | 
             
                          puts "#{k.to_s}: #{v.to_s}"
         | 
| 316 327 | 
             
                        end
         | 
| 317 328 | 
             
                      end
         | 
| 318 329 | 
             
                    end
         | 
| 319 330 | 
             
                  end
         | 
| 331 | 
            +
                  if json_resp['api']
         | 
| 332 | 
            +
                    puts "API version:    #{json_resp['api']}"
         | 
| 333 | 
            +
                  end
         | 
| 334 | 
            +
                  if json_resp['broker']
         | 
| 335 | 
            +
                    puts "Broker version: #{json_resp['broker']}"
         | 
| 336 | 
            +
                  end
         | 
| 320 337 | 
             
                end
         | 
| 321 | 
            -
                if json_resp[' | 
| 322 | 
            -
                  puts "API version:    #{json_resp['api']}"
         | 
| 323 | 
            -
                end
         | 
| 324 | 
            -
                if json_resp['broker']
         | 
| 325 | 
            -
                  puts "Broker version: #{json_resp['broker']}"
         | 
| 326 | 
            -
                end
         | 
| 327 | 
            -
                if json_resp['result']
         | 
| 338 | 
            +
                if print_result && json_resp['result']
         | 
| 328 339 | 
             
                  puts ''
         | 
| 329 340 | 
             
                  puts 'RESULT:'
         | 
| 330 341 | 
             
                  puts json_resp['result']
         | 
| @@ -341,6 +352,270 @@ module RHC | |
| 341 352 | 
             
                  resp = dns.getresources(host, Resolv::DNS::Resource::IN::A)
         | 
| 342 353 | 
             
                  return resp.any?
         | 
| 343 354 | 
             
              end
         | 
| 355 | 
            +
              
         | 
| 356 | 
            +
              def self.create_app(libra_server, net_http, user_info, app_name, app_type, rhlogin, password, repo_dir=nil, no_dns=false, no_git=false, no_git_message=nil)
         | 
| 357 | 
            +
                puts "Attempting to create remote application space: #{app_name}"
         | 
| 358 | 
            +
                
         | 
| 359 | 
            +
                data = {:cartridge => app_type,
         | 
| 360 | 
            +
                        :action => 'configure',
         | 
| 361 | 
            +
                        :app_name => app_name,
         | 
| 362 | 
            +
                        :rhlogin => rhlogin
         | 
| 363 | 
            +
                       }
         | 
| 364 | 
            +
                if @mydebug
         | 
| 365 | 
            +
                  data[:debug] = true
         | 
| 366 | 
            +
                end    
         | 
| 367 | 
            +
                json_data = generate_json(data)
         | 
| 368 | 
            +
                
         | 
| 369 | 
            +
                url = URI.parse("https://#{libra_server}/broker/cartridge")
         | 
| 370 | 
            +
                response = http_post(net_http, url, json_data, password)
         | 
| 371 | 
            +
                
         | 
| 372 | 
            +
                if response.code == '200'
         | 
| 373 | 
            +
                    json_resp = JSON.parse(response.body)
         | 
| 374 | 
            +
                    print_response_success(json_resp)
         | 
| 375 | 
            +
                    json_data = JSON.parse(json_resp['data'])
         | 
| 376 | 
            +
                    health_check_path = json_data['health_check_path']
         | 
| 377 | 
            +
                    app_uuid = json_data['uuid']
         | 
| 378 | 
            +
                    result = json_resp['result']
         | 
| 379 | 
            +
                    puts "DEBUG: '#{app_name}' creation returned success." if @mydebug
         | 
| 380 | 
            +
                else
         | 
| 381 | 
            +
                    print_response_err(response)
         | 
| 382 | 
            +
                end
         | 
| 383 | 
            +
             | 
| 384 | 
            +
                #
         | 
| 385 | 
            +
                # At this point, we need to register a handler to guarantee app
         | 
| 386 | 
            +
                # cleanup on any exceptions or calls to exit
         | 
| 387 | 
            +
                #
         | 
| 388 | 
            +
                at_exit do
         | 
| 389 | 
            +
                  unless $!.nil? || $!.is_a?(SystemExit) && $!.success?
         | 
| 390 | 
            +
                    puts "Cleaning up application"
         | 
| 391 | 
            +
                    destroy_app(libra_server, net_http, app_name, rhlogin, password)
         | 
| 392 | 
            +
                  end
         | 
| 393 | 
            +
                end
         | 
| 394 | 
            +
                
         | 
| 395 | 
            +
                namespace = user_info['user_info']['namespace']
         | 
| 396 | 
            +
                rhc_domain = user_info['user_info']['rhc_domain']
         | 
| 397 | 
            +
             | 
| 398 | 
            +
                fqdn = "#{app_name}-#{namespace}.#{rhc_domain}"
         | 
| 399 | 
            +
                
         | 
| 400 | 
            +
                loop = 0
         | 
| 401 | 
            +
                #
         | 
| 402 | 
            +
                # Confirm that the host exists in DNS
         | 
| 403 | 
            +
                #
         | 
| 404 | 
            +
                unless no_dns
         | 
| 405 | 
            +
                  puts "Now your new domain name is being propagated worldwide (this might take a minute)..."
         | 
| 406 | 
            +
              
         | 
| 407 | 
            +
                  # Allow DNS to propogate
         | 
| 408 | 
            +
                  sleep 15
         | 
| 409 | 
            +
              
         | 
| 410 | 
            +
                  # Now start checking for DNS
         | 
| 411 | 
            +
                  sleep_time = 2
         | 
| 412 | 
            +
                  while loop < MAX_RETRIES && !hostexist?(fqdn)
         | 
| 413 | 
            +
                      sleep sleep_time
         | 
| 414 | 
            +
                      loop+=1
         | 
| 415 | 
            +
                      puts "  retry # #{loop} - Waiting for DNS: #{fqdn}"
         | 
| 416 | 
            +
                      sleep_time = delay(sleep_time)
         | 
| 417 | 
            +
                  end
         | 
| 418 | 
            +
                end
         | 
| 419 | 
            +
                
         | 
| 420 | 
            +
                # If the hostname couldn't be resolved, print out the git URL
         | 
| 421 | 
            +
                # and exit cleanly.  This will help solve issues where DNS times
         | 
| 422 | 
            +
                # out in APAC, etc on resolution.
         | 
| 423 | 
            +
                if loop >= MAX_RETRIES
         | 
| 424 | 
            +
                    puts <<WARNING
         | 
| 425 | 
            +
             | 
| 426 | 
            +
            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
         | 
| 427 | 
            +
            WARNING: We weren't able to lookup your hostname (#{fqdn}) 
         | 
| 428 | 
            +
            in a reasonable amount of time.  This can happen periodically and will just
         | 
| 429 | 
            +
            take an extra minute or two to propagate depending on where you are in the
         | 
| 430 | 
            +
            world.  Once you are able to access your application in a browser, you can then
         | 
| 431 | 
            +
            clone your git repository.
         | 
| 432 | 
            +
             | 
| 433 | 
            +
              Application URL: http://#{fqdn}
         | 
| 434 | 
            +
             | 
| 435 | 
            +
              Git Repository URL: #{git_url}
         | 
| 436 | 
            +
             | 
| 437 | 
            +
              Git Clone command: 
         | 
| 438 | 
            +
                git clone #{git_url} #{repo_dir}
         | 
| 439 | 
            +
             | 
| 440 | 
            +
            If you can't get your application '#{app_name}' running in the browser, you can
         | 
| 441 | 
            +
            also try destroying and recreating the application as well using:
         | 
| 442 | 
            +
             | 
| 443 | 
            +
              rhc-ctl-app -c destroy -a #{app_name} -l #{rhlogin}
         | 
| 444 | 
            +
             | 
| 445 | 
            +
            If this doesn't work for you, let us know in the forums or in IRC and we'll
         | 
| 446 | 
            +
            make sure to get you up and running.
         | 
| 447 | 
            +
             | 
| 448 | 
            +
              Forums: https://www.redhat.com/openshift/forums/express
         | 
| 449 | 
            +
             | 
| 450 | 
            +
              IRC: #openshift (on Freenode)
         | 
| 451 | 
            +
            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
         | 
| 452 | 
            +
             | 
| 453 | 
            +
            WARNING
         | 
| 454 | 
            +
                    exit 0
         | 
| 455 | 
            +
                end
         | 
| 456 | 
            +
                
         | 
| 457 | 
            +
                #
         | 
| 458 | 
            +
                # Pull new repo locally
         | 
| 459 | 
            +
                #
         | 
| 460 | 
            +
                
         | 
| 461 | 
            +
                git_url = "ssh://#{app_uuid}@#{app_name}-#{namespace}.#{rhc_domain}/~/git/#{app_name}.git/"
         | 
| 462 | 
            +
                
         | 
| 463 | 
            +
                unless no_git
         | 
| 464 | 
            +
                    puts "Pulling new repo down"
         | 
| 465 | 
            +
                
         | 
| 466 | 
            +
                    puts "git clone --quiet #{git_url} #{repo_dir}" if @mydebug
         | 
| 467 | 
            +
                    quiet = (@mydebug ? ' ' : '--quiet ')
         | 
| 468 | 
            +
                    git_clone = %x<git clone #{quiet} #{git_url} #{repo_dir}>
         | 
| 469 | 
            +
                    if $?.exitstatus != 0
         | 
| 470 | 
            +
                        puts "Error in git clone"
         | 
| 471 | 
            +
                        puts git_clone
         | 
| 472 | 
            +
                        exit 216
         | 
| 473 | 
            +
                    end
         | 
| 474 | 
            +
                else
         | 
| 475 | 
            +
                  if no_git_message
         | 
| 476 | 
            +
                    puts no_git_message
         | 
| 477 | 
            +
                  else         
         | 
| 478 | 
            +
                    puts <<IMPORTANT
         | 
| 479 | 
            +
             | 
| 480 | 
            +
            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
         | 
| 481 | 
            +
            IMPORTANT: Since the -n flag was specified, no local repo has been created.
         | 
| 482 | 
            +
            This means you can't make changes to your published application until after
         | 
| 483 | 
            +
            you clone the repo yourself.  See the git url below for more information.
         | 
| 484 | 
            +
            !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
         | 
| 485 | 
            +
             | 
| 486 | 
            +
            IMPORTANT
         | 
| 487 | 
            +
                  end
         | 
| 488 | 
            +
                end
         | 
| 489 | 
            +
                
         | 
| 490 | 
            +
                #
         | 
| 491 | 
            +
                # At this point, we need to register a handler to guarantee git
         | 
| 492 | 
            +
                # repo cleanup on any exceptions or calls to exit
         | 
| 493 | 
            +
                #
         | 
| 494 | 
            +
                unless no_git
         | 
| 495 | 
            +
                  at_exit do
         | 
| 496 | 
            +
                      unless $!.nil? || $!.is_a?(SystemExit) && $!.success?
         | 
| 497 | 
            +
                          puts "Cleaning up git repo"
         | 
| 498 | 
            +
                          FileUtils.rm_rf repo_dir
         | 
| 499 | 
            +
                      end
         | 
| 500 | 
            +
                  end
         | 
| 501 | 
            +
                end
         | 
| 502 | 
            +
                return {:app_name => app_name,
         | 
| 503 | 
            +
                        :fqdn => fqdn,
         | 
| 504 | 
            +
                        :health_check_path => health_check_path,
         | 
| 505 | 
            +
                        :git_url => git_url,
         | 
| 506 | 
            +
                        :repo_dir => repo_dir,
         | 
| 507 | 
            +
                        :result => result
         | 
| 508 | 
            +
                       }
         | 
| 509 | 
            +
              end
         | 
| 510 | 
            +
             | 
| 511 | 
            +
              def self.check_app_available(net_http, app_name, fqdn, health_check_path, result, git_url, repo_dir, no_git)
         | 
| 512 | 
            +
                  #
         | 
| 513 | 
            +
                  # Test several times, doubling sleep time between attempts.
         | 
| 514 | 
            +
                  #
         | 
| 515 | 
            +
                  sleep_time = 2
         | 
| 516 | 
            +
                  attempt = 0
         | 
| 517 | 
            +
                  puts "Confirming application '#{app_name}' is available"
         | 
| 518 | 
            +
                  while attempt < MAX_RETRIES
         | 
| 519 | 
            +
                      attempt += 1
         | 
| 520 | 
            +
                      puts "  Attempt # #{attempt}"
         | 
| 521 | 
            +
                      url = URI.parse("http://#{fqdn}/#{health_check_path}")
         | 
| 522 | 
            +
                      begin
         | 
| 523 | 
            +
                        response = net_http.get_response(url)
         | 
| 524 | 
            +
                      rescue Exception => e
         | 
| 525 | 
            +
                        response = nil
         | 
| 526 | 
            +
                      end
         | 
| 527 | 
            +
                      if !response.nil? && response.code == "200" && response.body[0,1] == "1"
         | 
| 528 | 
            +
                        puts <<LOOKSGOOD
         | 
| 529 | 
            +
             | 
| 530 | 
            +
            Success!  Your application '#{app_name}' is now published here:
         | 
| 531 | 
            +
             | 
| 532 | 
            +
                  http://#{fqdn}/
         | 
| 533 | 
            +
             | 
| 534 | 
            +
            The remote repository is located here:
         | 
| 535 | 
            +
             | 
| 536 | 
            +
                #{git_url}
         | 
| 537 | 
            +
             | 
| 538 | 
            +
            LOOKSGOOD
         | 
| 539 | 
            +
                        unless no_git
         | 
| 540 | 
            +
                  puts <<LOOKSGOOD
         | 
| 541 | 
            +
            To make changes to '#{app_name}', commit to #{repo_dir}/.
         | 
| 542 | 
            +
            LOOKSGOOD
         | 
| 543 | 
            +
                        else
         | 
| 544 | 
            +
                    puts <<LOOKSGOOD
         | 
| 545 | 
            +
            To make changes to '#{app_name}', you must first clone it with:
         | 
| 546 | 
            +
             | 
| 547 | 
            +
                git clone #{git_url}
         | 
| 548 | 
            +
             | 
| 549 | 
            +
            LOOKSGOOD
         | 
| 550 | 
            +
                    puts <<LOOKSGOOD
         | 
| 551 | 
            +
            Then run 'git push' to update your OpenShift Express space.
         | 
| 552 | 
            +
             | 
| 553 | 
            +
            LOOKSGOOD
         | 
| 554 | 
            +
                        end
         | 
| 555 | 
            +
                        if result && !result.empty?
         | 
| 556 | 
            +
                    
         | 
| 557 | 
            +
                          puts <<LOOKSGOOD
         | 
| 558 | 
            +
             | 
| 559 | 
            +
            #{result}
         | 
| 560 | 
            +
                          
         | 
| 561 | 
            +
            LOOKSGOOD
         | 
| 562 | 
            +
                        end
         | 
| 563 | 
            +
                        return true
         | 
| 564 | 
            +
                      end
         | 
| 565 | 
            +
                      if !response.nil? && @mydebug
         | 
| 566 | 
            +
                        puts "Server responded with #{response.code}"
         | 
| 567 | 
            +
                        puts response.body unless response.code == '503'
         | 
| 568 | 
            +
                      end
         | 
| 569 | 
            +
                      puts
         | 
| 570 | 
            +
                      puts "    sleeping #{sleep_time} seconds"
         | 
| 571 | 
            +
                      sleep sleep_time
         | 
| 572 | 
            +
                      sleep_time = delay(sleep_time)
         | 
| 573 | 
            +
                  end
         | 
| 574 | 
            +
                  return false
         | 
| 575 | 
            +
              end
         | 
| 576 | 
            +
              
         | 
| 577 | 
            +
              def self.destroy_app(libra_server, net_http, app_name, rhlogin, password)
         | 
| 578 | 
            +
                json_data = generate_json(
         | 
| 579 | 
            +
                                   {:action => 'deconfigure',
         | 
| 580 | 
            +
                                    :app_name => app_name,
         | 
| 581 | 
            +
                                    :rhlogin => rhlogin
         | 
| 582 | 
            +
                                    })
         | 
| 583 | 
            +
                url = URI.parse("https://#{libra_server}/broker/cartridge")
         | 
| 584 | 
            +
                http_post(net_http, url, json_data, password)
         | 
| 585 | 
            +
              end
         | 
| 586 | 
            +
              
         | 
| 587 | 
            +
              def self.ctl_app(libra_server, net_http, app_name, rhlogin, password, action, embedded=false, framework=nil, server_alias=nil)
         | 
| 588 | 
            +
                data = {:action => action,
         | 
| 589 | 
            +
                        :app_name => app_name,
         | 
| 590 | 
            +
                        :rhlogin => rhlogin
         | 
| 591 | 
            +
                       }
         | 
| 592 | 
            +
                
         | 
| 593 | 
            +
                data[:server_alias] = server_alias if server_alias
         | 
| 594 | 
            +
                if framework
         | 
| 595 | 
            +
                  data[:cartridge] = framework
         | 
| 596 | 
            +
                end
         | 
| 597 | 
            +
                
         | 
| 598 | 
            +
                if @mydebug
         | 
| 599 | 
            +
                  data[:debug] = true
         | 
| 600 | 
            +
                end
         | 
| 601 | 
            +
                
         | 
| 602 | 
            +
                json_data = generate_json(data)
         | 
| 603 | 
            +
             | 
| 604 | 
            +
                url = nil
         | 
| 605 | 
            +
                if embedded
         | 
| 606 | 
            +
                  url = URI.parse("https://#{libra_server}/broker/embed_cartridge")
         | 
| 607 | 
            +
                else
         | 
| 608 | 
            +
                  url = URI.parse("https://#{libra_server}/broker/cartridge")
         | 
| 609 | 
            +
                end
         | 
| 610 | 
            +
                response = http_post(net_http, url, json_data, password)
         | 
| 611 | 
            +
                
         | 
| 612 | 
            +
                if response.code == '200'
         | 
| 613 | 
            +
                    json_resp = JSON.parse(response.body)
         | 
| 614 | 
            +
                    print_response_success(json_resp, true)
         | 
| 615 | 
            +
                else
         | 
| 616 | 
            +
                    print_response_err(response)
         | 
| 617 | 
            +
                end
         | 
| 618 | 
            +
              end
         | 
| 344 619 |  | 
| 345 620 | 
             
            end
         | 
| 346 621 |  |