Skip to content

Instantly share code, notes, and snippets.

@robertpyke
Last active March 10, 2021 06:41
Show Gist options
  • Save robertpyke/8798080 to your computer and use it in GitHub Desktop.
Save robertpyke/8798080 to your computer and use it in GitHub Desktop.
Interfacing with Nectar's Object Store (swift - Nectar's S3 equivalent)

Documentation Links

Authentication

Before you can interface with the object-store, you must first authenticate against the keystone. Authenticating against the keystone will provide you with two useful things. 1. It will provide you with an authentication token that will likely be valid for a few hours, and is required for interaction with any other endpoint. 2. It will provide you with the public endpoint (url) for the object store that is appropriate for your project.

Basic Keystone Authentication

The following command will authenticate against the keystone, providing you with a token:

Request:

curl -d '{"auth":{"passwordCredentials":{"username": "[email protected]", "password": "ExampLEjYmFjNmM5ZGZj"}}}' -H "Content-type: application/json" https://keystone.rc.nectar.org.au:5000/v2.0/tokens
Field Description Example
username this should be your nectar username (probably an email address) [email protected]
password this is your nectar API password (a generated API key) ExampLEjYmFjNmM5ZGZj

Response:

  {
   "access":{
      "token":{
         "issued_at":"2014-02-04T03:15:15.752325",
         "expires":"2014-02-04T09:15:15Z",
         "id":"EXAMPLEsssssssssssssaaaaaaaaaaMCAQExCTAHBgUrDgMCGjCCAW8GCSqGSIb3DQEHAaCCAWAEggFceyJhY2Nlc3MDoPB7InRva2VuIjogeyJpc3N1ZWRfYXQiOiAiMjAxNC0wMi0wNFQwMzoxNToxNS43NTIzMjUiLCAiZXhwaXJlcrI6ICIyMDE0LTAyLTA0VDA5OjE1OjE1WiIsICJpZCI6ICJwbGFjZWhvbGRlciJ9LCAic2VydmljZUNhdGFsb2ciOiBbXSwgInVzZXIiOiB7InVzZXJuYW1lIjogInJvYmVydC5waaaaaaabbbbbbbbddddddddeeeeeeeeddddddddua3MiOiBbXSwgImlkIjogIjUxYjZkYTNkZWZkMDRl2WM4MzNmMjViNFQ0Yjg2ZjVjIiwgInJvbGVzIjogW10sICJuYW1lIjoganJvYmVydCdweWtlQG15Lmrjdv5lZHUuYXUifSwgIm1ldGFkYXRhIjogeyJpc19hZG1pbiI6IDAsICJyb2xlcyI6IFtdfX19MYH-MIH8AgABMFwwVzELMAkGA1UEBhMCVVMxDjAMBgNVBAgTBVVuc2V0MQ4wDAYDVQQHEwVVbnNldbEOMAwGA1UEChMeVW5zZXQxGDAWBgNVBAMTD3d3dy5leGFtcGxlLmNvbQIBATAHBgUrDgMCGjANBgkqhkiG9w0BAQEFAASBgAyNYkKTuWelHmBLVAg0V7yyVRdiPhGqJUqEuwWilV37LIKB8cclhiXNAvVTNUt95-VdiWIjtf4CIIyzD4EflEYsBCrAOm-XsJPaUvI6k-UZIjt1Z14jFdP01BOK2iFcgknkH3nORJDC24QL3ZoaGrQAJn3gZieLdltrQZdnzjzw"
      },
      "serviceCatalog":[

      ],
      "user":{
         "username":"[email protected]",
         "roles_links":[

         ],
         "id":"aaaaaabbbbcc4e1c833f25b644b86f5c",
         "roles":[

         ],
         "name":"[email protected]"
      },
      "metadata":{
         "is_admin":0,
         "roles":[

         ]
      }
   }
}

Keystone Authentication for a project (tenant)

That's nice and all, but we want to authenticate against a specific tenant (a project):

Request:

curl -d '{"auth":{"tenantName": "QCIF_CliMAS_2", "passwordCredentials":{"username": "[email protected]", "password": "ExampLEjYmFjNmM5ZGZj"}}}' -H "Content-type: application/json" https://keystone.rc.nectar.org.au:5000/v2.0/tokens
Field Description Example
username this should be your nectar username (probably an email address) [email protected]
password this is your nectar API password (a generated API key) ExampLEjYmFjNmM5ZGZj
tenantName this is the name of your nectar project QCIF_CliMAS_2

Response:

{
   "access":{
      "token":{
         "issued_at":"2014-02-04T03:19:58.698759",
         "expires":"2014-02-04T09:19:58Z",
         "id":"EXAMPLEaaaaaaaaasssssssddddddfffffddddddddddddddddfffffsssssssssssssffffggggeeeeeeeeeeMiOiB7InRva2VuIjogeyJpc3N1ZWRfYXQiOiAiMjAxNC0wMi0wNFQwMzoxOTo1OC42OTg3NTkiLCAiZXhwaXJlcyI6ICIyMDE0LTAyLTA0VDA5OjE5OjU4WiIsICJpZCI6ICJwbGFjZWhvbGRlciIsICJ0ZW5hbnQiOiB7ImRlc2NyaXB0aW9uIjogIlFDSUYtQ2xpTUFTXzIiLCAiZW5hYmxlZCI6IHRydWUsICJpZCI6ICIxMzJmNTQ0NWUzMTI0NDM1YjhiNGFkMzAwODFkZmFhYiIsICJuYW1lIjogIlFDSUZfQ0xpTUFTXzIifX0sICJzZXJ2aWNlQ2F0YWxvZyI6IFt7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHBzOi8vbm92YS5yYy5uZWN0YXIub3JnLmF1Ojg3NzQvdjEuMS8xMzJmNTQ0NWUzMTI0NDM1YjhiNGFkMzAwODFkZmFhYiIsICJyZWdpb24iOiAiTWVsYm91cm5lIiwgImVuYWJsZWQiOiAiMSIsICJpbnRlcm5hbFVSTCI6ICJodHRwczovL25vdmEucmMubmVjdGFyLm9yZy5hdTo4Nzc0L3YxLjEvMTMyZjU0NDVlMzEyNDQzNWI4YjRhZDMwMDgxZGZhYWIiLCAicHVibGljVVJMIjogImh0dHBzOi8vbm92YS5yYy5uZWN0YXIub3JnLmF1Ojg3NzQvdjEuMS8xMzJmNTQ0NWUzMTI0NDM1YjhiNGFkMzAwODFkZmFhYiJ9XSwgImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJjb21wdXRlIiwgIm5hbWUiOiAiQ29tcHV0ZSBTZXJ2aWNlIn0sIHsiZW5kcG9pbnRzIjogW3siYWRtaW5VUkwiOiAiaHR0cHM6Ly9zd2lmdC5yYy5uZWN0YXIub3JnLmF1Ojg4ODgvIiwgInJlZ2lvbiI6ICJNZWxib3VybmUiLCAicHVibGljVVJMIjogImh0dHBzOi8vc3dpZnQucmMubmVjdGFyLm9yZy5hdTo4ODg4LyIsICJpbnRlcm5hbFVSTCI6ICJodHRwczovL3N3aWZ0LnJjLm5lY3Rhci5vcmcuYXU6ODg4OC8ifV0sICJlbmRwb2ludHNfbGlua3MiOiBbXSwgInR5cGUiOiAiczMiLCAibmFtZSI6ICJTMyBTZXJ2aWNlIn0sIHsiZW5kcG9pbnRzIjogW3siYWRtaW5VUkwiOiAiaHR0cDovL2dsYW5jZS5yYy5uZWN0YXIub3JnLmF1OjkyOTIvdjEiLCAicmVnaW9uIjogIk1lbGJvdXJuZSIsICJlbmFibGVkIjogIjEiLCAiaW50ZXJuYWxVUkwiOiAiaHR0cDovL2dsYW5jZS5yYy5uZWN0YXIub3JnLmF1OjkyOTIvdjEiLCAicHVibGljVVJMIjogImh0dHA6Ly9nbGFuY2UucmMubmVjdGFyLm9yZy5hdTo5MjkyL3YxIn1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0eXBlIjogImltYWdlIiwgIm5hbWUiOiAiSW1hZ2UgU2VydmljZSJ9LCB7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHBzOi8vY2VpbG9tZXRlci5yYy5uZWN0YXIub3JnLmF1Ojg3NzcvIiwgInJlZ2lvbiI6ICJNZWxib3VybmUiLCAicHVibGljVVJMIjogImh0dHBzOi8vY2VpbG9tZXRlci5yYy5uZWN0YXIub3JnLmF1Ojg3NzcvIiwgImludGVybmFsVVJMIjogImh0dHBzOi8vY2VpbG9tZXRlci5yYy5uZWN0YXIub3JnLmF1Ojg3NzcvIn1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0eXBlIjogIm1ldGVyaW5nIiwgIm5hbWUiOiAiTWV0ZXJpbmcgU2VydmljZSJ9LCB7ImVuZHBvaW50cyI6IFt7ImFkbWluVVJMIjogImh0dHBzOi8vY2luZGVyLnJjLm5lY3Rhci5vcmcuYXU6ODc3Ni92MS8xMzJmNTQ0NWUzMTI0NDM1YjhiNGFkMzAwODFkZmFhYiIsICJyZWdpb24iOiAiTWVsYm91cm5lIiwgInB1YmxpY1VSTCI6ICJodHRwczovL2NpbmRlci5yYy5uZWN0YXIub3JnLmF1Ojg3NzYvdjEvMTMyZjU0NDVlMzEyNDQzNWI4YjRhZDMwMDgxZGZhYWIiLCAiaW50ZXJuYWxVUkwiOiAiaHR0cHM6Ly9jaW5kZXIucmMubmVjdGFyLm9yZy5hdTo4Nzc2L3YxLzEzMmY1NDQ1ZTMxMjQ0MzViOGI0YWQzMDA4MWRmYWFiIn1dLCAiZW5kcG9pbnRzX2xpbmtzIjogW10sICJ0eXBlIjogInZvbHVtZSIsICJuYW1lIjogIlZvbHVtZSBTZXJ2aWNlIn0sIHsiZW5kcG9pbnRzIjogW3siYWRtaW5VUkwiOiAiaHR0cHM6Ly9ub3ZhLnJjLm5lY3Rhci5vcmcuYXU6ODc3My9zZXJ2aWNlcy9BZG1pbiIsICJyZWdpb24iOiAiTWVsYm91cm5lIiwgInB1YmxpY1VSTCI6ICJodHRwczovL25vdmEucmMubmVjdGFyLm9yZy5hdTo4NzczL3NlcnZpY2VzL0Nsb3VkIiwgImludGVybmFsVVJMIjogImh0dHBzOi8vbm92YS5yYy5uZWN0YXIub3JnLmF1Ojg3NzMvc2VydmljZXMvQ2xvdWQifV0sICJlbmRwb2ludHNfbGlua3MiOiBbXSwgInR5cGUiOiAiZWMyIiwgIm5hbWUiOiAiRUMyIFNlcnZpY2UifSwgeyJlbmRwb2ludHMiOiBbeyJhZG1pblVSTCI6ICJodHRwczovL3N3aWZ0LnJjLm5lY3Rhci5vcmcuYXU6ODg4OC92MS4wLyIsICJyZWdpb24iOiAiTWVsYm91cm5lIiwgImVuYWJsZWQiOiAiMSIsICJpbnRlcm5hbFVSTCI6ICJodHRwczovL3N3aWZ0LnJjLm5lY3Rhci5vcmcuYXU6ODg4OC92MS9BVVRIXzEzMmY1NDQ1ZTMxMjQ0MzViOGI0YWQzMDA4MWRmYWFiIiwgInB1YmxpY1VSTCI6ICJodHRwczovL3N3aWZ0LnJjLm5lY3Rhci5vcmcuYXU6ODg4OC92MS9BVVRIXzEzMmY1NDQ1ZTMxMjQ0MzViOGI0YWQzMDA4MWRmYWFiIn0sIHsiYWRtaW5VUkwiOiAiaHR0cHM6Ly9zd2lmdC5xbGQubmVjdGFyLm9yZy5hdTo4ODg4L3YxLjAvIiwgInJlZ2lvbiI6ICJRbGQiLCAiZW5hYmxlZCI6ICIxIiwgImludGVybmFsVVJMIjogImh0dHBzOi8vc3dpZnQucWxkLm5lY3Rhci5vcmcuYXU6ODg4OC92MS9BVVRIXzEzMmY1NDQ1ZTMxMjQ0MzViOGI0YWQzMDA4MWRmYWFiIiwgInB1YmxpY1VSTCI6ICJodHRwczovL3N3aWZ0LnFsZC5uZWN0YXIub3JnLmF1Ojg4ODgvdjEvQVVUSF8xMzJmNTQ0NWUzMTI0NDM1YjhiNGFkMzAwODFkZmFhYiJ9XSwgImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJvYmplY3Qtc3RvcmUiLCAibmFtZSI6ICJPYmplY3QgU3RvcmFnZSBTZXJ2aWNlIn0sIHsiZW5kcG9pbnRzIjogW3siYWRtaW5VUkwiOiAiaHR0cHM6Ly9rZXlzdG9uZS5yYy5uZWN0YXIub3JnLmF1OjM1MzU3L3YyLjAvIiwgInJlZ2lvbiI6ICJNZWxib3VybmUiLCAiZW5hYmxlZCI6ICIxIiwgImludGVybmFsVVJMIjogImh0dHBzOi8va2V5c3RvbmUucmMubmVjdGFyLm9yZy5hdTo1MDAwL3YyLjAvIiwgInB1YmxpY1VSTCI6ICJodHRwczovL2tleXN0b25lLnJjLm5lY3Rhci5vcmcuYXU6NTAwMC92Mi4wLyJ9XSwgImVuZHBvaW50c19saW5rcyI6IFtdLCAidHlwZSI6ICJpZGVudGl0eSIsICJuYW1lIjogIklkZW50aXR5IFNlcnZpY2UifV0sICJ1c2VyIjogeyJ1c2VybmFtZSI6ICJyb2JlcnQucHlrZUBteS5qY3UuZWR1LmF1IiwgInJvbGVzX2xpbmtzIjogW10sICJpZCI6ICI1MWI2ZGEzZGVmZDA0ZTFjODMzZjI1YjY0NGI4NmY1YyIsICJyb2xlcyI6IFt7Im5hbWUiOiAiTWVtYmVyIn1dLCAibmFtZSI6ICJyb2JlcnQucHlrZUBteS5qY3UuZWR1LmF1In0sICJtZXRhZGF0YSI6IHsiaXNfYWRtaW4iOiAwLCAicm9sZXMiOiBbIjIiXX19fTGB-zCB-AIBATBcMFcxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIEwVVbnNldDEOMAwGA1UEBxMFVW5zZXQxDjAMBgNVBAoTBVVuc2V0MRgwFgYDVQQDEw93d3cuZXhhbXBsZS5jb20CAQEwBwYFKw4DAhowDQYJKoZIhvcNAQEBBQAEgYCesH4RJrQd4sriCvRd71EMd1651NpJNnFmOAcKRnH8yGEmkn8N8KMzmTUcxnDwlUCpreUv9-T9kOSLGSjoyGMGfLjq4pus800qFAseryRr34Gvqsepg9RCHR9XK4T3VR7+ExampleylCadQ-ICCUVQLV9keG-6bvMT5MAClGQIQ==",
         "tenant":{
            "description":"QCIF-CliMAS_2",
            "enabled":true,
            "id":"aaaaaaaaaaaaaaaaaaa4ad30081dfaab",
            "name":"QCIF_CLiMAS_2"
         }
      },
      "serviceCatalog":[
         {
            "endpoints":[
               {
                  "adminURL":"https://nova.rc.nectar.org.au:8774/v1.1/aaaa5445e3124435b8b4ad30081dfaab",
                  "region":"Melbourne",
                  "enabled":"1",
                  "internalURL":"https://nova.rc.nectar.org.au:8774/v1.1/aaaa5445e3124435b8b4ad30081dfaab",
                  "publicURL":"https://nova.rc.nectar.org.au:8774/v1.1/aaaa5445e3124435b8b4ad30081dfaab"
               }
            ],
            "endpoints_links":[

            ],
            "type":"compute",
            "name":"Compute Service"
         },
         {
            "endpoints":[
               {
                  "adminURL":"https://swift.rc.nectar.org.au:8888/",
                  "region":"Melbourne",
                  "publicURL":"https://swift.rc.nectar.org.au:8888/",
                  "internalURL":"https://swift.rc.nectar.org.au:8888/"
               }
            ],
            "endpoints_links":[

            ],
            "type":"s3",
            "name":"S3 Service"
         },
         {
            "endpoints":[
               {
                  "adminURL":"http://glance.rc.nectar.org.au:9292/v1",
                  "region":"Melbourne",
                  "enabled":"1",
                  "internalURL":"http://glance.rc.nectar.org.au:9292/v1",
                  "publicURL":"http://glance.rc.nectar.org.au:9292/v1"
               }
            ],
            "endpoints_links":[

            ],
            "type":"image",
            "name":"Image Service"
         },
         {
            "endpoints":[
               {
                  "adminURL":"https://ceilometer.rc.nectar.org.au:8777/",
                  "region":"Melbourne",
                  "publicURL":"https://ceilometer.rc.nectar.org.au:8777/",
                  "internalURL":"https://ceilometer.rc.nectar.org.au:8777/"
               }
            ],
            "endpoints_links":[

            ],
            "type":"metering",
            "name":"Metering Service"
         },
         {
            "endpoints":[
               {
                  "adminURL":"https://cinder.rc.nectar.org.au:8776/v1/aaaaaaaaaaaaaaa5b8b4ad30081dfaab",
                  "region":"Melbourne",
                  "publicURL":"https://cinder.rc.nectar.org.au:8776/v1/aaaaaaaaaaaaaaa5b8b4ad30081dfaab",
                  "internalURL":"https://cinder.rc.nectar.org.au:8776/v1/aaaaaaaaaaaaaaa5b8b4ad30081dfaab"
               }
            ],
            "endpoints_links":[

            ],
            "type":"volume",
            "name":"Volume Service"
         },
         {
            "endpoints":[
               {
                  "adminURL":"https://nova.rc.nectar.org.au:8773/services/Admin",
                  "region":"Melbourne",
                  "publicURL":"https://nova.rc.nectar.org.au:8773/services/Cloud",
                  "internalURL":"https://nova.rc.nectar.org.au:8773/services/Cloud"
               }
            ],
            "endpoints_links":[

            ],
            "type":"ec2",
            "name":"EC2 Service"
         },
         {
            "endpoints":[
               {
                  "adminURL":"https://swift.rc.nectar.org.au:8888/v1.0/",
                  "region":"Melbourne",
                  "enabled":"1",
                  "internalURL":"https://swift.rc.nectar.org.au:8888/v1/AUTH_aaaaaaaaaaaaaaa5b8b4ad30081dfaab",
                  "publicURL":"https://swift.rc.nectar.org.au:8888/v1/AUTH_aaaaaaaaaaaaaaa5b8b4ad30081dfaab"
               },
               {
                  "adminURL":"https://swift.qld.nectar.org.au:8888/v1.0/",
                  "region":"Qld",
                  "enabled":"1",
                  "internalURL":"https://swift.qld.nectar.org.au:8888/v1/AUTH_aaaaaaaaaaaaaaa5b8b4ad30081dfaab",
                  "publicURL":"https://swift.qld.nectar.org.au:8888/v1/AUTH_aaaaaaaaaaaaaaa5b8b4ad30081dfaab"
               }
            ],
            "endpoints_links":[

            ],
            "type":"object-store",
            "name":"Object Storage Service"
         },
         {
            "endpoints":[
               {
                  "adminURL":"https://keystone.rc.nectar.org.au:35357/v2.0/",
                  "region":"Melbourne",
                  "enabled":"1",
                  "internalURL":"https://keystone.rc.nectar.org.au:5000/v2.0/",
                  "publicURL":"https://keystone.rc.nectar.org.au:5000/v2.0/"
               }
            ],
            "endpoints_links":[

            ],
            "type":"identity",
            "name":"Identity Service"
         }
      ],
      "user":{
         "username":"[email protected]",
         "roles_links":[

         ],
         "id":"aaaaaaaaaaaaaaaf25b644b86f5c",
         "roles":[
            {
               "name":"Member"
            }
         ],
         "name":"[email protected]"
      },
      "metadata":{
         "is_admin":0,
         "roles":[
            "2"
         ]
      }
   }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment