func resourceObjectStorageContainerV1Create(d *schema.ResourceData, meta interface{}) error { config := meta.(*Config) objectStorageClient, err := config.objectStorageV1Client(GetRegion(d)) if err != nil { return fmt.Errorf("Error creating OpenStack object storage client: %s", err) } cn := d.Get("name").(string) createOpts := &containers.CreateOpts{ ContainerRead: d.Get("container_read").(string), ContainerSyncTo: d.Get("container_sync_to").(string), ContainerSyncKey: d.Get("container_sync_key").(string), ContainerWrite: d.Get("container_write").(string), ContentType: d.Get("content_type").(string), Metadata: resourceContainerMetadataV2(d), } log.Printf("[DEBUG] Create Options: %#v", createOpts) _, err = containers.Create(objectStorageClient, cn, createOpts).Extract() if err != nil { return fmt.Errorf("Error creating OpenStack container: %s", err) } log.Printf("[INFO] Container ID: %s", cn) // Store the ID now d.SetId(cn) return resourceObjectStorageContainerV1Read(d, meta) }
func (c *SwiftClient) ensureContainerExists() error { result := containers.Create(c.client, c.path, nil) if result.Err != nil { return result.Err } return nil }
func (c *SwiftClient) ensureContainerExists() error { containerOpts := &containers.CreateOpts{} if c.archive { log.Printf("[DEBUG] Creating container %s", c.archivepath) result := containers.Create(c.client, c.archivepath, nil) if result.Err != nil { log.Printf("[DEBUG] Error creating container %s: %s", c.archivepath, result.Err) return result.Err } log.Printf("[DEBUG] Enabling Versioning on container %s", c.path) containerOpts.VersionsLocation = c.archivepath } log.Printf("[DEBUG] Creating container %s", c.path) result := containers.Create(c.client, c.path, containerOpts) if result.Err != nil { return result.Err } return nil }
func TestListAllContainers(t *testing.T) { // Create a new client to execute the HTTP requests. See common.go for newClient body. client := newClient(t) numContainers := 20 // Create a slice of random container names. cNames := make([]string, numContainers) for i := 0; i < numContainers; i++ { cNames[i] = tools.RandomString("gophercloud-test-container-", 8) } // Create numContainers containers. for i := 0; i < len(cNames); i++ { res := containers.Create(client, cNames[i], nil) th.AssertNoErr(t, res.Err) } // Delete the numContainers containers after function completion. defer func() { for i := 0; i < len(cNames); i++ { res := containers.Delete(client, cNames[i]) th.AssertNoErr(t, res.Err) } }() // List all the numContainer names that were just created. To just list those, // the 'prefix' parameter is used. allPages, err := containers.List(client, &containers.ListOpts{Full: true, Limit: 5, Prefix: "gophercloud-test-container-"}).AllPages() th.AssertNoErr(t, err) containerInfoList, err := containers.ExtractInfo(allPages) th.AssertNoErr(t, err) for _, n := range containerInfoList { t.Logf("Container: Name [%s] Count [%d] Bytes [%d]", n.Name, n.Count, n.Bytes) } th.AssertEquals(t, numContainers, len(containerInfoList)) // List the info for all the numContainer containers that were created. allPages, err = containers.List(client, &containers.ListOpts{Full: false, Limit: 2, Prefix: "gophercloud-test-container-"}).AllPages() th.AssertNoErr(t, err) containerNamesList, err := containers.ExtractNames(allPages) th.AssertNoErr(t, err) for _, n := range containerNamesList { t.Logf("Container: Name [%s]", n) } th.AssertEquals(t, numContainers, len(containerNamesList)) }
func TestCreateContainer(t *testing.T) { th.SetupHTTP() defer th.TeardownHTTP() HandleCreateContainerSuccessfully(t) options := containers.CreateOpts{ContentType: "application/json", Metadata: map[string]string{"foo": "bar"}} res := containers.Create(fake.ServiceClient(), "testContainer", options) th.CheckEquals(t, "bar", res.Header["X-Container-Meta-Foo"][0]) expected := &containers.CreateHeader{ ContentLength: 0, ContentType: "text/html; charset=UTF-8", Date: gophercloud.JSONRFC1123(time.Date(2016, time.August, 17, 19, 25, 43, 0, loc)), //Wed, 17 Aug 2016 19:25:43 GMT TransID: "tx554ed59667a64c61866f1-0058b4ba37", } actual, err := res.Extract() th.CheckNoErr(t, err) th.AssertDeepEquals(t, expected, actual) }
func TestContainers(t *testing.T) { // Create a new client to execute the HTTP requests. See common.go for newClient body. client := newClient(t) // Create a slice of random container names. cNames := make([]string, numContainers) for i := 0; i < numContainers; i++ { cNames[i] = tools.RandomString("gophercloud-test-container-", 8) } // Create numContainers containers. for i := 0; i < len(cNames); i++ { res := containers.Create(client, cNames[i], nil) th.AssertNoErr(t, res.Err) } // Delete the numContainers containers after function completion. defer func() { for i := 0; i < len(cNames); i++ { res := containers.Delete(client, cNames[i]) th.AssertNoErr(t, res.Err) } }() // List the numContainer names that were just created. To just list those, // the 'prefix' parameter is used. err := containers.List(client, &containers.ListOpts{Full: true, Prefix: "gophercloud-test-container-"}).EachPage(func(page pagination.Page) (bool, error) { containerList, err := containers.ExtractInfo(page) th.AssertNoErr(t, err) for _, n := range containerList { t.Logf("Container: Name [%s] Count [%d] Bytes [%d]", n.Name, n.Count, n.Bytes) } return true, nil }) th.AssertNoErr(t, err) // List the info for the numContainer containers that were created. err = containers.List(client, &containers.ListOpts{Full: false, Prefix: "gophercloud-test-container-"}).EachPage(func(page pagination.Page) (bool, error) { containerList, err := containers.ExtractNames(page) th.AssertNoErr(t, err) for _, n := range containerList { t.Logf("Container: Name [%s]", n) } return true, nil }) th.AssertNoErr(t, err) // Update one of the numContainer container metadata. updateres := containers.Update(client, cNames[0], &containers.UpdateOpts{Metadata: metadata}) th.AssertNoErr(t, updateres.Err) // After the tests are done, delete the metadata that was set. defer func() { tempMap := make(map[string]string) for k := range metadata { tempMap[k] = "" } res := containers.Update(client, cNames[0], &containers.UpdateOpts{Metadata: tempMap}) th.AssertNoErr(t, res.Err) }() // Retrieve a container's metadata. cm, err := containers.Get(client, cNames[0]).ExtractMetadata() th.AssertNoErr(t, err) for k := range metadata { if cm[k] != metadata[strings.Title(k)] { t.Errorf("Expected custom metadata with key: %s", k) } } }
func TestObjects(t *testing.T) { // Create a provider client for executing the HTTP request. // See common.go for more information. client := newClient(t) // Make a slice of length numObjects to hold the random object names. oNames := make([]string, numObjects) for i := 0; i < len(oNames); i++ { oNames[i] = tools.RandomString("test-object-", 8) } // Create a container to hold the test objects. cName := tools.RandomString("test-container-", 8) header, err := containers.Create(client, cName, nil).ExtractHeader() th.AssertNoErr(t, err) t.Logf("Create object headers: %+v\n", header) // Defer deletion of the container until after testing. defer func() { res := containers.Delete(client, cName) th.AssertNoErr(t, res.Err) }() // Create a slice of buffers to hold the test object content. oContents := make([]*bytes.Buffer, numObjects) for i := 0; i < numObjects; i++ { oContents[i] = bytes.NewBuffer([]byte(tools.RandomString("", 10))) res := objects.Create(client, cName, oNames[i], oContents[i], nil) th.AssertNoErr(t, res.Err) } // Delete the objects after testing. defer func() { for i := 0; i < numObjects; i++ { res := objects.Delete(client, cName, oNames[i], nil) th.AssertNoErr(t, res.Err) } }() ons := make([]string, 0, len(oNames)) err = objects.List(client, cName, &objects.ListOpts{Full: false, Prefix: "test-object-"}).EachPage(func(page pagination.Page) (bool, error) { names, err := objects.ExtractNames(page) th.AssertNoErr(t, err) ons = append(ons, names...) return true, nil }) th.AssertNoErr(t, err) th.AssertEquals(t, len(ons), len(oNames)) ois := make([]objects.Object, 0, len(oNames)) err = objects.List(client, cName, &objects.ListOpts{Full: true, Prefix: "test-object-"}).EachPage(func(page pagination.Page) (bool, error) { info, err := objects.ExtractInfo(page) th.AssertNoErr(t, err) ois = append(ois, info...) return true, nil }) th.AssertNoErr(t, err) th.AssertEquals(t, len(ois), len(oNames)) // Copy the contents of one object to another. copyres := objects.Copy(client, cName, oNames[0], &objects.CopyOpts{Destination: cName + "/" + oNames[1]}) th.AssertNoErr(t, copyres.Err) // Download one of the objects that was created above. o1Content, err := objects.Download(client, cName, oNames[0], nil).ExtractContent() th.AssertNoErr(t, err) // Download the another object that was create above. o2Content, err := objects.Download(client, cName, oNames[1], nil).ExtractContent() th.AssertNoErr(t, err) // Compare the two object's contents to test that the copy worked. th.AssertEquals(t, string(o2Content), string(o1Content)) // Update an object's metadata. updateres := objects.Update(client, cName, oNames[0], &objects.UpdateOpts{Metadata: metadata}) th.AssertNoErr(t, updateres.Err) // Delete the object's metadata after testing. defer func() { tempMap := make(map[string]string) for k := range metadata { tempMap[k] = "" } res := objects.Update(client, cName, oNames[0], &objects.UpdateOpts{Metadata: tempMap}) th.AssertNoErr(t, res.Err) }() // Retrieve an object's metadata. om, err := objects.Get(client, cName, oNames[0], nil).ExtractMetadata() th.AssertNoErr(t, err) for k := range metadata { if om[k] != metadata[strings.Title(k)] { t.Errorf("Expected custom metadata with key: %s", k) return } } }