From 3aaa23af2b7d5042090c5a71d7dd3759aca42632 Mon Sep 17 00:00:00 2001 From: Terry Cain Date: Thu, 23 Apr 2020 12:10:00 +0100 Subject: [PATCH] Added node import Fixes #8 --- .gitignore | 1 + TESTING.md | 28 ++++++++++++++++++++++ chef/provider.go | 8 +++---- chef/resource_data_bag.go | 13 +++++++--- chef/resource_data_bag_item.go | 1 - chef/resource_data_bag_item_test.go | 10 ++++++-- chef/resource_data_bag_test.go | 5 ++++ chef/resource_environment.go | 7 +++--- chef/resource_environment_test.go | 20 ++++++++++++++++ chef/resource_node.go | 24 ++++++++++++------- chef/resource_node_test.go | 7 +++++- chef/resource_role.go | 8 ++++--- chef/resource_role_test.go | 5 ++++ website/docs/index.html.markdown | 2 ++ website/docs/r/data_bag_item.html.markdown | 14 ++++++++++- website/docs/r/environment.html.markdown | 11 +++++++++ website/docs/r/node.html.markdown | 8 ++++++- website/docs/r/role.html.markdown | 11 +++++++-- 18 files changed, 154 insertions(+), 29 deletions(-) create mode 100644 TESTING.md diff --git a/.gitignore b/.gitignore index 5982d2c6..fe0ed56b 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ website/node_modules *.iml website/vendor +key.pem # Test exclusions !command/test-fixtures/**/*.tfstate diff --git a/TESTING.md b/TESTING.md new file mode 100644 index 00000000..a2fd4d47 --- /dev/null +++ b/TESTING.md @@ -0,0 +1,28 @@ +# Setting up Chef Zero + +Run Chef: + +``` +mkdir /tmp/chef +# For persistance +docker run --rm -p 8889:8889 --name chef -v /tmp/chef:/work -it rubygem/chef-zero -H 0.0.0.0 -p 8889 -l debug --file-store /work +# Without persistance +docker run --rm -p 8889:8889 --name chef -it rubygem/chef-zero -H 0.0.0.0 -p 8889 -l debug +``` + +Setup Environment: + +Generate a private key to use in the key material var + +``` +openssl genrsa -out key.pem 2048 +export CHEF_SERVER_URL=http://127.0.0.1:8889/ +export CHEF_CLIENT_NAME=test +export CHEF_KEY_MATERIAL="$(cat key.pem)" +``` + +Run: + +``` +make testacc +``` diff --git a/chef/provider.go b/chef/provider.go index 1e4e7927..d435f0ee 100644 --- a/chef/provider.go +++ b/chef/provider.go @@ -18,10 +18,10 @@ func Provider() terraform.ResourceProvider { return &schema.Provider{ Schema: map[string]*schema.Schema{ "server_url": { - Type: schema.TypeString, - Required: true, - DefaultFunc: schema.EnvDefaultFunc("CHEF_SERVER_URL", nil), - Description: "URL of the root of the target Chef server or organization.", + Type: schema.TypeString, + Required: true, + DefaultFunc: schema.EnvDefaultFunc("CHEF_SERVER_URL", nil), + Description: "URL of the root of the target Chef server or organization.", ValidateFunc: validateServerURL, }, "client_name": { diff --git a/chef/resource_data_bag.go b/chef/resource_data_bag.go index eaaafb90..c594db8d 100644 --- a/chef/resource_data_bag.go +++ b/chef/resource_data_bag.go @@ -1,9 +1,8 @@ package chef import ( - "github.com/hashicorp/terraform/helper/schema" - chefc "github.com/go-chef/chef" + "github.com/hashicorp/terraform/helper/schema" ) func resourceChefDataBag() *schema.Resource { @@ -58,7 +57,7 @@ func ReadDataBag(d *schema.ResourceData, meta interface{}) error { name := d.Id() - _, err := client.DataBags.ListItems(name) + dataBagList, err := client.DataBags.List() if err != nil { if errRes, ok := err.(*chefc.ErrorResponse); ok { if errRes.Response.StatusCode == 404 { @@ -68,7 +67,15 @@ func ReadDataBag(d *schema.ResourceData, meta interface{}) error { } } + apiURL, ok := (*dataBagList)[name] + if !ok { // Not found + d.SetId("") + return nil + } + d.Set("name", name) + d.Set("api_uri", apiURL) + return err } diff --git a/chef/resource_data_bag_item.go b/chef/resource_data_bag_item.go index b9727901..c877dd22 100644 --- a/chef/resource_data_bag_item.go +++ b/chef/resource_data_bag_item.go @@ -3,7 +3,6 @@ package chef import ( "encoding/json" "fmt" - "log" "strings" "github.com/hashicorp/terraform/helper/schema" diff --git a/chef/resource_data_bag_item_test.go b/chef/resource_data_bag_item_test.go index e886e910..423d4ab0 100644 --- a/chef/resource_data_bag_item_test.go +++ b/chef/resource_data_bag_item_test.go @@ -24,6 +24,13 @@ func TestAccDataBagItem_basic(t *testing.T) { "chef_data_bag_item.test", &dataBagItemName, ), }, + { + ResourceName: "chef_data_bag_item.test", + // Import ID needs to be bagname.item_id + ImportStateId: "terraform-acc-test-bag-item-basic.terraform_acc_test", + ImportState: true, + ImportStateVerify: true, + }, }, }) } @@ -83,8 +90,7 @@ resource "chef_data_bag" "test" { name = "terraform-acc-test-bag-item-basic" } resource "chef_data_bag_item" "test" { - data_bag_name = "terraform-acc-test-bag-item-basic" - depends_on = ["chef_data_bag.test"] + data_bag_name = chef_data_bag.test.name content_json = < **Important:** The Chef server URL must end with a slash. + Use the navigation to the left to read about the available resources. ## Example Usage diff --git a/website/docs/r/data_bag_item.html.markdown b/website/docs/r/data_bag_item.html.markdown index 7f36e737..6691dcee 100644 --- a/website/docs/r/data_bag_item.html.markdown +++ b/website/docs/r/data_bag_item.html.markdown @@ -18,8 +18,12 @@ data bag itself, use the ``chef_data_bag`` resource. ## Example Usage ```hcl +resource "chef_data_bag" "somebag" { + name = "somebag" +} + resource "chef_data_bag_item" "example" { - data_bag_name = "example-data-bag" + data_bag_name = chef_data_bag.somebag.name content_json = <