diff options
Diffstat (limited to 'openstack_dashboard/static/dashboard/launch-instance/keypair/keypair.js')
-rw-r--r-- | openstack_dashboard/static/dashboard/launch-instance/keypair/keypair.js | 321 |
1 files changed, 267 insertions, 54 deletions
diff --git a/openstack_dashboard/static/dashboard/launch-instance/keypair/keypair.js b/openstack_dashboard/static/dashboard/launch-instance/keypair/keypair.js index a10849867..ca388eb6d 100644 --- a/openstack_dashboard/static/dashboard/launch-instance/keypair/keypair.js +++ b/openstack_dashboard/static/dashboard/launch-instance/keypair/keypair.js @@ -3,7 +3,7 @@ var module = angular.module('hz.dashboard.launch-instance'); - /** + /** * @ngdoc controller * @name hz.dashboard.launch-instance.LaunchInstanceKeypairCtrl * @description @@ -11,70 +11,283 @@ */ module.controller('LaunchInstanceKeypairCtrl', [ 'launchInstanceModel', - function (launchInstanceModel) { - var ctrl = this; - - ctrl.label = { - title: gettext('Key Pair'), - subtitle: gettext('Select a key pair.'), - name: gettext('Name'), - description: gettext('Description') - }; - - ctrl.tableLabels = { - fingerprint: gettext('Fingerprint'), - public_key: gettext('Public Key') - }; - - ctrl.tableData = { - available: launchInstanceModel.keypairs, - allocated: launchInstanceModel.newInstanceSpec.key_pair, - displayedAvailable: [], - displayedAllocated: [] - }; - - ctrl.tableDetails = - '/static/dashboard/launch-instance/keypair/keypair-details.html'; - - ctrl.tableHelp = { - noneAllocText: gettext('Select a key pair from the available key pairs below.') - }; - - ctrl.tableLimits = { - maxAllocation: 1 - }; - - } + '$modal', + 'dashboardBasePath', + LaunchInstanceKeypairCtrl ]); + function LaunchInstanceKeypairCtrl(launchInstanceModel, + $modal, + dashboardBasePath) { + var ctrl = this; - /** + ctrl.label = { + title: gettext('Key Pair'), + subtitle: gettext('A key pair allows you to SSH into your newly created instance. You may select an existing key pair, import a key pair, or generate a new key pair.'), + name: gettext('Name'), + description: gettext('Description'), + createKeyPair: gettext('Create Key Pair'), + importKeyPair: gettext('Import Key Pair') + }; + + ctrl.tableLabels = { + fingerprint: gettext('Fingerprint'), + public_key: gettext('Public Key') + }; + + ctrl.tableData = { + available: launchInstanceModel.keypairs, + allocated: launchInstanceModel.newInstanceSpec.key_pair, + displayedAvailable: [], + displayedAllocated: [] + }; + + ctrl.tableDetails = dashboardBasePath + 'launch-instance/keypair/keypair-details.html'; + + ctrl.tableHelp = { + noneAllocText: gettext('Select a key pair from the available key pairs below.') + }; + + ctrl.tableLimits = { + maxAllocation: 1 + }; + + // Allocate the new key pair (after import or create) + // if nothing is already allocated + ctrl.allocateNewKeyPair = function(newKeyPair) { + if (ctrl.tableData.allocated.length === 0) { + ctrl.tableData.allocated.push(newKeyPair); + } + }; + + ctrl.createKeyPair = function () { + $modal.open({ + templateUrl: dashboardBasePath + 'launch-instance/keypair/create-keypair.html', + controller: 'LaunchInstanceCreateKeyPairCtrl as ctrl', + windowClass: 'modal-dialog-wizard', + }).result.then( + function (result) { + // Nova doesn't set the id in the response so we will use + // the name as the id. Name is the key used in URLs, etc. + result.id = result.name; + + $modal.open({ + templateUrl: dashboardBasePath + 'launch-instance/keypair/new-keypair.html', + controller: 'LaunchInstanceNewKeyPairCtrl as ctrl', + windowClass: 'modal-dialog-wizard', + resolve: { + keypair: function () { + return result; + } + } + }); + + launchInstanceModel.keypairs.push(result); + ctrl.allocateNewKeyPair(result); + } + ); + }; + + ctrl.importKeyPair = function () { + $modal.open({ + templateUrl: dashboardBasePath + 'launch-instance/keypair/import-keypair.html', + controller: 'LaunchInstanceImportKeyPairCtrl as ctrl', + windowClass: 'modal-dialog-wizard' + }).result.then( + function (result) { + // Nova doesn't set the id in the response so we will use + // the name as the id. Name is the key used in URLs, etc. + result.id = result.name; + + launchInstanceModel.keypairs.push(result); + ctrl.allocateNewKeyPair(result); + } + ); + }; + } + + /** * @ngdoc controller * @name hz.dashboard.launch-instance.LaunchInstanceKeypairHelpCtrl * @description - * Provide help for selection of security groups and key pairs. + * Provide help for selection of a key pair. */ - module.controller('LaunchInstanceKeypairHelpCtrl', [function () { - var ctrl = this; + module.controller('LaunchInstanceKeypairHelpCtrl', [ + LaunchInstanceKeypairHelpCtrl + ]); - ctrl.title = gettext('Key Pair Help'); + function LaunchInstanceKeypairHelpCtrl() { + var ctrl = this; - var genKeyPairsMap = { genKeyPairCmd: 'ssh-keygen' }; - var genKeyPairsText = gettext('There are two ways to generate a key pair. From a Linux system, generate the key pair with the <samp>%(genKeyPairCmd)s</samp> command:'); + ctrl.title = gettext('Key Pair Help'); - var keyPathsMap = { privateKeyPath: 'cloud.key', publicKeyPath: 'cloud.key.pub' }; - var keyPathText = gettext('This command generates a pair of keys: a private key (%(privateKeyPath)s) and a public key (%(publicKeyPath)s).'); + var genKeyPairsMap = {genKeyPairCmd: 'ssh-keygen'}; + var genKeyPairsText = gettext('There are two ways to generate a key pair. From a Linux system, generate the key pair with the <samp>%(genKeyPairCmd)s</samp> command:'); - var windowsCmdMap = { authorizeKeysFile: '.ssh/authorized_keys' }; - var windowsCmd = gettext('From a Windows system, you can use PuTTYGen to create private/public keys. Use the PuTTY Key Generator to create and save the keys, then copy the public key in the red highlighted box to your <samp>%(authorizeKeysFile)s</samp> file.'); + var keyPathsMap = { + privateKeyPath: 'cloud.key', + publicKeyPath: 'cloud.key.pub' + }; + var keyPathText = gettext('This command generates a pair of keys: a private key (%(privateKeyPath)s) and a public key (%(publicKeyPath)s).'); - ctrl.paragraphs = [ - gettext('The key pair allows you to SSH into the instance.'), - interpolate(genKeyPairsText, genKeyPairsMap, true), - '<samp>ssh-keygen -t rsa -f cloud.key</samp>', - interpolate(keyPathText, keyPathsMap, true), - interpolate(windowsCmd, windowsCmdMap, true) - ]; - } + var windowsCmdMap = {authorizeKeysFile: '.ssh/authorized_keys'}; + var windowsCmd = gettext('From a Windows system, you can use PuTTYGen to create private/public keys. Use the PuTTY Key Generator to create and save the keys, then copy the public key in the red highlighted box to your <samp>%(authorizeKeysFile)s</samp> file.'); + + ctrl.paragraphs = [ + gettext('The key pair allows you to SSH into the instance.'), + interpolate(genKeyPairsText, genKeyPairsMap, true), + '<samp>ssh-keygen -t rsa -f cloud.key</samp>', + interpolate(keyPathText, keyPathsMap, true), + interpolate(windowsCmd, windowsCmdMap, true) + ]; + } + + /** + * @ngdoc controller + * @name hz.dashboard.launch-instance.LaunchInstanceCreateKeyPairCtrl + * @description + * Provide a dialog for creation of a new key pair. + */ + module.controller('LaunchInstanceCreateKeyPairCtrl', [ + '$modalInstance', + 'novaAPI', + LaunchInstanceCreateKeyPairCtrl ]); + + function LaunchInstanceCreateKeyPairCtrl($modalInstance, novaAPI) { + var ctrl = this; + + ctrl.labels = { + wizardTitle: gettext('Launch Instance'), + title: gettext('Create Key Pair'), + help: gettext('Key Pairs are how you login to your instance after it is launched. Choose a key pair name you will recognize.'), + keyPairName: gettext('Key Pair Name'), + cancel: gettext('Cancel'), + ok: gettext('Create Key Pair'), + required: gettext('Required') + }; + + ctrl.model = { name: '' }; + ctrl.submit = function () { + novaAPI.createKeypair(ctrl.model) + .success(function (data) { + $modalInstance.close(data); + + var successMsg = gettext('Successfully created key pair %(name)s'); + horizon.alert('success', interpolate(successMsg, { name: data.name }, true)); + }); + }; + ctrl.cancel = function () { + $modalInstance.dismiss(); + }; + } + + /** + * @ngdoc controller + * @name hz.dashboard.launch-instance.LaunchInstanceNewKeyPairCtrl + * @description + * Provide a dialog for display of the information about a new + * public/private key pair. + */ + module.controller('LaunchInstanceNewKeyPairCtrl', [ + '$modalInstance', + 'keypair', + LaunchInstanceNewKeyPairCtrl + ]); + + function LaunchInstanceNewKeyPairCtrl($modalInstance, keypair) { + var ctrl = this; + + ctrl.labels = { + wizardTitle: gettext('Launch Instance'), + title: gettext('Private Key'), + help: gettext('This is your new key pair. Copy this information and keep it secure.'), + keyPairName: gettext('Key Pair Name'), + fingerprint: gettext('Fingerprint'), + privateKey: gettext('Private Key'), + publicKey: gettext('Public Key'), + ok: gettext('OK') + }; + + ctrl.keypair = keypair; + ctrl.ok = function () { + $modalInstance.dismiss(); + }; + } + + /** + * @ngdoc controller + * @name hz.dashboard.launch-instance.LaunchInstanceImportKeyPairCtrl + * @description + * Provide a dialog for import of an existing ssh public key. + */ + module.controller('LaunchInstanceImportKeyPairCtrl', [ + '$modalInstance', + 'novaAPI', + LaunchInstanceImportKeyPairCtrl + ]); + + function LaunchInstanceImportKeyPairCtrl($modalInstance, novaAPI) { + var ctrl = this; + + ctrl.labels = { + wizardTitle: gettext('Launch Instance'), + title: gettext('Import Key Pair'), + help: gettext('Key Pairs are how you login to your instance after it is launched. Choose a key pair name you will recognize and paste your SSH public key into the space provided.'), + keyPairName: gettext('Key Pair Name'), + publicKey: gettext('Public Key'), + cancel: gettext('Cancel'), + ok: gettext('Import Key Pair'), + required: gettext('Required') + }; + + ctrl.model = { name: '', public_key: '' }; + ctrl.submit = function () { + novaAPI.createKeypair(ctrl.model) + .success(function (data) { + $modalInstance.close(data); + + var successMsg = gettext('Successfully imported key pair %(name)s'); + horizon.alert('success', interpolate(successMsg, { name: data.name }, true)); + }); + }; + ctrl.cancel = function () { + $modalInstance.dismiss(); + }; + } + + /** + * @ngdoc controller + * @name LaunchInstanceImportKeyPairHelpCtrl + * @description + * The `LaunchInstanceImportKeyPairHelpCtrl` controller provides help text + * for the import key pair function within the Launch Instance Wizard. + * + */ + module.controller('LaunchInstanceImportKeyPairHelpCtrl', [ + LaunchInstanceImportKeyPairHelpCtrl + ]); + + function LaunchInstanceImportKeyPairHelpCtrl() { + var ctrl = this; + + ctrl.title = gettext('Import Key Pair Help'); + + var genKeyPairsMap = { genKeyPairCmd: 'ssh-keygen' }; + var genKeyPairsText = gettext('There are two ways to generate a key pair. From a Linux system, generate the key pair with the <samp>%(genKeyPairCmd)s</samp> command:'); + + var keyPathsMap = { privateKeyPath: 'cloud.key', publicKeyPath: 'cloud.key.pub' }; + var keyPathText = gettext('This command generates a pair of keys: a private key (%(privateKeyPath)s) and a public key (%(publicKeyPath)s).'); + + var windowsCmdMap = { authorizeKeysFile: '.ssh/authorized_keys' }; + var windowsCmd = gettext('From a Windows system, you can use PuTTYGen to create private/public keys. Use the PuTTY Key Generator to create and save the keys, then copy the public key in the red highlighted box to your <samp>%(authorizeKeysFile)s</samp> file.'); + + ctrl.paragraphs = [ + interpolate(genKeyPairsText, genKeyPairsMap, true), + '<samp>ssh-keygen -t rsa -f cloud.key</samp>', + interpolate(keyPathText, keyPathsMap, true), + interpolate(windowsCmd, windowsCmdMap, true) + ]; + } + })(); |