From f58d1b1f138b79eff786eda597d733876cd8238d Mon Sep 17 00:00:00 2001 From: Fletcher Nichol Date: Fri, 12 Sep 2014 16:24:09 -0600 Subject: [PATCH] Validate that node_name & client_key are set when running plugins. This gives the user a hint that their local knife.rb is not currently set up enough (or correctly) and where to go for help (the project website). Closes #10 Closes #9 --- lib/chef/knife/server_bootstrap_base.rb | 21 +++++++++++++++++++ lib/chef/knife/server_bootstrap_ec2.rb | 4 +++- lib/chef/knife/server_bootstrap_linode.rb | 4 +++- lib/chef/knife/server_bootstrap_openstack.rb | 4 +++- lib/chef/knife/server_bootstrap_standalone.rb | 4 +++- spec/chef/knife/server_bootstrap_ec2_spec.rb | 12 +++++++++++ .../knife/server_bootstrap_linode_spec.rb | 12 +++++++++++ .../knife/server_bootstrap_openstack_spec.rb | 6 ++++++ .../knife/server_bootstrap_standalone_spec.rb | 12 +++++++++++ 9 files changed, 75 insertions(+), 4 deletions(-) diff --git a/lib/chef/knife/server_bootstrap_base.rb b/lib/chef/knife/server_bootstrap_base.rb index 9430ab1..849cb1f 100644 --- a/lib/chef/knife/server_bootstrap_base.rb +++ b/lib/chef/knife/server_bootstrap_base.rb @@ -95,8 +95,29 @@ def self.included(included_class) # rubocop:disable Metrics/MethodLength end end + def run + validate! + end + private + def validate! + knife_fail = "You did not set {{KEY}} in your knife.rb, which is a " \ + "required setting. Please generate an initial knife.rb or read " \ + "the setup instructions at http://fnichol.github.io/knife-server/" + + # rubocop:disable Style/DeprecatedHashMethods + if !Chef::Config.has_key?(:node_name) + ui.error knife_fail.gsub(/{{KEY}}/, "node_name") + exit 1 + end + if !Chef::Config.has_key?(:client_key) + ui.error knife_fail.gsub(/{{KEY}}/, "client_key") + exit 1 + end + # rubocop:enable Style/DeprecatedHashMethods + end + def fetch_validation_key credentials_client.install_validation_key end diff --git a/lib/chef/knife/server_bootstrap_ec2.rb b/lib/chef/knife/server_bootstrap_ec2.rb index 0ee7b0e..20447c6 100644 --- a/lib/chef/knife/server_bootstrap_ec2.rb +++ b/lib/chef/knife/server_bootstrap_ec2.rb @@ -60,7 +60,7 @@ class ServerBootstrapEc2 < Knife :proc => proc { |groups| groups.split(",") } def run - validate! + super config_security_group ec2_bootstrap.run fetch_validation_key @@ -104,6 +104,8 @@ def server_dns_name private def validate! + super + if config[:chef_node_name].nil? ui.error "You did not provide a valid --node-name value." exit 1 diff --git a/lib/chef/knife/server_bootstrap_linode.rb b/lib/chef/knife/server_bootstrap_linode.rb index 1863a85..e889a21 100644 --- a/lib/chef/knife/server_bootstrap_linode.rb +++ b/lib/chef/knife/server_bootstrap_linode.rb @@ -52,7 +52,7 @@ class ServerBootstrapLinode < Knife end def run - validate! + super linode_bootstrap.run fetch_validation_key create_root_client @@ -92,6 +92,8 @@ def server_ip_address private def validate! + super + if config[:chef_node_name].nil? ui.error "You did not provide a valid --node-name value." exit 1 diff --git a/lib/chef/knife/server_bootstrap_openstack.rb b/lib/chef/knife/server_bootstrap_openstack.rb index 1aefb76..b371cde 100644 --- a/lib/chef/knife/server_bootstrap_openstack.rb +++ b/lib/chef/knife/server_bootstrap_openstack.rb @@ -52,7 +52,7 @@ class ServerBootstrapOpenstack < Knife end def run - validate! + super openstack_bootstrap.run fetch_validation_key create_root_client @@ -96,6 +96,8 @@ def server_ip_address private def validate! + super + if config[:chef_node_name].nil? ui.error "You did not provide a valid --node-name value." exit 1 diff --git a/lib/chef/knife/server_bootstrap_standalone.rb b/lib/chef/knife/server_bootstrap_standalone.rb index a67f11d..b20520b 100644 --- a/lib/chef/knife/server_bootstrap_standalone.rb +++ b/lib/chef/knife/server_bootstrap_standalone.rb @@ -46,7 +46,7 @@ class ServerBootstrapStandalone < Knife :description => "Hostname or IP address of host to bootstrap" def run - validate! + super check_ssh_connection standalone_bootstrap.run fetch_validation_key @@ -73,6 +73,8 @@ def standalone_bootstrap private def validate! + super + if config[:chef_node_name].nil? ui.error "You did not provide a valid --node-name value." exit 1 diff --git a/spec/chef/knife/server_bootstrap_ec2_spec.rb b/spec/chef/knife/server_bootstrap_ec2_spec.rb index 98612c1..cfbab7a 100644 --- a/spec/chef/knife/server_bootstrap_ec2_spec.rb +++ b/spec/chef/knife/server_bootstrap_ec2_spec.rb @@ -250,6 +250,18 @@ let(:ssh) { double } let(:credentials) { double.as_null_object } + it "exits if Chef::Config[:node_name] is missing" do + Chef::Config.delete(:node_name) + + expect { @knife.run }.to raise_error SystemExit + end + + it "exits if Chef::Config[:client_key] is missing" do + Chef::Config.delete(:client_key) + + expect { @knife.run }.to raise_error SystemExit + end + it "exits if node_name option is missing" do def @knife.exit(_); end @knife.config.delete(:chef_node_name) diff --git a/spec/chef/knife/server_bootstrap_linode_spec.rb b/spec/chef/knife/server_bootstrap_linode_spec.rb index 9d04b28..b4e0290 100644 --- a/spec/chef/knife/server_bootstrap_linode_spec.rb +++ b/spec/chef/knife/server_bootstrap_linode_spec.rb @@ -225,6 +225,18 @@ let(:ssh) { double } let(:credentials) { double.as_null_object } + it "exits if Chef::Config[:node_name] is missing" do + Chef::Config.delete(:node_name) + + expect { @knife.run }.to raise_error SystemExit + end + + it "exits if Chef::Config[:client_key] is missing" do + Chef::Config.delete(:client_key) + + expect { @knife.run }.to raise_error SystemExit + end + it "exits if node_name option is missing" do @knife.config.delete(:chef_node_name) diff --git a/spec/chef/knife/server_bootstrap_openstack_spec.rb b/spec/chef/knife/server_bootstrap_openstack_spec.rb index 117bb21..4a4f83e 100644 --- a/spec/chef/knife/server_bootstrap_openstack_spec.rb +++ b/spec/chef/knife/server_bootstrap_openstack_spec.rb @@ -228,6 +228,12 @@ let(:ssh) { double } let(:credentials) { double.as_null_object } + it "exits if Chef::Config[:client_key] is missing" do + Chef::Config.delete(:client_key) + + expect { @knife.run }.to raise_error SystemExit + end + it "exits if node_name option is missing" do @knife.config.delete(:chef_node_name) diff --git a/spec/chef/knife/server_bootstrap_standalone_spec.rb b/spec/chef/knife/server_bootstrap_standalone_spec.rb index 75e6831..b92360f 100644 --- a/spec/chef/knife/server_bootstrap_standalone_spec.rb +++ b/spec/chef/knife/server_bootstrap_standalone_spec.rb @@ -241,6 +241,18 @@ let(:ssh) { double(:exec! => true) } let(:credentials) { double.as_null_object } + it "exits if Chef::Config[:node_name] is missing" do + Chef::Config.delete(:node_name) + + expect { @knife.run }.to raise_error SystemExit + end + + it "exits if Chef::Config[:client_key] is missing" do + Chef::Config.delete(:client_key) + + expect { @knife.run }.to raise_error SystemExit + end + it "exits if node_name option is missing" do @knife.config.delete(:chef_node_name)