diff --git a/config.yaml b/config.yaml index 894b24d86f..a7ccd4584d 100644 --- a/config.yaml +++ b/config.yaml @@ -123,15 +123,16 @@ params: project_name_html: 'RiakCS' path: "/riak/cs" archived_path: "/riakcs" - github_path: "https://github.com/TI-Tokyo/riak-docs-fork/tree/dev/content/" + github_path: "https://github.com/TI-Tokyo/riak-docs-fork/tree/pjac-cs3.1.0/content/" download_root: "https://files.tiot.jp/riak/cs/" releases: - ["2.0.0", "2.0.1"] - ["2.1.0", "2.1.1", "2.1.2"] - ["3.0.0", "3.0.1"] + - ["3.1.0"] archive_below: "2.1" - latest: "3.0.1" - lts: ["2.1", "3.0"] + latest: "3.1.0" + lts: ["2.1", "3.0", "3.1"] #archived_url: "http://docs.riak.com/riakcs/1.5.4/" riak_ts: project_name: "Riak TS" diff --git a/content/riak/cs/2.0.0/redirects/add-ons.md b/content/riak/cs/2.0.0/redirects/add-ons.md new file mode 100644 index 0000000000..c93f6045b9 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/add-ons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/operating/advanced/" +aliases: + - /riak/cs/2.0.0/add-ons +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/add-ons/add-ons.md b/content/riak/cs/2.0.0/redirects/add-ons/add-ons.md new file mode 100644 index 0000000000..570d1d0a84 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/add-ons/add-ons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/appendices/riak-cs-control/" +aliases: + - /riak/cs/2.0.0/add-ons/riak-cs-control/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/configuring.md b/content/riak/cs/2.0.0/redirects/configuring.md new file mode 100644 index 0000000000..3bf1fb5a8f --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/configuring.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/configuration/" +aliases: + - /riak/cs/2.0.0/configuring +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/configuring/load-balancing-proxy.md b/content/riak/cs/2.0.0/redirects/configuring/load-balancing-proxy.md new file mode 100644 index 0000000000..5aeb2ab8a0 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/configuring/load-balancing-proxy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/configuration/load-balancing-proxy/" +aliases: + - /riak/cs/2.0.0/configuring/load-balancing-proxy/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/configuring/multi-datacenter.md b/content/riak/cs/2.0.0/redirects/configuring/multi-datacenter.md new file mode 100644 index 0000000000..93eb7f2541 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/configuring/multi-datacenter.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/configuration/multi-datacenter/" +aliases: + - /riak/cs/2.0.0/configuring/multi-datacenter/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/configuring/reference.md b/content/riak/cs/2.0.0/redirects/configuring/reference.md new file mode 100644 index 0000000000..0d430b0679 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/configuring/reference.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/configuration/reference/" +aliases: + - /riak/cs/2.0.0/configuring/reference/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/configuring/riak-cs.md b/content/riak/cs/2.0.0/redirects/configuring/riak-cs.md new file mode 100644 index 0000000000..12d6c0a84b --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/configuring/riak-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/configuration/riak-cs/" +aliases: + - /riak/cs/2.0.0/configuring/riak-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/configuring/riak-kv-for-cs.md b/content/riak/cs/2.0.0/redirects/configuring/riak-kv-for-cs.md new file mode 100644 index 0000000000..a0ffeb1120 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/configuring/riak-kv-for-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/configuration/riak-for-cs/" +aliases: + - /riak/cs/2.0.0/configuring/riak-kv-for-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/configuring/stanchion.md b/content/riak/cs/2.0.0/redirects/configuring/stanchion.md new file mode 100644 index 0000000000..2edf1b4959 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/configuring/stanchion.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/configuration/stanchion/" +aliases: + - /riak/cs/2.0.0/configuring/stanchion/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/configuring/superclusters.md b/content/riak/cs/2.0.0/redirects/configuring/superclusters.md new file mode 100644 index 0000000000..aacc1aee85 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/configuring/superclusters.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/supercluster/" +aliases: + - /riak/cs/2.0.0/configuring/superclusters/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/accounts-and-admin.md b/content/riak/cs/2.0.0/redirects/developing/accounts-and-admin.md new file mode 100644 index 0000000000..56834d0165 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/accounts-and-admin.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/appendices/http-admin/" +aliases: +- /riak/cs/2.0.0/developing/accounts-and-admin +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/accounts-and-admin/access-control-lists.md b/content/riak/cs/2.0.0/redirects/developing/accounts-and-admin/access-control-lists.md new file mode 100644 index 0000000000..dfdaf1f723 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/accounts-and-admin/access-control-lists.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/access-control-lists/" +aliases: +- /riak/cs/2.0.0/developing/accounts-and-admin/access-control-lists/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/accounts-and-admin/account-management.md b/content/riak/cs/2.0.0/redirects/developing/accounts-and-admin/account-management.md new file mode 100644 index 0000000000..7191d74f63 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/accounts-and-admin/account-management.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/account-management/" +aliases: +- /riak/cs/2.0.0/developing/accounts-and-admin/account-management/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/accounts-and-admin/authentication.md b/content/riak/cs/2.0.0/redirects/developing/accounts-and-admin/authentication.md new file mode 100644 index 0000000000..e6e988e1f0 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/accounts-and-admin/authentication.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/authentication/" +aliases: +- /riak/cs/2.0.0/developing/accounts-and-admin/authentication/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/accounts-and-admin/designate-admin-user.md b/content/riak/cs/2.0.0/redirects/developing/accounts-and-admin/designate-admin-user.md new file mode 100644 index 0000000000..0f50099cd8 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/accounts-and-admin/designate-admin-user.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/designate-admin-user/" +aliases: +- /riak/cs/2.0.0/developing/accounts-and-admin/designate-admin-user/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis.md b/content/riak/cs/2.0.0/redirects/developing/apis.md new file mode 100644 index 0000000000..795bdfb676 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/" +aliases: +- /riak/cs/2.0.0/developing/apis +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/cs-storage.md b/content/riak/cs/2.0.0/redirects/developing/apis/cs-storage.md new file mode 100644 index 0000000000..4cea30858b --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/cs-storage.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/" +aliases: +- /riak/cs/2.0.0/developing/apis/cs-storage +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/openstack.md b/content/riak/cs/2.0.0/redirects/developing/apis/openstack.md new file mode 100644 index 0000000000..b6df0cce93 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/openstack.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/openstack/" +aliases: +- /riak/cs/2.0.0/developing/apis/openstack +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/openstack/containers.md b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/containers.md new file mode 100644 index 0000000000..b6db759e16 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/containers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/openstack/" +aliases: +- /riak/cs/2.0.0/developing/apis/openstack/containers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/openstack/containers/create-container.md b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/containers/create-container.md new file mode 100644 index 0000000000..a2926bbfcf --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/containers/create-container.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/openstack/create-container/" +aliases: +- /riak/cs/2.0.0/developing/apis/openstack/containers/create-container +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/openstack/containers/delete-container.md b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/containers/delete-container.md new file mode 100644 index 0000000000..d8873dc413 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/containers/delete-container.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/openstack/delete-container/" +aliases: +- /riak/cs/2.0.0/developing/apis/openstack/containers/delete-container +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/openstack/containers/list-containers.md b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/containers/list-containers.md new file mode 100644 index 0000000000..c0e6f62418 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/containers/list-containers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/openstack/list-containers/" +aliases: +- /riak/cs/2.0.0/developing/apis/openstack/containers/list-containers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/openstack/containers/list-objects.md b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/containers/list-objects.md new file mode 100644 index 0000000000..02cb7323c1 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/containers/list-objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/openstack/list-objects/" +aliases: +- /riak/cs/2.0.0/developing/apis/openstack/containers/list-objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md new file mode 100644 index 0000000000..62ec22e7a4 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/openstack/mapping-from-oos-api-to-riak-cs-internal-api" +aliases: +- /riak/cs/2.0.0/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/openstack/objects.md b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/objects.md new file mode 100644 index 0000000000..277f65b9ae --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/openstack/" +aliases: +- /riak/cs/2.0.0/developing/apis/openstack/objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/openstack/objects/create-object.md b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/objects/create-object.md new file mode 100644 index 0000000000..6e6403a57e --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/objects/create-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/openstack/create-object/" +aliases: +- /riak/cs/2.0.0/developing/apis/openstack/objects/create-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/openstack/objects/delete-object.md b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/objects/delete-object.md new file mode 100644 index 0000000000..dfe3d6a6eb --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/objects/delete-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/openstack/delete-object/" +aliases: +- /riak/cs/2.0.0/developing/apis/openstack/objects/delete-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/openstack/objects/get-object.md b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/objects/get-object.md new file mode 100644 index 0000000000..9b7af7ccd4 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/objects/get-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/openstack/get-object/" +aliases: +- /riak/cs/2.0.0/developing/apis/openstack/objects/get-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/openstack/using-with-keystone.md b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/using-with-keystone.md new file mode 100644 index 0000000000..3e8c2db770 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/using-with-keystone.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/using-with-keystone/" +aliases: +- /riak/cs/2.0.0/developing/apis/openstack/using-with-keystone +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md new file mode 100644 index 0000000000..652dc02a3e --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/keystone-conf-sample/" +aliases: +- /riak/cs/2.0.0/developing/apis/openstack/using-with-keystone/keystone-conf-sample +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md new file mode 100644 index 0000000000..78b503e154 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/keystone-setup/" +aliases: +- /riak/cs/2.0.0/developing/apis/openstack/using-with-keystone/keystone-setup +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3.md new file mode 100644 index 0000000000..5f241e5fa0 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/" +aliases: +- /riak/cs/2.0.0/developing/apis/s3 +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets.md new file mode 100644 index 0000000000..5309089c4a --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/buckets +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/delete-bucket-policy.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/delete-bucket-policy.md new file mode 100644 index 0000000000..7c43c8eb3a --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/delete-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/delete-bucket-policy" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/buckets/delete-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/delete-bucket.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/delete-bucket.md new file mode 100644 index 0000000000..dd1901b288 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/delete-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/delete-bucket" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/buckets/delete-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/get-bucket-acl.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/get-bucket-acl.md new file mode 100644 index 0000000000..1111197a9b --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/get-bucket-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/get-bucket-acl" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/buckets/get-bucket-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/get-bucket-policy.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/get-bucket-policy.md new file mode 100644 index 0000000000..e77f46886a --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/get-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/get-bucket-policy" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/buckets/get-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/get-bucket.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/get-bucket.md new file mode 100644 index 0000000000..26abb5f94a --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/get-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/get-bucket" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/buckets/get-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/get-service.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/get-service.md new file mode 100644 index 0000000000..6d05fe4b55 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/get-service.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/get-service" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/buckets/get-service +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/put-bucket-acl.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/put-bucket-acl.md new file mode 100644 index 0000000000..eefb5b3932 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/put-bucket-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/put-bucket-acl" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/buckets/put-bucket-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/put-bucket-policy.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/put-bucket-policy.md new file mode 100644 index 0000000000..46f145bc25 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/put-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/put-bucket-policy" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/buckets/put-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/put-bucket.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/put-bucket.md new file mode 100644 index 0000000000..b9c8266f9a --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/buckets/put-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/put-bucket" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/buckets/put-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/common-request-headers.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/common-request-headers.md new file mode 100644 index 0000000000..f6857873c9 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/common-request-headers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/common-request-headers" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/common-request-headers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/common-response-headers.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/common-response-headers.md new file mode 100644 index 0000000000..f189e4a19e --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/common-response-headers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/common-response-headers" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/common-response-headers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md new file mode 100644 index 0000000000..a6919403e1 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/mapping-from-s3-api-to-riak-cs-internal-api" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects.md new file mode 100644 index 0000000000..9c2b1652de --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/delete-multiple.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/delete-multiple.md new file mode 100644 index 0000000000..63e3c1013c --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/delete-multiple.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/delete-multi" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/objects/delete-multiple +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/delete-object.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/delete-object.md new file mode 100644 index 0000000000..2fcdd769b6 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/delete-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/delete-object" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/objects/delete-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/get-object-acl.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/get-object-acl.md new file mode 100644 index 0000000000..ef18ffdf58 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/get-object-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/get-object-acl" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/objects/get-object-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/get-object.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/get-object.md new file mode 100644 index 0000000000..8ce65b47db --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/get-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/get-object" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/objects/get-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/head-object.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/head-object.md new file mode 100644 index 0000000000..9c4ed6d60c --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/head-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/head-object" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/objects/head-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads.md new file mode 100644 index 0000000000..6cfa3ea868 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/multipart-upload-overview/" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/objects/multipart-uploads +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md new file mode 100644 index 0000000000..e8e35ce87b --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/abort-multipart-upload" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md new file mode 100644 index 0000000000..ce2ffc2f5a --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/complete-multipart-upload" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md new file mode 100644 index 0000000000..34ca4e1300 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/initiate-multipart-upload" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md new file mode 100644 index 0000000000..99a90ecb17 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/list-multipart-uploads" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md new file mode 100644 index 0000000000..dd85eb026c --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/list-parts" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/objects/multipart-uploads/list-parts +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md new file mode 100644 index 0000000000..f8cd8621e6 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/upload-part" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/objects/multipart-uploads/upload-part +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/put-object-acl.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/put-object-acl.md new file mode 100644 index 0000000000..83cbc6056e --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/put-object-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/put-object-acl" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/objects/put-object-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/put-object-copy.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/put-object-copy.md new file mode 100644 index 0000000000..0f7c220b96 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/put-object-copy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/put-object-copy" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/objects/put-object-copy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/put-object.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/put-object.md new file mode 100644 index 0000000000..727a284a74 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/objects/put-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/put-object" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/objects/put-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/other-clients.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/other-clients.md new file mode 100644 index 0000000000..41b64df38e --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/other-clients.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/apis/storage/s3/" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/other-clients +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/other-clients/dragondisk.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/other-clients/dragondisk.md new file mode 100644 index 0000000000..b0f49b4517 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/other-clients/dragondisk.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/configuration/dragondisk/" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/other-clients/dragondisk +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/other-clients/fog.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/other-clients/fog.md new file mode 100644 index 0000000000..546cbc59c9 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/other-clients/fog.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/fog/" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/other-clients/fog +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/other-clients/transmit.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/other-clients/transmit.md new file mode 100644 index 0000000000..6c7ebf4577 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/other-clients/transmit.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/configuration/transmit/" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/other-clients/transmit +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/apis/s3/s3-client.md b/content/riak/cs/2.0.0/redirects/developing/apis/s3/s3-client.md new file mode 100644 index 0000000000..281258242e --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/apis/s3/s3-client.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/configuration/s3-client/" +aliases: +- /riak/cs/2.0.0/developing/apis/s3/s3-client +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/usage-and-billing-data.md b/content/riak/cs/2.0.0/redirects/developing/usage-and-billing-data.md new file mode 100644 index 0000000000..487953095e --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/usage-and-billing-data.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/usage-and-billing-data/" +aliases: +- /riak/cs/2.0.0/developing/usage-and-billing-data +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/usage-and-billing-data/access-statistics.md b/content/riak/cs/2.0.0/redirects/developing/usage-and-billing-data/access-statistics.md new file mode 100644 index 0000000000..a86c78101d --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/usage-and-billing-data/access-statistics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/querying-access-statistics/" +aliases: +- /riak/cs/2.0.0/developing/usage-and-billing-data/access-statistics/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/developing/usage-and-billing-data/storage-statistics.md b/content/riak/cs/2.0.0/redirects/developing/usage-and-billing-data/storage-statistics.md new file mode 100644 index 0000000000..96f62aea66 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/developing/usage-and-billing-data/storage-statistics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/querying-storage-statistics/" +aliases: +- /riak/cs/2.0.0/developing/usage-and-billing-data/storage-statistics/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/learning.md b/content/riak/cs/2.0.0/redirects/learning.md new file mode 100644 index 0000000000..4dd90d4662 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/learning.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/theory/" +aliases: + - /riak/cs/2.0.0/learning +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/learning/comparisons.md b/content/riak/cs/2.0.0/redirects/learning/comparisons.md new file mode 100644 index 0000000000..a83c9f0347 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/learning/comparisons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/theory/comparisons/" +aliases: + - /riak/cs/2.0.0/learning/comparisons +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/learning/comparisons/atmos.md b/content/riak/cs/2.0.0/redirects/learning/comparisons/atmos.md new file mode 100644 index 0000000000..60b3ff63f7 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/learning/comparisons/atmos.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/appendices/comparisons/atmos/" +aliases: + - /riak/cs/2.0.0/learning/comparisons/atmos +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/learning/comparisons/swift.md b/content/riak/cs/2.0.0/redirects/learning/comparisons/swift.md new file mode 100644 index 0000000000..d3ba70527d --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/learning/comparisons/swift.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/references/appendices/comparisons/swift/" +aliases: + - /riak/cs/2.0.0/learning/comparisons/swift +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/learning/faqs.md b/content/riak/cs/2.0.0/redirects/learning/faqs.md new file mode 100644 index 0000000000..253027efc4 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/learning/faqs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/faqs/riak-cs/" +aliases: + - /riak/cs/2.0.0/learning/faqs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/learning/garbage-collection.md b/content/riak/cs/2.0.0/redirects/learning/garbage-collection.md new file mode 100644 index 0000000000..2831ac9817 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/learning/garbage-collection.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/garbage-collection/" +aliases: + - /riak/cs/2.0.0/learning/garbage-collection +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/learning/multi-datacenter-overview.md b/content/riak/cs/2.0.0/redirects/learning/multi-datacenter-overview.md new file mode 100644 index 0000000000..3dfe94a884 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/learning/multi-datacenter-overview.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/multi-datacenter-overview//" +aliases: + - /riak/cs/2.0.0/learning/multi-datacenter-overview +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/learning/multipart-upload-overview.md b/content/riak/cs/2.0.0/redirects/learning/multipart-upload-overview.md new file mode 100644 index 0000000000..f0167fdf65 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/learning/multipart-upload-overview.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/multipart-upload-overview//" +aliases: + - /riak/cs/2.0.0/learning/multipart-upload-overview +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/learning/stanchion.md b/content/riak/cs/2.0.0/redirects/learning/stanchion.md new file mode 100644 index 0000000000..96b90be84c --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/learning/stanchion.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/theory/stanchion/" +aliases: + - /riak/cs/2.0.0/learning/stanchion/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/learning/version-compatibility.md b/content/riak/cs/2.0.0/redirects/learning/version-compatibility.md new file mode 100644 index 0000000000..4aa8d45f1b --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/learning/version-compatibility.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/version-compatibility/" +aliases: + - /riak/cs/2.0.0/learning/version-compatibility/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/quick-guide.md b/content/riak/cs/2.0.0/redirects/quick-guide.md new file mode 100644 index 0000000000..932cb83d24 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/quick-guide.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/tutorials/fast-track/" +aliases: +- /riak/cs/2.0.0/quick-guide +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/quick-guide/local-testing-environment.md b/content/riak/cs/2.0.0/redirects/quick-guide/local-testing-environment.md new file mode 100644 index 0000000000..86b3c67875 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/quick-guide/local-testing-environment.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/tutorials/fast-track/local-testing-environment/" +aliases: +- /riak/cs/2.0.0/quick-guide/local-testing-environment +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/quick-guide/test-installation.md b/content/riak/cs/2.0.0/redirects/quick-guide/test-installation.md new file mode 100644 index 0000000000..458fbf2236 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/quick-guide/test-installation.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/tutorials/fast-track/test-installation/" +aliases: +- /riak/cs/2.0.0/quick-guide/test-installation +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/quick-guide/virtual-test-environment.md b/content/riak/cs/2.0.0/redirects/quick-guide/virtual-test-environment.md new file mode 100644 index 0000000000..efb5dea616 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/quick-guide/virtual-test-environment.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/tutorials/fast-track/virtual-test-environment/" +aliases: +- /riak/cs/2.0.0/quick-guide/virtual-test-environment +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/quick-guide/what-is-riak-cs.md b/content/riak/cs/2.0.0/redirects/quick-guide/what-is-riak-cs.md new file mode 100644 index 0000000000..d674e5fb6f --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/quick-guide/what-is-riak-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/tutorials/fast-track/what-is-riak-cs/" +aliases: +- /riak/cs/2.0.0/quick-guide/what-is-riak-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/release-notes.md b/content/riak/cs/2.0.0/redirects/release-notes.md new file mode 100644 index 0000000000..5a3a0cb023 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/release-notes.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/release-notes/" +aliases: +- /riak/cs/2.0.0/release-notes/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/setup.md b/content/riak/cs/2.0.0/redirects/setup.md new file mode 100644 index 0000000000..429bb4f0e9 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/setup.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/installing/" +aliases: +- /riak/cs/2.0.0/setup +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/setup/installing.md b/content/riak/cs/2.0.0/redirects/setup/installing.md new file mode 100644 index 0000000000..4ce2582c71 --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/setup/installing.md @@ -0,0 +1,16 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/installing/" +aliases: +- /riak/cs/2.0.0/setup/installing +- /riak/cs/2.0.0/setup/installing/alpine-linux +- /riak/cs/2.0.0/setup/installing/amazon-web-services +- /riak/cs/2.0.0/setup/installing/debian-ubuntu +- /riak/cs/2.0.0/setup/installing/freebsd +- /riak/cs/2.0.0/setup/installing/oracle +- /riak/cs/2.0.0/setup/installing/rhel-centos +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/setup/upgrading.md b/content/riak/cs/2.0.0/redirects/setup/upgrading.md new file mode 100644 index 0000000000..315eba005e --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/setup/upgrading.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/rolling-upgrades/" +aliases: +- /riak/cs/2.0.0/setup/upgrading +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/using.md b/content/riak/cs/2.0.0/redirects/using.md new file mode 100644 index 0000000000..aaa7800aaf --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/using.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/operating/" +aliases: +- /riak/cs/2.0.0/using +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/using/command-line-tools.md b/content/riak/cs/2.0.0/redirects/using/command-line-tools.md new file mode 100644 index 0000000000..f434cb9c3b --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/using/command-line-tools.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/command-line-tools/" +aliases: + - /riak/cs/2.0.0/using/command-line-tools +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/using/launching-and-stopping.md b/content/riak/cs/2.0.0/redirects/using/launching-and-stopping.md new file mode 100644 index 0000000000..499b7df10d --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/using/launching-and-stopping.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/installing/launching-and-stopping" +aliases: + - /riak/cs/2.0.0/using/launching-and-stopping +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/using/logging.md b/content/riak/cs/2.0.0/redirects/using/logging.md new file mode 100644 index 0000000000..e505619e3a --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/using/logging.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/logging/" +aliases: + - /riak/cs/2.0.0/using/logging +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.0/redirects/using/monitoring-and-metrics.md b/content/riak/cs/2.0.0/redirects/using/monitoring-and-metrics.md new file mode 100644 index 0000000000..6e83c51e1d --- /dev/null +++ b/content/riak/cs/2.0.0/redirects/using/monitoring-and-metrics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.0/cookbooks/monitoring-and-metrics/" +aliases: + - /riak/cs/2.0.0/using/monitoring-and-metrics +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/add-ons.md b/content/riak/cs/2.0.1/redirects/add-ons.md new file mode 100644 index 0000000000..f6d5699fff --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/add-ons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/operating/advanced/" +aliases: + - /riak/cs/2.0.1/add-ons +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/add-ons/add-ons.md b/content/riak/cs/2.0.1/redirects/add-ons/add-ons.md new file mode 100644 index 0000000000..4143f8357f --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/add-ons/add-ons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/appendices/riak-cs-control/" +aliases: + - /riak/cs/2.0.1/add-ons/riak-cs-control/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/configuring.md b/content/riak/cs/2.0.1/redirects/configuring.md new file mode 100644 index 0000000000..9126f3bac7 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/configuring.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/configuration/" +aliases: + - /riak/cs/2.0.1/configuring +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/configuring/load-balancing-proxy.md b/content/riak/cs/2.0.1/redirects/configuring/load-balancing-proxy.md new file mode 100644 index 0000000000..f729aaf844 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/configuring/load-balancing-proxy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/configuration/load-balancing-proxy/" +aliases: + - /riak/cs/2.0.1/configuring/load-balancing-proxy/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/configuring/multi-datacenter.md b/content/riak/cs/2.0.1/redirects/configuring/multi-datacenter.md new file mode 100644 index 0000000000..5b035d0e8a --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/configuring/multi-datacenter.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/configuration/multi-datacenter/" +aliases: + - /riak/cs/2.0.1/configuring/multi-datacenter/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/configuring/reference.md b/content/riak/cs/2.0.1/redirects/configuring/reference.md new file mode 100644 index 0000000000..d39b2d70e2 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/configuring/reference.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/configuration/reference/" +aliases: + - /riak/cs/2.0.1/configuring/reference/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/configuring/riak-cs.md b/content/riak/cs/2.0.1/redirects/configuring/riak-cs.md new file mode 100644 index 0000000000..2fe052ec8f --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/configuring/riak-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/configuration/riak-cs/" +aliases: + - /riak/cs/2.0.1/configuring/riak-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/configuring/riak-kv-for-cs.md b/content/riak/cs/2.0.1/redirects/configuring/riak-kv-for-cs.md new file mode 100644 index 0000000000..78d2a0b9a5 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/configuring/riak-kv-for-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/configuration/riak-for-cs/" +aliases: + - /riak/cs/2.0.1/configuring/riak-kv-for-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/configuring/stanchion.md b/content/riak/cs/2.0.1/redirects/configuring/stanchion.md new file mode 100644 index 0000000000..5007e34b24 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/configuring/stanchion.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/configuration/stanchion/" +aliases: + - /riak/cs/2.0.1/configuring/stanchion/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/configuring/superclusters.md b/content/riak/cs/2.0.1/redirects/configuring/superclusters.md new file mode 100644 index 0000000000..560d5b3cbd --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/configuring/superclusters.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/supercluster/" +aliases: + - /riak/cs/2.0.1/configuring/superclusters/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/accounts-and-admin.md b/content/riak/cs/2.0.1/redirects/developing/accounts-and-admin.md new file mode 100644 index 0000000000..72dfac540c --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/accounts-and-admin.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/appendices/http-admin/" +aliases: +- /riak/cs/2.0.1/developing/accounts-and-admin +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/accounts-and-admin/access-control-lists.md b/content/riak/cs/2.0.1/redirects/developing/accounts-and-admin/access-control-lists.md new file mode 100644 index 0000000000..2a67d1fa30 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/accounts-and-admin/access-control-lists.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/access-control-lists/" +aliases: +- /riak/cs/2.0.1/developing/accounts-and-admin/access-control-lists/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/accounts-and-admin/account-management.md b/content/riak/cs/2.0.1/redirects/developing/accounts-and-admin/account-management.md new file mode 100644 index 0000000000..7912942a44 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/accounts-and-admin/account-management.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/account-management/" +aliases: +- /riak/cs/2.0.1/developing/accounts-and-admin/account-management/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/accounts-and-admin/authentication.md b/content/riak/cs/2.0.1/redirects/developing/accounts-and-admin/authentication.md new file mode 100644 index 0000000000..52859ab188 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/accounts-and-admin/authentication.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/authentication/" +aliases: +- /riak/cs/2.0.1/developing/accounts-and-admin/authentication/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/accounts-and-admin/designate-admin-user.md b/content/riak/cs/2.0.1/redirects/developing/accounts-and-admin/designate-admin-user.md new file mode 100644 index 0000000000..6e1b55b92b --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/accounts-and-admin/designate-admin-user.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/designate-admin-user/" +aliases: +- /riak/cs/2.0.1/developing/accounts-and-admin/designate-admin-user/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis.md b/content/riak/cs/2.0.1/redirects/developing/apis.md new file mode 100644 index 0000000000..6dfc276f86 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/" +aliases: +- /riak/cs/2.0.1/developing/apis +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/cs-storage.md b/content/riak/cs/2.0.1/redirects/developing/apis/cs-storage.md new file mode 100644 index 0000000000..1e23620c07 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/cs-storage.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/" +aliases: +- /riak/cs/2.0.1/developing/apis/cs-storage +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/openstack.md b/content/riak/cs/2.0.1/redirects/developing/apis/openstack.md new file mode 100644 index 0000000000..6924f29630 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/openstack.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/openstack/" +aliases: +- /riak/cs/2.0.1/developing/apis/openstack +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/openstack/containers.md b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/containers.md new file mode 100644 index 0000000000..2e26c77e2a --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/containers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/openstack/" +aliases: +- /riak/cs/2.0.1/developing/apis/openstack/containers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/openstack/containers/create-container.md b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/containers/create-container.md new file mode 100644 index 0000000000..90a861b768 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/containers/create-container.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/openstack/create-container/" +aliases: +- /riak/cs/2.0.1/developing/apis/openstack/containers/create-container +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/openstack/containers/delete-container.md b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/containers/delete-container.md new file mode 100644 index 0000000000..c6e1bba09d --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/containers/delete-container.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/openstack/delete-container/" +aliases: +- /riak/cs/2.0.1/developing/apis/openstack/containers/delete-container +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/openstack/containers/list-containers.md b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/containers/list-containers.md new file mode 100644 index 0000000000..f678efa6d9 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/containers/list-containers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/openstack/list-containers/" +aliases: +- /riak/cs/2.0.1/developing/apis/openstack/containers/list-containers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/openstack/containers/list-objects.md b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/containers/list-objects.md new file mode 100644 index 0000000000..8fe3e63dc1 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/containers/list-objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/openstack/list-objects/" +aliases: +- /riak/cs/2.0.1/developing/apis/openstack/containers/list-objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md new file mode 100644 index 0000000000..18713b67ef --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/openstack/mapping-from-oos-api-to-riak-cs-internal-api" +aliases: +- /riak/cs/2.0.1/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/openstack/objects.md b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/objects.md new file mode 100644 index 0000000000..c70fca30d7 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/openstack/" +aliases: +- /riak/cs/2.0.1/developing/apis/openstack/objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/openstack/objects/create-object.md b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/objects/create-object.md new file mode 100644 index 0000000000..31ff45c372 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/objects/create-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/openstack/create-object/" +aliases: +- /riak/cs/2.0.1/developing/apis/openstack/objects/create-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/openstack/objects/delete-object.md b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/objects/delete-object.md new file mode 100644 index 0000000000..23be22a080 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/objects/delete-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/openstack/delete-object/" +aliases: +- /riak/cs/2.0.1/developing/apis/openstack/objects/delete-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/openstack/objects/get-object.md b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/objects/get-object.md new file mode 100644 index 0000000000..a1b2b3364a --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/objects/get-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/openstack/get-object/" +aliases: +- /riak/cs/2.0.1/developing/apis/openstack/objects/get-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/openstack/using-with-keystone.md b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/using-with-keystone.md new file mode 100644 index 0000000000..a3a3c0ea33 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/using-with-keystone.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/using-with-keystone/" +aliases: +- /riak/cs/2.0.1/developing/apis/openstack/using-with-keystone +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md new file mode 100644 index 0000000000..6cd442d19e --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/keystone-conf-sample/" +aliases: +- /riak/cs/2.0.1/developing/apis/openstack/using-with-keystone/keystone-conf-sample +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md new file mode 100644 index 0000000000..9fbd40d7ad --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/keystone-setup/" +aliases: +- /riak/cs/2.0.1/developing/apis/openstack/using-with-keystone/keystone-setup +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3.md new file mode 100644 index 0000000000..91ca35143d --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/" +aliases: +- /riak/cs/2.0.1/developing/apis/s3 +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets.md new file mode 100644 index 0000000000..ea6bd91ada --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/buckets +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/delete-bucket-policy.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/delete-bucket-policy.md new file mode 100644 index 0000000000..ab69ce5bd4 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/delete-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/delete-bucket-policy" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/buckets/delete-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/delete-bucket.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/delete-bucket.md new file mode 100644 index 0000000000..2172ea5a80 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/delete-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/delete-bucket" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/buckets/delete-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/get-bucket-acl.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/get-bucket-acl.md new file mode 100644 index 0000000000..e0c7e9fa5a --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/get-bucket-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/get-bucket-acl" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/buckets/get-bucket-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/get-bucket-policy.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/get-bucket-policy.md new file mode 100644 index 0000000000..07b943b13f --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/get-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/get-bucket-policy" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/buckets/get-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/get-bucket.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/get-bucket.md new file mode 100644 index 0000000000..459a4a76bc --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/get-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/get-bucket" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/buckets/get-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/get-service.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/get-service.md new file mode 100644 index 0000000000..9e15bdd788 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/get-service.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/get-service" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/buckets/get-service +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/put-bucket-acl.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/put-bucket-acl.md new file mode 100644 index 0000000000..1782bf1993 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/put-bucket-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/put-bucket-acl" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/buckets/put-bucket-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/put-bucket-policy.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/put-bucket-policy.md new file mode 100644 index 0000000000..d149a4a91c --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/put-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/put-bucket-policy" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/buckets/put-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/put-bucket.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/put-bucket.md new file mode 100644 index 0000000000..52348a3522 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/buckets/put-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/put-bucket" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/buckets/put-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/common-request-headers.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/common-request-headers.md new file mode 100644 index 0000000000..e5fef76f89 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/common-request-headers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/common-request-headers" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/common-request-headers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/common-response-headers.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/common-response-headers.md new file mode 100644 index 0000000000..11cef3b809 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/common-response-headers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/common-response-headers" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/common-response-headers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md new file mode 100644 index 0000000000..6b98d585ef --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/mapping-from-s3-api-to-riak-cs-internal-api" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects.md new file mode 100644 index 0000000000..2423206fcd --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/delete-multiple.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/delete-multiple.md new file mode 100644 index 0000000000..256fd3810f --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/delete-multiple.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/delete-multi" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/objects/delete-multiple +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/delete-object.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/delete-object.md new file mode 100644 index 0000000000..15f4193ccf --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/delete-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/delete-object" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/objects/delete-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/get-object-acl.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/get-object-acl.md new file mode 100644 index 0000000000..e09ec622d3 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/get-object-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/get-object-acl" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/objects/get-object-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/get-object.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/get-object.md new file mode 100644 index 0000000000..32d251d7bf --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/get-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/get-object" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/objects/get-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/head-object.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/head-object.md new file mode 100644 index 0000000000..eaf73c2bdd --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/head-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/head-object" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/objects/head-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads.md new file mode 100644 index 0000000000..06694b9f5e --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/multipart-upload-overview/" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/objects/multipart-uploads +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md new file mode 100644 index 0000000000..7d271b86e9 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/abort-multipart-upload" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md new file mode 100644 index 0000000000..c07c77977c --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/complete-multipart-upload" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md new file mode 100644 index 0000000000..73a210a407 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/initiate-multipart-upload" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md new file mode 100644 index 0000000000..88e4d947ff --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/list-multipart-uploads" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md new file mode 100644 index 0000000000..ee2ceaa6ac --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/list-parts" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/objects/multipart-uploads/list-parts +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md new file mode 100644 index 0000000000..bf5c97384a --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/upload-part" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/objects/multipart-uploads/upload-part +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/put-object-acl.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/put-object-acl.md new file mode 100644 index 0000000000..0e7382f573 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/put-object-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/put-object-acl" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/objects/put-object-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/put-object-copy.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/put-object-copy.md new file mode 100644 index 0000000000..27b36eb844 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/put-object-copy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/put-object-copy" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/objects/put-object-copy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/put-object.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/put-object.md new file mode 100644 index 0000000000..64ba25914e --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/objects/put-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/put-object" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/objects/put-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/other-clients.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/other-clients.md new file mode 100644 index 0000000000..48acef40ac --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/other-clients.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/apis/storage/s3/" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/other-clients +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/other-clients/dragondisk.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/other-clients/dragondisk.md new file mode 100644 index 0000000000..d2e313a3a9 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/other-clients/dragondisk.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/configuration/dragondisk/" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/other-clients/dragondisk +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/other-clients/fog.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/other-clients/fog.md new file mode 100644 index 0000000000..74b9010184 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/other-clients/fog.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/fog/" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/other-clients/fog +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/other-clients/transmit.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/other-clients/transmit.md new file mode 100644 index 0000000000..51c1627f24 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/other-clients/transmit.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/configuration/transmit/" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/other-clients/transmit +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/apis/s3/s3-client.md b/content/riak/cs/2.0.1/redirects/developing/apis/s3/s3-client.md new file mode 100644 index 0000000000..948218ffc1 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/apis/s3/s3-client.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/configuration/s3-client/" +aliases: +- /riak/cs/2.0.1/developing/apis/s3/s3-client +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/usage-and-billing-data.md b/content/riak/cs/2.0.1/redirects/developing/usage-and-billing-data.md new file mode 100644 index 0000000000..0501a020a7 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/usage-and-billing-data.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/usage-and-billing-data/" +aliases: +- /riak/cs/2.0.1/developing/usage-and-billing-data +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/usage-and-billing-data/access-statistics.md b/content/riak/cs/2.0.1/redirects/developing/usage-and-billing-data/access-statistics.md new file mode 100644 index 0000000000..a62c7bbe2b --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/usage-and-billing-data/access-statistics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/querying-access-statistics/" +aliases: +- /riak/cs/2.0.1/developing/usage-and-billing-data/access-statistics/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/developing/usage-and-billing-data/storage-statistics.md b/content/riak/cs/2.0.1/redirects/developing/usage-and-billing-data/storage-statistics.md new file mode 100644 index 0000000000..99d23a06a4 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/developing/usage-and-billing-data/storage-statistics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/querying-storage-statistics/" +aliases: +- /riak/cs/2.0.1/developing/usage-and-billing-data/storage-statistics/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/learning.md b/content/riak/cs/2.0.1/redirects/learning.md new file mode 100644 index 0000000000..2a250a2779 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/learning.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/theory/" +aliases: + - /riak/cs/2.0.1/learning +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/learning/comparisons.md b/content/riak/cs/2.0.1/redirects/learning/comparisons.md new file mode 100644 index 0000000000..4c70a6b2da --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/learning/comparisons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/theory/comparisons/" +aliases: + - /riak/cs/2.0.1/learning/comparisons +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/learning/comparisons/atmos.md b/content/riak/cs/2.0.1/redirects/learning/comparisons/atmos.md new file mode 100644 index 0000000000..8ed59c3b64 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/learning/comparisons/atmos.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/appendices/comparisons/atmos/" +aliases: + - /riak/cs/2.0.1/learning/comparisons/atmos +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/learning/comparisons/swift.md b/content/riak/cs/2.0.1/redirects/learning/comparisons/swift.md new file mode 100644 index 0000000000..e2390c499f --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/learning/comparisons/swift.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/references/appendices/comparisons/swift/" +aliases: + - /riak/cs/2.0.1/learning/comparisons/swift +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/learning/faqs.md b/content/riak/cs/2.0.1/redirects/learning/faqs.md new file mode 100644 index 0000000000..b3e822013e --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/learning/faqs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/faqs/riak-cs/" +aliases: + - /riak/cs/2.0.1/learning/faqs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/learning/garbage-collection.md b/content/riak/cs/2.0.1/redirects/learning/garbage-collection.md new file mode 100644 index 0000000000..d0aaa5397c --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/learning/garbage-collection.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/garbage-collection/" +aliases: + - /riak/cs/2.0.1/learning/garbage-collection +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/learning/multi-datacenter-overview.md b/content/riak/cs/2.0.1/redirects/learning/multi-datacenter-overview.md new file mode 100644 index 0000000000..e4b98f6801 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/learning/multi-datacenter-overview.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/multi-datacenter-overview//" +aliases: + - /riak/cs/2.0.1/learning/multi-datacenter-overview +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/learning/multipart-upload-overview.md b/content/riak/cs/2.0.1/redirects/learning/multipart-upload-overview.md new file mode 100644 index 0000000000..790a919368 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/learning/multipart-upload-overview.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/multipart-upload-overview//" +aliases: + - /riak/cs/2.0.1/learning/multipart-upload-overview +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/learning/stanchion.md b/content/riak/cs/2.0.1/redirects/learning/stanchion.md new file mode 100644 index 0000000000..8741062157 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/learning/stanchion.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/theory/stanchion/" +aliases: + - /riak/cs/2.0.1/learning/stanchion/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/learning/version-compatibility.md b/content/riak/cs/2.0.1/redirects/learning/version-compatibility.md new file mode 100644 index 0000000000..a58cf0d62d --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/learning/version-compatibility.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/version-compatibility/" +aliases: + - /riak/cs/2.0.1/learning/version-compatibility/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/quick-guide.md b/content/riak/cs/2.0.1/redirects/quick-guide.md new file mode 100644 index 0000000000..ef4dc654ca --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/quick-guide.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/tutorials/fast-track/" +aliases: +- /riak/cs/2.0.1/quick-guide +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/quick-guide/local-testing-environment.md b/content/riak/cs/2.0.1/redirects/quick-guide/local-testing-environment.md new file mode 100644 index 0000000000..f087b66dd7 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/quick-guide/local-testing-environment.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/tutorials/fast-track/local-testing-environment/" +aliases: +- /riak/cs/2.0.1/quick-guide/local-testing-environment +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/quick-guide/test-installation.md b/content/riak/cs/2.0.1/redirects/quick-guide/test-installation.md new file mode 100644 index 0000000000..7b9bf72c53 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/quick-guide/test-installation.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/tutorials/fast-track/test-installation/" +aliases: +- /riak/cs/2.0.1/quick-guide/test-installation +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/quick-guide/virtual-test-environment.md b/content/riak/cs/2.0.1/redirects/quick-guide/virtual-test-environment.md new file mode 100644 index 0000000000..63574cdeb6 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/quick-guide/virtual-test-environment.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/tutorials/fast-track/virtual-test-environment/" +aliases: +- /riak/cs/2.0.1/quick-guide/virtual-test-environment +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/quick-guide/what-is-riak-cs.md b/content/riak/cs/2.0.1/redirects/quick-guide/what-is-riak-cs.md new file mode 100644 index 0000000000..23120eab4e --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/quick-guide/what-is-riak-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/tutorials/fast-track/what-is-riak-cs/" +aliases: +- /riak/cs/2.0.1/quick-guide/what-is-riak-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/release-notes.md b/content/riak/cs/2.0.1/redirects/release-notes.md new file mode 100644 index 0000000000..3af9ab4419 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/release-notes.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/release-notes/" +aliases: +- /riak/cs/2.0.1/release-notes/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/setup.md b/content/riak/cs/2.0.1/redirects/setup.md new file mode 100644 index 0000000000..cbd7d09647 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/setup.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/installing/" +aliases: +- /riak/cs/2.0.1/setup +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/setup/installing.md b/content/riak/cs/2.0.1/redirects/setup/installing.md new file mode 100644 index 0000000000..8a611ea4e0 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/setup/installing.md @@ -0,0 +1,16 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/installing/" +aliases: +- /riak/cs/2.0.1/setup/installing +- /riak/cs/2.0.1/setup/installing/alpine-linux +- /riak/cs/2.0.1/setup/installing/amazon-web-services +- /riak/cs/2.0.1/setup/installing/debian-ubuntu +- /riak/cs/2.0.1/setup/installing/freebsd +- /riak/cs/2.0.1/setup/installing/oracle +- /riak/cs/2.0.1/setup/installing/rhel-centos +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/setup/upgrading.md b/content/riak/cs/2.0.1/redirects/setup/upgrading.md new file mode 100644 index 0000000000..810f70c654 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/setup/upgrading.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/rolling-upgrades/" +aliases: +- /riak/cs/2.0.1/setup/upgrading +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/using.md b/content/riak/cs/2.0.1/redirects/using.md new file mode 100644 index 0000000000..6feeac3cc5 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/using.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/operating/" +aliases: +- /riak/cs/2.0.1/using +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/using/command-line-tools.md b/content/riak/cs/2.0.1/redirects/using/command-line-tools.md new file mode 100644 index 0000000000..de89e5cdbf --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/using/command-line-tools.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/command-line-tools/" +aliases: + - /riak/cs/2.0.1/using/command-line-tools +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/using/launching-and-stopping.md b/content/riak/cs/2.0.1/redirects/using/launching-and-stopping.md new file mode 100644 index 0000000000..828e72d98a --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/using/launching-and-stopping.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/installing/launching-and-stopping" +aliases: + - /riak/cs/2.0.1/using/launching-and-stopping +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/using/logging.md b/content/riak/cs/2.0.1/redirects/using/logging.md new file mode 100644 index 0000000000..b9c40ac3f4 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/using/logging.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/logging/" +aliases: + - /riak/cs/2.0.1/using/logging +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.0.1/redirects/using/monitoring-and-metrics.md b/content/riak/cs/2.0.1/redirects/using/monitoring-and-metrics.md new file mode 100644 index 0000000000..1dc8134057 --- /dev/null +++ b/content/riak/cs/2.0.1/redirects/using/monitoring-and-metrics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.0.1/cookbooks/monitoring-and-metrics/" +aliases: + - /riak/cs/2.0.1/using/monitoring-and-metrics +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/add-ons.md b/content/riak/cs/2.1.0/redirects/add-ons.md new file mode 100644 index 0000000000..cd7083a52b --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/add-ons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/operating/advanced/" +aliases: + - /riak/cs/2.1.0/add-ons +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/add-ons/add-ons.md b/content/riak/cs/2.1.0/redirects/add-ons/add-ons.md new file mode 100644 index 0000000000..ded67c8f25 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/add-ons/add-ons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/appendices/riak-cs-control/" +aliases: + - /riak/cs/2.1.0/add-ons/riak-cs-control/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/configuring.md b/content/riak/cs/2.1.0/redirects/configuring.md new file mode 100644 index 0000000000..4ed0cfae4d --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/configuring.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/configuration/" +aliases: + - /riak/cs/2.1.0/configuring +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/configuring/load-balancing-proxy.md b/content/riak/cs/2.1.0/redirects/configuring/load-balancing-proxy.md new file mode 100644 index 0000000000..31be6fe9f1 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/configuring/load-balancing-proxy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/configuration/load-balancing-proxy/" +aliases: + - /riak/cs/2.1.0/configuring/load-balancing-proxy/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/configuring/multi-datacenter.md b/content/riak/cs/2.1.0/redirects/configuring/multi-datacenter.md new file mode 100644 index 0000000000..db7d8f68b3 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/configuring/multi-datacenter.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/configuration/multi-datacenter/" +aliases: + - /riak/cs/2.1.0/configuring/multi-datacenter/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/configuring/reference.md b/content/riak/cs/2.1.0/redirects/configuring/reference.md new file mode 100644 index 0000000000..7537af69dc --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/configuring/reference.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/configuration/reference/" +aliases: + - /riak/cs/2.1.0/configuring/reference/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/configuring/riak-cs.md b/content/riak/cs/2.1.0/redirects/configuring/riak-cs.md new file mode 100644 index 0000000000..c85973da7e --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/configuring/riak-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/configuration/riak-cs/" +aliases: + - /riak/cs/2.1.0/configuring/riak-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/configuring/riak-kv-for-cs.md b/content/riak/cs/2.1.0/redirects/configuring/riak-kv-for-cs.md new file mode 100644 index 0000000000..cfbafcba85 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/configuring/riak-kv-for-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/configuration/riak-for-cs/" +aliases: + - /riak/cs/2.1.0/configuring/riak-kv-for-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/configuring/stanchion.md b/content/riak/cs/2.1.0/redirects/configuring/stanchion.md new file mode 100644 index 0000000000..36e177cfc5 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/configuring/stanchion.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/configuration/stanchion/" +aliases: + - /riak/cs/2.1.0/configuring/stanchion/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/configuring/superclusters.md b/content/riak/cs/2.1.0/redirects/configuring/superclusters.md new file mode 100644 index 0000000000..32435b8dc1 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/configuring/superclusters.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/supercluster/" +aliases: + - /riak/cs/2.1.0/configuring/superclusters/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/accounts-and-admin.md b/content/riak/cs/2.1.0/redirects/developing/accounts-and-admin.md new file mode 100644 index 0000000000..688c0a4e11 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/accounts-and-admin.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/appendices/http-admin/" +aliases: +- /riak/cs/2.1.0/developing/accounts-and-admin +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/accounts-and-admin/access-control-lists.md b/content/riak/cs/2.1.0/redirects/developing/accounts-and-admin/access-control-lists.md new file mode 100644 index 0000000000..0cfa2f7b62 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/accounts-and-admin/access-control-lists.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/access-control-lists/" +aliases: +- /riak/cs/2.1.0/developing/accounts-and-admin/access-control-lists/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/accounts-and-admin/account-management.md b/content/riak/cs/2.1.0/redirects/developing/accounts-and-admin/account-management.md new file mode 100644 index 0000000000..a9688e1c1f --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/accounts-and-admin/account-management.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/account-management/" +aliases: +- /riak/cs/2.1.0/developing/accounts-and-admin/account-management/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/accounts-and-admin/authentication.md b/content/riak/cs/2.1.0/redirects/developing/accounts-and-admin/authentication.md new file mode 100644 index 0000000000..ddd86011ed --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/accounts-and-admin/authentication.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/authentication/" +aliases: +- /riak/cs/2.1.0/developing/accounts-and-admin/authentication/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/accounts-and-admin/designate-admin-user.md b/content/riak/cs/2.1.0/redirects/developing/accounts-and-admin/designate-admin-user.md new file mode 100644 index 0000000000..e865c6a965 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/accounts-and-admin/designate-admin-user.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/designate-admin-user/" +aliases: +- /riak/cs/2.1.0/developing/accounts-and-admin/designate-admin-user/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis.md b/content/riak/cs/2.1.0/redirects/developing/apis.md new file mode 100644 index 0000000000..086b78393d --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/" +aliases: +- /riak/cs/2.1.0/developing/apis +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/cs-storage.md b/content/riak/cs/2.1.0/redirects/developing/apis/cs-storage.md new file mode 100644 index 0000000000..b80d1a7c4d --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/cs-storage.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/" +aliases: +- /riak/cs/2.1.0/developing/apis/cs-storage +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/openstack.md b/content/riak/cs/2.1.0/redirects/developing/apis/openstack.md new file mode 100644 index 0000000000..4976fccdc7 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/openstack.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/openstack/" +aliases: +- /riak/cs/2.1.0/developing/apis/openstack +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/openstack/containers.md b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/containers.md new file mode 100644 index 0000000000..c9c390f28e --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/containers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/openstack/" +aliases: +- /riak/cs/2.1.0/developing/apis/openstack/containers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/openstack/containers/create-container.md b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/containers/create-container.md new file mode 100644 index 0000000000..7cc110c92e --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/containers/create-container.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/openstack/create-container/" +aliases: +- /riak/cs/2.1.0/developing/apis/openstack/containers/create-container +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/openstack/containers/delete-container.md b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/containers/delete-container.md new file mode 100644 index 0000000000..850ddea36a --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/containers/delete-container.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/openstack/delete-container/" +aliases: +- /riak/cs/2.1.0/developing/apis/openstack/containers/delete-container +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/openstack/containers/list-containers.md b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/containers/list-containers.md new file mode 100644 index 0000000000..c64d47942a --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/containers/list-containers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/openstack/list-containers/" +aliases: +- /riak/cs/2.1.0/developing/apis/openstack/containers/list-containers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/openstack/containers/list-objects.md b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/containers/list-objects.md new file mode 100644 index 0000000000..2978040a88 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/containers/list-objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/openstack/list-objects/" +aliases: +- /riak/cs/2.1.0/developing/apis/openstack/containers/list-objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md new file mode 100644 index 0000000000..e4f968f4e5 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/openstack/mapping-from-oos-api-to-riak-cs-internal-api" +aliases: +- /riak/cs/2.1.0/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/openstack/objects.md b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/objects.md new file mode 100644 index 0000000000..bbb1e6ad0c --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/openstack/" +aliases: +- /riak/cs/2.1.0/developing/apis/openstack/objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/openstack/objects/create-object.md b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/objects/create-object.md new file mode 100644 index 0000000000..4d9fc0258d --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/objects/create-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/openstack/create-object/" +aliases: +- /riak/cs/2.1.0/developing/apis/openstack/objects/create-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/openstack/objects/delete-object.md b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/objects/delete-object.md new file mode 100644 index 0000000000..79ab7f1c82 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/objects/delete-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/openstack/delete-object/" +aliases: +- /riak/cs/2.1.0/developing/apis/openstack/objects/delete-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/openstack/objects/get-object.md b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/objects/get-object.md new file mode 100644 index 0000000000..574253e92d --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/objects/get-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/openstack/get-object/" +aliases: +- /riak/cs/2.1.0/developing/apis/openstack/objects/get-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/openstack/using-with-keystone.md b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/using-with-keystone.md new file mode 100644 index 0000000000..c83c6801c1 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/using-with-keystone.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/using-with-keystone/" +aliases: +- /riak/cs/2.1.0/developing/apis/openstack/using-with-keystone +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md new file mode 100644 index 0000000000..57fa87fbc9 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/keystone-conf-sample/" +aliases: +- /riak/cs/2.1.0/developing/apis/openstack/using-with-keystone/keystone-conf-sample +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md new file mode 100644 index 0000000000..3a589acf67 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/keystone-setup/" +aliases: +- /riak/cs/2.1.0/developing/apis/openstack/using-with-keystone/keystone-setup +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3.md new file mode 100644 index 0000000000..c80c3a4ed3 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/" +aliases: +- /riak/cs/2.1.0/developing/apis/s3 +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets.md new file mode 100644 index 0000000000..ddf57424dd --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/buckets +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/delete-bucket-policy.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/delete-bucket-policy.md new file mode 100644 index 0000000000..7d68a2ac8d --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/delete-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/delete-bucket-policy" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/buckets/delete-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/delete-bucket.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/delete-bucket.md new file mode 100644 index 0000000000..d07ab8e490 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/delete-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/delete-bucket" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/buckets/delete-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/get-bucket-acl.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/get-bucket-acl.md new file mode 100644 index 0000000000..a24b0dbfb0 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/get-bucket-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/get-bucket-acl" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/buckets/get-bucket-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/get-bucket-policy.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/get-bucket-policy.md new file mode 100644 index 0000000000..a93ed2cdc2 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/get-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/get-bucket-policy" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/buckets/get-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/get-bucket.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/get-bucket.md new file mode 100644 index 0000000000..4f4479873d --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/get-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/get-bucket" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/buckets/get-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/get-service.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/get-service.md new file mode 100644 index 0000000000..cb3b82e954 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/get-service.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/get-service" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/buckets/get-service +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/put-bucket-acl.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/put-bucket-acl.md new file mode 100644 index 0000000000..a3cbad370d --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/put-bucket-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/put-bucket-acl" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/buckets/put-bucket-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/put-bucket-policy.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/put-bucket-policy.md new file mode 100644 index 0000000000..03c76d4575 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/put-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/put-bucket-policy" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/buckets/put-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/put-bucket.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/put-bucket.md new file mode 100644 index 0000000000..4b61cf825f --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/buckets/put-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/put-bucket" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/buckets/put-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/common-request-headers.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/common-request-headers.md new file mode 100644 index 0000000000..317449984f --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/common-request-headers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/common-request-headers" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/common-request-headers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/common-response-headers.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/common-response-headers.md new file mode 100644 index 0000000000..298324ba28 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/common-response-headers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/common-response-headers" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/common-response-headers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md new file mode 100644 index 0000000000..6aa6837ee6 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/mapping-from-s3-api-to-riak-cs-internal-api" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects.md new file mode 100644 index 0000000000..ea10d99bc8 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/delete-multiple.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/delete-multiple.md new file mode 100644 index 0000000000..c3aea134e8 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/delete-multiple.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/delete-multi" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/objects/delete-multiple +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/delete-object.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/delete-object.md new file mode 100644 index 0000000000..4ff583926f --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/delete-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/delete-object" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/objects/delete-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/get-object-acl.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/get-object-acl.md new file mode 100644 index 0000000000..869edb2d12 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/get-object-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/get-object-acl" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/objects/get-object-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/get-object.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/get-object.md new file mode 100644 index 0000000000..5c2cadf6ca --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/get-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/get-object" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/objects/get-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/head-object.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/head-object.md new file mode 100644 index 0000000000..c2190490d9 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/head-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/head-object" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/objects/head-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads.md new file mode 100644 index 0000000000..7e53011c46 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/multipart-upload-overview/" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/objects/multipart-uploads +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md new file mode 100644 index 0000000000..9fd2ba63cf --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/abort-multipart-upload" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md new file mode 100644 index 0000000000..9c24c31d70 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/complete-multipart-upload" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md new file mode 100644 index 0000000000..217a770bed --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/initiate-multipart-upload" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md new file mode 100644 index 0000000000..068ad808e7 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/list-multipart-uploads" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md new file mode 100644 index 0000000000..80a7a5d56f --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/list-parts" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/objects/multipart-uploads/list-parts +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md new file mode 100644 index 0000000000..cc229391fd --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/upload-part" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/objects/multipart-uploads/upload-part +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/put-object-acl.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/put-object-acl.md new file mode 100644 index 0000000000..e7ea75dc22 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/put-object-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/put-object-acl" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/objects/put-object-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/put-object-copy.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/put-object-copy.md new file mode 100644 index 0000000000..4fddcbce07 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/put-object-copy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/put-object-copy" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/objects/put-object-copy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/put-object.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/put-object.md new file mode 100644 index 0000000000..2efddbb6b5 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/objects/put-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/put-object" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/objects/put-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/other-clients.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/other-clients.md new file mode 100644 index 0000000000..b0fda9cebb --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/other-clients.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/apis/storage/s3/" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/other-clients +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/other-clients/dragondisk.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/other-clients/dragondisk.md new file mode 100644 index 0000000000..c83bc02c55 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/other-clients/dragondisk.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/configuration/dragondisk/" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/other-clients/dragondisk +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/other-clients/fog.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/other-clients/fog.md new file mode 100644 index 0000000000..306a9135a0 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/other-clients/fog.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/fog/" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/other-clients/fog +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/other-clients/transmit.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/other-clients/transmit.md new file mode 100644 index 0000000000..84790d5f25 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/other-clients/transmit.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/configuration/transmit/" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/other-clients/transmit +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/apis/s3/s3-client.md b/content/riak/cs/2.1.0/redirects/developing/apis/s3/s3-client.md new file mode 100644 index 0000000000..65334733a6 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/apis/s3/s3-client.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/configuration/s3-client/" +aliases: +- /riak/cs/2.1.0/developing/apis/s3/s3-client +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/usage-and-billing-data.md b/content/riak/cs/2.1.0/redirects/developing/usage-and-billing-data.md new file mode 100644 index 0000000000..3ba683e5e2 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/usage-and-billing-data.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/usage-and-billing-data/" +aliases: +- /riak/cs/2.1.0/developing/usage-and-billing-data +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/usage-and-billing-data/access-statistics.md b/content/riak/cs/2.1.0/redirects/developing/usage-and-billing-data/access-statistics.md new file mode 100644 index 0000000000..8a7205b014 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/usage-and-billing-data/access-statistics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/querying-access-statistics/" +aliases: +- /riak/cs/2.1.0/developing/usage-and-billing-data/access-statistics/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/developing/usage-and-billing-data/storage-statistics.md b/content/riak/cs/2.1.0/redirects/developing/usage-and-billing-data/storage-statistics.md new file mode 100644 index 0000000000..bb092f7719 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/developing/usage-and-billing-data/storage-statistics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/querying-storage-statistics/" +aliases: +- /riak/cs/2.1.0/developing/usage-and-billing-data/storage-statistics/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/learning.md b/content/riak/cs/2.1.0/redirects/learning.md new file mode 100644 index 0000000000..761f80dc04 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/learning.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/theory/" +aliases: + - /riak/cs/2.1.0/learning +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/learning/comparisons.md b/content/riak/cs/2.1.0/redirects/learning/comparisons.md new file mode 100644 index 0000000000..df6c3da7b2 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/learning/comparisons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/theory/comparisons/" +aliases: + - /riak/cs/2.1.0/learning/comparisons +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/learning/comparisons/atmos.md b/content/riak/cs/2.1.0/redirects/learning/comparisons/atmos.md new file mode 100644 index 0000000000..5dbf951d57 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/learning/comparisons/atmos.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/appendices/comparisons/atmos/" +aliases: + - /riak/cs/2.1.0/learning/comparisons/atmos +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/learning/comparisons/swift.md b/content/riak/cs/2.1.0/redirects/learning/comparisons/swift.md new file mode 100644 index 0000000000..16cdebe008 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/learning/comparisons/swift.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/references/appendices/comparisons/swift/" +aliases: + - /riak/cs/2.1.0/learning/comparisons/swift +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/learning/faqs.md b/content/riak/cs/2.1.0/redirects/learning/faqs.md new file mode 100644 index 0000000000..d7bee6dd80 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/learning/faqs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/faqs/riak-cs/" +aliases: + - /riak/cs/2.1.0/learning/faqs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/learning/garbage-collection.md b/content/riak/cs/2.1.0/redirects/learning/garbage-collection.md new file mode 100644 index 0000000000..2791a09463 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/learning/garbage-collection.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/garbage-collection/" +aliases: + - /riak/cs/2.1.0/learning/garbage-collection +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/learning/multi-datacenter-overview.md b/content/riak/cs/2.1.0/redirects/learning/multi-datacenter-overview.md new file mode 100644 index 0000000000..6802752aef --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/learning/multi-datacenter-overview.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/multi-datacenter-overview//" +aliases: + - /riak/cs/2.1.0/learning/multi-datacenter-overview +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/learning/multipart-upload-overview.md b/content/riak/cs/2.1.0/redirects/learning/multipart-upload-overview.md new file mode 100644 index 0000000000..bf841b562d --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/learning/multipart-upload-overview.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/multipart-upload-overview//" +aliases: + - /riak/cs/2.1.0/learning/multipart-upload-overview +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/learning/stanchion.md b/content/riak/cs/2.1.0/redirects/learning/stanchion.md new file mode 100644 index 0000000000..07d7aaebb9 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/learning/stanchion.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/theory/stanchion/" +aliases: + - /riak/cs/2.1.0/learning/stanchion/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/learning/version-compatibility.md b/content/riak/cs/2.1.0/redirects/learning/version-compatibility.md new file mode 100644 index 0000000000..2ff592db6f --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/learning/version-compatibility.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/version-compatibility/" +aliases: + - /riak/cs/2.1.0/learning/version-compatibility/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/quick-guide.md b/content/riak/cs/2.1.0/redirects/quick-guide.md new file mode 100644 index 0000000000..efd3ad62ef --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/quick-guide.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/tutorials/fast-track/" +aliases: +- /riak/cs/2.1.0/quick-guide +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/quick-guide/local-testing-environment.md b/content/riak/cs/2.1.0/redirects/quick-guide/local-testing-environment.md new file mode 100644 index 0000000000..b89692e096 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/quick-guide/local-testing-environment.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/tutorials/fast-track/local-testing-environment/" +aliases: +- /riak/cs/2.1.0/quick-guide/local-testing-environment +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/quick-guide/test-installation.md b/content/riak/cs/2.1.0/redirects/quick-guide/test-installation.md new file mode 100644 index 0000000000..7a2ee9a96c --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/quick-guide/test-installation.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/tutorials/fast-track/test-installation/" +aliases: +- /riak/cs/2.1.0/quick-guide/test-installation +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/quick-guide/virtual-test-environment.md b/content/riak/cs/2.1.0/redirects/quick-guide/virtual-test-environment.md new file mode 100644 index 0000000000..6336ebe830 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/quick-guide/virtual-test-environment.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/tutorials/fast-track/virtual-test-environment/" +aliases: +- /riak/cs/2.1.0/quick-guide/virtual-test-environment +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/quick-guide/what-is-riak-cs.md b/content/riak/cs/2.1.0/redirects/quick-guide/what-is-riak-cs.md new file mode 100644 index 0000000000..6e4d71e84e --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/quick-guide/what-is-riak-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/tutorials/fast-track/what-is-riak-cs/" +aliases: +- /riak/cs/2.1.0/quick-guide/what-is-riak-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/release-notes.md b/content/riak/cs/2.1.0/redirects/release-notes.md new file mode 100644 index 0000000000..c7e8dedf46 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/release-notes.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/release-notes/" +aliases: +- /riak/cs/2.1.0/release-notes/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/setup.md b/content/riak/cs/2.1.0/redirects/setup.md new file mode 100644 index 0000000000..d2961d4ee7 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/setup.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/installing/" +aliases: +- /riak/cs/2.1.0/setup +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/setup/installing.md b/content/riak/cs/2.1.0/redirects/setup/installing.md new file mode 100644 index 0000000000..430e867d0a --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/setup/installing.md @@ -0,0 +1,16 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/installing/" +aliases: +- /riak/cs/2.1.0/setup/installing +- /riak/cs/2.1.0/setup/installing/alpine-linux +- /riak/cs/2.1.0/setup/installing/amazon-web-services +- /riak/cs/2.1.0/setup/installing/debian-ubuntu +- /riak/cs/2.1.0/setup/installing/freebsd +- /riak/cs/2.1.0/setup/installing/oracle +- /riak/cs/2.1.0/setup/installing/rhel-centos +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/setup/upgrading.md b/content/riak/cs/2.1.0/redirects/setup/upgrading.md new file mode 100644 index 0000000000..75410e02fe --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/setup/upgrading.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/rolling-upgrades/" +aliases: +- /riak/cs/2.1.0/setup/upgrading +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/using.md b/content/riak/cs/2.1.0/redirects/using.md new file mode 100644 index 0000000000..1777674794 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/using.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/operating/" +aliases: +- /riak/cs/2.1.0/using +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/using/command-line-tools.md b/content/riak/cs/2.1.0/redirects/using/command-line-tools.md new file mode 100644 index 0000000000..634c38bc01 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/using/command-line-tools.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/command-line-tools/" +aliases: + - /riak/cs/2.1.0/using/command-line-tools +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/using/launching-and-stopping.md b/content/riak/cs/2.1.0/redirects/using/launching-and-stopping.md new file mode 100644 index 0000000000..4d096f05bd --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/using/launching-and-stopping.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/installing/launching-and-stopping" +aliases: + - /riak/cs/2.1.0/using/launching-and-stopping +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/using/logging.md b/content/riak/cs/2.1.0/redirects/using/logging.md new file mode 100644 index 0000000000..e89b29347f --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/using/logging.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/logging/" +aliases: + - /riak/cs/2.1.0/using/logging +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.0/redirects/using/monitoring-and-metrics.md b/content/riak/cs/2.1.0/redirects/using/monitoring-and-metrics.md new file mode 100644 index 0000000000..e965bc7d19 --- /dev/null +++ b/content/riak/cs/2.1.0/redirects/using/monitoring-and-metrics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.0/cookbooks/monitoring-and-metrics/" +aliases: + - /riak/cs/2.1.0/using/monitoring-and-metrics +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/add-ons.md b/content/riak/cs/2.1.1/redirects/add-ons.md new file mode 100644 index 0000000000..7d11921152 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/add-ons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/operating/advanced/" +aliases: + - /riak/cs/2.1.1/add-ons +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/add-ons/add-ons.md b/content/riak/cs/2.1.1/redirects/add-ons/add-ons.md new file mode 100644 index 0000000000..512efd1bb8 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/add-ons/add-ons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/appendices/riak-cs-control/" +aliases: + - /riak/cs/2.1.1/add-ons/riak-cs-control/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/configuring.md b/content/riak/cs/2.1.1/redirects/configuring.md new file mode 100644 index 0000000000..2cf21c771c --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/configuring.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/configuration/" +aliases: + - /riak/cs/2.1.1/configuring +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/configuring/load-balancing-proxy.md b/content/riak/cs/2.1.1/redirects/configuring/load-balancing-proxy.md new file mode 100644 index 0000000000..d711f12a63 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/configuring/load-balancing-proxy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/configuration/load-balancing-proxy/" +aliases: + - /riak/cs/2.1.1/configuring/load-balancing-proxy/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/configuring/multi-datacenter.md b/content/riak/cs/2.1.1/redirects/configuring/multi-datacenter.md new file mode 100644 index 0000000000..331558a45f --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/configuring/multi-datacenter.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/configuration/multi-datacenter/" +aliases: + - /riak/cs/2.1.1/configuring/multi-datacenter/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/configuring/reference.md b/content/riak/cs/2.1.1/redirects/configuring/reference.md new file mode 100644 index 0000000000..7c03f519f8 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/configuring/reference.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/configuration/reference/" +aliases: + - /riak/cs/2.1.1/configuring/reference/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/configuring/riak-cs.md b/content/riak/cs/2.1.1/redirects/configuring/riak-cs.md new file mode 100644 index 0000000000..78679d99b2 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/configuring/riak-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/configuration/riak-cs/" +aliases: + - /riak/cs/2.1.1/configuring/riak-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/configuring/riak-kv-for-cs.md b/content/riak/cs/2.1.1/redirects/configuring/riak-kv-for-cs.md new file mode 100644 index 0000000000..5c70d2e9aa --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/configuring/riak-kv-for-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/configuration/riak-for-cs/" +aliases: + - /riak/cs/2.1.1/configuring/riak-kv-for-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/configuring/stanchion.md b/content/riak/cs/2.1.1/redirects/configuring/stanchion.md new file mode 100644 index 0000000000..8d12b1171f --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/configuring/stanchion.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/configuration/stanchion/" +aliases: + - /riak/cs/2.1.1/configuring/stanchion/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/configuring/superclusters.md b/content/riak/cs/2.1.1/redirects/configuring/superclusters.md new file mode 100644 index 0000000000..33bfbab638 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/configuring/superclusters.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/supercluster/" +aliases: + - /riak/cs/2.1.1/configuring/superclusters/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/accounts-and-admin.md b/content/riak/cs/2.1.1/redirects/developing/accounts-and-admin.md new file mode 100644 index 0000000000..1d2d7e2068 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/accounts-and-admin.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/appendices/http-admin/" +aliases: +- /riak/cs/2.1.1/developing/accounts-and-admin +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/accounts-and-admin/access-control-lists.md b/content/riak/cs/2.1.1/redirects/developing/accounts-and-admin/access-control-lists.md new file mode 100644 index 0000000000..58d7753aaf --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/accounts-and-admin/access-control-lists.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/access-control-lists/" +aliases: +- /riak/cs/2.1.1/developing/accounts-and-admin/access-control-lists/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/accounts-and-admin/account-management.md b/content/riak/cs/2.1.1/redirects/developing/accounts-and-admin/account-management.md new file mode 100644 index 0000000000..627d73d82a --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/accounts-and-admin/account-management.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/account-management/" +aliases: +- /riak/cs/2.1.1/developing/accounts-and-admin/account-management/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/accounts-and-admin/authentication.md b/content/riak/cs/2.1.1/redirects/developing/accounts-and-admin/authentication.md new file mode 100644 index 0000000000..906b1a4c4d --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/accounts-and-admin/authentication.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/authentication/" +aliases: +- /riak/cs/2.1.1/developing/accounts-and-admin/authentication/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/accounts-and-admin/designate-admin-user.md b/content/riak/cs/2.1.1/redirects/developing/accounts-and-admin/designate-admin-user.md new file mode 100644 index 0000000000..5dfcec0a4d --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/accounts-and-admin/designate-admin-user.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/designate-admin-user/" +aliases: +- /riak/cs/2.1.1/developing/accounts-and-admin/designate-admin-user/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis.md b/content/riak/cs/2.1.1/redirects/developing/apis.md new file mode 100644 index 0000000000..3ef8bd49ee --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/" +aliases: +- /riak/cs/2.1.1/developing/apis +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/cs-storage.md b/content/riak/cs/2.1.1/redirects/developing/apis/cs-storage.md new file mode 100644 index 0000000000..87077a6d2b --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/cs-storage.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/" +aliases: +- /riak/cs/2.1.1/developing/apis/cs-storage +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/openstack.md b/content/riak/cs/2.1.1/redirects/developing/apis/openstack.md new file mode 100644 index 0000000000..1f4c5cd493 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/openstack.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/openstack/" +aliases: +- /riak/cs/2.1.1/developing/apis/openstack +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/openstack/containers.md b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/containers.md new file mode 100644 index 0000000000..5837578cf6 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/containers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/openstack/" +aliases: +- /riak/cs/2.1.1/developing/apis/openstack/containers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/openstack/containers/create-container.md b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/containers/create-container.md new file mode 100644 index 0000000000..c5b88c49ac --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/containers/create-container.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/openstack/create-container/" +aliases: +- /riak/cs/2.1.1/developing/apis/openstack/containers/create-container +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/openstack/containers/delete-container.md b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/containers/delete-container.md new file mode 100644 index 0000000000..53e906782b --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/containers/delete-container.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/openstack/delete-container/" +aliases: +- /riak/cs/2.1.1/developing/apis/openstack/containers/delete-container +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/openstack/containers/list-containers.md b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/containers/list-containers.md new file mode 100644 index 0000000000..39d0095546 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/containers/list-containers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/openstack/list-containers/" +aliases: +- /riak/cs/2.1.1/developing/apis/openstack/containers/list-containers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/openstack/containers/list-objects.md b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/containers/list-objects.md new file mode 100644 index 0000000000..24b89f4422 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/containers/list-objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/openstack/list-objects/" +aliases: +- /riak/cs/2.1.1/developing/apis/openstack/containers/list-objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md new file mode 100644 index 0000000000..052b76e458 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/openstack/mapping-from-oos-api-to-riak-cs-internal-api" +aliases: +- /riak/cs/2.1.1/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/openstack/objects.md b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/objects.md new file mode 100644 index 0000000000..884bc1535b --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/openstack/" +aliases: +- /riak/cs/2.1.1/developing/apis/openstack/objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/openstack/objects/create-object.md b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/objects/create-object.md new file mode 100644 index 0000000000..39e12b5623 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/objects/create-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/openstack/create-object/" +aliases: +- /riak/cs/2.1.1/developing/apis/openstack/objects/create-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/openstack/objects/delete-object.md b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/objects/delete-object.md new file mode 100644 index 0000000000..23eb8343c2 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/objects/delete-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/openstack/delete-object/" +aliases: +- /riak/cs/2.1.1/developing/apis/openstack/objects/delete-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/openstack/objects/get-object.md b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/objects/get-object.md new file mode 100644 index 0000000000..522103139a --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/objects/get-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/openstack/get-object/" +aliases: +- /riak/cs/2.1.1/developing/apis/openstack/objects/get-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/openstack/using-with-keystone.md b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/using-with-keystone.md new file mode 100644 index 0000000000..f2ed24749c --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/using-with-keystone.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/using-with-keystone/" +aliases: +- /riak/cs/2.1.1/developing/apis/openstack/using-with-keystone +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md new file mode 100644 index 0000000000..97eb9f063f --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/keystone-conf-sample/" +aliases: +- /riak/cs/2.1.1/developing/apis/openstack/using-with-keystone/keystone-conf-sample +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md new file mode 100644 index 0000000000..f6959acc6b --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/keystone-setup/" +aliases: +- /riak/cs/2.1.1/developing/apis/openstack/using-with-keystone/keystone-setup +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3.md new file mode 100644 index 0000000000..b9acbfdcdc --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/" +aliases: +- /riak/cs/2.1.1/developing/apis/s3 +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets.md new file mode 100644 index 0000000000..deefb56a4d --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/buckets +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/delete-bucket-policy.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/delete-bucket-policy.md new file mode 100644 index 0000000000..a3df54ad66 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/delete-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/delete-bucket-policy" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/buckets/delete-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/delete-bucket.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/delete-bucket.md new file mode 100644 index 0000000000..a67382650f --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/delete-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/delete-bucket" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/buckets/delete-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/get-bucket-acl.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/get-bucket-acl.md new file mode 100644 index 0000000000..67efaaf185 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/get-bucket-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/get-bucket-acl" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/buckets/get-bucket-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/get-bucket-policy.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/get-bucket-policy.md new file mode 100644 index 0000000000..7600426bcb --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/get-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/get-bucket-policy" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/buckets/get-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/get-bucket.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/get-bucket.md new file mode 100644 index 0000000000..a42f3fe355 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/get-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/get-bucket" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/buckets/get-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/get-service.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/get-service.md new file mode 100644 index 0000000000..c5eb33f4be --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/get-service.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/get-service" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/buckets/get-service +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/put-bucket-acl.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/put-bucket-acl.md new file mode 100644 index 0000000000..438efa76c1 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/put-bucket-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/put-bucket-acl" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/buckets/put-bucket-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/put-bucket-policy.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/put-bucket-policy.md new file mode 100644 index 0000000000..40493d8d85 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/put-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/put-bucket-policy" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/buckets/put-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/put-bucket.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/put-bucket.md new file mode 100644 index 0000000000..5b4059722e --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/buckets/put-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/put-bucket" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/buckets/put-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/common-request-headers.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/common-request-headers.md new file mode 100644 index 0000000000..790a09c3f3 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/common-request-headers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/common-request-headers" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/common-request-headers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/common-response-headers.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/common-response-headers.md new file mode 100644 index 0000000000..bdc2b41a30 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/common-response-headers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/common-response-headers" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/common-response-headers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md new file mode 100644 index 0000000000..adb18c20d4 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/mapping-from-s3-api-to-riak-cs-internal-api" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects.md new file mode 100644 index 0000000000..20f34263d3 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/delete-multiple.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/delete-multiple.md new file mode 100644 index 0000000000..dd03cc66ea --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/delete-multiple.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/delete-multi" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/objects/delete-multiple +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/delete-object.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/delete-object.md new file mode 100644 index 0000000000..3eb58af1e3 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/delete-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/delete-object" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/objects/delete-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/get-object-acl.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/get-object-acl.md new file mode 100644 index 0000000000..a162ed7371 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/get-object-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/get-object-acl" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/objects/get-object-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/get-object.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/get-object.md new file mode 100644 index 0000000000..1cc8a32028 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/get-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/get-object" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/objects/get-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/head-object.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/head-object.md new file mode 100644 index 0000000000..de0be6b8e2 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/head-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/head-object" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/objects/head-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads.md new file mode 100644 index 0000000000..d15ba74eca --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/multipart-upload-overview/" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/objects/multipart-uploads +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md new file mode 100644 index 0000000000..c76c09c209 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/abort-multipart-upload" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md new file mode 100644 index 0000000000..a091c43132 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/complete-multipart-upload" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md new file mode 100644 index 0000000000..c497a011a9 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/initiate-multipart-upload" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md new file mode 100644 index 0000000000..1341283b3a --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/list-multipart-uploads" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md new file mode 100644 index 0000000000..de3219c8b3 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/list-parts" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/objects/multipart-uploads/list-parts +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md new file mode 100644 index 0000000000..10a5ca6920 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/upload-part" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/objects/multipart-uploads/upload-part +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/put-object-acl.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/put-object-acl.md new file mode 100644 index 0000000000..016a721c18 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/put-object-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/put-object-acl" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/objects/put-object-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/put-object-copy.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/put-object-copy.md new file mode 100644 index 0000000000..6f9f37ca6f --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/put-object-copy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/put-object-copy" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/objects/put-object-copy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/put-object.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/put-object.md new file mode 100644 index 0000000000..ff1e3af349 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/objects/put-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/put-object" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/objects/put-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/other-clients.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/other-clients.md new file mode 100644 index 0000000000..9825140af6 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/other-clients.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/apis/storage/s3/" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/other-clients +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/other-clients/dragondisk.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/other-clients/dragondisk.md new file mode 100644 index 0000000000..969b271933 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/other-clients/dragondisk.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/configuration/dragondisk/" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/other-clients/dragondisk +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/other-clients/fog.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/other-clients/fog.md new file mode 100644 index 0000000000..42571098cc --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/other-clients/fog.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/fog/" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/other-clients/fog +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/other-clients/transmit.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/other-clients/transmit.md new file mode 100644 index 0000000000..1d9395c8f7 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/other-clients/transmit.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/configuration/transmit/" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/other-clients/transmit +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/apis/s3/s3-client.md b/content/riak/cs/2.1.1/redirects/developing/apis/s3/s3-client.md new file mode 100644 index 0000000000..8815d9c0ea --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/apis/s3/s3-client.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/configuration/s3-client/" +aliases: +- /riak/cs/2.1.1/developing/apis/s3/s3-client +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/usage-and-billing-data.md b/content/riak/cs/2.1.1/redirects/developing/usage-and-billing-data.md new file mode 100644 index 0000000000..46b77c4de6 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/usage-and-billing-data.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/usage-and-billing-data/" +aliases: +- /riak/cs/2.1.1/developing/usage-and-billing-data +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/usage-and-billing-data/access-statistics.md b/content/riak/cs/2.1.1/redirects/developing/usage-and-billing-data/access-statistics.md new file mode 100644 index 0000000000..8a81b2c9e9 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/usage-and-billing-data/access-statistics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/querying-access-statistics/" +aliases: +- /riak/cs/2.1.1/developing/usage-and-billing-data/access-statistics/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/developing/usage-and-billing-data/storage-statistics.md b/content/riak/cs/2.1.1/redirects/developing/usage-and-billing-data/storage-statistics.md new file mode 100644 index 0000000000..0cadb9fa7a --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/developing/usage-and-billing-data/storage-statistics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/querying-storage-statistics/" +aliases: +- /riak/cs/2.1.1/developing/usage-and-billing-data/storage-statistics/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/learning.md b/content/riak/cs/2.1.1/redirects/learning.md new file mode 100644 index 0000000000..29f6f27f72 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/learning.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/theory/" +aliases: + - /riak/cs/2.1.1/learning +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/learning/comparisons.md b/content/riak/cs/2.1.1/redirects/learning/comparisons.md new file mode 100644 index 0000000000..d524cc84a6 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/learning/comparisons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/theory/comparisons/" +aliases: + - /riak/cs/2.1.1/learning/comparisons +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/learning/comparisons/atmos.md b/content/riak/cs/2.1.1/redirects/learning/comparisons/atmos.md new file mode 100644 index 0000000000..c438208c65 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/learning/comparisons/atmos.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/appendices/comparisons/atmos/" +aliases: + - /riak/cs/2.1.1/learning/comparisons/atmos +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/learning/comparisons/swift.md b/content/riak/cs/2.1.1/redirects/learning/comparisons/swift.md new file mode 100644 index 0000000000..b5d5fef290 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/learning/comparisons/swift.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/references/appendices/comparisons/swift/" +aliases: + - /riak/cs/2.1.1/learning/comparisons/swift +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/learning/faqs.md b/content/riak/cs/2.1.1/redirects/learning/faqs.md new file mode 100644 index 0000000000..7ff5dcd4e4 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/learning/faqs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/faqs/riak-cs/" +aliases: + - /riak/cs/2.1.1/learning/faqs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/learning/garbage-collection.md b/content/riak/cs/2.1.1/redirects/learning/garbage-collection.md new file mode 100644 index 0000000000..85ed9f0fdc --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/learning/garbage-collection.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/garbage-collection/" +aliases: + - /riak/cs/2.1.1/learning/garbage-collection +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/learning/multi-datacenter-overview.md b/content/riak/cs/2.1.1/redirects/learning/multi-datacenter-overview.md new file mode 100644 index 0000000000..791698aa1a --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/learning/multi-datacenter-overview.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/multi-datacenter-overview//" +aliases: + - /riak/cs/2.1.1/learning/multi-datacenter-overview +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/learning/multipart-upload-overview.md b/content/riak/cs/2.1.1/redirects/learning/multipart-upload-overview.md new file mode 100644 index 0000000000..bd24cfc0df --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/learning/multipart-upload-overview.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/multipart-upload-overview//" +aliases: + - /riak/cs/2.1.1/learning/multipart-upload-overview +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/learning/stanchion.md b/content/riak/cs/2.1.1/redirects/learning/stanchion.md new file mode 100644 index 0000000000..ecc974fbdc --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/learning/stanchion.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/theory/stanchion/" +aliases: + - /riak/cs/2.1.1/learning/stanchion/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/learning/version-compatibility.md b/content/riak/cs/2.1.1/redirects/learning/version-compatibility.md new file mode 100644 index 0000000000..dc509f56b2 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/learning/version-compatibility.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/version-compatibility/" +aliases: + - /riak/cs/2.1.1/learning/version-compatibility/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/quick-guide.md b/content/riak/cs/2.1.1/redirects/quick-guide.md new file mode 100644 index 0000000000..e1b4aeed79 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/quick-guide.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/tutorials/fast-track/" +aliases: +- /riak/cs/2.1.1/quick-guide +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/quick-guide/local-testing-environment.md b/content/riak/cs/2.1.1/redirects/quick-guide/local-testing-environment.md new file mode 100644 index 0000000000..4859600074 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/quick-guide/local-testing-environment.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/tutorials/fast-track/local-testing-environment/" +aliases: +- /riak/cs/2.1.1/quick-guide/local-testing-environment +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/quick-guide/test-installation.md b/content/riak/cs/2.1.1/redirects/quick-guide/test-installation.md new file mode 100644 index 0000000000..08a726bcdd --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/quick-guide/test-installation.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/tutorials/fast-track/test-installation/" +aliases: +- /riak/cs/2.1.1/quick-guide/test-installation +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/quick-guide/virtual-test-environment.md b/content/riak/cs/2.1.1/redirects/quick-guide/virtual-test-environment.md new file mode 100644 index 0000000000..e181de70e9 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/quick-guide/virtual-test-environment.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/tutorials/fast-track/virtual-test-environment/" +aliases: +- /riak/cs/2.1.1/quick-guide/virtual-test-environment +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/quick-guide/what-is-riak-cs.md b/content/riak/cs/2.1.1/redirects/quick-guide/what-is-riak-cs.md new file mode 100644 index 0000000000..efda80e88d --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/quick-guide/what-is-riak-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/tutorials/fast-track/what-is-riak-cs/" +aliases: +- /riak/cs/2.1.1/quick-guide/what-is-riak-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/release-notes.md b/content/riak/cs/2.1.1/redirects/release-notes.md new file mode 100644 index 0000000000..8a274f1d08 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/release-notes.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/release-notes/" +aliases: +- /riak/cs/2.1.1/release-notes/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/setup.md b/content/riak/cs/2.1.1/redirects/setup.md new file mode 100644 index 0000000000..cfc2c2190f --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/setup.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/installing/" +aliases: +- /riak/cs/2.1.1/setup +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/setup/installing.md b/content/riak/cs/2.1.1/redirects/setup/installing.md new file mode 100644 index 0000000000..7f58e3ff89 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/setup/installing.md @@ -0,0 +1,16 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/installing/" +aliases: +- /riak/cs/2.1.1/setup/installing +- /riak/cs/2.1.1/setup/installing/alpine-linux +- /riak/cs/2.1.1/setup/installing/amazon-web-services +- /riak/cs/2.1.1/setup/installing/debian-ubuntu +- /riak/cs/2.1.1/setup/installing/freebsd +- /riak/cs/2.1.1/setup/installing/oracle +- /riak/cs/2.1.1/setup/installing/rhel-centos +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/setup/upgrading.md b/content/riak/cs/2.1.1/redirects/setup/upgrading.md new file mode 100644 index 0000000000..71861a9506 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/setup/upgrading.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/rolling-upgrades/" +aliases: +- /riak/cs/2.1.1/setup/upgrading +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/using.md b/content/riak/cs/2.1.1/redirects/using.md new file mode 100644 index 0000000000..ca4de8089b --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/using.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/operating/" +aliases: +- /riak/cs/2.1.1/using +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/using/command-line-tools.md b/content/riak/cs/2.1.1/redirects/using/command-line-tools.md new file mode 100644 index 0000000000..789e9efb83 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/using/command-line-tools.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/command-line-tools/" +aliases: + - /riak/cs/2.1.1/using/command-line-tools +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/using/launching-and-stopping.md b/content/riak/cs/2.1.1/redirects/using/launching-and-stopping.md new file mode 100644 index 0000000000..321be730e0 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/using/launching-and-stopping.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/installing/launching-and-stopping" +aliases: + - /riak/cs/2.1.1/using/launching-and-stopping +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/using/logging.md b/content/riak/cs/2.1.1/redirects/using/logging.md new file mode 100644 index 0000000000..2704f8f4e4 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/using/logging.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/logging/" +aliases: + - /riak/cs/2.1.1/using/logging +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.1/redirects/using/monitoring-and-metrics.md b/content/riak/cs/2.1.1/redirects/using/monitoring-and-metrics.md new file mode 100644 index 0000000000..38b249cb03 --- /dev/null +++ b/content/riak/cs/2.1.1/redirects/using/monitoring-and-metrics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.1/cookbooks/monitoring-and-metrics/" +aliases: + - /riak/cs/2.1.1/using/monitoring-and-metrics +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/add-ons.md b/content/riak/cs/2.1.2/redirects/add-ons.md new file mode 100644 index 0000000000..fea8ea23f6 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/add-ons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/operating/advanced/" +aliases: + - /riak/cs/2.1.2/add-ons +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/add-ons/add-ons.md b/content/riak/cs/2.1.2/redirects/add-ons/add-ons.md new file mode 100644 index 0000000000..9848a0eef4 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/add-ons/add-ons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/appendices/riak-cs-control/" +aliases: + - /riak/cs/2.1.2/add-ons/riak-cs-control/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/configuring.md b/content/riak/cs/2.1.2/redirects/configuring.md new file mode 100644 index 0000000000..8a0d12da5c --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/configuring.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/configuration/" +aliases: + - /riak/cs/2.1.2/configuring +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/configuring/load-balancing-proxy.md b/content/riak/cs/2.1.2/redirects/configuring/load-balancing-proxy.md new file mode 100644 index 0000000000..df00163517 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/configuring/load-balancing-proxy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/configuration/load-balancing-proxy/" +aliases: + - /riak/cs/2.1.2/configuring/load-balancing-proxy/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/configuring/multi-datacenter.md b/content/riak/cs/2.1.2/redirects/configuring/multi-datacenter.md new file mode 100644 index 0000000000..f93bdca384 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/configuring/multi-datacenter.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/configuration/multi-datacenter/" +aliases: + - /riak/cs/2.1.2/configuring/multi-datacenter/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/configuring/reference.md b/content/riak/cs/2.1.2/redirects/configuring/reference.md new file mode 100644 index 0000000000..e7d7a84506 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/configuring/reference.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/configuration/reference/" +aliases: + - /riak/cs/2.1.2/configuring/reference/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/configuring/riak-cs.md b/content/riak/cs/2.1.2/redirects/configuring/riak-cs.md new file mode 100644 index 0000000000..d62a5b14ce --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/configuring/riak-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/configuration/riak-cs/" +aliases: + - /riak/cs/2.1.2/configuring/riak-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/configuring/riak-kv-for-cs.md b/content/riak/cs/2.1.2/redirects/configuring/riak-kv-for-cs.md new file mode 100644 index 0000000000..c6c4676fae --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/configuring/riak-kv-for-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/configuration/riak-for-cs/" +aliases: + - /riak/cs/2.1.2/configuring/riak-kv-for-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/configuring/stanchion.md b/content/riak/cs/2.1.2/redirects/configuring/stanchion.md new file mode 100644 index 0000000000..5ef8f8b680 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/configuring/stanchion.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/configuration/stanchion/" +aliases: + - /riak/cs/2.1.2/configuring/stanchion/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/configuring/superclusters.md b/content/riak/cs/2.1.2/redirects/configuring/superclusters.md new file mode 100644 index 0000000000..3d21043f73 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/configuring/superclusters.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/supercluster/" +aliases: + - /riak/cs/2.1.2/configuring/superclusters/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/accounts-and-admin.md b/content/riak/cs/2.1.2/redirects/developing/accounts-and-admin.md new file mode 100644 index 0000000000..0274e938fe --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/accounts-and-admin.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/appendices/http-admin/" +aliases: +- /riak/cs/2.1.2/developing/accounts-and-admin +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/accounts-and-admin/access-control-lists.md b/content/riak/cs/2.1.2/redirects/developing/accounts-and-admin/access-control-lists.md new file mode 100644 index 0000000000..87ad5002d1 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/accounts-and-admin/access-control-lists.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/access-control-lists/" +aliases: +- /riak/cs/2.1.2/developing/accounts-and-admin/access-control-lists/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/accounts-and-admin/account-management.md b/content/riak/cs/2.1.2/redirects/developing/accounts-and-admin/account-management.md new file mode 100644 index 0000000000..2ee09fcd06 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/accounts-and-admin/account-management.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/account-management/" +aliases: +- /riak/cs/2.1.2/developing/accounts-and-admin/account-management/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/accounts-and-admin/authentication.md b/content/riak/cs/2.1.2/redirects/developing/accounts-and-admin/authentication.md new file mode 100644 index 0000000000..2d191f8734 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/accounts-and-admin/authentication.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/authentication/" +aliases: +- /riak/cs/2.1.2/developing/accounts-and-admin/authentication/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/accounts-and-admin/designate-admin-user.md b/content/riak/cs/2.1.2/redirects/developing/accounts-and-admin/designate-admin-user.md new file mode 100644 index 0000000000..0bd4a79b5c --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/accounts-and-admin/designate-admin-user.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/designate-admin-user/" +aliases: +- /riak/cs/2.1.2/developing/accounts-and-admin/designate-admin-user/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis.md b/content/riak/cs/2.1.2/redirects/developing/apis.md new file mode 100644 index 0000000000..b473f6b63c --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/" +aliases: +- /riak/cs/2.1.2/developing/apis +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/cs-storage.md b/content/riak/cs/2.1.2/redirects/developing/apis/cs-storage.md new file mode 100644 index 0000000000..6003a7bab5 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/cs-storage.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/" +aliases: +- /riak/cs/2.1.2/developing/apis/cs-storage +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/openstack.md b/content/riak/cs/2.1.2/redirects/developing/apis/openstack.md new file mode 100644 index 0000000000..9d5746f5d3 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/openstack.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/openstack/" +aliases: +- /riak/cs/2.1.2/developing/apis/openstack +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/openstack/containers.md b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/containers.md new file mode 100644 index 0000000000..413f9227f5 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/containers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/openstack/" +aliases: +- /riak/cs/2.1.2/developing/apis/openstack/containers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/openstack/containers/create-container.md b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/containers/create-container.md new file mode 100644 index 0000000000..a523c840b0 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/containers/create-container.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/openstack/create-container/" +aliases: +- /riak/cs/2.1.2/developing/apis/openstack/containers/create-container +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/openstack/containers/delete-container.md b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/containers/delete-container.md new file mode 100644 index 0000000000..bb15ceb2ad --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/containers/delete-container.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/openstack/delete-container/" +aliases: +- /riak/cs/2.1.2/developing/apis/openstack/containers/delete-container +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/openstack/containers/list-containers.md b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/containers/list-containers.md new file mode 100644 index 0000000000..ab1c9243a8 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/containers/list-containers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/openstack/list-containers/" +aliases: +- /riak/cs/2.1.2/developing/apis/openstack/containers/list-containers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/openstack/containers/list-objects.md b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/containers/list-objects.md new file mode 100644 index 0000000000..4e5f5393c4 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/containers/list-objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/openstack/list-objects/" +aliases: +- /riak/cs/2.1.2/developing/apis/openstack/containers/list-objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md new file mode 100644 index 0000000000..7b50af2e38 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/openstack/mapping-from-oos-api-to-riak-cs-internal-api" +aliases: +- /riak/cs/2.1.2/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/openstack/objects.md b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/objects.md new file mode 100644 index 0000000000..3ef154e0ea --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/openstack/" +aliases: +- /riak/cs/2.1.2/developing/apis/openstack/objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/openstack/objects/create-object.md b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/objects/create-object.md new file mode 100644 index 0000000000..8c45b59184 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/objects/create-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/openstack/create-object/" +aliases: +- /riak/cs/2.1.2/developing/apis/openstack/objects/create-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/openstack/objects/delete-object.md b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/objects/delete-object.md new file mode 100644 index 0000000000..8c31b2a52b --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/objects/delete-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/openstack/delete-object/" +aliases: +- /riak/cs/2.1.2/developing/apis/openstack/objects/delete-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/openstack/objects/get-object.md b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/objects/get-object.md new file mode 100644 index 0000000000..42093107f7 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/objects/get-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/openstack/get-object/" +aliases: +- /riak/cs/2.1.2/developing/apis/openstack/objects/get-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/openstack/using-with-keystone.md b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/using-with-keystone.md new file mode 100644 index 0000000000..b8e1128c63 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/using-with-keystone.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/using-with-keystone/" +aliases: +- /riak/cs/2.1.2/developing/apis/openstack/using-with-keystone +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md new file mode 100644 index 0000000000..dd68ab0825 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/keystone-conf-sample/" +aliases: +- /riak/cs/2.1.2/developing/apis/openstack/using-with-keystone/keystone-conf-sample +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md new file mode 100644 index 0000000000..d39eda8c1c --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/keystone-setup/" +aliases: +- /riak/cs/2.1.2/developing/apis/openstack/using-with-keystone/keystone-setup +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3.md new file mode 100644 index 0000000000..30f6e16876 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/" +aliases: +- /riak/cs/2.1.2/developing/apis/s3 +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets.md new file mode 100644 index 0000000000..5efabd56a9 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/buckets +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/delete-bucket-policy.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/delete-bucket-policy.md new file mode 100644 index 0000000000..912fd49a6c --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/delete-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/delete-bucket-policy" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/buckets/delete-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/delete-bucket.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/delete-bucket.md new file mode 100644 index 0000000000..a8f5266d15 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/delete-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/delete-bucket" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/buckets/delete-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/get-bucket-acl.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/get-bucket-acl.md new file mode 100644 index 0000000000..966bdd0227 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/get-bucket-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/get-bucket-acl" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/buckets/get-bucket-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/get-bucket-policy.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/get-bucket-policy.md new file mode 100644 index 0000000000..8b6076f932 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/get-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/get-bucket-policy" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/buckets/get-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/get-bucket.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/get-bucket.md new file mode 100644 index 0000000000..d1b58ba4d4 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/get-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/get-bucket" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/buckets/get-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/get-service.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/get-service.md new file mode 100644 index 0000000000..cba5fadd20 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/get-service.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/get-service" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/buckets/get-service +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/put-bucket-acl.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/put-bucket-acl.md new file mode 100644 index 0000000000..efba4c8325 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/put-bucket-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/put-bucket-acl" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/buckets/put-bucket-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/put-bucket-policy.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/put-bucket-policy.md new file mode 100644 index 0000000000..aff47fff1e --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/put-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/put-bucket-policy" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/buckets/put-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/put-bucket.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/put-bucket.md new file mode 100644 index 0000000000..1bf24b46c8 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/buckets/put-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/put-bucket" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/buckets/put-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/common-request-headers.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/common-request-headers.md new file mode 100644 index 0000000000..4516998c2e --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/common-request-headers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/common-request-headers" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/common-request-headers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/common-response-headers.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/common-response-headers.md new file mode 100644 index 0000000000..add9e4b6ca --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/common-response-headers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/common-response-headers" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/common-response-headers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md new file mode 100644 index 0000000000..37bea404bb --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/mapping-from-s3-api-to-riak-cs-internal-api" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects.md new file mode 100644 index 0000000000..dc5e007108 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/delete-multiple.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/delete-multiple.md new file mode 100644 index 0000000000..4375cbe200 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/delete-multiple.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/delete-multi" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/objects/delete-multiple +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/delete-object.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/delete-object.md new file mode 100644 index 0000000000..6e43c92ba2 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/delete-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/delete-object" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/objects/delete-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/get-object-acl.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/get-object-acl.md new file mode 100644 index 0000000000..d77bd5c6ec --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/get-object-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/get-object-acl" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/objects/get-object-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/get-object.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/get-object.md new file mode 100644 index 0000000000..95be92b65a --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/get-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/get-object" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/objects/get-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/head-object.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/head-object.md new file mode 100644 index 0000000000..e1fbcf1d39 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/head-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/head-object" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/objects/head-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads.md new file mode 100644 index 0000000000..47563aa60b --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/multipart-upload-overview/" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/objects/multipart-uploads +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md new file mode 100644 index 0000000000..6d4fd86c42 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/abort-multipart-upload" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md new file mode 100644 index 0000000000..8f3840ed02 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/complete-multipart-upload" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md new file mode 100644 index 0000000000..402c9f7c38 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/initiate-multipart-upload" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md new file mode 100644 index 0000000000..1782fb38df --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/list-multipart-uploads" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md new file mode 100644 index 0000000000..9468975af5 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/list-parts" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/objects/multipart-uploads/list-parts +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md new file mode 100644 index 0000000000..827a5f4e61 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/upload-part" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/objects/multipart-uploads/upload-part +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/put-object-acl.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/put-object-acl.md new file mode 100644 index 0000000000..56910d7680 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/put-object-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/put-object-acl" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/objects/put-object-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/put-object-copy.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/put-object-copy.md new file mode 100644 index 0000000000..08e9c20920 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/put-object-copy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/put-object-copy" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/objects/put-object-copy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/put-object.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/put-object.md new file mode 100644 index 0000000000..9a8bd27ade --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/objects/put-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/put-object" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/objects/put-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/other-clients.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/other-clients.md new file mode 100644 index 0000000000..6a46cde442 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/other-clients.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/apis/storage/s3/" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/other-clients +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/other-clients/dragondisk.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/other-clients/dragondisk.md new file mode 100644 index 0000000000..a39ff6545d --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/other-clients/dragondisk.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/configuration/dragondisk/" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/other-clients/dragondisk +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/other-clients/fog.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/other-clients/fog.md new file mode 100644 index 0000000000..8e54a188db --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/other-clients/fog.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/fog/" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/other-clients/fog +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/other-clients/transmit.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/other-clients/transmit.md new file mode 100644 index 0000000000..1dbbdf55dc --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/other-clients/transmit.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/configuration/transmit/" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/other-clients/transmit +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/apis/s3/s3-client.md b/content/riak/cs/2.1.2/redirects/developing/apis/s3/s3-client.md new file mode 100644 index 0000000000..d96968b48a --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/apis/s3/s3-client.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/configuration/s3-client/" +aliases: +- /riak/cs/2.1.2/developing/apis/s3/s3-client +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/usage-and-billing-data.md b/content/riak/cs/2.1.2/redirects/developing/usage-and-billing-data.md new file mode 100644 index 0000000000..383024bee5 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/usage-and-billing-data.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/usage-and-billing-data/" +aliases: +- /riak/cs/2.1.2/developing/usage-and-billing-data +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/usage-and-billing-data/access-statistics.md b/content/riak/cs/2.1.2/redirects/developing/usage-and-billing-data/access-statistics.md new file mode 100644 index 0000000000..3274aa8cca --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/usage-and-billing-data/access-statistics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/querying-access-statistics/" +aliases: +- /riak/cs/2.1.2/developing/usage-and-billing-data/access-statistics/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/developing/usage-and-billing-data/storage-statistics.md b/content/riak/cs/2.1.2/redirects/developing/usage-and-billing-data/storage-statistics.md new file mode 100644 index 0000000000..4a0810aecf --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/developing/usage-and-billing-data/storage-statistics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/querying-storage-statistics/" +aliases: +- /riak/cs/2.1.2/developing/usage-and-billing-data/storage-statistics/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/learning.md b/content/riak/cs/2.1.2/redirects/learning.md new file mode 100644 index 0000000000..0bc4aa06b7 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/learning.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/theory/" +aliases: + - /riak/cs/2.1.2/learning +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/learning/comparisons.md b/content/riak/cs/2.1.2/redirects/learning/comparisons.md new file mode 100644 index 0000000000..ff42bee9d1 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/learning/comparisons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/theory/comparisons/" +aliases: + - /riak/cs/2.1.2/learning/comparisons +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/learning/comparisons/atmos.md b/content/riak/cs/2.1.2/redirects/learning/comparisons/atmos.md new file mode 100644 index 0000000000..7505c5864b --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/learning/comparisons/atmos.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/appendices/comparisons/atmos/" +aliases: + - /riak/cs/2.1.2/learning/comparisons/atmos +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/learning/comparisons/swift.md b/content/riak/cs/2.1.2/redirects/learning/comparisons/swift.md new file mode 100644 index 0000000000..a3d648431d --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/learning/comparisons/swift.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/references/appendices/comparisons/swift/" +aliases: + - /riak/cs/2.1.2/learning/comparisons/swift +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/learning/faqs.md b/content/riak/cs/2.1.2/redirects/learning/faqs.md new file mode 100644 index 0000000000..c6aaf53010 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/learning/faqs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/faqs/riak-cs/" +aliases: + - /riak/cs/2.1.2/learning/faqs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/learning/garbage-collection.md b/content/riak/cs/2.1.2/redirects/learning/garbage-collection.md new file mode 100644 index 0000000000..de77726fa4 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/learning/garbage-collection.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/garbage-collection/" +aliases: + - /riak/cs/2.1.2/learning/garbage-collection +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/learning/multi-datacenter-overview.md b/content/riak/cs/2.1.2/redirects/learning/multi-datacenter-overview.md new file mode 100644 index 0000000000..9b74058f80 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/learning/multi-datacenter-overview.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/multi-datacenter-overview//" +aliases: + - /riak/cs/2.1.2/learning/multi-datacenter-overview +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/learning/multipart-upload-overview.md b/content/riak/cs/2.1.2/redirects/learning/multipart-upload-overview.md new file mode 100644 index 0000000000..a03bd6e4b9 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/learning/multipart-upload-overview.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/multipart-upload-overview//" +aliases: + - /riak/cs/2.1.2/learning/multipart-upload-overview +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/learning/stanchion.md b/content/riak/cs/2.1.2/redirects/learning/stanchion.md new file mode 100644 index 0000000000..560fba48b6 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/learning/stanchion.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/theory/stanchion/" +aliases: + - /riak/cs/2.1.2/learning/stanchion/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/learning/version-compatibility.md b/content/riak/cs/2.1.2/redirects/learning/version-compatibility.md new file mode 100644 index 0000000000..a89c8aeb5d --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/learning/version-compatibility.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/version-compatibility/" +aliases: + - /riak/cs/2.1.2/learning/version-compatibility/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/quick-guide.md b/content/riak/cs/2.1.2/redirects/quick-guide.md new file mode 100644 index 0000000000..083ac17ac8 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/quick-guide.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/tutorials/fast-track/" +aliases: +- /riak/cs/2.1.2/quick-guide +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/quick-guide/local-testing-environment.md b/content/riak/cs/2.1.2/redirects/quick-guide/local-testing-environment.md new file mode 100644 index 0000000000..49a2597ca5 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/quick-guide/local-testing-environment.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/tutorials/fast-track/local-testing-environment/" +aliases: +- /riak/cs/2.1.2/quick-guide/local-testing-environment +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/quick-guide/test-installation.md b/content/riak/cs/2.1.2/redirects/quick-guide/test-installation.md new file mode 100644 index 0000000000..042583ae70 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/quick-guide/test-installation.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/tutorials/fast-track/test-installation/" +aliases: +- /riak/cs/2.1.2/quick-guide/test-installation +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/quick-guide/virtual-test-environment.md b/content/riak/cs/2.1.2/redirects/quick-guide/virtual-test-environment.md new file mode 100644 index 0000000000..2a7c55cd3b --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/quick-guide/virtual-test-environment.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/tutorials/fast-track/virtual-test-environment/" +aliases: +- /riak/cs/2.1.2/quick-guide/virtual-test-environment +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/quick-guide/what-is-riak-cs.md b/content/riak/cs/2.1.2/redirects/quick-guide/what-is-riak-cs.md new file mode 100644 index 0000000000..36ebbe3d6d --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/quick-guide/what-is-riak-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/tutorials/fast-track/what-is-riak-cs/" +aliases: +- /riak/cs/2.1.2/quick-guide/what-is-riak-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/release-notes.md b/content/riak/cs/2.1.2/redirects/release-notes.md new file mode 100644 index 0000000000..43a713513e --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/release-notes.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/release-notes/" +aliases: +- /riak/cs/2.1.2/release-notes/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/setup.md b/content/riak/cs/2.1.2/redirects/setup.md new file mode 100644 index 0000000000..cf27886eaa --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/setup.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/installing/" +aliases: +- /riak/cs/2.1.2/setup +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/setup/installing.md b/content/riak/cs/2.1.2/redirects/setup/installing.md new file mode 100644 index 0000000000..039ebd16ae --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/setup/installing.md @@ -0,0 +1,16 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/installing/" +aliases: +- /riak/cs/2.1.2/setup/installing +- /riak/cs/2.1.2/setup/installing/alpine-linux +- /riak/cs/2.1.2/setup/installing/amazon-web-services +- /riak/cs/2.1.2/setup/installing/debian-ubuntu +- /riak/cs/2.1.2/setup/installing/freebsd +- /riak/cs/2.1.2/setup/installing/oracle +- /riak/cs/2.1.2/setup/installing/rhel-centos +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/setup/upgrading.md b/content/riak/cs/2.1.2/redirects/setup/upgrading.md new file mode 100644 index 0000000000..161d8eaf64 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/setup/upgrading.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/rolling-upgrades/" +aliases: +- /riak/cs/2.1.2/setup/upgrading +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/using.md b/content/riak/cs/2.1.2/redirects/using.md new file mode 100644 index 0000000000..3f3a5612ac --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/using.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/operating/" +aliases: +- /riak/cs/2.1.2/using +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/using/command-line-tools.md b/content/riak/cs/2.1.2/redirects/using/command-line-tools.md new file mode 100644 index 0000000000..1355e677e7 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/using/command-line-tools.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/command-line-tools/" +aliases: + - /riak/cs/2.1.2/using/command-line-tools +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/using/launching-and-stopping.md b/content/riak/cs/2.1.2/redirects/using/launching-and-stopping.md new file mode 100644 index 0000000000..faf9656d84 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/using/launching-and-stopping.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/installing/launching-and-stopping" +aliases: + - /riak/cs/2.1.2/using/launching-and-stopping +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/using/logging.md b/content/riak/cs/2.1.2/redirects/using/logging.md new file mode 100644 index 0000000000..eaa76c99b2 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/using/logging.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/logging/" +aliases: + - /riak/cs/2.1.2/using/logging +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/2.1.2/redirects/using/monitoring-and-metrics.md b/content/riak/cs/2.1.2/redirects/using/monitoring-and-metrics.md new file mode 100644 index 0000000000..414296b087 --- /dev/null +++ b/content/riak/cs/2.1.2/redirects/using/monitoring-and-metrics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/2.1.2/cookbooks/monitoring-and-metrics/" +aliases: + - /riak/cs/2.1.2/using/monitoring-and-metrics +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/index.md b/content/riak/cs/3.0.0/index.md index 62b8e1449d..ca56c65c88 100644 --- a/content/riak/cs/3.0.0/index.md +++ b/content/riak/cs/3.0.0/index.md @@ -14,7 +14,7 @@ aliases: --- Riak CS (Cloud Storage) is easy-to-use object storage software built on top of -[Riak KV](http://basho.com/riak/), Basho's distributed database. Riak CS is +[Riak KV]({{}}riak/kv/latest/), Basho's distributed database. Riak CS is designed to provide simple, available, distributed cloud storage at any scale, and can be used to build cloud architectures---be they public or private---or as storage infrastructure for heavy-duty applications and services. Riak CS's diff --git a/content/riak/cs/3.0.0/redirects/add-ons.md b/content/riak/cs/3.0.0/redirects/add-ons.md new file mode 100644 index 0000000000..ab6a8102a8 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/add-ons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/operating/advanced/" +aliases: + - /riak/cs/3.0.0/add-ons +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/add-ons/add-ons.md b/content/riak/cs/3.0.0/redirects/add-ons/add-ons.md new file mode 100644 index 0000000000..3ccb562ce7 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/add-ons/add-ons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/appendices/riak-cs-control/" +aliases: + - /riak/cs/3.0.0/add-ons/riak-cs-control/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/configuring.md b/content/riak/cs/3.0.0/redirects/configuring.md new file mode 100644 index 0000000000..3812a9ad61 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/configuring.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/configuration/" +aliases: + - /riak/cs/3.0.0/configuring +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/configuring/load-balancing-proxy.md b/content/riak/cs/3.0.0/redirects/configuring/load-balancing-proxy.md new file mode 100644 index 0000000000..7b769e24ee --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/configuring/load-balancing-proxy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/configuration/load-balancing-proxy/" +aliases: + - /riak/cs/3.0.0/configuring/load-balancing-proxy/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/configuring/multi-datacenter.md b/content/riak/cs/3.0.0/redirects/configuring/multi-datacenter.md new file mode 100644 index 0000000000..82243771f3 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/configuring/multi-datacenter.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/configuration/multi-datacenter/" +aliases: + - /riak/cs/3.0.0/configuring/multi-datacenter/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/configuring/reference.md b/content/riak/cs/3.0.0/redirects/configuring/reference.md new file mode 100644 index 0000000000..6c0a7598ee --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/configuring/reference.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/configuration/reference/" +aliases: + - /riak/cs/3.0.0/configuring/reference/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/configuring/riak-cs.md b/content/riak/cs/3.0.0/redirects/configuring/riak-cs.md new file mode 100644 index 0000000000..de9c962b8b --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/configuring/riak-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/configuration/riak-cs/" +aliases: + - /riak/cs/3.0.0/configuring/riak-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/configuring/riak-kv-for-cs.md b/content/riak/cs/3.0.0/redirects/configuring/riak-kv-for-cs.md new file mode 100644 index 0000000000..2d5340b41f --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/configuring/riak-kv-for-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/configuration/riak-for-cs/" +aliases: + - /riak/cs/3.0.0/configuring/riak-kv-for-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/configuring/stanchion.md b/content/riak/cs/3.0.0/redirects/configuring/stanchion.md new file mode 100644 index 0000000000..8237004d25 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/configuring/stanchion.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/configuration/stanchion/" +aliases: + - /riak/cs/3.0.0/configuring/stanchion/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/configuring/superclusters.md b/content/riak/cs/3.0.0/redirects/configuring/superclusters.md new file mode 100644 index 0000000000..2273a839eb --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/configuring/superclusters.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/supercluster/" +aliases: + - /riak/cs/3.0.0/configuring/superclusters/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/accounts-and-admin.md b/content/riak/cs/3.0.0/redirects/developing/accounts-and-admin.md new file mode 100644 index 0000000000..7cef489631 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/accounts-and-admin.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/appendices/http-admin/" +aliases: +- /riak/cs/3.0.0/developing/accounts-and-admin +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/accounts-and-admin/access-control-lists.md b/content/riak/cs/3.0.0/redirects/developing/accounts-and-admin/access-control-lists.md new file mode 100644 index 0000000000..032367c6ab --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/accounts-and-admin/access-control-lists.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/access-control-lists/" +aliases: +- /riak/cs/3.0.0/developing/accounts-and-admin/access-control-lists/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/accounts-and-admin/account-management.md b/content/riak/cs/3.0.0/redirects/developing/accounts-and-admin/account-management.md new file mode 100644 index 0000000000..fcbe273c1e --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/accounts-and-admin/account-management.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/account-management/" +aliases: +- /riak/cs/3.0.0/developing/accounts-and-admin/account-management/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/accounts-and-admin/authentication.md b/content/riak/cs/3.0.0/redirects/developing/accounts-and-admin/authentication.md new file mode 100644 index 0000000000..8e48df0157 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/accounts-and-admin/authentication.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/authentication/" +aliases: +- /riak/cs/3.0.0/developing/accounts-and-admin/authentication/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/accounts-and-admin/designate-admin-user.md b/content/riak/cs/3.0.0/redirects/developing/accounts-and-admin/designate-admin-user.md new file mode 100644 index 0000000000..22434116c1 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/accounts-and-admin/designate-admin-user.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/designate-admin-user/" +aliases: +- /riak/cs/3.0.0/developing/accounts-and-admin/designate-admin-user/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis.md b/content/riak/cs/3.0.0/redirects/developing/apis.md new file mode 100644 index 0000000000..01e16f0da3 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/" +aliases: +- /riak/cs/3.0.0/developing/apis +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/cs-storage.md b/content/riak/cs/3.0.0/redirects/developing/apis/cs-storage.md new file mode 100644 index 0000000000..daea4b8266 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/cs-storage.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/" +aliases: +- /riak/cs/3.0.0/developing/apis/cs-storage +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/openstack.md b/content/riak/cs/3.0.0/redirects/developing/apis/openstack.md new file mode 100644 index 0000000000..8044090619 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/openstack.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/openstack/" +aliases: +- /riak/cs/3.0.0/developing/apis/openstack +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/openstack/containers.md b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/containers.md new file mode 100644 index 0000000000..26c3d698af --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/containers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/openstack/" +aliases: +- /riak/cs/3.0.0/developing/apis/openstack/containers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/openstack/containers/create-container.md b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/containers/create-container.md new file mode 100644 index 0000000000..75c8020e60 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/containers/create-container.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/openstack/create-container/" +aliases: +- /riak/cs/3.0.0/developing/apis/openstack/containers/create-container +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/openstack/containers/delete-container.md b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/containers/delete-container.md new file mode 100644 index 0000000000..432c0965e3 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/containers/delete-container.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/openstack/delete-container/" +aliases: +- /riak/cs/3.0.0/developing/apis/openstack/containers/delete-container +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/openstack/containers/list-containers.md b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/containers/list-containers.md new file mode 100644 index 0000000000..7a50f6ad29 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/containers/list-containers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/openstack/list-containers/" +aliases: +- /riak/cs/3.0.0/developing/apis/openstack/containers/list-containers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/openstack/containers/list-objects.md b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/containers/list-objects.md new file mode 100644 index 0000000000..afbab3f43b --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/containers/list-objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/openstack/list-objects/" +aliases: +- /riak/cs/3.0.0/developing/apis/openstack/containers/list-objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md new file mode 100644 index 0000000000..b1898b74af --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/openstack/mapping-from-oos-api-to-riak-cs-internal-api" +aliases: +- /riak/cs/3.0.0/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/openstack/objects.md b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/objects.md new file mode 100644 index 0000000000..c5a5f28a5a --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/openstack/" +aliases: +- /riak/cs/3.0.0/developing/apis/openstack/objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/openstack/objects/create-object.md b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/objects/create-object.md new file mode 100644 index 0000000000..0e17668471 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/objects/create-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/openstack/create-object/" +aliases: +- /riak/cs/3.0.0/developing/apis/openstack/objects/create-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/openstack/objects/delete-object.md b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/objects/delete-object.md new file mode 100644 index 0000000000..31ed7c887f --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/objects/delete-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/openstack/delete-object/" +aliases: +- /riak/cs/3.0.0/developing/apis/openstack/objects/delete-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/openstack/objects/get-object.md b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/objects/get-object.md new file mode 100644 index 0000000000..67f0f8b2af --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/objects/get-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/openstack/get-object/" +aliases: +- /riak/cs/3.0.0/developing/apis/openstack/objects/get-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/openstack/using-with-keystone.md b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/using-with-keystone.md new file mode 100644 index 0000000000..7da7698a67 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/using-with-keystone.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/using-with-keystone/" +aliases: +- /riak/cs/3.0.0/developing/apis/openstack/using-with-keystone +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md new file mode 100644 index 0000000000..bf2df418e3 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/keystone-conf-sample/" +aliases: +- /riak/cs/3.0.0/developing/apis/openstack/using-with-keystone/keystone-conf-sample +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md new file mode 100644 index 0000000000..14df71b2a7 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/keystone-setup/" +aliases: +- /riak/cs/3.0.0/developing/apis/openstack/using-with-keystone/keystone-setup +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3.md new file mode 100644 index 0000000000..864f82b753 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/" +aliases: +- /riak/cs/3.0.0/developing/apis/s3 +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets.md new file mode 100644 index 0000000000..e9367e25c3 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/buckets +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/delete-bucket-policy.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/delete-bucket-policy.md new file mode 100644 index 0000000000..4758af0163 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/delete-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/delete-bucket-policy" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/buckets/delete-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/delete-bucket.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/delete-bucket.md new file mode 100644 index 0000000000..fa6b7337b8 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/delete-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/delete-bucket" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/buckets/delete-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/get-bucket-acl.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/get-bucket-acl.md new file mode 100644 index 0000000000..7746157d55 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/get-bucket-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/get-bucket-acl" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/buckets/get-bucket-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/get-bucket-policy.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/get-bucket-policy.md new file mode 100644 index 0000000000..cf7711e55c --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/get-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/get-bucket-policy" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/buckets/get-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/get-bucket.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/get-bucket.md new file mode 100644 index 0000000000..26fa04b483 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/get-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/get-bucket" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/buckets/get-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/get-service.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/get-service.md new file mode 100644 index 0000000000..1a103262ac --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/get-service.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/get-service" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/buckets/get-service +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/put-bucket-acl.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/put-bucket-acl.md new file mode 100644 index 0000000000..1245f27856 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/put-bucket-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/put-bucket-acl" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/buckets/put-bucket-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/put-bucket-policy.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/put-bucket-policy.md new file mode 100644 index 0000000000..78f4f84763 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/put-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/put-bucket-policy" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/buckets/put-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/put-bucket.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/put-bucket.md new file mode 100644 index 0000000000..34bb435b0f --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/buckets/put-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/put-bucket" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/buckets/put-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/common-request-headers.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/common-request-headers.md new file mode 100644 index 0000000000..a1519a0389 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/common-request-headers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/common-request-headers" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/common-request-headers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/common-response-headers.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/common-response-headers.md new file mode 100644 index 0000000000..148c78cdc3 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/common-response-headers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/common-response-headers" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/common-response-headers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md new file mode 100644 index 0000000000..47d0c04a0f --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/mapping-from-s3-api-to-riak-cs-internal-api" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects.md new file mode 100644 index 0000000000..3d89697013 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/delete-multiple.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/delete-multiple.md new file mode 100644 index 0000000000..36f0a6478b --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/delete-multiple.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/delete-multi" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/objects/delete-multiple +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/delete-object.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/delete-object.md new file mode 100644 index 0000000000..d4ceecd840 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/delete-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/delete-object" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/objects/delete-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/get-object-acl.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/get-object-acl.md new file mode 100644 index 0000000000..172e53cf46 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/get-object-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/get-object-acl" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/objects/get-object-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/get-object.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/get-object.md new file mode 100644 index 0000000000..8db484f11d --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/get-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/get-object" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/objects/get-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/head-object.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/head-object.md new file mode 100644 index 0000000000..a78f36cfdd --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/head-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/head-object" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/objects/head-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads.md new file mode 100644 index 0000000000..9cc113e193 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/multipart-upload-overview/" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/objects/multipart-uploads +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md new file mode 100644 index 0000000000..f9c8aea605 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/abort-multipart-upload" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md new file mode 100644 index 0000000000..3f0df3818f --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/complete-multipart-upload" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md new file mode 100644 index 0000000000..c7b4f6f7fd --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/initiate-multipart-upload" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md new file mode 100644 index 0000000000..8a4e7037a7 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/list-multipart-uploads" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md new file mode 100644 index 0000000000..d8dd9122a5 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/list-parts" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/objects/multipart-uploads/list-parts +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md new file mode 100644 index 0000000000..bff59b0112 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/upload-part" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/objects/multipart-uploads/upload-part +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/put-object-acl.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/put-object-acl.md new file mode 100644 index 0000000000..1218e5fd75 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/put-object-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/put-object-acl" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/objects/put-object-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/put-object-copy.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/put-object-copy.md new file mode 100644 index 0000000000..6ba28ba3cc --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/put-object-copy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/put-object-copy" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/objects/put-object-copy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/put-object.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/put-object.md new file mode 100644 index 0000000000..bc7db8dd09 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/objects/put-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/put-object" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/objects/put-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/other-clients.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/other-clients.md new file mode 100644 index 0000000000..e73c751d2c --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/other-clients.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/apis/storage/s3/" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/other-clients +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/other-clients/dragondisk.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/other-clients/dragondisk.md new file mode 100644 index 0000000000..2af8a80dab --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/other-clients/dragondisk.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/configuration/dragondisk/" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/other-clients/dragondisk +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/other-clients/fog.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/other-clients/fog.md new file mode 100644 index 0000000000..8981122b8e --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/other-clients/fog.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/fog/" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/other-clients/fog +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/other-clients/transmit.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/other-clients/transmit.md new file mode 100644 index 0000000000..19a72da56d --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/other-clients/transmit.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/configuration/transmit/" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/other-clients/transmit +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/apis/s3/s3-client.md b/content/riak/cs/3.0.0/redirects/developing/apis/s3/s3-client.md new file mode 100644 index 0000000000..83fe18036a --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/apis/s3/s3-client.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/configuration/s3-client/" +aliases: +- /riak/cs/3.0.0/developing/apis/s3/s3-client +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/usage-and-billing-data.md b/content/riak/cs/3.0.0/redirects/developing/usage-and-billing-data.md new file mode 100644 index 0000000000..3f6697ebc2 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/usage-and-billing-data.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/usage-and-billing-data/" +aliases: +- /riak/cs/3.0.0/developing/usage-and-billing-data +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/usage-and-billing-data/access-statistics.md b/content/riak/cs/3.0.0/redirects/developing/usage-and-billing-data/access-statistics.md new file mode 100644 index 0000000000..88a1a62f7b --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/usage-and-billing-data/access-statistics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/querying-access-statistics/" +aliases: +- /riak/cs/3.0.0/developing/usage-and-billing-data/access-statistics/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/developing/usage-and-billing-data/storage-statistics.md b/content/riak/cs/3.0.0/redirects/developing/usage-and-billing-data/storage-statistics.md new file mode 100644 index 0000000000..3badc9bbb2 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/developing/usage-and-billing-data/storage-statistics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/querying-storage-statistics/" +aliases: +- /riak/cs/3.0.0/developing/usage-and-billing-data/storage-statistics/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/learning.md b/content/riak/cs/3.0.0/redirects/learning.md new file mode 100644 index 0000000000..023749ca6a --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/learning.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/theory/" +aliases: + - /riak/cs/3.0.0/learning +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/learning/comparisons.md b/content/riak/cs/3.0.0/redirects/learning/comparisons.md new file mode 100644 index 0000000000..b188de452f --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/learning/comparisons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/theory/comparisons/" +aliases: + - /riak/cs/3.0.0/learning/comparisons +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/learning/comparisons/atmos.md b/content/riak/cs/3.0.0/redirects/learning/comparisons/atmos.md new file mode 100644 index 0000000000..07d2e0f1f1 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/learning/comparisons/atmos.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/appendices/comparisons/atmos/" +aliases: + - /riak/cs/3.0.0/learning/comparisons/atmos +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/learning/comparisons/swift.md b/content/riak/cs/3.0.0/redirects/learning/comparisons/swift.md new file mode 100644 index 0000000000..517e702c5f --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/learning/comparisons/swift.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/references/appendices/comparisons/swift/" +aliases: + - /riak/cs/3.0.0/learning/comparisons/swift +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/learning/faqs.md b/content/riak/cs/3.0.0/redirects/learning/faqs.md new file mode 100644 index 0000000000..0c9e089533 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/learning/faqs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/faqs/riak-cs/" +aliases: + - /riak/cs/3.0.0/learning/faqs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/learning/garbage-collection.md b/content/riak/cs/3.0.0/redirects/learning/garbage-collection.md new file mode 100644 index 0000000000..396669b991 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/learning/garbage-collection.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/garbage-collection/" +aliases: + - /riak/cs/3.0.0/learning/garbage-collection +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/learning/multi-datacenter-overview.md b/content/riak/cs/3.0.0/redirects/learning/multi-datacenter-overview.md new file mode 100644 index 0000000000..2ee22fc5e8 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/learning/multi-datacenter-overview.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/multi-datacenter-overview//" +aliases: + - /riak/cs/3.0.0/learning/multi-datacenter-overview +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/learning/multipart-upload-overview.md b/content/riak/cs/3.0.0/redirects/learning/multipart-upload-overview.md new file mode 100644 index 0000000000..96700bdbcd --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/learning/multipart-upload-overview.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/multipart-upload-overview//" +aliases: + - /riak/cs/3.0.0/learning/multipart-upload-overview +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/learning/stanchion.md b/content/riak/cs/3.0.0/redirects/learning/stanchion.md new file mode 100644 index 0000000000..4e6386afa1 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/learning/stanchion.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/theory/stanchion/" +aliases: + - /riak/cs/3.0.0/learning/stanchion/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/learning/version-compatibility.md b/content/riak/cs/3.0.0/redirects/learning/version-compatibility.md new file mode 100644 index 0000000000..9b6039f076 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/learning/version-compatibility.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/version-compatibility/" +aliases: + - /riak/cs/3.0.0/learning/version-compatibility/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/quick-guide.md b/content/riak/cs/3.0.0/redirects/quick-guide.md new file mode 100644 index 0000000000..9eba2f828d --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/quick-guide.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/tutorials/fast-track/" +aliases: +- /riak/cs/3.0.0/quick-guide +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/quick-guide/local-testing-environment.md b/content/riak/cs/3.0.0/redirects/quick-guide/local-testing-environment.md new file mode 100644 index 0000000000..bd8b6a1c06 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/quick-guide/local-testing-environment.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/tutorials/fast-track/local-testing-environment/" +aliases: +- /riak/cs/3.0.0/quick-guide/local-testing-environment +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/quick-guide/test-installation.md b/content/riak/cs/3.0.0/redirects/quick-guide/test-installation.md new file mode 100644 index 0000000000..058ab077b1 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/quick-guide/test-installation.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/tutorials/fast-track/test-installation/" +aliases: +- /riak/cs/3.0.0/quick-guide/test-installation +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/quick-guide/virtual-test-environment.md b/content/riak/cs/3.0.0/redirects/quick-guide/virtual-test-environment.md new file mode 100644 index 0000000000..00a099240d --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/quick-guide/virtual-test-environment.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/tutorials/fast-track/virtual-test-environment/" +aliases: +- /riak/cs/3.0.0/quick-guide/virtual-test-environment +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/quick-guide/what-is-riak-cs.md b/content/riak/cs/3.0.0/redirects/quick-guide/what-is-riak-cs.md new file mode 100644 index 0000000000..38ee79bc3c --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/quick-guide/what-is-riak-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/tutorials/fast-track/what-is-riak-cs/" +aliases: +- /riak/cs/3.0.0/quick-guide/what-is-riak-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/release-notes.md b/content/riak/cs/3.0.0/redirects/release-notes.md new file mode 100644 index 0000000000..92a76168e9 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/release-notes.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/release-notes/" +aliases: +- /riak/cs/3.0.0/release-notes/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/setup.md b/content/riak/cs/3.0.0/redirects/setup.md new file mode 100644 index 0000000000..d3c8d2ca5e --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/setup.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/installing/" +aliases: +- /riak/cs/3.0.0/setup +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/setup/installing.md b/content/riak/cs/3.0.0/redirects/setup/installing.md new file mode 100644 index 0000000000..f2d3eb6389 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/setup/installing.md @@ -0,0 +1,16 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/installing/" +aliases: +- /riak/cs/3.0.0/setup/installing +- /riak/cs/3.0.0/setup/installing/alpine-linux +- /riak/cs/3.0.0/setup/installing/amazon-web-services +- /riak/cs/3.0.0/setup/installing/debian-ubuntu +- /riak/cs/3.0.0/setup/installing/freebsd +- /riak/cs/3.0.0/setup/installing/oracle +- /riak/cs/3.0.0/setup/installing/rhel-centos +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/setup/upgrading.md b/content/riak/cs/3.0.0/redirects/setup/upgrading.md new file mode 100644 index 0000000000..1f3ff8e5a2 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/setup/upgrading.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/rolling-upgrades/" +aliases: +- /riak/cs/3.0.0/setup/upgrading +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/using.md b/content/riak/cs/3.0.0/redirects/using.md new file mode 100644 index 0000000000..530cd25f4f --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/using.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/operating/" +aliases: +- /riak/cs/3.0.0/using +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/using/command-line-tools.md b/content/riak/cs/3.0.0/redirects/using/command-line-tools.md new file mode 100644 index 0000000000..46f4df4236 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/using/command-line-tools.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/command-line-tools/" +aliases: + - /riak/cs/3.0.0/using/command-line-tools +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/using/launching-and-stopping.md b/content/riak/cs/3.0.0/redirects/using/launching-and-stopping.md new file mode 100644 index 0000000000..92513f94c7 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/using/launching-and-stopping.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/installing/launching-and-stopping" +aliases: + - /riak/cs/3.0.0/using/launching-and-stopping +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/using/logging.md b/content/riak/cs/3.0.0/redirects/using/logging.md new file mode 100644 index 0000000000..ef88302371 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/using/logging.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/logging/" +aliases: + - /riak/cs/3.0.0/using/logging +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/redirects/using/monitoring-and-metrics.md b/content/riak/cs/3.0.0/redirects/using/monitoring-and-metrics.md new file mode 100644 index 0000000000..39ce1a2ad1 --- /dev/null +++ b/content/riak/cs/3.0.0/redirects/using/monitoring-and-metrics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.0/cookbooks/monitoring-and-metrics/" +aliases: + - /riak/cs/3.0.0/using/monitoring-and-metrics +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.0/tutorials/fast-track/what-is-riak-cs.md b/content/riak/cs/3.0.0/tutorials/fast-track/what-is-riak-cs.md index e041bc1c8e..1a1be7fb93 100644 --- a/content/riak/cs/3.0.0/tutorials/fast-track/what-is-riak-cs.md +++ b/content/riak/cs/3.0.0/tutorials/fast-track/what-is-riak-cs.md @@ -1,5 +1,5 @@ --- -title: "What Is Riak CS" +title: "What Is Riak CS?" description: "" menu: riak_cs-3.0.0: @@ -12,7 +12,6 @@ project_version: "3.0.0" aliases: - /riakcs/3.0.0/cookbooks/tutorials/fast-track/What-is-Riak-CS/ - /riak/cs/3.0.0/cookbooks/tutorials/fast-track/What-is-Riak-CS/ - --- This page introduces the architecture behind Riak CS. If you already diff --git a/content/riak/cs/3.0.1/cookbooks/release-notes.md b/content/riak/cs/3.0.1/cookbooks/release-notes.md index b51c34016b..efece52018 100644 --- a/content/riak/cs/3.0.1/cookbooks/release-notes.md +++ b/content/riak/cs/3.0.1/cookbooks/release-notes.md @@ -12,7 +12,6 @@ project_version: "3.0.1" aliases: - /riakcs/3.0.1/cookbooks/Riak-CS-Release-Notes/ - /riak/cs/3.0.1/cookbooks/Riak-CS-Release-Notes/ - - /riak/cs/latest/cookbooks/release-notes/ --- [riak_cs_multibag_support]: {{}}riak/cs/3.0.1/cookbooks/supercluster diff --git a/content/riak/cs/3.0.1/developing.md b/content/riak/cs/3.0.1/developing.md index 1cd3e83693..1e9b0426ae 100644 --- a/content/riak/cs/3.0.1/developing.md +++ b/content/riak/cs/3.0.1/developing.md @@ -10,7 +10,6 @@ menu: project: "riak_cs" project_version: "3.0.1" aliases: - - /riak/cs/latest/developing/ --- ### In This Section diff --git a/content/riak/cs/3.0.1/downloads.md b/content/riak/cs/3.0.1/downloads.md index 2e246f60e8..6304228708 100644 --- a/content/riak/cs/3.0.1/downloads.md +++ b/content/riak/cs/3.0.1/downloads.md @@ -24,5 +24,4 @@ listed_projects: aliases: - /riakcs/3.0.1/riakcs-downloads/ - /riak/cs/3.0.1/riakcs-downloads/ - - /riak/cs/latest/downloads/ --- diff --git a/content/riak/cs/3.0.1/index.md b/content/riak/cs/3.0.1/index.md index cae23456be..6cb044a7cd 100644 --- a/content/riak/cs/3.0.1/index.md +++ b/content/riak/cs/3.0.1/index.md @@ -10,11 +10,10 @@ menu: project: "riak_cs" project_version: "3.0.1" aliases: - - /riakcs/3.0.1/ --- Riak CS (Cloud Storage) is easy-to-use object storage software built on top of -[Riak KV](http://basho.com/riak/), Basho's distributed database. Riak CS is +[Riak KV]({{}}riak/kv/latest/), Basho's distributed database. Riak CS is designed to provide simple, available, distributed cloud storage at any scale, and can be used to build cloud architectures---be they public or private---or as storage infrastructure for heavy-duty applications and services. Riak CS's diff --git a/content/riak/cs/3.0.1/operating.md b/content/riak/cs/3.0.1/operating.md index 70849a8d68..9e5fb2b975 100644 --- a/content/riak/cs/3.0.1/operating.md +++ b/content/riak/cs/3.0.1/operating.md @@ -10,7 +10,6 @@ menu: project: "riak_cs" project_version: "3.0.1" aliases: - - /riak/cs/latest/operating/ --- ### In This Section diff --git a/content/riak/cs/3.0.1/redirects/add-ons.md b/content/riak/cs/3.0.1/redirects/add-ons.md new file mode 100644 index 0000000000..1fecbbc6eb --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/add-ons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/operating/advanced/" +aliases: + - /riak/cs/3.0.1/add-ons +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/add-ons/add-ons.md b/content/riak/cs/3.0.1/redirects/add-ons/add-ons.md new file mode 100644 index 0000000000..a8e9b72ed7 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/add-ons/add-ons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/appendices/riak-cs-control/" +aliases: + - /riak/cs/3.0.1/add-ons/riak-cs-control/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/configuring.md b/content/riak/cs/3.0.1/redirects/configuring.md new file mode 100644 index 0000000000..b7676d5eab --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/configuring.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/configuration/" +aliases: + - /riak/cs/3.0.1/configuring +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/configuring/load-balancing-proxy.md b/content/riak/cs/3.0.1/redirects/configuring/load-balancing-proxy.md new file mode 100644 index 0000000000..d02ba0a616 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/configuring/load-balancing-proxy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/configuration/load-balancing-proxy/" +aliases: + - /riak/cs/3.0.1/configuring/load-balancing-proxy/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/configuring/multi-datacenter.md b/content/riak/cs/3.0.1/redirects/configuring/multi-datacenter.md new file mode 100644 index 0000000000..eea3f0f6ad --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/configuring/multi-datacenter.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/configuration/multi-datacenter/" +aliases: + - /riak/cs/3.0.1/configuring/multi-datacenter/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/configuring/reference.md b/content/riak/cs/3.0.1/redirects/configuring/reference.md new file mode 100644 index 0000000000..6af192de78 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/configuring/reference.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/configuration/reference/" +aliases: + - /riak/cs/3.0.1/configuring/reference/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/configuring/riak-cs.md b/content/riak/cs/3.0.1/redirects/configuring/riak-cs.md new file mode 100644 index 0000000000..036ff773e2 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/configuring/riak-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/configuration/riak-cs/" +aliases: + - /riak/cs/3.0.1/configuring/riak-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/configuring/riak-kv-for-cs.md b/content/riak/cs/3.0.1/redirects/configuring/riak-kv-for-cs.md new file mode 100644 index 0000000000..f1979f6f37 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/configuring/riak-kv-for-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/configuration/riak-for-cs/" +aliases: + - /riak/cs/3.0.1/configuring/riak-kv-for-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/configuring/stanchion.md b/content/riak/cs/3.0.1/redirects/configuring/stanchion.md new file mode 100644 index 0000000000..81cedc974d --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/configuring/stanchion.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/configuration/stanchion/" +aliases: + - /riak/cs/3.0.1/configuring/stanchion/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/configuring/superclusters.md b/content/riak/cs/3.0.1/redirects/configuring/superclusters.md new file mode 100644 index 0000000000..9b517ba731 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/configuring/superclusters.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/supercluster/" +aliases: + - /riak/cs/3.0.1/configuring/superclusters/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/accounts-and-admin.md b/content/riak/cs/3.0.1/redirects/developing/accounts-and-admin.md new file mode 100644 index 0000000000..8e9773cc6a --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/accounts-and-admin.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/appendices/http-admin/" +aliases: +- /riak/cs/3.0.1/developing/accounts-and-admin +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/accounts-and-admin/access-control-lists.md b/content/riak/cs/3.0.1/redirects/developing/accounts-and-admin/access-control-lists.md new file mode 100644 index 0000000000..bb5e048a8c --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/accounts-and-admin/access-control-lists.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/access-control-lists/" +aliases: +- /riak/cs/3.0.1/developing/accounts-and-admin/access-control-lists/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/accounts-and-admin/account-management.md b/content/riak/cs/3.0.1/redirects/developing/accounts-and-admin/account-management.md new file mode 100644 index 0000000000..4fddd57226 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/accounts-and-admin/account-management.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/account-management/" +aliases: +- /riak/cs/3.0.1/developing/accounts-and-admin/account-management/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/accounts-and-admin/authentication.md b/content/riak/cs/3.0.1/redirects/developing/accounts-and-admin/authentication.md new file mode 100644 index 0000000000..9219d91576 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/accounts-and-admin/authentication.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/authentication/" +aliases: +- /riak/cs/3.0.1/developing/accounts-and-admin/authentication/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/accounts-and-admin/designate-admin-user.md b/content/riak/cs/3.0.1/redirects/developing/accounts-and-admin/designate-admin-user.md new file mode 100644 index 0000000000..2b72848666 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/accounts-and-admin/designate-admin-user.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/designate-admin-user/" +aliases: +- /riak/cs/3.0.1/developing/accounts-and-admin/designate-admin-user/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis.md b/content/riak/cs/3.0.1/redirects/developing/apis.md new file mode 100644 index 0000000000..210ba95a25 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/" +aliases: +- /riak/cs/3.0.1/developing/apis +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/cs-storage.md b/content/riak/cs/3.0.1/redirects/developing/apis/cs-storage.md new file mode 100644 index 0000000000..dea79052cb --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/cs-storage.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/" +aliases: +- /riak/cs/3.0.1/developing/apis/cs-storage +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/openstack.md b/content/riak/cs/3.0.1/redirects/developing/apis/openstack.md new file mode 100644 index 0000000000..8e6d9fc3b6 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/openstack.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/openstack/" +aliases: +- /riak/cs/3.0.1/developing/apis/openstack +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/openstack/containers.md b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/containers.md new file mode 100644 index 0000000000..07c5f5e682 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/containers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/openstack/" +aliases: +- /riak/cs/3.0.1/developing/apis/openstack/containers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/openstack/containers/create-container.md b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/containers/create-container.md new file mode 100644 index 0000000000..7afe3df645 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/containers/create-container.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/openstack/create-container/" +aliases: +- /riak/cs/3.0.1/developing/apis/openstack/containers/create-container +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/openstack/containers/delete-container.md b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/containers/delete-container.md new file mode 100644 index 0000000000..91669004da --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/containers/delete-container.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/openstack/delete-container/" +aliases: +- /riak/cs/3.0.1/developing/apis/openstack/containers/delete-container +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/openstack/containers/list-containers.md b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/containers/list-containers.md new file mode 100644 index 0000000000..a41ea6c5cb --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/containers/list-containers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/openstack/list-containers/" +aliases: +- /riak/cs/3.0.1/developing/apis/openstack/containers/list-containers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/openstack/containers/list-objects.md b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/containers/list-objects.md new file mode 100644 index 0000000000..16f2ec3f8d --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/containers/list-objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/openstack/list-objects/" +aliases: +- /riak/cs/3.0.1/developing/apis/openstack/containers/list-objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md new file mode 100644 index 0000000000..6724fdc657 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md @@ -0,0 +1,55 @@ +--- +title: "Mapping From OOS API to Riak CS internal API" +description: "" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.0.1/references/apis/storage/openstack/Mapping-From-OOS-API-to-Riak-CS-internal-API + - /riak/cs/3.0.1/references/apis/storage/openstack/Mapping-From-OOS-API-to-Riak-CS-internal-API + - /riak/cs/latest/references/apis/storage/openstack/mapping-from-oos-api-to-riak-cs-internal-api/ +--- + +## Overview + +This document outlines a mapping of the OpenStack Object Storage (OOS) API (version 1.0) URLs to their rewritten format that is processed by Webmachine and Riak CS. + +## URL Mapping + +### Storage Account Services + +* List Containers + * `GET //` -> `GET /buckets` +* Retrieve account metadata + * **TBD** +* Create/Update account metadata + * **TBD** +* Delete account metadata + * **TBD** + +### Storage Container Services + +* List Objects + * `GET ///` -> `GET /buckets//objects` +* Create Container + * `PUT ///` -> `PUT /buckets/` +* Delete Container + * `DELETE ///` -> `DELETE /buckets/` +* Retrieve Container Metadata + * **TBD** +* Create/Update Container Metadata + * **TBD** +* Delete Container Metadata + * **TBD** + +### Storage Object Services + +* Retrieve Object + * `GET ////` -> `GET /buckets//objects/` +* Create/Update Object + * `PUT ////` -> `PUT /buckets//objects/` +* Delete Object + * `DELETE ////` -> `DELETE /buckets//objects/` +* Retrieve Object Metadata + * **TBD** +* Update Object Metadata + * **TBD** diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/openstack/objects.md b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/objects.md new file mode 100644 index 0000000000..dbd98bfaa8 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/openstack/" +aliases: +- /riak/cs/3.0.1/developing/apis/openstack/objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/openstack/objects/create-object.md b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/objects/create-object.md new file mode 100644 index 0000000000..aa916f53c6 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/objects/create-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/openstack/create-object/" +aliases: +- /riak/cs/3.0.1/developing/apis/openstack/objects/create-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/openstack/objects/delete-object.md b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/objects/delete-object.md new file mode 100644 index 0000000000..2503834b52 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/objects/delete-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/openstack/delete-object/" +aliases: +- /riak/cs/3.0.1/developing/apis/openstack/objects/delete-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/openstack/objects/get-object.md b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/objects/get-object.md new file mode 100644 index 0000000000..e59c2e7796 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/objects/get-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/openstack/get-object/" +aliases: +- /riak/cs/3.0.1/developing/apis/openstack/objects/get-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/openstack/using-with-keystone.md b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/using-with-keystone.md new file mode 100644 index 0000000000..7ecc545be6 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/using-with-keystone.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/using-with-keystone/" +aliases: +- /riak/cs/3.0.1/developing/apis/openstack/using-with-keystone +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md new file mode 100644 index 0000000000..56ff7c7e3c --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/keystone-conf-sample/" +aliases: +- /riak/cs/3.0.1/developing/apis/openstack/using-with-keystone/keystone-conf-sample +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md new file mode 100644 index 0000000000..f36bd8e1c8 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/openstack/using-with-keystone/keystone-setup.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/keystone-setup/" +aliases: +- /riak/cs/3.0.1/developing/apis/openstack/using-with-keystone/keystone-setup +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3.md new file mode 100644 index 0000000000..f899444f3f --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/" +aliases: +- /riak/cs/3.0.1/developing/apis/s3 +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets.md new file mode 100644 index 0000000000..328666771f --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/buckets +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/delete-bucket-policy.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/delete-bucket-policy.md new file mode 100644 index 0000000000..d47a8f1b71 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/delete-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/delete-bucket-policy" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/buckets/delete-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/delete-bucket.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/delete-bucket.md new file mode 100644 index 0000000000..448ecd5335 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/delete-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/delete-bucket" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/buckets/delete-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/get-bucket-acl.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/get-bucket-acl.md new file mode 100644 index 0000000000..5ff74d0394 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/get-bucket-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/get-bucket-acl" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/buckets/get-bucket-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/get-bucket-policy.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/get-bucket-policy.md new file mode 100644 index 0000000000..5b50ae7911 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/get-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/get-bucket-policy" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/buckets/get-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/get-bucket.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/get-bucket.md new file mode 100644 index 0000000000..daba62280f --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/get-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/get-bucket" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/buckets/get-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/get-service.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/get-service.md new file mode 100644 index 0000000000..c259553489 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/get-service.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/get-service" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/buckets/get-service +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/put-bucket-acl.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/put-bucket-acl.md new file mode 100644 index 0000000000..5e985b172f --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/put-bucket-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/put-bucket-acl" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/buckets/put-bucket-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/put-bucket-policy.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/put-bucket-policy.md new file mode 100644 index 0000000000..a48b397169 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/put-bucket-policy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/put-bucket-policy" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/buckets/put-bucket-policy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/put-bucket.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/put-bucket.md new file mode 100644 index 0000000000..92db56f387 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/buckets/put-bucket.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/put-bucket" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/buckets/put-bucket +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/common-request-headers.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/common-request-headers.md new file mode 100644 index 0000000000..c33a6a2e65 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/common-request-headers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/common-request-headers" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/common-request-headers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/common-response-headers.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/common-response-headers.md new file mode 100644 index 0000000000..119a5a49f2 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/common-response-headers.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/common-response-headers" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/common-response-headers +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md new file mode 100644 index 0000000000..5bd07c5a91 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/mapping-from-s3-api-to-riak-cs-internal-api" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects.md new file mode 100644 index 0000000000..b8133fd663 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/objects +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/delete-multiple.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/delete-multiple.md new file mode 100644 index 0000000000..eb8914afc0 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/delete-multiple.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/delete-multi" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/objects/delete-multiple +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/delete-object.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/delete-object.md new file mode 100644 index 0000000000..45c59a102e --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/delete-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/delete-object" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/objects/delete-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/get-object-acl.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/get-object-acl.md new file mode 100644 index 0000000000..af63b21240 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/get-object-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/get-object-acl" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/objects/get-object-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/get-object.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/get-object.md new file mode 100644 index 0000000000..d1e81ffab4 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/get-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/get-object" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/objects/get-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/head-object.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/head-object.md new file mode 100644 index 0000000000..a8d192ca01 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/head-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/head-object" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/objects/head-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads.md new file mode 100644 index 0000000000..9314c0f7f2 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/multipart-upload-overview/" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/objects/multipart-uploads +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md new file mode 100644 index 0000000000..a0a480ed40 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/abort-multipart-upload" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md new file mode 100644 index 0000000000..97080c3af5 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/complete-multipart-upload" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md new file mode 100644 index 0000000000..edffcab929 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/initiate-multipart-upload" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md new file mode 100644 index 0000000000..4a1c78f14f --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/list-multipart-uploads" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md new file mode 100644 index 0000000000..003fdd94d5 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/list-parts.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/list-parts" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/objects/multipart-uploads/list-parts +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md new file mode 100644 index 0000000000..3254dc839b --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/multipart-uploads/upload-part.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/upload-part" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/objects/multipart-uploads/upload-part +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/put-object-acl.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/put-object-acl.md new file mode 100644 index 0000000000..8e24fcadf4 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/put-object-acl.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/put-object-acl" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/objects/put-object-acl +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/put-object-copy.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/put-object-copy.md new file mode 100644 index 0000000000..bcf75464bf --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/put-object-copy.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/put-object-copy" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/objects/put-object-copy +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/put-object.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/put-object.md new file mode 100644 index 0000000000..a848bb63b5 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/objects/put-object.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/put-object" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/objects/put-object +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/other-clients.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/other-clients.md new file mode 100644 index 0000000000..87925136b4 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/other-clients.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/apis/storage/s3/" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/other-clients +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/other-clients/dragondisk.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/other-clients/dragondisk.md new file mode 100644 index 0000000000..07b5b48e03 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/other-clients/dragondisk.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/configuration/dragondisk/" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/other-clients/dragondisk +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/other-clients/fog.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/other-clients/fog.md new file mode 100644 index 0000000000..b8faca104c --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/other-clients/fog.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/fog/" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/other-clients/fog +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/other-clients/transmit.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/other-clients/transmit.md new file mode 100644 index 0000000000..222df12407 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/other-clients/transmit.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/configuration/transmit/" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/other-clients/transmit +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/apis/s3/s3-client.md b/content/riak/cs/3.0.1/redirects/developing/apis/s3/s3-client.md new file mode 100644 index 0000000000..003d980c59 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/apis/s3/s3-client.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/configuration/s3-client/" +aliases: +- /riak/cs/3.0.1/developing/apis/s3/s3-client +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/usage-and-billing-data.md b/content/riak/cs/3.0.1/redirects/developing/usage-and-billing-data.md new file mode 100644 index 0000000000..d5abe2671d --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/usage-and-billing-data.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/usage-and-billing-data/" +aliases: +- /riak/cs/3.0.1/developing/usage-and-billing-data +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/usage-and-billing-data/access-statistics.md b/content/riak/cs/3.0.1/redirects/developing/usage-and-billing-data/access-statistics.md new file mode 100644 index 0000000000..73f81941c0 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/usage-and-billing-data/access-statistics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/querying-access-statistics/" +aliases: +- /riak/cs/3.0.1/developing/usage-and-billing-data/access-statistics/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/developing/usage-and-billing-data/storage-statistics.md b/content/riak/cs/3.0.1/redirects/developing/usage-and-billing-data/storage-statistics.md new file mode 100644 index 0000000000..67a8c2f419 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/developing/usage-and-billing-data/storage-statistics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/querying-storage-statistics/" +aliases: +- /riak/cs/3.0.1/developing/usage-and-billing-data/storage-statistics/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/learning.md b/content/riak/cs/3.0.1/redirects/learning.md new file mode 100644 index 0000000000..24ed328834 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/learning.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/theory/" +aliases: + - /riak/cs/3.0.1/learning +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/learning/comparisons.md b/content/riak/cs/3.0.1/redirects/learning/comparisons.md new file mode 100644 index 0000000000..c8e20a67dd --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/learning/comparisons.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/theory/comparisons/" +aliases: + - /riak/cs/3.0.1/learning/comparisons +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/learning/comparisons/atmos.md b/content/riak/cs/3.0.1/redirects/learning/comparisons/atmos.md new file mode 100644 index 0000000000..e33d80e46d --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/learning/comparisons/atmos.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/appendices/comparisons/atmos/" +aliases: + - /riak/cs/3.0.1/learning/comparisons/atmos +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/learning/comparisons/swift.md b/content/riak/cs/3.0.1/redirects/learning/comparisons/swift.md new file mode 100644 index 0000000000..cdfdcc93b7 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/learning/comparisons/swift.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/references/appendices/comparisons/swift/" +aliases: + - /riak/cs/3.0.1/learning/comparisons/swift +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/learning/faqs.md b/content/riak/cs/3.0.1/redirects/learning/faqs.md new file mode 100644 index 0000000000..901e948483 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/learning/faqs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/faqs/riak-cs/" +aliases: + - /riak/cs/3.0.1/learning/faqs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/learning/garbage-collection.md b/content/riak/cs/3.0.1/redirects/learning/garbage-collection.md new file mode 100644 index 0000000000..25edf2bd13 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/learning/garbage-collection.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/garbage-collection/" +aliases: + - /riak/cs/3.0.1/learning/garbage-collection +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/learning/multi-datacenter-overview.md b/content/riak/cs/3.0.1/redirects/learning/multi-datacenter-overview.md new file mode 100644 index 0000000000..c8fc77e204 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/learning/multi-datacenter-overview.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/multi-datacenter-overview//" +aliases: + - /riak/cs/3.0.1/learning/multi-datacenter-overview +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/learning/multipart-upload-overview.md b/content/riak/cs/3.0.1/redirects/learning/multipart-upload-overview.md new file mode 100644 index 0000000000..4bd6f1eeb9 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/learning/multipart-upload-overview.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/multipart-upload-overview//" +aliases: + - /riak/cs/3.0.1/learning/multipart-upload-overview +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/learning/stanchion.md b/content/riak/cs/3.0.1/redirects/learning/stanchion.md new file mode 100644 index 0000000000..4d55e05750 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/learning/stanchion.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/theory/stanchion/" +aliases: + - /riak/cs/3.0.1/learning/stanchion/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/learning/version-compatibility.md b/content/riak/cs/3.0.1/redirects/learning/version-compatibility.md new file mode 100644 index 0000000000..d1eda2e3b7 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/learning/version-compatibility.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/version-compatibility/" +aliases: + - /riak/cs/3.0.1/learning/version-compatibility/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/quick-guide.md b/content/riak/cs/3.0.1/redirects/quick-guide.md new file mode 100644 index 0000000000..57732f09c4 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/quick-guide.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/tutorials/fast-track/" +aliases: +- /riak/cs/3.0.1/quick-guide +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/quick-guide/local-testing-environment.md b/content/riak/cs/3.0.1/redirects/quick-guide/local-testing-environment.md new file mode 100644 index 0000000000..e4b37e5997 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/quick-guide/local-testing-environment.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/tutorials/fast-track/local-testing-environment/" +aliases: +- /riak/cs/3.0.1/quick-guide/local-testing-environment +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/quick-guide/test-installation.md b/content/riak/cs/3.0.1/redirects/quick-guide/test-installation.md new file mode 100644 index 0000000000..0c9452cae4 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/quick-guide/test-installation.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/tutorials/fast-track/test-installation/" +aliases: +- /riak/cs/3.0.1/quick-guide/test-installation +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/quick-guide/virtual-test-environment.md b/content/riak/cs/3.0.1/redirects/quick-guide/virtual-test-environment.md new file mode 100644 index 0000000000..99092a193a --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/quick-guide/virtual-test-environment.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/tutorials/fast-track/virtual-test-environment/" +aliases: +- /riak/cs/3.0.1/quick-guide/virtual-test-environment +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/quick-guide/what-is-riak-cs.md b/content/riak/cs/3.0.1/redirects/quick-guide/what-is-riak-cs.md new file mode 100644 index 0000000000..a0e2aed328 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/quick-guide/what-is-riak-cs.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/tutorials/fast-track/what-is-riak-cs/" +aliases: +- /riak/cs/3.0.1/quick-guide/what-is-riak-cs/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/release-notes.md b/content/riak/cs/3.0.1/redirects/release-notes.md new file mode 100644 index 0000000000..079717adc2 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/release-notes.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/release-notes/" +aliases: +- /riak/cs/3.0.1/release-notes/ +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/setup.md b/content/riak/cs/3.0.1/redirects/setup.md new file mode 100644 index 0000000000..8713093b59 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/setup.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/installing/" +aliases: +- /riak/cs/3.0.1/setup +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/setup/installing.md b/content/riak/cs/3.0.1/redirects/setup/installing.md new file mode 100644 index 0000000000..49ca1ff749 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/setup/installing.md @@ -0,0 +1,16 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/installing/" +aliases: +- /riak/cs/3.0.1/setup/installing +- /riak/cs/3.0.1/setup/installing/alpine-linux +- /riak/cs/3.0.1/setup/installing/amazon-web-services +- /riak/cs/3.0.1/setup/installing/debian-ubuntu +- /riak/cs/3.0.1/setup/installing/freebsd +- /riak/cs/3.0.1/setup/installing/oracle +- /riak/cs/3.0.1/setup/installing/rhel-centos +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/setup/upgrading.md b/content/riak/cs/3.0.1/redirects/setup/upgrading.md new file mode 100644 index 0000000000..31085aa48c --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/setup/upgrading.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/rolling-upgrades/" +aliases: +- /riak/cs/3.0.1/setup/upgrading +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/using.md b/content/riak/cs/3.0.1/redirects/using.md new file mode 100644 index 0000000000..72915ec8e2 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/using.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/operating/" +aliases: +- /riak/cs/3.0.1/using +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/using/command-line-tools.md b/content/riak/cs/3.0.1/redirects/using/command-line-tools.md new file mode 100644 index 0000000000..a1b4aeebd6 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/using/command-line-tools.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/command-line-tools/" +aliases: + - /riak/cs/3.0.1/using/command-line-tools +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/using/launching-and-stopping.md b/content/riak/cs/3.0.1/redirects/using/launching-and-stopping.md new file mode 100644 index 0000000000..7d4bb7e544 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/using/launching-and-stopping.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/installing/launching-and-stopping" +aliases: + - /riak/cs/3.0.1/using/launching-and-stopping +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/using/logging.md b/content/riak/cs/3.0.1/redirects/using/logging.md new file mode 100644 index 0000000000..050843014a --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/using/logging.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/logging/" +aliases: + - /riak/cs/3.0.1/using/logging +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/redirects/using/monitoring-and-metrics.md b/content/riak/cs/3.0.1/redirects/using/monitoring-and-metrics.md new file mode 100644 index 0000000000..72a14590f9 --- /dev/null +++ b/content/riak/cs/3.0.1/redirects/using/monitoring-and-metrics.md @@ -0,0 +1,10 @@ +--- +layout: redirect +target: "riak/cs/3.0.1/cookbooks/monitoring-and-metrics/" +aliases: + - /riak/cs/3.0.1/using/monitoring-and-metrics +--- + +# Redirect + +This page will redirect to `target`. diff --git a/content/riak/cs/3.0.1/reference.md b/content/riak/cs/3.0.1/reference.md index 5d7772e10c..8364fa43e9 100644 --- a/content/riak/cs/3.0.1/reference.md +++ b/content/riak/cs/3.0.1/reference.md @@ -10,7 +10,6 @@ menu: project: "riak_cs" project_version: "3.0.1" aliases: - - /riak/cs/latest/reference/ --- ### In This Section diff --git a/content/riak/cs/3.0.1/theory.md b/content/riak/cs/3.0.1/theory.md index d1da5d0946..0e8dfaa51c 100644 --- a/content/riak/cs/3.0.1/theory.md +++ b/content/riak/cs/3.0.1/theory.md @@ -10,7 +10,6 @@ menu: project: "riak_cs" project_version: "3.0.1" aliases: - - /riak/cs/latest/theory/ --- ### In This Section diff --git a/content/riak/cs/3.0.1/tutorials/fast-track.md b/content/riak/cs/3.0.1/tutorials/fast-track.md index 491acb458e..bebc3252eb 100644 --- a/content/riak/cs/3.0.1/tutorials/fast-track.md +++ b/content/riak/cs/3.0.1/tutorials/fast-track.md @@ -12,7 +12,6 @@ project_version: "3.0.1" aliases: - /riakcs/3.0.1/cookbooks/tutorials/fast-track/ - /riak/cs/3.0.1/cookbooks/tutorials/fast-track/ - - /riak/cs/latest/tutorials/fast-track/ --- Riak CS (Cloud Storage) is simple, open source storage software built on diff --git a/content/riak/cs/3.0.1/tutorials/fast-track/local-testing-environment.md b/content/riak/cs/3.0.1/tutorials/fast-track/local-testing-environment.md index 51061fca99..d1799dd105 100644 --- a/content/riak/cs/3.0.1/tutorials/fast-track/local-testing-environment.md +++ b/content/riak/cs/3.0.1/tutorials/fast-track/local-testing-environment.md @@ -12,7 +12,6 @@ project_version: "3.0.1" aliases: - /riakcs/3.0.1/cookbooks/tutorials/fast-track/Building-a-Local-Test-Environment/ - /riak/cs/3.0.1/cookbooks/tutorials/fast-track/Building-a-Local-Test-Environment/ - - /riak/cs/latest/tutorials/fast-track/local-testing-environment/ --- The following instructions will guide you through installing a Riak CS diff --git a/content/riak/cs/3.0.1/tutorials/fast-track/test-installation.md b/content/riak/cs/3.0.1/tutorials/fast-track/test-installation.md index 9d26a73ae7..79b19178d5 100644 --- a/content/riak/cs/3.0.1/tutorials/fast-track/test-installation.md +++ b/content/riak/cs/3.0.1/tutorials/fast-track/test-installation.md @@ -12,7 +12,6 @@ project_version: "3.0.1" aliases: - /riakcs/3.0.1/cookbooks/tutorials/fast-track/Testing-the-Installation/ - /riak/cs/3.0.1/cookbooks/tutorials/fast-track/Testing-the-Installation/ - - /riak/cs/latest/tutorials/fast-track/test-installation/ --- ## Installing & Configuring s3/ diff --git a/content/riak/cs/3.0.1/tutorials/fast-track/virtual-test-environment.md b/content/riak/cs/3.0.1/tutorials/fast-track/virtual-test-environment.md index 56abb0b155..0b290ad0ce 100644 --- a/content/riak/cs/3.0.1/tutorials/fast-track/virtual-test-environment.md +++ b/content/riak/cs/3.0.1/tutorials/fast-track/virtual-test-environment.md @@ -12,7 +12,6 @@ project_version: "3.0.1" aliases: - /riakcs/3.0.1/cookbooks/tutorials/fast-track/Building-a-Virtual-Test-Environment/ - /riak/cs/3.0.1/cookbooks/tutorials/fast-track/Building-a-Virtual-Test-Environment/ - - /riak/cs/latest/tutorials/fast-track/virtual-test-environment/ --- This option for building an environment uses a Vagrant project powered diff --git a/content/riak/cs/3.0.1/tutorials/fast-track/what-is-riak-cs.md b/content/riak/cs/3.0.1/tutorials/fast-track/what-is-riak-cs.md index c0937344fe..f0fea3d8c6 100644 --- a/content/riak/cs/3.0.1/tutorials/fast-track/what-is-riak-cs.md +++ b/content/riak/cs/3.0.1/tutorials/fast-track/what-is-riak-cs.md @@ -1,5 +1,5 @@ --- -title: "What Is Riak CS" +title: "What Is Riak CS?" description: "" menu: riak_cs-3.0.1: @@ -12,7 +12,6 @@ project_version: "3.0.1" aliases: - /riakcs/3.0.1/cookbooks/tutorials/fast-track/What-is-Riak-CS/ - /riak/cs/3.0.1/cookbooks/tutorials/fast-track/What-is-Riak-CS/ - - /riak/cs/latest/tutorials/fast-track/what-is-riak-cs/ --- This page introduces the architecture behind Riak CS. If you already diff --git a/content/riak/cs/3.1.0/_index.md b/content/riak/cs/3.1.0/_index.md new file mode 100644 index 0000000000..e919fec73d --- /dev/null +++ b/content/riak/cs/3.1.0/_index.md @@ -0,0 +1,10 @@ +--- +outputs: + - JSON +layout: list +exclude_from_search: true +project: "riak_cs" +project_version: "3.1.0" +--- + + diff --git a/content/riak/cs/3.1.0/add-ons.md b/content/riak/cs/3.1.0/add-ons.md new file mode 100644 index 0000000000..a8403a448c --- /dev/null +++ b/content/riak/cs/3.1.0/add-ons.md @@ -0,0 +1,18 @@ +--- +title: "Add-ons" +description: "" +menu: + riak_cs-3.1.0: + name: "Add-ons" + identifier: "add-ons" + weight: 800 + pre: tools +project: "riak_cs" +project_version: 3.1.0 +toc: true +aliases: +--- + +These are useful integrations to Riak CS that provide features or services on top of the regular installation. Each integration, called an add-on, is explained in this section, from installation to feature-set. + +* [Riak CS Control]({{}}riak/cs/3.1.0/add-ons/riak-cs-control/) diff --git a/content/riak/cs/3.1.0/add-ons/riak-cs-control.md b/content/riak/cs/3.1.0/add-ons/riak-cs-control.md new file mode 100644 index 0000000000..3013115324 --- /dev/null +++ b/content/riak/cs/3.1.0/add-ons/riak-cs-control.md @@ -0,0 +1,77 @@ +--- +title_supertext: "Add-ons:" +title: "Riak CS Control" +description: "" +menu: + riak_cs-3.1.0: + name: "Riak CS Control" + identifier: "add-ons_riak_cs_control" + weight: 100 + parent: "add-ons" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/references/appendices/RiakCS-Control/ + - /riak/cs/3.1.0/references/appendices/RiakCS-Control/ + - /riak/cs/3.1.0/references/appendices/riak-cs-control/ + - /riakcs/3.1.0/references/appendices/riak-cs-control/ +--- + +Riak CS Control is a standalone user management application for Riak CS. +It provides a user interface for filtering, disabling, creating and +managing users in a Riak CS Cluster. + +## Installing Riak CS Control + +Riak CS Control [is maintained as a separate application](https://github.com/basho/riak_cs_control) and can be installed via [source or package]({{}}riak/cs/3.1.0/downloads). + +## Setting Up Riak CS Control + +In the `/etc/riak-cs-control/app.config` file, configure the application +with the information needed to connect to the Riak CS cluster you wish +to administer. + +### Configuring Riak CS Control + +``` erlang +{riak_cs_control, [ + %% What port to run the application on. + {port, 8000 }, + + %% Instance of Riak CS you wish to talk to. + {cs_hostname, "s3.amazonaws.com" }, + {cs_port, 80 }, + {cs_protocol, "http" }, + + %% Proxy information; necessary if you are using s3.amazonaws.com as + %% your hostname. + {cs_proxy_host, "localhost" }, + {cs_proxy_port, 8080 }, + + %% Credentials you want the application to run as. + {cs_admin_key, "admin-key" }, + {cs_admin_secret, "admin-secret" }, + + %% Specify the bucket name for administration options. + {cs_administration_bucket, "riak-cs" } +]}, +``` + +### Running Riak CS Control + +Start Riak CS Control as you would Riak or Riak CS with: + +```bash +riak-cs-control start +``` + +## The Users Page + +When you first navigate to the Riak CS Control UI, you will land on the +Users page: + +![Users Page]({{}}images/cs_control_users.png) + +On this page you can quickly see all current Riak CS users along with +their status, e-mail address, and credentials. From here you can filter, +disable, create, and manage users in a Riak CS Cluster. diff --git a/content/riak/cs/3.1.0/configuring.md b/content/riak/cs/3.1.0/configuring.md new file mode 100644 index 0000000000..c17ee66b0b --- /dev/null +++ b/content/riak/cs/3.1.0/configuring.md @@ -0,0 +1,53 @@ +--- +title: "Configuring Riak CS Overview" +description: "" +menu: + riak_cs-3.1.0: + name: "Configuring" + identifier: "config" + weight: 500 + pre: cog +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/configuring/ + - /riakcs/3.1.0/configuration/ + - /riak/cs/3.1.0/configuration/ + - /riak/cs/3.1.0/cookbooks/configuration/ + - /riakcs/3.1.0/cookbooks/configuration/ +--- + +In a Riak CS storage system, three components work in conjunction with one another, which means that you must configure each component to work with the others: + +* Riak KV --- The database system that acts as the backend storage +* Riak CS --- The cloud storage layer over Riak which exposes the storage and billing APIs, storing files and metadata in Riak, and streaming them back to users +* Stanchion --- Manages requests involving globally unique system entities, such as buckets and users sent to a Riak instance, for example, to create users or to create or delete buckets + +In addition, you must also configure the S3 client you use to communicate with your Riak CS system. + +You should plan on having one Riak KV node for every Riak CS node in your system. Riak KV and Riak CS nodes can be run on separate physical machines, but in many cases it is preferable to run one Riak KV and one Riak CS node on the same physical machine. Assuming the single physical machine has sufficient capacity to meet the needs of both a Riak KV and a Riak CS node, you will typically see better performance due to reduced network latency. + +If your system consists of several nodes, configuration primarily represents setting up the communication between components. Other settings, such as where log files are stored, are set to default values and need to be changed only if you want to use non-default values. + +## Configuration of System Components + +* [Configuring Riak KV for Riak CS](./riak-kv-for-cs) +* [Configuring Riak CS](./riak-cs) +* [Configuring Stanchion](./stanchion) + +## Configuration of Features + +* [Configuring Load Balancing & Proxies](./load-balancing-proxy) +* [Configuring Multi-Data Centre Replication]({{}}riak/cs/3.1.0/configuring/multi-datacenter) +* [Configuring Superclusters]({{}}riak/cs/3.1.0/configuring/superclusters) + +## References + +* [Configuration Reference]({{}}riak/cs/3.1.0/configuring/reference) + +## Configuration of Clients + +* [Configuring the AWS S3 client]({{}}riak/cs/3.1.0/developing/apis/s3/s3-client/) +* [Configuring DragonDisk]({{}}riak/cs/3.1.0/developing/apis/s3/other-clients/dragondisk/) +* [Configuring Fog]({{}}riak/cs/3.1.0/developing/apis/s3/other-clients/fog/) +* [Configuring Transmit]({{}}riak/cs/3.1.0/developing/apis/s3/other-clients/transmit/) diff --git a/content/riak/cs/3.1.0/configuring/load-balancing-proxy.md b/content/riak/cs/3.1.0/configuring/load-balancing-proxy.md new file mode 100644 index 0000000000..99d69ca4e0 --- /dev/null +++ b/content/riak/cs/3.1.0/configuring/load-balancing-proxy.md @@ -0,0 +1,172 @@ +--- +title_supertext: "Configuring:" +title: "Load Balancing and Proxies" +description: "" +menu: + riak_cs-3.1.0: + name: "Load Balancing & Proxy" + identifier: "config_load_balance" + weight: 140 + parent: "config" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/configuration/load-balancing-proxy/ + - /riakcs/3.1.0/cookbooks/configuration/load-balancing-proxy/ + - /riakcs/3.1.0/configuring/Load-Balancing-and-Proxy-Configuration/ + - /riak/cs/3.1.0/configuring/Load-Balancing-and-Proxy-Configuration/ +--- + +If you plan on using Riak CS in production, we highly recommend that you +place Riak CS behind a load-balancing or proxy solution, be it hardware +or software based. Also note that you should *not* directly expose Riak +CS to public-facing network interfaces. + +Riak CS users have reported success in using Riak CS with a variety of +load-balancing and proxy solutions. Common solutions include proprietary +hardware-based load balancers, cloud-based load-balancing options---such +as Amazon's Elastic Load Balancer---and open-source software projects +like [HAProxy](http://haproxy.1wt.eu/) and +[Nginx](http://wiki.nginx.org/Main). + +This guide briefly explores the commonly used open-source solutions +HAProxy and Nginx and provides some configuration and operational tips +gathered from community users and operations-oriented engineers at +Basho. + +## HAProxy + +[HAProxy](http://haproxy.1wt.eu/) is a fast and reliable open-source +solution for load balancing and proxying of HTTP- and TCP-based +application traffic. + +Users have reported success in using HAProxy in combination with Riak CS +in a number of configurations and scenarios. Much of the information and +example configuration for this section is drawn from the experiences of +users in the Riak CS community in addition to suggestions from Basho +engineering. + +### Example Configuration + +The following is an example starting point configuration for HAProxy to +act as a load balancer to a Riak CS installation. + +> **Note on open files limits** +> +> The operating system's open files limits need to be greater than 256000 +for the example configuration that follows. Consult the [Open Files Limit]({{}}riak/kv/3.0.9/using/performance/open-files-limit) documentation for details on configuring the value for different +operating systems. + +```config +global + log 127.0.0.1 local0 + log 127.0.0.1 local1 notice + maxconn 256000 + spread-checks 5 + daemon + +defaults + log global + option dontlognull + option redispatch + option allbackups + no option httpclose + retries 3 + maxconn 256000 + timeout connect 5000 + timeout client 5000 + timeout server 5000 + +frontend riak_cs + bind 10.0.24.100:8080 + # Example bind for SSL termination + # bind 10.0.24.100:8443 ssl crt /opt/local/haproxy/etc/data.pem + mode http + option httplog + capture request header Host len 64 + acl good_ips src -f /opt/local/haproxy/etc/gip.lst + block if !good_ips + use_backend riak_cs_backend if good_ips + +backend riak_cs_backend + mode http + balance roundrobin + # Ping Riak CS to determine health + option httpchk GET /riak-cs/ping + timeout connect 60s + timeout http-request 60s + server riak1 r1s01.example.com:8081 weight 1 maxconn 1024 check + server riak2 r1s02.example.com:8081 weight 1 maxconn 1024 check + server riak3 r1s03.example.com:8081 weight 1 maxconn 1024 check + server riak4 r1s04.example.com:8081 weight 1 maxconn 1024 check + server riak5 r1s05.example.com:8081 weight 1 maxconn 1024 check +``` + +Please note that the above example is considered a starting point and is +a work in progress. You should carefully examine this configuration and +change it according to your specific environment. + +A specific configuration detail worth noting from the example is the +commented option for SSL termination. HAProxy supports SSL directly as +of version 1.5. Provided that your HAProxy instance was built with +OpenSSL support, you can enable it by uncommenting the example line and +modifying it to suit your environment. More information is available in +the [HAProxy +documentation](http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#5-ssl). + +Also note the option for checking Riak CS health via the `/riak-cs/ping` +endpoint. This option is essential for checking each Riak CS node as +part of the round robin load-balancing method. + +## Nginx + +Some users have reported success in using the [Nginx](http://nginx.org/) +HTTP server to proxy requests for Riak CS. An example that provides +access to Riak CS is provided here for reference. + +### Example Configuration + +The following is an example starting-point configuration for Nginx to +act as a front-end proxy to Riak CS. + +```config +upstream riak_cs_host { + server 10.0.1.10:8080; +} + +server { + listen 80; + server_name _; + access_log /var/log/nginx/riak_cs.access.log; + + location / { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_redirect off; + + proxy_connect_timeout 90; + proxy_send_timeout 90; + proxy_read_timeout 90; + + proxy_buffer_size 64k; # If set to a smaller value, + # nginx can complain with a + # "headers too large" error + + proxy_buffers 8 64k; # Increase from default of (8, 8k). + # If left to default with increased + # proxy_buffer_size, nginx complains + # that proxy_busy_buffers_size is too + # large. + + proxy_pass http://riak_cs_host; + } +} +``` + +Note that the directive `proxy_set_header Host $http_host` is essential +to ensure that the `HTTP Host:` header is passed to Riak CS as received +rather than being translated into the hostname or address of the Riak CS +backend server. + +It's also important to note that `proxy_pass` should _not_ end in a +slash, as this can lead to a variety of issues. diff --git a/content/riak/cs/3.1.0/configuring/multi-datacenter.md b/content/riak/cs/3.1.0/configuring/multi-datacenter.md new file mode 100644 index 0000000000..249bb59fc9 --- /dev/null +++ b/content/riak/cs/3.1.0/configuring/multi-datacenter.md @@ -0,0 +1,126 @@ +--- +title_supertext: "Configuring:" +title: "Multi-Datacenter" +description: "" +menu: + riak_cs-3.1.0: + name: "Multi-Datacenter" + identifier: "config_mdc" + weight: 150 + parent: "config" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/configuration/multi-datacenter/ + - /riakcs/3.1.0/cookbooks/configuration/multi-datacenter/ + - /riakcs/3.1.0/configuring/Configuring-MDC/ + - /riak/cs/3.1.0/configuring/Configuring-MDC/ +--- + +Configuring Multi-Datacenter Replication in Riak CS requires the +addition of a new group of settings to the `app.config` or `advanced.config` configuration +file for all Riak CS and Riak KV nodes that are part of the Riak +CS cluster. + +## Riak KV Configuration + +As of Riak release 1.4.0, there are two different MDC replication modes +that Riak CS can use to request data from remote clusters. Please see +the [comparison]({{}}riak/kv/3.0.9/using/reference/multi-datacenter/comparison) doc for more information. + +### Replication Version 3 Configuration + +For each Riak node in the cluster, update the `mdc.proxy_get` setting in +`riak.conf`, or by appending the `{proxy_get, enabled}` setting to the +`riak_repl` section of the old-style `advanced.config` or `app.config` files, + as shown in the following example: + +```riakconf +mdc.proxy_get = on +``` + +```advancedconfig +{riak_repl, [ + %% Other configs + {fullsync_on_connect, true}, + {fullsync_interval, 360}, + {data_root, "/var/lib/riak/data/riak_repl"}, + {proxy_get, enabled} + %% Other configs + ]} +``` + +```appconfig +{riak_repl, [ + %% Other configs + {fullsync_on_connect, true}, + {fullsync_interval, 360}, + {data_root, "/var/lib/riak/data/riak_repl"}, + {proxy_get, enabled} + %% Other configs + ]} +``` + +Version 3 replication requires additional configuration in the **source +cluster** via the command line. + +```bash +riak-repl proxy_get enable +``` + +The `sink_cluster_name` should be replaced with the name of your +configured **sink cluster**. + +See also: + + +* [Comparing v2 and v3]({{}}riak/kv/3.0.9/using/reference/multi-datacenter/comparison) +* [Multi-Datacenter Operations]({{}}riak/kv/3.0.9/using/cluster-operations/v3-multi-datacenter) + +## Riak CS Configuration + +For each Riak CS node in the cluster, update the `riak_cs` section of the +`advanced.config`, or the old-style `app.config` files, by appending the +`proxy_get` setting as shown in the following example: + +```advancedconfig +{riak_cs, [ + %% Other configs + {proxy_get, enabled}, + %% Other configs + ]} +``` + +```appconfig +{riak_cs, [ + %% Other configs + {proxy_get, enabled}, + %% Other configs + ]} +``` + +
+
Note on restarting Riak nodes
+Be sure that you restart cluster nodes in a rolling fashion after making +configuration changes. In particular, after restarting a node, be sure +that you wait for Riak's key/value store to become available before +restarting the next node. To check the status of `riak_kv` on a node +after restarting, execute the following command: + +```bash +riak-admin wait-for-service riak_kv +``` + +Replace the `node` variable above with the nodename specified in the +`riak,conf` or older `vm.args` configuration file. +
+ +## Stanchion Configuration + +Though there is no specific configuration for [Stanchion]({{}}riak/cs/3.1.0/learning/stanchion), note that +Stanchion should be a single, globally unique process to which every +Riak CS node sends requests, even if there are multiple replicated +sites. Unlike Riak KV and Riak CS, Stanchion should run on _only one node +in a given cluster_, perhaps on its own, dedicated hardware if you wish. +Stanchion runs on only one node because it manages strongly consistent +updates to [globally unique entities]({{}}riak/cs/3.1.0/learning/stanchion/#globally-unique-entities) like users and buckets. diff --git a/content/riak/cs/3.1.0/configuring/reference.md b/content/riak/cs/3.1.0/configuring/reference.md new file mode 100644 index 0000000000..133afd8539 --- /dev/null +++ b/content/riak/cs/3.1.0/configuring/reference.md @@ -0,0 +1,962 @@ +--- +title_supertext: "Configuring:" +title: "Configuration Reference" +description: "" +menu: + riak_cs-3.1.0: + name: "Configuration Reference" + identifier: "config_ref" + weight: 170 + parent: "config" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/cookbooks/configuration/reference + - /riak/cs/3.1.0/cookbooks/configuration/reference +--- + +{{% note title="Note on Legacy Configuration Usage" %}} + **If you choose to use the legacy `app.config` files for Riak CS and/or + Stanchion, some parameters have changed names and must be updated**. + + In particular, for the Riak CS `app.config`: + + - `cs_ip` and `cs_port` have been combined into `listener`. + - `riak_ip` and `riak_pb_port` have been combined into `riak_host`. + - `stanchion_ip` and `stanchion_port` have been combined into `stanchion_host`. + - `admin_ip` and `admin_port` have been combined into `admin_listener`. + - `webmachine_log_handler` has become `webmachine_access_log_handler`. + - `{max_open_files, 50}` has been depricated and should be replaced with + `{total_leveldb_mem_percent, 30}`. + + For the Stanchion `app.config`: + + - `stanchion_ip` and `stanchion_port` have been combined into `listener`. + - `riak_ip` and `riak_port` have been combined into `riak_host`. + + Each of the above pairs follows a similar form. For example, if your legacy + `app.config` configuration was previously: + + ``` + {riak_cs, [ + {cs_ip, "127.0.0.1"}, + {cs_port, 8080 }, + . . . + ]}, + ``` + + It should now read: + + ``` + {riak_cs, [ + {listener, {"127.0.0.1", 8080}}, + . . . + ]}, + ``` + + and so on. More details can be found at [configuring Riak CS]({{}}riak/cs/3.1.0/configuring/riak-cs). +{{% /note %}} + +This document is intended as a reference listing of all configurable parameters +for Riak CS. For a more narrative-style walkthrough of configuring Riak CS, we +recommend consulting the [configuring Riak CS]({{}}riak/cs/3.1.0/configuring/riak-cs) tutorial. + +The configuration for Riak CS is handled through either the `riak-cs.conf` and +`advanced.config` file pair, which were introduced in Riak CS 2.0.0, or the two +old-style `app.config` and `vm.args` files. All configuration files will be +located in each Riak CS node's `/etc` directory. Please note that you may only +use one of these pairs at a time, as the `app.config`/`vm.args` pair will take +priority over the new-style configuration files. + +If you are using it, the `vm.args` file will house settings related to the +[Erlang VM](http://www.erlang.org/) on which both Riak and Riak CS run. These +settings have been folded into the `riak-cs.conf` and `riak.conf` configuration +files in newer systems. + +The `app.config` and `advanced.config` files share an identical format, and can +control all of Riak CS's behaviors. The files are divided into the following +sections: + +* `riak_cs` --- Most settings are housed in this section of the file +* `webmachine` --- Settings related to + [Webmachine](https://github.com/basho/webmachine), the HTTP server + framework that Riak CS uses for HTTP connections +* `lager` --- Settings for [lager](https://github.com/basho/lager), the + Erlang logging framework used by Riak CS +* `sasl` --- There is only one setting in this section, + `sasl_error_lager`, which determines whether and how Riak CS uses + Erlang's [SASL error + logger](http://www.erlang.org/doc/man/sasl_app.html) + +Most of the settings you will need to manipulate have been ported into the newer +`riak-cs.conf` configuration format, but there may be some advanced settings -- +such as setting up customized `lager` streams -- that will need to be configured +in `advanced.config`. + +{{% note title="A Note About Time Values" %}} +In the `app.config` configuration files, time periods were generally written +as either seconds or milliseconds, with no real indication of which was being +used. With the update to `riak-cs.conf`, all values that describe a period of +time are written as an integer and a character, describing the unit of time +and the number of times that unit should be repeated for the period. For +example `31d` represents 31 days, `6h` represents six hours, `6000ms` +represents 6,000 milliseconds. + +The full list of valid time units are as follows: + +`f` -- Fortnights +`w` -- Weeks +`d` -- Days +`h` -- Hours +`m` -- Minutes +`s` -- Seconds +`ms` -- Milliseconds +{{% /note %}} + +The tables below will show settings for both `riak-cs.conf` and +`advanced.config`/`app.config` where applicable, organized by functionality. + +## Connection Information + +### `riak-cs.conf` + + + + + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
listenerThe IP address/port for the Riak CS node127.0.0.1:8080
riak_hostThe IP address/port for the Riak CS node's corresponding Riak node (used by +Riak's Protocol Buffers interface) +127.0.0.1:8087
root_hostThe root host name accepted by Riak CS. Changing this setting to, +for example, my_cs_host would enable users to make requests +to a URL such as http://bucket.my_cs_host/object/ (or to +the corresponding HTTP host).s3.amazonaws.com
+ +### `advanced.config`/`app.config` + + + + + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
listenerThe IP address for the Riak CS node{"127.0.0.1", 8080}
riak_hostThe TCP IP/port for the Riak CS node's corresponding Riak node (used by +Riak's Protocol Buffers interface) +{"127.0.0.1", 8087}
cs_root_hostThe root host name accepted by Riak CS. Changing this setting to, +for example, my_cs_host would enable users to make requests +to a URL such as http://bucket.my_cs_host/object/ (or to +the corresponding HTTP host).s3.amazonaws.com
+ +## Connection Pools + +Riak CS enables you to establish connection pools for normal requests +(such as `GET` and `PUT`) as well as for bucket listing requests. + +### `riak-cs.conf` + + + + + + + + + + + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
pool.request.sizeFixed-Size settings for the general request pool for Riak CS. Please note +that we recommend setting Riak's protobuf.backlog setting to be +higher than pool.request.size's fixed size, i.e. higher than 128. +The default for protobuf.backlog is 128.128
pool.request.overflowOverflow-size settings for the general request pool for Riak CS.0
pool.list.sizeFixed-Size settings for the bucket listing request pool for Riak CS.5
pool.list.overflowOverflow-size settings for the bucket listing request pool for Riak CS.0
+ +### `advanced.config`/`app.config` + +In these files, each pool is specified as a nested tuple of the following form: + +```advanced.config +{riak_cs, [ + {Name, {FixedSize, OverflowSize}} + ]} +``` + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
request_poolSettings for the general request pool for Riak CS. Please note that +we recommend setting Riak's pb_backlog setting higher than +request_pool's fixed size, i.e. higher than 128. The +default for pb_backlog is 128.{128, 0}
bucket_list_poolSettings for the bucket listing request pool for Riak CS{5, 0}
+ +## Stanchion + +### `riak-cs.conf` + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
stanchion_hostThe IP address/port for the Stanchion node in the cluster. Please note that +there should be only one Stanchion node in the cluster.127.0.0.1:8085
stanchion_sslWhether SSL is enabled for connections between the Riak CS node and +Stanchionoff
+ +### `advanced.config`/`app.config` + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
stanchion_hostThe IP address/port for the Stanchion node in the cluster. Please note that +there should be only one Stanchion node in the cluster.{"127.0.0.1",8085}
stanchion_sslWhether SSL is enabled for connections between the Riak CS node and +Stanchionfalse
+ +## Admin and Authentication Settings + +### `riak-cs.conf` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
admin.listenerYou have the option to provide a special endpoint for performing system +administration tasks in Riak CS. This setting sets the IP address and port for +that endpoint. If you leave this setting commented out, then administrative +tasks use the IP and port as all other Riak CS traffic.127.0.0.1:8000
admin.keyThe admin key used for administrative access to Riak CS, e.g. usage of the +/riak-cs/stats endpoint. Please note that both +admin.key and admin.secret must match the +corresponding settings in the Stanchion node's stanchion.conf. +admin-key
admin.secretThe admin secret used for administrative access to Riak CS. See the +description for admin.key above for more information.admin-secret
anonymous_user_creationYou will need to set this parameter to on to allow for the +creation of an admin user when setting up a new Riak CS cluster. We recommend, +however, that you enable anonymous user creation only temporarily, +unless your use case specifically dictates that anonymous users should +be able to create accounts.off
auth_moduleThe module used by Riak CS for authentication. We do not recommend changing +this setting unless you implement a custom authentication scheme.riak_cs_s3_auth
rewrite_moduleA rewrite module contains a set of rules for translating requests made using +a particular API to requests in the the native Riak CS storage API. We do +not recommend changing this setting unless you implement a custom module.riak_cs_s3_rewrite
+ +### `advanced.config`/`app.config` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
admin_listenerYou have the option to provide a special endpoint for performing system +administration tasks in Riak CS. This setting sets the IP address and port for +that endpoint. If you leave this setting commented out, then administrative +tasks use the IP and port as all other Riak CS traffic.{"127.0.0.1",8000}
admin_keyThe admin key used for administrative access to Riak CS, e.g. usage +of the /riak-cs/stats endpoint. Please note that both +admin_key and admin_secret must match the +corresponding settings in the Stanchion node's +app.config.
admin_secretThe admin secret used for administrative access to Riak CS. See the +description for admin_key above for more information.
anonymous_user_creationYou will need to set this parameter to true to allow +for the creation of an admin user when setting up a new Riak CS cluster. +We recommend, however, that you enable anonymous user creation only +temporarily, unless your use case specifically dictates that +anonymous users should be able to create accounts.false
auth_moduleThe module used by Riak CS for authentication. We do not recommend +changing this setting unless you implement a custom authentication +scheme.riak_cs_s3_auth
max_buckets_per_userThe number of buckets that can be created by each user. If a user +exceeds the bucket creation limit, they are still able to perform other +actions, including bucket deletion.100
rewrite_moduleA rewrite module contains a set of rules for translating requests +made using a particular API to requests in the the native Riak CS storage API. We do not recommend changing this setting unless you +implement a custom module.riak_cs_s3_rewrite
+ +## Usage Recording + +These settings relate to Riak CS's [access logs]({{}}riak/cs/3.1.0/developing/usage-and-billing-data). + +### `riak-cs.conf` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
stats.access.archive_periodHow large each access archive object is. This setting should be a multiple +of stats.access.flush_factor. Expressed as a time-value.1h
stats.access.archiver.max_backlogThe number of access logs that are allowed to accumulate in the archiver's +queue before it begins skipping to catch up. Expressed as an integer number of +logs.2
stats.access.flush_factorHow often the access log should be flushed, as a factor of +access_archive_period, where 1 means once per period, +2 means twice per period, etc.1
access_log_flush_sizeThe additional access log flush trigger. After this many accesses have been +recorded, the log will be flushed, even if the flush interval has not expired. +Expressed as an integer number of accesses.1000000
riak_cs.usage_request_limitHow many archive periods a user can request in one usage read, applied +independently to access/usage and billing/storage. Expressed as a time-value31d
stats.storage.schedule.$timeWhen to automatically start storage calculation batches. Expressed as an +HHMM UTC time. For example, 0600 would calculate +at 6 am UTC every day. If you would like to schedule multiple batches, changing +$time for each entry. For example stats.storage.schedule.2 = +1800 could be the second entry, scheduled for 6:00pm UTC.0600
stats.storage.archive_periodThe size of each storage archive object. Should be chosen such that each +stats.storage.schedule-based calculation falls in a different +period. Expressed as a time-value.1h
+ +### `advanced.config`/`app.config` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
access_archive_periodHow large each access archive object is. This setting should be a +multiple of access_log_flush_factor. Expressed as an +integer number of seconds (e.g. 3600 translates to 1 hour).3600
access_archive_max_backlogThe number of access logs that are allowed to accumulate in the +archiver's queue before it begins skipping to catch up. Expressed as an +integer number of logs.2
access_log_flush_factorHow often the access log should be flushed, as a factor of +access_archive_period, where 1 means once per +period, 2 means twice per period, etc.1
access_log_flush_sizeThe additional access log flush trigger. After this many accesses +have been recorded, the log will be flushed, even if the flush interval +has not expired. Expressed as an integer number of accesses.1000000
usage_request_limitHow many archive periods a user can request in one usage read, +applied independently to access/usage and billing/storage. Expressed as +an integer number of intervals. The default of 744 thus translates to +one month at one-hour intervals. +of 744744
storage_scheduleWhen to automatically start storage calculation batches. Expressed +as a list of HHMM UTC times. For example, +["0600"] would calculate at 6 am UTC every day, +["0600", "1945"] would calculate at 6 am and 7:45 pm UTC +every day, and so on.[]
storage_archive_periodThe size of each storage archive object. Should be chosen such +that each storage_schedule-based calculation falls in a +different period. Expressed as an integer number of seconds. The default +of 86400 translates to 1 day.86400
+ +## Garbage Collection + +Settings related to Riak CS's [garbage collection]({{}}riak/cs/3.1.0/learning/garbage-collection) /(GC) process. + +### `riak-cs.conf` + + + + + + + + + + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
gc.intervalHow often the GC daemon waits between GC batch operations. Expressed as a +time-value.15m
gc.max_workersThe maximum number of worker processes that may be started by the GC daemon +to use for concurrent reaping of GC-eligible objects.2
gc.retry_intervalHow long a move to the GC to-do list can remain failed before it is +re-attempted. Expressed as a time-value.6h
gc.leeway_periodHow long to retain the block for an object after it has been deleted. This +leeway period is set to give the delete indication enough time to propagate to +all replicas. Expressed as a time-value.24h
+ +### `advanced.config`/`app.config` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
epoch_startThe time that the GC daemon uses to begin collecting keys from the +GC eligibility bucket. Records in this bucket use keys based the epoch +time the record is created plus leeway_seconds. The default +is 0 and should be sufficient for general use. A case for +readjusting this value is if the secondary index query run by the GC +daemon continually times out. Raising the starting value can decrease +the range of the query and make it more likely that the query will +succeed. The value must be specified in Erlang binary format, e.g. set +it to `<<10>>` to specify 10.0
gc_batch_sizeThis option is used only when gc_paginated_indexes is +set to true. It represents the size used for paginating the +results of the secondary index query.1000
gc_intervalHow often the GC daemon waits between GC batch operations. Expressed +as an integer number of seconds.900 (15 minutes)
gc_max_workersThe maximum number of worker processes that may be started by the GC +daemon to use for concurrent reaping of GC-eligible objects.5
gc_paginated_indexesIf you're running Riak nodes that are of a version prior to 1.4.0, +set this to false. Otherwise, you will not need to adjust +this setting.true
gc_retry_intervalHow long a move to the GC to-do list can remain failed before it is +re-attempted. Expressed as an integer number of seconds.21600 (6 hours)
leeway_seconds The number of seconds to retain +the block for an object after it has been deleted. This leeway time is +set to give the delete indication time to propagate to all replicas. +Expressed as an integer number of seconds.86400 (24 hours)
max_scheduled_delete_manifestsThe maximum number of manifests (representative of object versions) +that can be in the scheduled_delete state for a given key. +A value of unlimited means that there is no maximum and +that pruning will not be based on count. An example of where this option +is useful is a use case involving a lot of churn on a fixed set of keys +in a time frame that is relatively short compared to the +leeway_seconds value. This can result in the manifest +objects reaching a size that can negatively impact system performance. +unlimited
+ +## Concurrency and Buffering + +### `advanced.config`/`app.config` Only + +There are two parameters related to concurrency and buffering that you should +consider adding to your Riak CS settings if you are having issues with PUT +requests. Raising the value of both of these settings may provide higher single- +client throughput. + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
put_buffer_factorThe number of blocks that will be buffered in-memory in Riak CS +before it begins to slow down reading from the HTTP client.1
put_concurrencyThe number of threads inside of Riak CS that are used to write +blocks to Riak.1
+ +## Miscellaneous Settings + +### `riak-cs.conf` + + + + + + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
cs_versionThe Riak CS version number. This number is used to selectively enable new +features for the current version to better support rolling upgrades. New +installs shouldn't need to modify this. If you're performing a rolling upgrade, +keep the original value (if not defined, Riak CS uses 0) of the old +app.config until all nodes have been upgraded. At that point, set +it to the new value.10300
dtraceIf your Erlang VM supports DTrace +or SystemTap, +set this parameter to on.off
trust_x_forwarded_forIf your load balancer adds an X-Forwarded-For header and is +reliable, i.e. the load balancer is able to guarantee that it is not added by a +malicious user, set this option to on. Otherwise, Riak CS takes the +source IP address as an input (which is the default).off
+ +### `advanced.config`/`app.config` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
cs_versionThe Riak CS version number. This number is used to selectively +enable new features for the current version to better support rolling upgrades. New installs shouldn't need to modify this. If you're performing a rolling upgrade, keep the original value (if not defined, Riak CS uses 0) of the old app.config until all nodes have been upgraded. At that point, set to the new value.
dtrace_supportIf your Erlang VM supports DTrace +or SystemTap, +set this parameter to true.false
fold_objects_for_list_keysIf your Riak CS cluster is running Riak nodes prior to version +1.4.0, set this parameter to false. Otherwise, you will not +need to modify it.This setting has been deprecated and will be +removed in the next major version.true
n_val_1_get_requestsIf set to true, Riak CS will use a special request +option when retrieving the blocks of an object. This special option +instructs Riak to only send a request for the object block to a single +eligible virtual node (vnode) instead of to all eligible vnodes. This +differs from the standard r request option provided by Riak +in that r affects how many vnode responses to wait for +before returning and has no effect on how many vnodes are actually +contacted. Enabling this option (the default) has the effect of +greatly reducing the intra-cluster bandwidth used by Riak when +retrieving objects with Riak CS. This option is harmless when used with +a version of Riak prior to 1.4.0, but the option to disable is provided +as a safety measure. This setting has been deprecated and +will be removed in the next major version.true
trust_x_forwarded_forIf your load balancer adds an X-Forwarded-For +header and is reliable, i.e. the load balancer is able to guarantee that +it is not added by a malicious user, set this option to +true. Otherwise, Riak CS takes the source IP address as an +input (which is the default).false
+ +## Timeouts on each Riak call + +As Riak CS stores all data in underlying Riak, Riak CS processes +communicate to Riak over an API using protocol buffers. This is a typical remote +call - depending on system requirements, the `timeout` could be configured +to avoid unnecessary timeouts. + +In Riak 1.5.3 or later, configurations under `riakc` section are unavailable. Timeouts are configurable depending on each +access case. This enables fine grained tuning or ad-hoc reaction in +production environment issues. These items are only configurable in +`riak_cs` section of `advanced.config`. All units in the chart below +are milliseconds. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
ping_timeoutA timeout value used in ping API5000
get_user_timeoutA timeout value on retrieving user information for authentication, authentication60000
get_bucket_timeoutA timeout value on retrieving bucket information, for ACL or policy information60000
get_manifest_timeoutA timeout value on retrieving manifest of a key60000
get_block_timeoutA timeout value on retrieving a chunk of an object60000
local_block_timeoutA timeout value on retrieving a local chunk of an object5000
proxy_get_block_timeoutA timeout value of proxy get request to remote cluster (EE only)60000
get_access_timeoutA timeout value of retrieving a timeslot information of access statistics60000
get_gckey_timeoutA timeout value of retrieving a key in GC bucket60000
put_manifest_timeoutA timeout value on putting a new manifest60000
put_block_timeoutA timeout value on putting a chunk of a object60000
put_access_timeoutA timeout value of putting an entry into access statistics60000
put_gckey_timeoutA timeout value of putting an entry into GC bucket60000
put_user_usage_timeoutA timeout value on storing a result of storage calculation of each user60000
delete_manifest_timeoutA timeout value on deleting a manifest in garbage collection60000
delete_block_timeoutA timeout value on deleting a chunk of an object in garbage collection60000
delete_gckey_timeoutA timeout value on deleting an entry in GC bucket60000
list_keys_list_objects_timeoutA timeout value on listing objects of a bucket, older version (will be removed in 2.x)60000
list_keys_list_users_timeoutA timeout value on listing users60000
storage_calc_timeoutA timeout value on running storage calculation on a bucket60000
list_objects_timeoutA timeout value on listing objects of a bucket, older version (will be removed in 2.x)60000
fold_objects_timeoutA timeout value on listing objects of a bucket (default since 1.5.0)60000
get_index_range_gckeys_timeoutA timeout value on listing keys in garbage collection bucket, overall call60000
get_index_range_gckeys_call_timeoutA timeout value on listing keys in garbage collection bucket, each continuation call60000
get_index_list_multipart_uploads_timeoutA timeout value on listing incomplete multipart upload of an object60000
+ +## Webmachine + +### `advanced.config`/`app.config` Only + +Settings specific to [Webmachine](https://github.com/basho/webmachine), the web +server that handles all HTTP and HTTPS connections to Riak CS. The +`riak_cs_access_log_handler` and `webmachine_log_handler` settings are part of a +`log_handlers` sub-grouping: + +```appconfig +{webmachine, [ + %% Other configs + {log_handlers, [ + {webmachine_access_log_handler, ...}, + {riak_cs_access_log_handler, ...}, + ]}, + %% Other configs + ]} +``` + + + + + + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
server_name
webmachine_log_handlerIf this setting is commented out or removed, access to Webmachine +log handling will be disabled.["./log"]
riak_cs_access_log_handlerWe do not recommend changing or removing this setting.[]
+ +## Logging + +### `advanced.config`/`app.config` Only + +These settings relate to [lager](https://github.com/basho/lager), the Erlang +logging framework used by Riak CS. They are included in the `lager` settings in +`app.config`. + +The `lager_console_backend` and `lager_file_backend` settings are part of a +`handlers` sub-group: + +```appconfig +{lager, [ + %% Other configs + {handlers, [ + {lager_console_backend, ...}, + {lager_file_backend, ...} + ]}, + %% Other configs + ]} +``` + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
lager_console_backendSee the lager +documentation for more details.
lager_file_backendSee the lager +documentation for more details.
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ConfigDescriptionDefault
crash_logWhether to write to a crash log and where. If commented out, +omitted, or undefined, no crash logging will take place../log/crash.log
crash_log_countThe number of crash logs to keep. Setting this parameter to +0 (the default) means that only the current log will be +kept.0
crash_log_dateWhen to rotate the crash log. The default is no time rotation. For +documentation on the syntax of this parameter, see here.$D0
crash_log_msg_sizeThe maximum size of events in the crash log, expressed as a number +of bytes.65536
crash_log_sizeThe maximum size of the crash log, in bytes, before it is rotated. +Setting this parameter to 0 disables rotation.10485760
error_logger_redirectWhether to redirect error_logger messages into +lager.true
+ +## SASL + +### `advanced.config`/`app.config` Only + + + + + + + + + + +
ConfigDescriptionDefault
sasl_error_lagerWhether to enable SASL, Erlang's built-in +error logger.false
+ + + +[config_your_code]: {{< baseurl >}}riak/kv/latest/configuring/basic/#erlang-vm-tunings diff --git a/content/riak/cs/3.1.0/configuring/riak-cs.md b/content/riak/cs/3.1.0/configuring/riak-cs.md new file mode 100644 index 0000000000..97dcf2513f --- /dev/null +++ b/content/riak/cs/3.1.0/configuring/riak-cs.md @@ -0,0 +1,426 @@ +--- +title_supertext: "Configuring:" +title: "Riak CS" +description: "" +menu: + riak_cs-3.1.0: + name: "Configuring Riak CS" + identifier: "config_riak_cs" + weight: 120 + parent: "config" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/configuration/riak-cs/ + - /riakcs/3.1.0/cookbooks/configuration/riak-cs/ + - /riakcs/3.1.0/configuring/riak-cs/ + - /riak/cs/3.1.0/configuring/riak-cs/ +--- + +For Riak CS to operate properly it must know how to connect to Riak. +A Riak CS node typically runs on the same server as its corresponding +Riak node, which means that changes will only be necessary if Riak is +configured using non-default settings. + +Riak CS's settings typically reside in a CS node's `riak-cs.conf` and +`advanced.config` files, both of which are typically located in the +`/etc/riak-cs` directory. The newer `riak-cs.conf` file is a simple list +of `configuration = option` pairs, but there are some configuration options +that can only be changed through the `advanced.config` file. That file looks +something like: + +```advancedconfig +{riak_cs, [ + {parameter1, value}, + {parameter2, value}, + %% and so on... +]}, +``` + +If you're updating from a version of Riak CS prior to 2.0.0 -- when the +`riak-cs.conf` file was introduced -- you can still use the old-style +`app.config` configuration file in place of the `riak-cs.conf`/`advanced.config` +pair. The `app.config` file has identical syntax to the `advanced.config` file, +so any examples that use the `advanced.config` syntax can be directly translated +to the `app.config` file. + +Please note that the older `app.config` file supersedes the newer configuration +files. If an `app.config` file is present, neither the `riak-cs.config` nor the +`advanced.config` will be used. + +> **Note on Legacy app.config** +> +> If you are upgrading to Riak CS 2.0 from a previous version of Riak and plan +to continue usage of the legacy `app.config` file, please note that some +configuration options have changed names. Most notably, the IP/Port format +has changed in 2.0 for Stanchion, Riak, and Riak CS. To view these changes, +please review the [Rolling Upgrades]({{}}riak/cs/3.1.0/setup/upgrading) Document. +> +> For a comprehensive listing of available parameters and a full list of `app.config` parameters, see the [Full Configuration Reference]({{}}riak/cs/3.1.0/configuring/reference). + +The sections below walk you through some of the main configuration categories +that you will likely encounter while operating Riak CS. + +## Host and Port + +To connect Riak CS to Riak, make sure that the following parameter is set to the +host and port used by Riak: + +* `riak_host` --- Replace `127.0.0.1:8087` with the IP address and port number + of the Riak node you want Riak CS to connect to. + +You will also need to set the host listener for Riak CS: + +* `listener` --- Replace `127.0.0.1:8080` with the IP address and port number + of the Riak CS node if you are running CS non-locally. Make sure that the + port number does not conflict with the `riak_host` port number of the Riak + node and the Riak CS node that are running on the same machine. + +{{% note title="Note on IP addresses" %}} +The IP address you enter here must match the IP address specified for the +Protocol Buffers interface in the Riak `riak.conf` file unless Riak CS is +running on a completely different network, in which case address translation +is required. +{{% /note %}} + +After making any changes to the `riak-cs.conf` file in Riak CS, +[restart]({{}}riak/cs/3.1.0/using/command-line-tools/#riak-cs) the node if it is already running. + +## Specifying the Stanchion Node + +If you're running a single Riak CS node, you don't have to change the +[Stanchion]({{}}riak/cs/3.1.0/configuring/stanchion) settings because Stanchion runs on the local host. If your Riak CS system has multiple nodes, however, you must specify the IP address and port for the Stanchion node and whether or not SSL is enabled. + +The Stanchion settings reside in the Riak CS `riak-cs.conf` file, which is +located in the `/etc/riak-cs` directory of each Riak CS node. + +To set the host and port for Stanchion, make sure the following parameter is set +to the host and port used by Stanchion: + +* `stanchion_host` --- replace `127.0.0.1:8085` with the IP address and port + number of the Stanchion node + +## Enabling SSL + +SSL is disabled by default in Stanchion, i.e. the `stanchion_ssl` variable is +set to `off`. If Stanchion is configured to use SSL, change this variable to +`on`. The following example configuration would set the Stanchion host to +`localhost`, the port to `8085` (the default), and set up Stanchion to use SSL: + +```riakcsconf +stanchion_host = 127.0.0.1:8085 +stanchion_ssl = on +``` + +```advancedconfig +{riak_cs, [ + %% Other configs + {stanchion_host, {"127.0.0.1", 8085}}, + {stanchion_ssl, true}, + %% Other configs +]} +``` + +## Specifying the Node Name + +You can also set a more useful name for the Riak CS node, which is helpful to +identify the node from which requests originate during troubleshooting. This +setting resides in the Riak CS `riak-cs.conf` configuration file, or the old- +style `vm.args` file which is also located in the `/etc/riak-cs` directory. This +would set the name of the Riak CS node to `riak_cs@127.0.0.1`: + +```riakcsconf +nodename = riak_cs@127.0.0.1 +``` + +```vmargs +-name riak_cs@127.0.0.1 +``` + +Change `127.0.0.1` to the IP address or hostname for the server on which Riak CS +is running. + +## Specifying the Admin User + +The admin user is authorized to perform actions such as creating users or +obtaining billing statistics. An admin user account is no different from any +other user account. **You must create an admin user to use Riak CS**. + +{{% note title="Note on anonymous user creation" %}} +Before creating an admin user, you must first set `anonymous_user_creation = +on` in the Riak CS `riak-cs.conf` (or set `{anonymous_user_creation, true}` in +the old-style `advanced.config`/`app.config`). You may disable this again once +the admin user has been created. +{{% /note %}} + +To create an account for the admin user, use an HTTP `POST` request with the +username you want to use for the admin account. The following is an + +```curl +curl -H 'Content-Type: application/json' / + -XPOST http://:/riak-cs/user / + --data '{"email":"admin@example.com", "name":"admin"}' +``` + +The JSON response will look something like this: + +```json +{ + "display_name" : "admin", + "email" : "admin@example.com", + "id" : "8d6f05190095117120d4449484f5d87691aa03801cc4914411ab432e6ee0fd6b", + "key_id" : "OUCXMB6I3HOZ6D0GWO2D", + "key_secret" : "a58Mqd3qN-SqCoFIta58Mqd3qN7umE2hnunGag==", + "name" : "admin_example", + "status" : "enabled" +} +``` + +You can optionally send and receive XML if you set the `Content-Type` to +`application/xml`, as in this example: + +Once the admin user exists, you must specify the credentials of the admin user +on each node in the Riak CS system. The admin user credential settings reside in +the Riak CS `riak-cs.conf` file, which is located in the `/etc/riak-cs` +directory. Paste the `key_id` string between the quotes for the `admin.key`. +Paste the `key_secret` string into the `admin.secret` variable, as shown here: + +```riakcsconf +admin.key = OUCXMB6I3HOZ6D0GWO2D +admin.secret = a58Mqd3qN-SqCoFIta58Mqd3qN7umE2hnunGag== +``` + +```advancedconfig +{riak_cs, [ + %% Admin user credentials + {admin_key, "OUCXMB6I3HOZ6D0GWO2D"}, + {admin_secret, "a58Mqd3qN-SqCoFIta58Mqd3qN7umE2hnunGag=="}, + %% Other configs + ]} +``` + +## Bucket Restrictions + +If you wish, you can limit the number of buckets created per user. The default +maximum is 100. Please note that if a user exceeds the bucket creation limit, +they are still able to perform other actions, including bucket deletion. You can +change the default limit using the `max_buckets_per_user` parameter in each +node's `advanced.config` file---there is no equivalent configuration for the +`riak-cs.conf` file. The example configuration below would set the maximum to +1000: + +```advancedconfig +{riak_cs, [ + %% Other configs + {max_buckets_per_user, 1000}, + %% Other configs + ]} +``` + +If you want to avoid setting a limit on per-user bucket creation, you can set +`max_buckets_per_user` to `unlimited`. + +## Connection Pools + +Riak CS uses two distinct connection pools for communication with Riak: a +**primary** and a **secondary** pool. + +The primary connection pool is used to service the majority of API requests +related to the upload or retrieval of objects. It is identified in the +configuration file as `pool.request.size`. The default size of this pool is 128. + +The secondary connection pool is used strictly for requests to list the contents +of buckets. The separate connection pool is maintained in order to improve +performance. This secondary connection pool is identified in the configuration +file as `pool.list.size`. The default size of this pool is 5. + +The following shows the `connection_pools` default configuration entry +that can be found in the `app.config` file: + +```riakcsconf +pool.request.size = 128 +pool.request.overflow = 0 +pool.list.size = 5 +pool.list.overflow = 0 +``` + +```advancedconfig +{riak_cs, [ + %% Other configs + {connection_pools, + [ + {request_pool, {128, 0} }, + {bucket_list_pool, {5, 0} } + ]}, + %% Other configs +]} +``` + +The value for each pool split into pairs, with the first number representing the +normal size of the pool. This is representative of the number of concurrent +requests of a particular type that a Riak CS node may service. The second number +represents the number of allowed overflow pool requests that are allowed. It is +not recommended that you use any value other than 0 for the overflow amount +unless careful analysis and testing has shown it to be beneficial for a +particular use case. + +### Tuning + +We strongly recommend that you take care when setting the value of the +[`pb_backlog` setting]({{}}riak/cs/3.1.0/configuring/riak-kv-for-cs/#setting-up-riak-to-use-protocol-buffers) in Riak. When a Riak CS node is +started, each connection pool begins to establish connections to Riak. This can +result in a [thundering herd problem](http://en.wikipedia.org/wiki/Thundering_herd_problem) in which connections in the pool believe they are connected to Riak, but in reality some of the connections have been reset. Due to TCP `RST` packet rate limiting (controlled by `net.inet.icmp.icmplim`) some of the connections may not receive notification until they are used to service a user's request. This manifests itself as an `{error, disconnected}` message in the Riak CS logs and an error returned to the user. + +## Enabling SSL in Riak CS + +```riakcsconf +ssl.certfile = "./etc/cert.pem" +ssl.keyfile = "./etc/key.pem" +``` + +```advancedconfig +{ssl, [ + {certfile, "./etc/cert.pem"}, + {keyfile, "./etc/key.pem"} + ]}, +``` + +Replace the text in quotes with the path and filename for your SSL encryption +files. By default, there's a `cert.pem` and a `key.pem` in each node's `/etc` +directory. You're free to use those or to supply your own. + +Please note that you may also need to provide a [certificate +authority](http://en.wikipedia.org/wiki/Certificate_authority), aka a CA cert. +If you do, you must use the `advanced.config` file, and specify its location +using the `cacertfile` parameter. Unlike `certfile` and `keyfile`, the +`cacertfile` parameter is not commented out. You will need to +add it yourself. Here's an example configuration with this parameter included: + +```advancedconfig +{ssl, [ + {certfile, "./etc/cert.pem"}, + {keyfile, "./etc/key.pem"}, + {cacertfile, "./etc/cacert.pem"} + ]}, + %% Other configs +``` + +Instructions on creating your own CA cert can be found +[here](http://www.akadia.com/services/ssh_test_certificate.html). + +## Proxy vs. Direct Configuration + +Riak CS can interact with S3 clients in one of two ways: + +* A [**proxy** configuration](http://basho.com/riak-cs-proxy-vs-direct-configuration/) + enables an S3 client to communicate with Riak CS as if it were Amazon S3 + itself, i.e. using typical Amazon URLs. +* A **direct** configuration requires that an S3 client connecting to Riak CS be + configured for an "S3-compatible service," i.e. with a Riak CS endpoint that + is not masquerading as Amazon S3. Examples of such services include + [Transmit](http://panic.com/transmit/), [s3cmd](http://s3tools.org/s3cmd), and + [DragonDisk](http://www.dragondisk.com/). + +### Proxy + +To establish a proxy configuration, configure your client's proxy settings to +point to Riak CS cluster's address. Then configure your client with Riak CS +credentials. + +When Riak CS receives the request to be proxied, it services the request itself +and responds back to the client as if the request went to S3. + +On the server side, the `root_host` configuration in the `riak-cs.conf` file +must be set to `s3.amazonaws.com` because all of the bucket URLs request by the +client will be destined for `s3.amazonaws.com`. This is the default. + +**Note**: One issue with proxy configurations is that many GUI clients only +allow for one proxy to be configured for all connections. For customers trying +to connect to both S3 and Riak CS, this can prove problematic. + +### Direct + +The establish a direct configuration, the `cs_root_host` in the +`riak_cs` section of `app.config` must be set to the FQDN of your Riak +CS endpoint, as all of the bucket URLs will be destined for the FQDN +endpoint. + +You will also need wildcard DNS entries for any child of the endpoint to +resolve to the endpoint itself. Here's an example: + +```config +data.riakcs.net +*.data.riakcs.net +``` + +## Garbage Collection Settings + +The following options are available to make adjustments to the Riak CS garbage +collection system. More details about garbage collection in Riak CS are +available in [Garbage Collection]({{}}riak/cs/3.1.0/learning/garbage-collection). + +* `gc.leeway_period` (`leeway_seconds` in `advanced.config` or `app.config`) --- + The amount of time that must elapse before an object version that has been + explicitly deleted or overwritten is eligible for garbage collection. The + default value is `24h` (24 hours). +* `gc.interval` (`gc_interval` in `advanced.config` or `app.config`) --- The + interval at which the garbage collection daemon runs to search for and reap + eligible object versions. The default value is `15m` (15 minutes). It is + important that you have only _one_ garbage collection daemon running in a + cluster at any point in time. To disable the daemon on a node, set the + `gc.interval` parameter to `infinity`. +* `gc.retry_interval` (`gc_retry_interval` in `advanced.config` or `app.config`) + --- The amount of time that must elapse before another attempt is made to + write a record for an object manifest in the `pending_delete` state to the + garbage collection eligibility bucket. In general, this timeout should never + expire, but may if an error condition caused the original record in the + garbage collection eligibility bucket to be removed prior to the reaping + process completing. The default value is `6h` (6 hours). +* `gc.max_workers` (`gc.max_workers` in `advanced.config` or `app.config`) --- + The maximum number of worker processes that may be started by the garbage + collection daemon to use for concurrent reaping of garbage-collection-eligible + objects. The default value is 2. +* `active_delete_threshold` (`active_delete_threshold` in `advanced.config` or `app.config`) --- Blocks of objects smaller than the threshold are synchronously deleted while their manifests are marked as `scheduled_delete`. The default value is 0. + +There are some additional settings that may only be configured in the +`advanced.config` or `app.config` configuration files. **None of the below +settings are available through the `riak-cs.conf` configuration file.** + +* `epoch_start` --- The time that the garbage collection daemon uses + to begin collecting keys from the garbage collection eligibility + bucket. Records in this bucket use keys based on the epoch time the + record is created + `leeway_seconds`. The default is 0 and should be + sufficient for general use. A case for adjusting this value is if the + secondary index query run by the garbage collection daemon continually + times out. Raising the starting value can decrease the range of the + query and make it more likely the query will succeed. The value must + be specified in Erlang binary format. *e.g.* to set it to 10, specify + `<<"10">>`. +* `initial_gc_delay` --- The number of seconds to wait in addition to + the `gc_interval` value before the first execution of the garbage + collection daemon when the Riak CS node is started. **Note**: + Originally, this setting was used to stagger the execution of GC on + multiple nodes; we no longer recommend running multiple GC daemons. + Correspondingly, we do not recommend setting `initial_gc_delay`. +* `max_scheduled_delete_manifests` --- The maximum number of + manifests (representative of object versions) that can be in the + `scheduled_delete` state for a given key. A value of `unlimited` means + there is no maximum, and pruning will not happen based on + count. An example of where this option is useful is a use case + involving a lot of churn on a fixed set of keys in a time frame that + is relatively short compared to the `leeway_seconds` value. This can + result in the manifest objects reaching a size that can negatively + impact system performance. The default value is `unlimited`. +* `gc_batch_size` --- This option represents the size used for paginating the + results of the secondary index query. The default value is 1000. + +{{% note title="Deprecated Configurations" %}} +While Riak CS 2.0.0 still allows the configuration of `gc_paginated_indexes`, +it is strongly recommended that these settings not be used. This setting has +been deprecated, and _will be removed_ in the next major release. +{{% /note %}} + +## Other Riak CS Settings + +For a complete listing of configurable parameters for Riak CS, see the +[configuration reference]({{}}riak/cs/3.1.0/configuring/reference) document. diff --git a/content/riak/cs/3.1.0/configuring/riak-kv-for-cs.md b/content/riak/cs/3.1.0/configuring/riak-kv-for-cs.md new file mode 100644 index 0000000000..19621f3fff --- /dev/null +++ b/content/riak/cs/3.1.0/configuring/riak-kv-for-cs.md @@ -0,0 +1,352 @@ +--- +title_supertext: "Configuring:" +title: "Riak KV for Riak CS" +description: "" +menu: + riak_cs-3.1.0: + name: "Configuring Riak KV for CS" + identifier: "config_riak_kv_for_cs" + weight: 110 + parent: "config" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/cookbooks/configuration/riak-for-cs/ + - /riak/cs/3.1.0/cookbooks/configuration/riak-for-cs/ + - /riakcs/3.1.0/configuring/riak-for-cs/ + - /riak/cs/3.1.0/configuring/riak-for-cs/ + - /riakcs/3.1.0/configuring/Configuring-Riak/ + - /riak/cs/3.1.0/configuring/Configuring-Riak/ +--- + +Because Riak CS is an application built on top of Riak, it's important +to pay special attention to your Riak configuration when running Riak +CS. This document is both a tutorial on Riak configuration as well as a +reference document listing important configurable parameters. + +## The Proper Backends for Riak CS + +The default backend used by Riak is the [Bitcask]({{}}riak/kv/3.0.9/setup/planning/backend/bitcask) backend, but the +Riak CS package includes a special backend that should be used by the +Riak cluster that is part of the Riak CS system. It is a custom version +of the standard [Multi]({{}}riak/kv/3.0.9/setup/planning/backend/multi) backend that ships with Riak. + +Some of the Riak buckets used internally by Riak CS use secondary +indexes, which currently requires the [LevelDB]({{}}riak/kv/3.0.9/setup/planning/backend/leveldb) backend. Other parts +of the Riak CS system can benefit from the use of the Bitcask backend. +The use of the custom [Multi]({{}}riak/kv/3.0.9/setup/planning/backend/multi) backend enables Riak CS to take +advantage of the strengths of both of these backends to achieve the best +blend of performance and features. The next section covers how to +properly set up Riak to use this Multi backend. + +Additionally, the Riak CS storage calculation system uses Riak's +[MapReduce]({{}}riak/kv/3.0.9/developing/usage/mapreduce) to sum the files in a bucket. This means that you must tell all of your Riak nodes where to find Riak CS's compiled files before calculating storage. + +A few other settings must be modified to configure a Riak node as part +of a Riak CS system, such as the node IP address and the IP address and +port to use for communicating through Protocol Buffers. Other settings +can be modified if necessary. The following sections describe how to +configure a Riak node to work as part of a Riak CS system. + +## Setting up the Proper Riak Backend + +First, edit Riak's `riak.conf`, or the old-style `advanced.config` or +`app.config` [configuration file]({{}}riak/kv/3.0.9/configuring/reference). These files can be found in the `/etc/riak` or `/opt/riak/etc` directories. By default, Riak uses the [Bitcask]({{}}riak/kv/3.0.9/setup/planning/backend/bitcask) backend. The first thing we need to do is to change that by removing +the following line: + +```riakconf +## Delete this line: + +storage_backend = bitcask +``` + +```advancedconfig +{riak_kv, [ + %% Delete this line: + {storage_backend, riak_kv_bitcask_backend}, +]} +``` + +```appconfig +{riak_kv, [ + %% Delete this line: + {storage_backend, riak_kv_bitcask_backend}, +]} +``` + +Next, we need to expose the necessary Riak CS modules to Riak and instruct Riak +to use the custom backend provided by Riak CS. We need to use either the +`advanced.config` or `app.config` file and insert the following options: + +```advancedconfig +{eleveldb, [ + {total_leveldb_mem_percent, 30} + ]}, +{riak_kv, [ + %% Other configs + {add_paths, ["/usr/lib/riak-cs/lib/riak_cs-3.1.0/ebin"]}, + {storage_backend, riak_cs_kv_multi_backend}, + {multi_backend_prefix_list, [{<<"0b:">>, be_blocks}]}, + {multi_backend_default, be_default}, + {multi_backend, [ + {be_default, riak_kv_eleveldb_backend, [ + {data_root, "/var/lib/riak/leveldb"} + ]}, + {be_blocks, riak_kv_bitcask_backend, [ + {data_root, "/var/lib/riak/bitcask"} + ]} + ]}, + %% Other configs +]} +``` + +```appconfig +{eleveldb, [ + {total_leveldb_mem_percent, 30} + ]}, +{riak_kv, [ + %% Other configs + {add_paths, ["/usr/lib/riak-cs/lib/riak_cs-3.1.0/ebin"]}, + {storage_backend, riak_cs_kv_multi_backend}, + {multi_backend_prefix_list, [{<<"0b:">>, be_blocks}]}, + {multi_backend_default, be_default}, + {multi_backend, [ + {be_default, riak_kv_eleveldb_backend, [ + {data_root, "/var/lib/riak/leveldb"} + ]}, + {be_blocks, riak_kv_bitcask_backend, [ + {data_root, "/var/lib/riak/bitcask"} + ]} + ]}, + %% Other configs +]} +``` + +It's important to note that many of these values will depend on various +directories specific to your [operating system]({{}}riak/kv/3.0.9/setup/installing), so make sure to adjust them accordingly. The `add_paths` +parameter, for example, assumes that Riak CS is installed in +`/usr/lib/riak-cs`, while the `data_root` parameters assume that Riak is +installed in `/var/lib/`. + +This configuration also assumes that the Riak CS package is installed on +the same machine as Riak. If not, the package will need to be copied +onto the same box. + +## Allowing for Sibling Creation + +Now, we need to set the `allow_mult` parameter to `true`. We can add this line +to the either the `riak.conf` configuration file, or to the `riak_core` section +of old-style `advanced.config` or `app.config` files: + +```riakconf +buckets.default.allow_mult = true +``` + +```advancedconfig +{riak_core, [ + %% Other configs + {default_bucket_props, [{allow_mult, true}]}, + %% Other configs +]} +``` + +```appconfig +{riak_core, [ + %% Other configs + {default_bucket_props, [{allow_mult, true}]}, + %% Other configs +]} +``` + +This will enable Riak to create [siblings]({{}}riak/kv/3.0.9/learn/concepts/causal-context/#siblings), which is necessary for Riak CS to function. If you are connecting to Riak CS from a [client library]({{}}riak/kv/3.0.9/developing/client-libraries), don't worry: you will not have to manage [conflict resolution]({{}}riak/kv/3.0.9/developing/usage/conflict-resolution), as all Riak CS +operations are strongly consistent by definition. + +{{% note title="Note on `allow_mult`" %}} +Any Riak node that also supports Riak CS should have `allow_mult` set to +`true` at all times. Riak CS will refuse to start if `allow_mult` is set to +`false`. +{{% /note %}} + +## Specifying the Nodename and IP Address + +Every Riak node has a name that can be specified in `riak.conf` using the +`nodename` option. If you are using the old-style `app.config` configuration +file, you will need to create a file named `vm.args` in the same directory as +the `app.config` file, and set the node name using the `-name` flag. We +recommend providing nodes a name of the form `@`. So if you have +three nodes running on the host `100.0.0.1`, you could name them +`riak1@100.0.0.1`, `riak2@100.0.0.1`, and `riak3@100.0.0.1`, or you could give +them names that are more specific, such as `test_cluster1@100.0.0.1`, +`user_data3@100.0.0.1`, and so on. The example below demonstrates changing a +node's name to `riak1@127.0.0.1`, which would work for a node running on +`localhost`: + +```riakconf +nodename = riak1@127.0.0.1 +``` + +```vmargs +-name riak1@127.0.0.1 +``` + +You should name _all_ nodes prior to starting them and connecting them +to a cluster. + +## Testing the Configuration + +Now that the necessary changes have been made to the Riak node's configuration, +we can attempt to start Riak: + +```bash +riak start +``` + +This could take a second. We can then test whether the node is running: + +```bash +riak ping +``` + +If the response is `pong`, then Riak is running; if the response is +`Node not responding to pings`, then something has gone wrong. + +If the node has not started properly, look at the `erlang.log.1` in the +`/log` directory of the node to see if the problem can be identified. +One common error is `invalid_storage_backend`, which indicates that the +path to the Riak CS library in `advanced.config` or in `app.config` is incorrect +(or that Riak CS is not installed on the server). In spite of this error, make +sure that you do not change the backend from `riak_cs_kv_multi_backend` to +`riak_kv_multi_backend`. + +## Setting Up Riak to Use Protocol Buffers + +The Riak [Protocol Buffers]({{}}riak/kv/3.0.9/developing/api/protocol-buffers) settings reside in the Riak `riak.conf`, +or in the `riak_api` section of the the old-style `advanced.config` or +`app.config` files, which is located in the `/etc/riak/` folder. The default host +is `127.0.0.1` and the default port is `8087`. You will need to change this if +you plan on running Riak and Riak CS in a non-local environment. Replace +`127.0.0.1` with the IP address of the Riak node and `8087` with the appropriate +port: + +```riakconf +listener.protobuf.internal = 10.0.2.10:10001 +``` + +```advancedconfig +{riak_api, [ + %% Other configs + {pb, ["10.0.2.10", 10001]}, + %% Other configs +]} +``` + +```appconfig +{riak_api, [ + %% Other configs + {pb, ["10.0.2.10", 10001]}, + %% Other configs +]} +``` + +**Note**: The `listener.protobuf.internal` values in the Riak `riak.conf` (or +the `pb` value in `advanced.config`/`app.config`) file must match the values for +`riak_host` in the Riak CS `riak-cs.config` and Stanchion `stanchion.conf` (or +`riak_host` the relative `advanced.config`/`app.config`) files. + +{{% note title="Note on port numbers" %}} +A different port number might be required if the port number conflicts with +ports used by another application or if you use a load balancer or proxy +server. +{{% /note %}} + +It is also recommended that users insure that the size of Riak's +`protobuf.backlog` (or in the `advanced.config`/`app.config` files, the +`pb_backlog`) is equal to or greater than the size of the +`pool.request.size`, specified in the Riak CS `riak-cs.conf` (or +the `request_pool` size in the `advanced.config`/`app.config` files). + +If the `pool.request.size` value in Riak CS is changed, the `protobuf.backlog` +value in Riak should be updated as well. + +## Other Riak Settings + +The `riak.conf` and `advanced.config` files includes other settings, such as +turning on the creation of log files and specifying where to store them. These +settings have default values that should work in most cases. For more +information, we recommend reading our [configuration files][riak_conf_files] +documentation. + +## Specifying the Riak IP Address + +By setting the Riak IP address you ensure that your Riak nodes have unique IP +addresses, whether you're working with a single node or adding additional nodes +to the system. The Riak IP address setting resides in the Riak `riak.conf` or +-- if you're using the `app.config` file -- in the `vm.args` configuration file, +which is located in the same `/etc/riak/` directory (or in `/opt/riak/etc/` on +some operating systems). + +Initially, the line that specifies the riak node IP address is set to the local +host, as follows: + +```riakconf +nodename = riak@127.0.0.1 +``` + +```vmargs +-name riak@127.0.0.1 +``` + +Replace `127.0.0.1` with the appropriate IP address or hostname for the Riak +node. + +### Performance and Capacity settings + +For performance reasons, we strongly recommended that you insert the following +values into Riak's `riak.conf`, or the old-style `vm.args`, configuration file, +located in the `/etc/riak` or `/opt/riak/etc` folder: + +```riakconf +erlang.max_ports = 65536 +``` + +```vmargs +## This setting should already be present for recent Riak installs. + +-env ERL_MAX_PORTS 65536 +``` + +### Disable JavaScript MapReduce + +It is recommended that you not use the now-deprecated JavaScript MapReduce in +conjunction with _any_ version of Riak CS. For performance reasons, you should +disable the VM that performs JavaScript MapReduce operations by setting the +following in the `riak.conf` configuration file, or the `riak_kv` section of the +old-style `advanced.config` or `app.config`: + +```riakconf +javascript.map_pool_size = 0 +javascript.reduce_pool_size = 0 +javascript.hook_pool_size = 0 +``` + +```advancedconfig +{riak_kv, [ + %% Other configs + {map_js_vm_count, 0}, + {reduce_js_vm_count, 0}, + {hook_js_vm_count, 0} + %% Other configs +]} +``` + +```appconfig +{riak_kv, [ + %% Other configs + {map_js_vm_count, 0}, + {reduce_js_vm_count, 0}, + {hook_js_vm_count, 0} + %% Other configs +]} +``` + +[riak_conf_files]: {{}}riak/kv/3.0.9/configuring/reference/ diff --git a/content/riak/cs/3.1.0/configuring/stanchion.md b/content/riak/cs/3.1.0/configuring/stanchion.md new file mode 100644 index 0000000000..008225a18f --- /dev/null +++ b/content/riak/cs/3.1.0/configuring/stanchion.md @@ -0,0 +1,129 @@ +--- +title_supertext: "Configuring:" +title: "Stanchion" +description: "" +menu: + riak_cs-3.1.0: + name: "Stanchion" + identifier: "config_stanchion" + weight: 130 + parent: "config" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/configuration/stanchion/ + - /riakcs/3.1.0/cookbooks/configuration/stanchion/ + - /riakcs/3.1.0/configuring/Configuring-Stanchion/ + - /riak/cs/3.1.0/configuring/Configuring-Stanchion/ +--- + +In your cluster, you must include one -- and only one -- Stanchion node. All the +Riak CS nodes in that cluster must then be configured to communicate with that +Stanchion node so that the cluster is able to track and negotiate +causally-sensitive operations. + +All of the settings used by the Stanchion node are stored in the +`stanchion.conf` file, which is located in the `/etc/stanchion` folder on most +operating systems. + +If you're upgrading from a version of Riak CS prior to 2.0.0 -- when the +`stanchion.conf` and `riak-cs.conf` files was introduced -- you can still use +the old-style `app.config` configuration files. Examples for both configuration +types will be provided. + +```stanchionconf +configuration.name = value +``` + +```appconfig +{stanchion, [ + %% Configs here + ]} +``` + +## Specifying the Stanchion IP Address and Port + +If you have a single node, you don't have to change the Stanchion settings +because Stanchion simply listens to the requests from the local host. If your +Riak CS cluster has multiple nodes, you must set the IP address and port that +Stanchion listens on for requests from other nodes. + +You can set the IP using the `listener` parameter. Replace `127.0.0.1` with the +IP address of the Stanchion node, and `8080` with the port of the Stanchion +node. + +```stanchionconf +listener = 127.0.0.1:8080 +``` + +```appconfig +{stanchion, [ + {host, {"127.0.0.1", 8085}}, + %% Other configs + ]} +``` + +{{% note title="Note on matching IP addresses" %}} +The IP address you enter here must match the IP address specified for the +`stanchion_host` variable in the Riak `riak.conf` file and the Riak CS +`riak-cs.conf` file. +{{% /note %}} + +If you want to use SSL, make sure the `ssl.certfile` and `ssl.keyfile` settings +are not commented out, and have been set correctly. + +```stanchionconf +ssl.certfile = "./etc/cert.pem" +ssl.keyfile = "./etc/key.pem" +``` + +```appconfig +{stanchion, [ + {ssl, [ + {certfile, "./etc/cert.pem"}, + {keyfile, "./etc/key.pem"} + ]}, + %% Other configs + ]} +``` + +## Specifying the Admin User + +The admin user is created during the [configuration of Riak CS]({{}}riak/cs/3.1.0/configuration/riak-cs/#specifying-the-admin-user). +The same user credentials must be added to each Stanchion used in the cluster. +This is set in the `stanchion.conf` file, which is located in the +`/etc/stanchion` directory. Enter the same `admin.key` and `admin.secret` as + +```stanchionconf +admin.key = OUCXMB6I3HOZ6D0GWO2D +admin.secret = a58Mqd3qN-SqCoFIta58Mqd3qN7umE2hnunGag== +``` + +```appconfig +{stanchion, [ + %% Admin user credentials + {admin_key, "OUCXMB6I3HOZ6D0GWO2D"}, + {admin_secret, "a58Mqd3qN-SqCoFIta58Mqd3qN7umE2hnunGag=="}, + %% Other configs + ]} +``` + +## Specifying Riak Information + +If you are running a single node for experimentation, or if a Riak node is +running locally and configured to listen for protocol buffer traffic on +`0.0.0.0`, the default Riak configuration for Stanchion should be fine. + +Otherwise, update the IP address and port for the Riak host in the Stanchion +configuration file. + +```stanchionconf +riak_host = 127.0.0.1:8087 +``` + +```appconfig +{stanchion, [ + {riak_host, {"127.0.0.1", 8087}}, + %% Other configs + ]} +``` diff --git a/content/riak/cs/3.1.0/configuring/superclusters.md b/content/riak/cs/3.1.0/configuring/superclusters.md new file mode 100644 index 0000000000..82af287fa0 --- /dev/null +++ b/content/riak/cs/3.1.0/configuring/superclusters.md @@ -0,0 +1,189 @@ +--- +title_supertext: "Configuring:" +title: "Superclusters" +description: "" +menu: + riak_cs-3.1.0: + name: "Superclusters" + identifier: "config_superclusters" + weight: 160 + parent: "config" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/supercluster/ + - /riakcs/3.1.0/cookbooks/supercluster/ +--- + +While Riak CS enables you to distribute Riak CS objects across multiple data centers in a +[source/sink pattern]({{}}riak/kv/3.0.9/using/reference/v3-multi-datacenter/architecture), all linked clusters are treated the same. +However, from Riak CS version 1.5.0, **supercluster** support has been added. + +With supercluster support, you can store object manifests and blocks in +separate clusters or groups of clusters, a.k.a. **a set of supercluser members**, enhancing the scalability and overall storage capabilities of a Riak CS installation. + +## Supercluster members + +A supercluster member is a set of clusters linked together via [Multi-Datacenter Replication]({{}}riak/kv/latest/using/reference/v3-multi-datacenter/architecture)/(MDC). +Without MDC support, a supercluster member consists of a single cluster. With MDC support, however, a supercluster member can consist of several linked clusters. +You can assign members **weights** that determine the likelihood that objects, blocks, and manifests will be stored there. For example, if you expect to use one supercluster member +more heavily than another you can increase the weight of that member using the interface described in [Riak CS Command-line Tools]({{}}riak/cs/3.1.0/using/command-line-tools). + +## The Master Member + +In a Riak CS supercluster setup, there is one special member, known as the +**master member**, that bears a set of special responsibilities. It stores +objects such as: + +* User information (for authentication and other purposes) +* Bucket-related information, e.g. the supercluster member in which each bucket is + stored +* Access statistics regarding Riak CS usage + +## Supercluster Configuration + +In order to use Riak CS supercluster, you need to modify multiple configuration +files. First, in each Riak CS node you need to alter one of the node's +`riak-cs.conf`, `advanced.config`, or `app.config` files to specify the host and port of each supercluster member. For simplicity, we recommend editing `riak-cs.conf` but the other two +configuration options to achieve the same result are included for completeness. + +For example, if you wanted to set up supercluster members on host `127.0.0.1` with three different ports -- `10017`,`10027`, and `10037` -- you would add the following section: + +```riakcsconf +supercluster.member.Alpha = 127.0.0.1:10017 +supercluster.member.Bravo = 127.0.0.1:10027 +supercluster.member.Charlie = 127.0.0.1:10037 +``` +```advancedconfig +{riak_cs, [ + %% Other configs + {supercluster_members, + [ + {"Alpha", "127.0.0.1", 10017}, + {"Bravo", "127.0.0.1", 10027}, + {"Charlie", "127.0.0.1", 10037} + ]}, + %% Other configs +]}, +``` +```appconfig +{riak_cs, [ + %% Other configs + {supercluster_members, + [ + {"Alpha", "127.0.0.1", 10017}, + {"Bravo", "127.0.0.1", 10027}, + {"Charlie", "127.0.0.1", 10037} + ]}, + %% Other configs +]}, +``` + +>As with all configuration changes, each node must be restarted for the +changes to take effect. + +In addition to configuring Riak CS to use supercluster support, you will need to mirror the configuration changes shown above in Stanchion. In one of the +`stanchion.conf`, `advanced.config`, or `app.config` files in each Stanchion node, the following section would need to be inserted: + +```stanchionconf +supercluster.member.Alpha = 127.0.0.1:10017 +supercluster.member.Bravo = 127.0.0.1:10027 +supercluster.member.Charlie = 127.0.0.1:10037 +``` +```advancedconfig +{stanchion, [ + %% Other configs + {supercluster_members, + [ + {"Alpha", "127.0.0.1", 10017}, + {"Bravo", "127.0.0.1", 10027}, + {"Charlie", "127.0.0.1", 10037} + ] + } + %% Other configs +]}, +``` +```appconfig +{stanchion, [ + %% Other configs + {supercluster_members, + [ + {"Alpha", "127.0.0.1", 10017}, + {"Bravo", "127.0.0.1", 10027}, + {"Charlie", "127.0.0.1", 10037} + ] + } + %% Other configs +]}, +``` +Again, we would recommending setting this in `stanchion.conf` for simplicity but the other two methods to achieve the same result have been included for completeness. + +In production, each supercluster would have a different IP address, commonly with port `8087` for each but the above example is created for a production environment +where each Riak CS node has its own load balancer run locally. The same config could be employed for a typical `devrel` environment used exclusively for local testing. + +## Transitioning to Supercluster Support + +If you have an existing Riak CS installation without supercluster support +and would like to add it, there is a series of basic steps to follow. + +### Stanchion + +Stanchion houses some of the basic functionality required for Riak CS +supercluster support. The first step in transitioning to supercluster support +is to upgrade Stanchion to a version that supports Riak CS 3.0.0 supercluster. +If your Stanchion version is version 3.0.0 or higher already, there is no need +to perform the upgrade but the configuration will still need to be updated. +That involves performing the following steps on each node: + +1. Stop the node. +2. Upgrade Stanchion to a version that supports Riak CS 3.0.0 supercluster, i.e. + Stanchion 3.0.0 and later. +3. Set your desired Stanchion [configuration]({{}}riak/cs/3.1.0/configuring/stanchion). +4. Start Stanchion with the new configuration. + +### Add Clusters + +To add clusters to a supercluster installation, you must set up Riak CS and +Stanchion to communicate with those clusters. You can specify the +connection information as explained above in the [supercluster Configuration](#supercluster-configuration) section. + +### Set Weights + +When a new supercluster member is added, you must first set the weight of that member to zero using the [`riak-cs-supercluster`]({{}}riak/cs/3.1.0/using/command-line-tools) command-line interface. + +The example below sets the weight of the recently added supercluster member `Alpha` to zero: + +```bash +riak-cs-supercluster weight Alpha 0 +``` + +All weights are stored in the [master member](#the-master-member) and shared with all Riak CS nodes, which means that you only have to set weights once for them to be valid throughout your cluster. + +All supercluster members must begin their life with a weight of zero. However, you can set non-zero weights once all Riak CS and Stanchion nodes are properly +set up to recognize one another in the cluster. Let's say that we've set +up three members, `Alpha`, `Bravo`, and `Charlie`. We want to assign them the +weights 40, 40, and 20, respectively. The following commands would +accomplish that: + +```bash +riak-cs-supercluster weight Alpha 40 +riak-cs-supercluster weight Bravo 40 +riak-cs-supercluster weight Charlie 20 +``` + +The weights don't need to add up to 100 or to any specific number. Each +weight will be calculated as a percentage of the total assigned weights. +Thus, if a fourth supercluster member were added, you could assign it a weight of 30 without changing the other weights. + +Congratulations! Your Riak CS installation is now ready to use the new +supercluster feature. + +## Command Line Interface + +Complete documentation for the `riak-cs-supercluster` interface can be found +in our documentation on [Riak CS Command Line Tools]({{}}riak/cs/3.1.0/using/command-line-tools/#riak-cs-supercluster). + +## Limitations + +Riak CS supercluster does not currently support [proxy gets]({{}}riak/kv/latest/using/cluster-operations/v3-multi-datacenter/#riak-cs-mdc-gets) from +sink clusters. diff --git a/content/riak/cs/3.1.0/developing.md b/content/riak/cs/3.1.0/developing.md new file mode 100644 index 0000000000..18d2dabb20 --- /dev/null +++ b/content/riak/cs/3.1.0/developing.md @@ -0,0 +1,20 @@ +--- +title: "Developing With Riak CS" +description: "" +menu: + riak_cs-3.1.0: + name: "Developing" + identifier: "develop" + weight: 700 + pre: lambda +project: "riak_cs" +project_version: "3.1.0" +aliases: +--- + +### In This Section + +- [Accounts & Administration APIs](../references/appendices/http-admin/) +- [Storage APIs](../references/apis) +- [Access Statistics](../cookbooks/querying-access-statistics/) +- [Storage Statistics](../cookbooks/querying-storage-statistics/) diff --git a/content/riak/cs/3.1.0/developing/accounts-and-admin.md b/content/riak/cs/3.1.0/developing/accounts-and-admin.md new file mode 100644 index 0000000000..c4881014db --- /dev/null +++ b/content/riak/cs/3.1.0/developing/accounts-and-admin.md @@ -0,0 +1,69 @@ +--- +title_supertext: "Developing:" +title: "Accounts & Admin" +description: "" +menu: + riak_cs-3.1.0: + name: "Accounts & Admin" + identifier: "develop_accounts_admin" + weight: 100 + parent: "develop" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/references/appendices/Http-Administration/ + - /riak/cs/3.1.0/references/appendices/Http-Administration/ + - /riak/cs/3.1.0/references/appendices/http-admin/ + - /riakcs/3.1.0/references/appendices/http-admin/ +--- + +Riak CS exposes the following accounts & admin capabilities over HTTP +above and beyond those associated with Riak KV itself: + +Task | CS URI | Further reading +:----|:-------|:--------------- +User management | `/riak-cs/user` | [Account Management](./account-management) +User access statistics | `/riak-cs/usage` | [Querying Access Statistics](../usage-and-billing-data/access-statistics) +Storage statistics | `/riak-cs/usage` | [Querying Storage Statistics](../usage-and-billing-data/storage-statistics) +Global statistics | `/riak-cs/stats` | [Monitoring and Metrics](../../using/monitoring-and-metrics/#riak-cs-stats) + +For monitoring and metrics capabilities, please read [Monitoring and Metrics](../usage-and-billing-data) + +By default, these are accessible over the same IP/port as the rest of +the CS API, but they can be configured to run elsewhere, with or without +authentication. + +## Output format + +For these requests, results are available as either JSON or XML. Request +the appropriate data format by using the HTTP `Accept` header with +either `application/json` or `application/xml`, respectively. + +## URLs + +Each of these requests is performed over the CS HTTP port (`8080` by +default) or administrative port if configured via `admin_port`. The +`admin_ip` configuration setting can be used to further isolate the +administrative commands. + +Only the admin user can view other users' details unless the +`admin_auth_enabled` config is set to `false`. + +## Retrieving Statistics Via S3 Objects + +As an alternative to raw HTTP requests, the administrative requests can +be issued via the S3 API. See the GitHub documents linked below for more +details. + +## Related Resources + +* [configuring Riak CS](../../configuring/riak-cs) +* [Querying Access Statistics](../usage-and-billing-data/access-statistics) + * [Usage and Billing Data]({{}}riak/cs/3.0.1/cookbooks/usage-and-billing-data) + * [Github wiki](https://github.com/basho/riak_cs/wiki/Querying-Access-Stats) +* [Querying Storage Statistics]({{}}riak/cs/3.0.1/cookbooks/querying-storage-statistics) + * [Enabling storage statistics](https://github.com/basho/riak_cs/wiki/Logging-Storage-Stats) + * [Github wiki](https://github.com/basho/riak_cs/wiki/Logging-Storage-Stats) +* [Account Management]({{}}riak/cs/3.0.1/cookbooks/account-management) + * [Github wiki](https://github.com/basho/riak_cs/wiki/User-Management) +* [Monitoring and Metrics]({{}}riak/cs/3.0.1/cookbooks/monitoring-and-metrics) diff --git a/content/riak/cs/3.1.0/developing/accounts-and-admin/access-control-lists.md b/content/riak/cs/3.1.0/developing/accounts-and-admin/access-control-lists.md new file mode 100644 index 0000000000..e4f08960bf --- /dev/null +++ b/content/riak/cs/3.1.0/developing/accounts-and-admin/access-control-lists.md @@ -0,0 +1,112 @@ +--- +title_supertext: "Developing > Accounts and Admin:" +title: "Access Control Lists" +description: "" +menu: + riak_cs-3.1.0: + name: "Access Control Lists" + identifier: "develop_accounts_admin_acl" + weight: 400 + parent: "develop_accounts_admin" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/cookbooks/Access-Control-Lists/ + - /riak/cs/3.1.0/cookbooks/Access-Control-Lists/ + - /riakcs/3.1.0/cookbooks/access-control-lists/ + - /riak/cs/3.1.0/cookbooks/access-control-lists/ +--- + +Access Control Lists (ACLs) are a means of granting and denying access +to buckets and objects. Each bucket and object in a Riak CS cluster will +have an ACL associated with it. When a bucket or object is created, a +default ACL will be created alongside it that grants full control to the +creating party and denies access to all other parties. + +Riak CS ACLs are modeled after S3 ACLs. For more information, see the +Amazon [Access Control List Overview](http://docs.amazonwebservices.com/AmazonS3/latest/dev/ACLOverview.html) +documentation. + +> **ACL Limit** +> +> An ACL can have up to 100 grants. + +## Representations + +XML is the only supported external format for ACLs. In the future, other +formats such as [JSON](http://www.json.org) may be supported. + +Example XML representation of an ACL: + +```xml + + + + abcd123 + joebob + + + + + abcd123 + joebob + + FULL_CONTROL + + + +``` + +## Permissions + +Riak CS permissions are split into two types: **bucket permissions** and +**object permissions**. + +### Bucket Permissions + +* `READ` --- Grantee may list the objects in the bucket +* `READ_ACP` --- Grantee may read the bucket ACL +* `WRITE` --- Grantee may create, overwrite, and delete any object in + the bucket +* `WRITE_ACP` --- Grantee may write the ACL for the applicable bucket +* `FULL_CONTROL` --- Grantee has `READ`, `WRITE`, `READ_ACP`, and + `WRITE_ACP` permissions on the bucket + +### Object Permissions + +* `READ` --- Grantee may read the object data and its metadata +* `READ_ACP` --- Grantee may read the object ACL. **Note:** The object + owner may read the object ACL even if not explicitly granted + `READ_ACP` permission. +* `WRITE_ACP` --- Grantee may write the ACL for the applicable object. + **Note:** The object owner may write the object ACL even if not + explicitly granted `WRITE_ACP` permission. +* `FULL_CONTROL` --- Grantee has `READ`, `READ_ACP`, and `WRITE_ACP` + permissions on the object. + +## Buckets + +Bucket names **must** be [globally unique]({{}}riak/cs/3.0.1/theory/stanchion/#globally-unique-entities). To avoid conflicts, all +bucket creation requests are made to an application called +[Stanchion]({{}}riak/cs/3.0.1/configuring/stanchion). This means that all requests for modification of a bucket ACL should be serialized through Stanchion. While this may cause undesirable serialization of these requests, we +believe it is appropriate based on the following statement from this +[documentation on bucket restrictions](http://docs.amazonwebservices.com/AmazonS3/latest/dev/BucketRestrictions.html) from Amazon regarding restrictions on bucket operations: + +> Because bucket operations work against a centralized, global +resource space, it is not appropriate to make bucket create or delete +calls on the high availability code path of your +application. + +This statement only directly references create or delete calls, but we +have taken a more broad interpretation to include requests that modify +the ACL. + +## Objects + +The object ACL is stored with each object as a metadata field. If no ACL +information is present in the object creation request, a default ACL is +created granting the creator both ownership and full access control and +denying access to all other parties. + +For information on specifying an ACL when making a `PUT` request, see +[Riak CS PUT Object ACL]({{}}riak/cs/3.0.1/references/apis/storage/s3/put-object-acl). diff --git a/content/riak/cs/3.1.0/developing/accounts-and-admin/account-management.md b/content/riak/cs/3.1.0/developing/accounts-and-admin/account-management.md new file mode 100644 index 0000000000..840e0e1ba1 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/accounts-and-admin/account-management.md @@ -0,0 +1,232 @@ +--- +title_supertext: "Developing > Accounts and Admin:" +title: "Account Management" +description: "" +menu: + riak_cs-3.1.0: + name: "Account Management" + identifier: "develop_accounts_admin_account_management" + weight: 100 + parent: "develop_accounts_admin" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/Account-Management/ + - /riakcs/3.1.0/cookbooks/Account-Management/ + - /riakcs/3.1.0/cookbooks/account-management/ + - /riak/cs/3.1.0/cookbooks/account-management/ +--- + +## Creating a User Account + +Create a user account by performing an HTTP `POST` or `PUT` with a +unique email address and username. Here's an example: + +```curl +curl -X POST http://localhost:8080/riak-cs/user / + -H 'Content-Type: application/json' / + --data '{"email":"foobar@example.com", "name":"foo bar"}' / +``` + +{{% note title="Note on admin users" %}} +By default, only the admin user may create new user accounts. If you need to +create a user account without authenticating yourself, you must set +`{anonymous_user_creation, true}` in the Riak CS `app.config`. +{{% /note %}} + +The submitted user document may be either JSON or XML, but the type +should match the value of the `Content-Type` header used. Here are some +examples for JSON and XML input formats. + +```json +{ + "email": "foobar@example.com", + "name": "foo bar" +} +``` + +```xml + + foobar@example.com + foo bar + +``` + +The response will be in JSON or XML, and resembles the following examples. + +```json +{ + "email": "foobar@example.com", + "display_name": "foobar" + "key_id": "324ABC0713CD0B420EFC086821BFAE7ED81442C", + "key_secret": "5BE84D7EEA1AEEAACF070A1982DDA74DA0AA5DA7", + "name": "foo bar", + "id": "8d6f05190095117120d4449484f5d87691aa03801cc4914411ab432e6ee0fd6b", + "buckets": [] +} +``` + +```xml + + foobar@example.com + foobar + 324ABC0713CD0B420EFC086821BFAE7ED81442C + 5BE84D7EEA1AEEAACF070A1982DDA74DA0AA5DA7 + foo bar + 8d6f05190095117120d4449484f5d87691aa03801cc4914411ab432e6ee0fd6b + + +``` + +Once the user account exists, you can use the `key_id` and `key_secret` +to authenticate requests with Riak CS. To do that, add the `key_id` and +`key_secret` values to your s3cmd configuration file, which is located +by default in the `~/.s3cmd` folder, + +The canonical id represented by the `id` field can be used as an +alternative to an email address for user identification when granting or +revoking ACL permissions, for example with the `--acl-grant` or +`--acl-revoke` options to `s3cmd setacl`. + +## Retrieving User Account Information + +A user may retrieve their account information by sending a properly +signed request to the `riak-cs/user` resource. Additionally, the admin +user may request the information for any individual user on the system +as part of their role as administrator. Users are only permitted to +retrieve information for their account. + +Assuming the proper credentials were set in the `.s3cfg` file, an s3/ +request to retrieve this information would look like this: + +```bash +s3cmd get s3://riak-cs/user - +``` + +Using the admin credentials to retrieve another user's info would look +like this: + +```bash +s3cmd -c ~./s3cfg-admin get s3://riak-cs/user/XQKMYF4UL_MMTDFD6NCN +``` + +In this example, `XQKMYF4UL_MMTDFD6NCN` is the `key_id` of the user +whose information the administrator wishes to retrieve. + +## Modifying User Account Information + +### Changing the User Account Name and Email Address + +A user may use a `PUT` to `/riak-cs/user` to update the name and email +address associated with an account. The `PUT` must include a document +with a name and email field. JSON or XML formats are supported for this +document. Samples of each are shown below. The `Content-Type` header +should also be set appropriately. The admin user may also update a +user's account via a `PUT` to `/riak-cs/user/`. The value +for the email field must be a valid email address and must not be +already used by another user account in the system. Violation of either +condition results in an error response. + +Sample JSON and XML status update documents: + +```json +{ + "name": "foobaz", + "email": "foobaz@example.com" +} +``` + +```xml + + + foobaz + foobaz@example.com + +``` + +### Enabling and Disabling a User Account + +A user may use a `PUT` to `/riak-cs/user` to disabled their account. The +`PUT` must include a document with a status field whose value is +disabled. JSON or XML formats are supported for this document. Samples +of each are shown below. The `Content-Type` header should also be set +appropriately. The admin user may also disable or re-enable a user's +account via a `PUT` to `/riak-cs/user/`. Users may not +re-enable their own account once it is disabled. + +Sample JSON and XML status update documents: + +```json +{ + "status": "enabled" +} +``` + +```xml + + + disabled + +``` + +### Issuing New User Credentials + +The `key_secret` for a user account can be reissued by a `PUT` to +`/riak-cs/user` with the appropriate JSON or XML document. For admin +users, the `PUT` would be to `/riak-cs/user/`. + +The documents should resemble the following examples. + +```json +{ + "new_key_secret": true +} +``` + +```xml + + + true + +``` + +{{% note title="Note on update fields" %}} +The `new_key_secret` field (or `NewKeySecret` in XML) may be combined with +other user update fields in the same request. Currently, the only other +supported field is status, but more may be added in the future. Unsupported +fields are ignored. +{{% /note %}} + +## Retrieving a List of All Users + +The admin user may retrieve a list of all user accounts on the system. +This accomplished via a properly signed HTTP `GET` request to the +`/riak-cs/users` resource. Any non-admin user request for the user list +is rejected and a `403 Forbidden` error is returned. This request does +not properly work with s3cmd, but can be performed using a less dogmatic +tool such as [s3-curl](http://aws.amazon.com/code/128). + +{{% note title="Note on hostname" %}} +You must modify the `@endpoints` variable in the `s3curl.pl` script to include +your Riak CS hostname so that the following example will return the list of +users. +{{% /note %}} + +A sample URL for a user listing request looks like this: + +```plaintext +GET http://data.example.com/riak-cs/users - +``` + +An example using s3-curl that assumes properly specified credentials for +the admin user in the `.s3curl` configuration file with an `id` of +`admin` is as follows: + +```bash +s3curl --id admin -- http://data.mystorage.me/riak-cs/users +``` + +By default, the listing of all users includes accounts that are both +enabled and disabled. The list can be filtered to only include enabled +or disabled accounts by using the status query parameter with a value of +enabled or disabled respectively. diff --git a/content/riak/cs/3.1.0/developing/accounts-and-admin/authentication.md b/content/riak/cs/3.1.0/developing/accounts-and-admin/authentication.md new file mode 100644 index 0000000000..fc86479b24 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/accounts-and-admin/authentication.md @@ -0,0 +1,118 @@ +--- +title_supertext: "Developing > Accounts and Admin:" +title: "Authentication" +description: "" +menu: + riak_cs-3.1.0: + name: "Authentication" + identifier: "develop_accounts_admin_authentication" + weight: 300 + parent: "develop_accounts_admin" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/Authentication/ + - /riakcs/3.1.0/cookbooks/Authentication/ + - /riakcs/3.1.0/cookbooks/authentication/ + - /riak/cs/3.1.0/cookbooks/authentication/ +--- + +## Authentication Options + +* S3 Signature Authentication + * Module name: `riak_cs_s3_auth` + * [Documentation](http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html) +* Keystone Authentication + * Module name: `riak-cs_keystone_auth` + * [Documentation](http://docs.openstack.org/api/openstack-identity-service/2.0/content/index.html) +* S3 Passthru Authentication + * Module name: `riak_cs_s3_passthru_auth` + * This module requires a valid user `key_id` to be included in the + `Authorization` header value, but no signature is required. For + example, a valid header using this authentication module would look + like this: `Authorization: AWS 4REM9H9ZKMXW-DZDC8RV`. + + **Warning**: This module is only intended for use in development or + testing scenarios. + +Selecting an authentication method is done by adding or changing the +`auth_module` key in the Riak CS `riak-cs.conf` file, or the old-style +`advanced.config` or `app.config` files in the `riak_cs` section. For example, +to instruct Riak CS to use S3-style request signing as the means of +authentication, ensure the following is contained in your configuration file: + +```riakcsconf +auth_module = riak_cs_s3_auth +``` + +```advancedconfig +{riak_cs, [ + %% Other configs + {auth_module, riak_cs_s3_auth}, + %% Other configs + ]} +``` + +```appconfig +{riak_cs, [ + %% Other configs + {auth_module, riak_cs_s3_auth}, + %% Other configs + ]} +``` + +S3-style authentication is used by default. + +## S3 Authentication + +### Signing and Authenticating REST Requests + +The primary authentication scheme available to use with Riak CS is the S3 +authentication scheme. A signature is calculated using several elements from +each request and the user's `key_id` and `key_secret`. This signature is +included in the `Authorization` header of the request. Once a request is +received by the server, the server also calculates the signature for the +request and compares the result with the signature presented in then +`Authorization` header. If they match then the request is authenticated; +otherwise, the authentication fails. + +Full details are available in the [S3 authentication scheme +documentation](http://docs.amazonwebservices.com/AmazonS3/latest/dev/RESTAuthentication.html). + +### Query String Authentication + +Riak CS also supports authentication using a query parameter. This +allows issuing of pre-signed requests that can be used to grant public +access to private Riak CS data. It also supports an expiry timestamp so +that the pre-signed URL can be invalidated after a certain period of +time. + +The signature in the query string secures the request and you can +specify any future expiration time in epoch or UNIX time. + +1. Create a query +2. Specify an expiration time for the query +3. Sign it with your signature +4. Place the data in an HTTP request +5. Distribute the request to a user or embed the request in a web page + +#### Query String Parameters + +Parameter | Description | Data type +:---------|:------------|:--------- +`AWSAccessKeyId` | Your Riak CS Access Key ID | string +`Expires` | The time when the signature expires, specified as the number of seconds since the epoch | integer +`Signature` | The URL encoding of the Base64 encoding of the HMAC-SHA1 of `StringToSign` | string + +#### Example + +For example, a query URL is similar to the following example. + +```http +http://bucket.data.basho.com/document?AWSAccessKeyId=8EE3UE-UMW1YTPMBC3EB&Expires=1177363698&Signature=vjSAMPLENmGa%2ByT272YEAiv4%3D +``` + +## Keystone Authentication + +More information on using Keystone for authentication with Riak CS can +be found in [using Riak CS with Keystone]({{}}riak/cs/3.0.1/cookbooks/using-with-keystone). diff --git a/content/riak/cs/3.1.0/developing/accounts-and-admin/designate-admin-user.md b/content/riak/cs/3.1.0/developing/accounts-and-admin/designate-admin-user.md new file mode 100644 index 0000000000..53b45815be --- /dev/null +++ b/content/riak/cs/3.1.0/developing/accounts-and-admin/designate-admin-user.md @@ -0,0 +1,28 @@ +--- +title_supertext: "Developing > Accounts and Admin:" +title: "Designating an Admin User" +description: "" +menu: + riak_cs-3.1.0: + name: "Designating an Admin User" + identifier: "develop_accounts_admin_designate_admin_user" + weight: 200 + parent: "develop_accounts_admin" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/cookbooks/Designating-an-Admin-User/ + - /riak/cs/3.1.0/cookbooks/Designating-an-Admin-User/ + - /riak/cs/3.1.0/cookbooks/designate-admin-user/ +--- + +Once a user has been created, you should designate a user as an admin by +editing and replacing the `admin_key` and `admin_secret` in `app.config` +with the user's credentials. Once this is done, do not forget to update +the same credentials in the Stanchion `app.config` as well. + +{{% note title="Note on the admin role" %}} +This is a powerful role and gives the designee administrative capabilities +within the system. As such, caution should be used to protect the access +credentials of the admin user. +{{% /note %}} diff --git a/content/riak/cs/3.1.0/developing/apis.md b/content/riak/cs/3.1.0/developing/apis.md new file mode 100644 index 0000000000..acfb60c710 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis.md @@ -0,0 +1,23 @@ +--- +title_supertext: "Developing:" +title: "Riak CS APIs" +description: "" +menu: + riak_cs-3.1.0: + name: "APIs" + identifier: "develop_apis" + weight: 200 + parent: "develop" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/developing/apis/ + - /riak/cs/3.1.0/references/apis/ + - /riakcs/3.1.0/references/apis/ +--- + +### In This Section + +- [Riak CS Storage API](./cs-storage) +- [S3 Storage API](./s3) +- [OpenStack Storage API](./openstack) diff --git a/content/riak/cs/3.1.0/developing/apis/cs-storage.md b/content/riak/cs/3.1.0/developing/apis/cs-storage.md new file mode 100644 index 0000000000..2bcae18975 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/cs-storage.md @@ -0,0 +1,162 @@ +--- +title_supertext: "Developing > APIs:" +title: "Riak CS Storage API" +description: "" +menu: + riak_cs-3.1.0: + name: "Riak CS Storage API" + identifier: "develop_apis_storage" + weight: 100 + parent: "develop_apis" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/references/apis/storage/ + - /riak/cs/3.1.0/references/apis/storage/ +--- + +The Riak CS storage API is compatible with the Amazon S3 REST API, which +means that any of the operations listed can be executed using any of the +commonly available S3 libraries or tools. + +## API Feature Comparison + +The following table describes the support status for current Amazon S3 +functional features. + +Feature | Status | Remark +--------|--------|-------- +GET Service (lists all buckets for authenticated user) | | | +DELETE Bucket | | | +PUT Bucket | | | +Bucket Lifecycle | | | +Policy (Buckets, Objects) {{1.3.0+}} | | Supports the "*" principal type and the "Secure Transport" and "IP address" conditions. | +Policy (Buckets, Objects) {{1.3.0-}} | Coming Soon | Planned for future release | +Bucket Website | | | +Bucket ACLs (GET, PUT) | | | +Bucket Location | | | +Bucket Notification | | | +Bucket Object Versions | | | +GET Bucket Info (HEAD) | | | +Bucket Request Payment | | | +PUT Object | | | +Put Object (Copy) {{1.5.0+}} | | | +PUT Object (Copy) {{1.3.0-1.5.0}} | | Support is limited to a 0 byte copy from an object to itself for the purpose of updating metadata. | +PUT Object (Copy) {{1.3.0-}} | Coming Soon | Planned for future release | +DELETE Object {{1.3.0-}} | | | +DELETE Multiple Objects | | Planned for future release | +GET Object {{1.3.0+}} | | | +GET Object {{1.3.0-}} | | Range query unimplemented | +Object ACLs (GET, PUT) | | | +HEAD Object | | | +POST Object | | | +Copy Object | | Planned for future release | +Multipart Uploads {{1.3.0+}} | | UploadPartCopy unimplemented | +Multipart Uploads {{1.3.0-}} | Coming Soon | Planned for future release | + +## Service-level Operations + +* [GET Service]({{}}riak/cs/3.0.1/references/apis/storage/s3/get-service) --- Returns a list of all buckets owned by the user who sent the request + +## Bucket-level Operations + +* [GET Bucket]({{}}riak/cs/3.0.1/references/apis/storage/s3/get-bucket) --- Returns a list of the objects + within a bucket +* [GET Bucket ACL]({{}}riak/cs/3.0.1/references/apis/storage/s3/get-bucket-acl) --- Returns the [Access Control List (ACL)](http://docs.aws.amazon.com/AmazonS3/latest/dev/ACLOverview.html) associated with a bucket +* [GET Bucket policy]({{}}riak/cs/3.0.1/references/apis/storage/s3/get-bucket-policy) --- Gets the policy of a bucket +* [PUT Bucket]({{}}riak/cs/3.0.1/references/apis/storage/s3/put-bucket) --- Creates a new bucket +* [PUT Bucket ACL]({{}}riak/cs/3.0.1/references/apis/storage/s3/put-bucket-acl) --- Sets the ACL permissions + for a bucket +* [PUT Bucket policy]({{}}riak/cs/3.0.1/references/apis/storage/s3/put-bucket-policy) --- Sets the policy for a bucket +* [DELETE Bucket]({{}}riak/cs/3.0.1/references/apis/storage/s3/delete-bucket) --- Deletes a bucket +* [DELETE Bucket policy]({{}}riak/cs/3.0.1/references/apis/storage/s3/delete-bucket-policy) --- Deletes the policy of a bucket + +## Object-level Operations + +* [GET Object]({{}}riak/cs/3.0.1/references/apis/storage/s3/get-object) --- Retrieves an object +* [GET Object ACL]({{}}riak/cs/3.0.1/references/apis/storage/s3/get-object-acl) --- Returns the ACLs associated with an object +* [PUT Object]({{}}riak/cs/3.0.1/references/apis/storage/s3/put-object) --- Stores an object to a bucket +* [PUT Object (Copy)]({{}}riak/cs/3.0.1/references/apis/storage/s3/put-object-copy) --- Creates a copy of an object +* [PUT Object ACL]({{}}riak/cs/3.0.1/references/apis/storage/s3/put-object-acl) --- Sets the ACLs associated with an object +* [HEAD Object]({{}}riak/cs/3.0.1/references/apis/storage/s3/head-object) --- Retrieves object metadata (not the full content of the object) +* [DELETE Object]({{}}riak/cs/3.0.1/references/apis/storage/s3/delete-object) --- Deletes an object + +## Multipart Upload + +Multipart upload allows you to upload a single object as a set of parts. +Object parts can be uploaded independently and in any order. After all +parts are uploaded, Riak CS assembles an object out of the parts. When +your object size reaches 100MB, you should consider using multipart +uploads instead of uploading the object in a single operation. Read more +about multipart uploads on the [overview page]({{}}riak/cs/3.0.1/cookbooks/multipart-upload-overview). + +* [Initiate Multipart Upload]({{}}riak/cs/3.0.1/references/apis/storage/s3/initiate-multipart-upload) --- Initiates a multipart upload and returns an upload ID +* [Upload Part]({{}}riak/cs/3.0.1/references/apis/storage/s3/upload-part) --- Uploads a part in a multipart upload +* [Complete Multipart Upload]({{}}riak/cs/3.0.1/references/apis/storage/s3/complete-multipart-upload) --- Completes a multipart upload and assembles previously uploaded parts +* [Abort Multipart Upload]({{}}riak/cs/3.0.1/references/apis/storage/s3/abort-multipart-upload) --- Aborts a multipart upload and eventually frees storage consumed by previously uploaded parts +* [List Parts]({{}}riak/cs/3.0.1/references/apis/storage/s3/list-parts) --- Lists the parts that have been uploaded for a specific multipart upload. +* [List Multipart Uploads]({{}}riak/cs/3.0.1/references/apis/storage/s3/list-multipart-uploads) --- Lists multipart uploads that have not yet been completed or aborted. + +## Common Headers + +* [Common Riak CS Request Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-request-headers) +* [Common Riak CS Response Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-response-headers) + +There are two storage API options for Riak CS. The first and most fully +featured is the S3 API. There is also limited but improving support for +the OpenStack Object Storage API. + +Riak CS can present different APIs by using the URL-rewriting +capabilities of [Webmachine](https://github.com/basho/webmachine). +Configuring what API Riak CS uses is done by specifying the proper +*rewrite* module in the configuration file. A rewrite module contains a +set of rules for translating requests made using a particular API to +requests in the native Riak CS API. The native API was designed to +facilitate the organization and maintenance of the Riak CS Webmachine +resource modules. + +### S3 API + +* Module: `riak_cs_s3_rewrite` +* [Documentation](http://docs.aws.amazon.com/AmazonS3/latest/API/APIRest.html) +* [Mapping]({{}}riak/cs/3.0.1/references/apis/storage/s3/mapping-from-s3-api-to-riak-cs-internal-api) + +### Openstack Object Storage API (v1) + +* Module: `riak_cs_oos_rewrite` +* [Documentation](http://docs.openstack.org/api/openstack-object-storage/1.0/content/index.html) +* [Mapping]({{}}riak/cs/3.0.1/references/apis/storage/openstack/mapping-from-oos-api-to-riak-cs-internal-api) + +Selecting an API is done by adding or changing the `rewrite_module` key in the +Riak CS `riak-cs.conf` file, or the old-style `advanced.config` or `app.config` +files in the `riak_cs` section. For example, to instruct Riak CS to present the +S3 API, ensure the following is contained in your configuration file: + +```riakcsconf +rewrite_module = riak_cs_s3_rewrite +``` + +```advancedconfig + {riak_cs, [ + %% Other configs + {rewrite_module, riak_cs_s3_rewrite}, + %% Other configs + ]} +``` + +```appconfig + {riak_cs, [ + %% Other configs + {rewrite_module, riak_cs_s3_rewrite}, + %% Other configs + ]} +``` + +The S3 API is the default that is set in the configuration that is +included when installing a Riak CS package or building from source. + +More details for each option can be found by following one of the +following links: + +* [S3 API]({{}}riak/cs/3.0.1/references/apis/storage/s3/) +* [OpenStack API]({{}}riak/cs/3.0.1/references/apis/storage/openstack/) diff --git a/content/riak/cs/3.1.0/developing/apis/openstack.md b/content/riak/cs/3.1.0/developing/apis/openstack.md new file mode 100644 index 0000000000..7616a37059 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/openstack.md @@ -0,0 +1,63 @@ +--- +title_supertext: "Developing > APIs:" +title: "OpenStack Storage API" +description: "" +menu: + riak_cs-3.1.0: + name: "OpenStack API" + identifier: "develop_apis_openstack" + weight: 200 + parent: "develop_apis" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/references/apis/storage/openstack/ + - /riak/cs/3.1.0/references/apis/storage/openstack/ +--- + +The OpenStack storage API (*v1*) provides a convenient way to integrate Riak CS for use as an object storage system in conjunction with an OpenStack deployment. + +## API Feature Comparison + +The following table describes the support status for current OpenStack Object Storage API features. + +Feature | Status | Remark +--------|--------|-------- +List Containers (lists all buckets for authenticated user) | | | +Get Account Metadata | Coming Soon | Planned for future release | +Create or Update Account Metadata | Coming Soon | Planned for future release | +Delete Account Metadata | Coming Soon | Planned for future release | +List Objects | | | +Create Container | | | +Delete Container | | | +Create or Update Container Metadata | | | +Delete Container Metadata | | | +Create Static Website | | | +Get Object | | | +Create or Update Object | | | +Create Large Objects | Coming Soon | Planned for future release | +Assigning CORS Headers to Requests | Coming Soon | Planned for future release | +Enabling File Compression with the Content-Encoding Header | | | +Enabling Browser Bypass with the Content-Disposition Header | | | +Expiring Objects with the X-Delete-After and X-Delete-At Headers | | | +Object Versioning | Coming Soon | Planned for future release | +Copy Object | Coming Soon | Planned for future release | +Delete Object | | | +Get Object Metadata | Coming Soon | Planned for future release | +Update Object Metadata | Coming Soon | Planned for future release | + +## Storage Account Services + +* [List Containers]({{}}riak/cs/3.0.1/references/apis/storage/openstack/list-containers) --- Lists the containers owned by an account + +## Storage Container Services + +* [List Objects]({{}}riak/cs/3.0.1/references/apis/storage/openstack/list-objects) --- Lists the objects in a container +* [Create Container]({{}}riak/cs/3.0.1/references/apis/storage/openstack/create-container) --- Creates a new container +* [Delete Container]({{}}riak/cs/3.0.1/references/apis/storage/openstack/delete-container) --- Deletes a container + +## Storage Object Services + +* [Get Object]({{}}riak/cs/3.0.1/references/apis/storage/openstack/get-object) --- Retrieves an object +* [Create or Update Object]({{}}riak/cs/3.0.1/references/apis/storage/openstack/create-object) --- Write an object in a container +* [Delete Object]({{}}riak/cs/3.0.1/references/apis/storage/openstack/delete-object) --- Delete an object from a container diff --git a/content/riak/cs/3.1.0/developing/apis/openstack/containers.md b/content/riak/cs/3.1.0/developing/apis/openstack/containers.md new file mode 100644 index 0000000000..901da7200e --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/openstack/containers.md @@ -0,0 +1,23 @@ +--- +title_supertext: "APIs > OpenStack:" +title: "Managing Containers" +description: "Create and manage OpenStack Containers (aka Buckets)" +menu: + riak_cs-3.1.0: + name: "Containers" + identifier: "develop_apis_openstack_containers" + weight: 103 + parent: "develop_apis_openstack" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/cookbooks/Using-Riak-CS-With-Keystone/ +since: 3.1.0 +--- + +Create and manage OpenStack Containers (aka Buckets). + +- [Create a Container](./create-container) +- [Delete a Container](./delete-container) +- [List all Containers](./list-containers) +- [List Objects in a Container](./list-objects) diff --git a/content/riak/cs/3.1.0/developing/apis/openstack/containers/create-container.md b/content/riak/cs/3.1.0/developing/apis/openstack/containers/create-container.md new file mode 100644 index 0000000000..30e1353ed4 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/openstack/containers/create-container.md @@ -0,0 +1,69 @@ +--- +title_supertext: "APIs > OpenStack > Containers:" +title: "Create a Container" +description: "" +menu: + riak_cs-3.1.0: + name: "Create" + identifier: "develop_apis_openstack_containers_create" + weight: 103 + parent: "develop_apis_openstack_containers" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/references/apis/storage/openstack/RiakCS-OpenStack-Create-Container + - /riak/cs/3.1.0/references/apis/storage/openstack/RiakCS-OpenStack-Create-Container + - /riakcs/3.1.0/references/apis/storage/openstack/create-container + - /riak/cs/3.1.0/references/apis/storage/openstack/create-container +--- + +Creates a new container. The account of the user who makes the request to create the container becomes the container owner. Anonymous requests cannot create containers. + +## Container Naming + +A container name must obey the following rules, which produces a DNS-compliant container name: + +* Must be from 3 to 63 characters. +* Must be one or more labels, each separated by a period (`.`). Each label: +* Must start with a lowercase letter or a number. Must end with a lowercase letter or a number. Can contain lowercase letters, numbers and dashes. +* Must not be formatted as an IP address (e.g., `192.168.9.2`). + +## Requests + +### Request Syntax + +```http +PUT /// HTTP/1.1 +Host: data.basho.com +X-Auth-Token: auth_token +``` + +### Request Parameters + +This operation does not use request parameters. + +## Responses + +This operation does not return a response. + +## Examples + +### Sample Request + +A request that creates a container named `basho-docs`. + +```http +PUT /v1.0/deadbeef/basho-docs HTTP/1.1 +Host: data.basho.com +Date: Wed, 06 Jun 2012 20:47:15 +0000 +X-Auth-Token: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa +``` + +### Sample Response + +```http +HTTP/1.1 201 Created +Date: Thu, 07 Jun 2007 18:50:19 GMT +Server: RiakCS +Content-Type: text/plain; charset=UTF-8 +``` diff --git a/content/riak/cs/3.1.0/developing/apis/openstack/containers/delete-container.md b/content/riak/cs/3.1.0/developing/apis/openstack/containers/delete-container.md new file mode 100644 index 0000000000..109b6294fd --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/openstack/containers/delete-container.md @@ -0,0 +1,63 @@ +--- +title_supertext: "APIs > OpenStack > Containers:" +title: "Delete a Container" +description: "" +menu: + riak_cs-3.1.0: + name: "Delete" + identifier: "develop_apis_openstack_containers_delete" + weight: 103 + parent: "develop_apis_openstack_containers" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/references/apis/storage/openstack/RiakCS-OpenStack-Delete-Container + - /riak/cs/3.1.0/references/apis/storage/openstack/RiakCS-OpenStack-Delete-Container + - /riakcs/3.1.0/references/apis/storage/openstack/delete-container + - /riak/cs/3.1.0/references/apis/storage/openstack/delete-container +--- + +Deletes a container. + +{{% note title="Note" %}} +All objects in the container must be deleted before you can delete the +container. +{{% /note %}} + +## Requests + +### Request Syntax + +```http +DELETE /// HTTP/1.1 +Host: data.basho.com +X-Auth-Token: auth_token +``` + +## Responses + +This operation does not return a response. + +## Examples + +### Sample Request + +A request that deletes a container named `basho-docs`. + +```http +DELETE /v1.0/deadbeef/basho-docs HTTP/1.1 +Host: data.basho.com +Date: Wed, 06 Jun 2012 20:47:15 +0000 +X-Auth-Token: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa +``` + +### Sample Response + +```http +HTTP/1.1 204 No Content +Date: Wed, 06 Jun 2012 20:47:15 +0000 +Connection: close +Server: RiakCS +Content-Length: 0 +Content-Type: text/plain; charset=UTF-8 +``` diff --git a/content/riak/cs/3.1.0/developing/apis/openstack/containers/list-containers.md b/content/riak/cs/3.1.0/developing/apis/openstack/containers/list-containers.md new file mode 100644 index 0000000000..927dff8393 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/openstack/containers/list-containers.md @@ -0,0 +1,61 @@ +--- +title_supertext: "APIs > OpenStack > Containers:" +title: "List Containers" +description: "" +menu: + riak_cs-3.1.0: + name: "List" + identifier: "develop_apis_openstack_containers_list" + weight: 103 + parent: "develop_apis_openstack_containers" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/references/apis/storage/openstack/RiakCS-OpenStack-List-Containers + - /riak/cs/3.1.0/references/apis/storage/openstack/RiakCS-OpenStack-List-Containers + - /riakcs/3.1.0/references/apis/storage/openstack/list-containers + - /riak/cs/3.1.0/references/apis/storage/openstack/list-containers +--- + +Returns a list of all containers owned by an *authenticated* account. + +**Note**: This operation does not list containers created by other accounts. It also does not list containers for anonymous requests. + +## Requests + +### Request Syntax + +```http +GET // HTTP/1.1 +Host: data.basho.com +X-Auth-Token: auth_token +``` + +## Responses + +A list of containers is returned in the response body, one container per line. The HTTP response's status code will be `2xx` (between `200` and `299`, inclusive). + +## Examples + +### Sample Request + +```http +GET /v1.0/deadbeef HTTP/1.1 +Host: data.basho.com +X-Auth-Token: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa +``` + +### Sample Response + +```http +HTTP/1.1 200 Ok +Date: Thu, 07 Jun 2010 18:57:07 GMT +Server: RiakCS +Content-Type: text/plain; charset=UTF-8 +Content-Length: 32 + + images + movies + documents + backups +``` diff --git a/content/riak/cs/3.1.0/developing/apis/openstack/containers/list-objects.md b/content/riak/cs/3.1.0/developing/apis/openstack/containers/list-objects.md new file mode 100644 index 0000000000..ebb43c9db7 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/openstack/containers/list-objects.md @@ -0,0 +1,63 @@ +--- +title_supertext: "APIs > OpenStack > Containers:" +title: "List Objects in a Container" +description: "" +menu: + riak_cs-3.1.0: + name: "List Objects" + identifier: "develop_apis_openstack_containers_list_objects" + weight: 103 + parent: "develop_apis_openstack_containers" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/references/apis/storage/openstack/RiakCS-OpenStack-List-Objects + - /riak/cs/3.1.0/references/apis/storage/openstack/RiakCS-OpenStack-List-Objects + - /riakcs/3.1.0/references/apis/storage/openstack/list-objects + - /riak/cs/3.1.0/references/apis/storage/openstack/list-objects +--- + +Returns a list of objects (all or up to 1,000) in a container. + +## Requests + +### Request Syntax + +```http +GET /// HTTP/1.1 +Host: data.basho.com +X-Auth-Token: auth_token +``` + +## Responses + +A list of objects is returned in the response body, one object name +per line. The response will be a `200 OK` if the request succeeded. If +the container does not exist, or if an incorrect account is specified, +then a response with a `404` (Not Found) status code will be returned. + +## Examples + +### Sample Request + +A request that returns the objects in the container named `basho-docs`. + +```http +GET /v1.0/deadbeef/basho-docs HTTP/1.1 +Host: data.basho.com +Date: Wed, 06 Jun 2012 20:47:15 +0000 +X-Auth-Token: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa +``` + +### Sample Response + +```http +HTTP/1.1 200 Ok +Date: Thu, 07 Jun 2010 18:50:19 GMT +Server: RiakCS +Content-Type: text/plain; charset=UTF-8 +Content-Length: 28 + + scheduleQ1.jpg + scheduleQ2.jpg +``` diff --git a/content/riak/cs/3.1.0/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md b/content/riak/cs/3.1.0/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md new file mode 100644 index 0000000000..2790507d05 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md @@ -0,0 +1,57 @@ +--- +title_supertext: "APIs > OpenStack:" +title: "Mapping From OOS API to Riak CS internal API" +description: "" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/references/apis/storage/openstack/Mapping-From-OOS-API-to-Riak-CS-internal-API + - /riak/cs/3.1.0/references/apis/storage/openstack/Mapping-From-OOS-API-to-Riak-CS-internal-API + - /riakcs/3.1.0/references/apis/storage/openstack/mapping-from-oos-api-to-riak-cs-internal-api + - /riak/cs/3.1.0/references/apis/storage/openstack/mapping-from-oos-api-to-riak-cs-internal-api +--- + +## Overview + +This document outlines a mapping of the OpenStack Object Storage (OOS) API (version 1.0) URLs to their rewritten format that is processed by Webmachine and Riak CS. + +## URL Mapping + +### Storage Account Services + +* List Containers + * `GET //` -> `GET /buckets` +* Retrieve account metadata + * **TBD** +* Create/Update account metadata + * **TBD** +* Delete account metadata + * **TBD** + +### Storage Container Services + +* List Objects + * `GET ///` -> `GET /buckets//objects` +* Create Container + * `PUT ///` -> `PUT /buckets/` +* Delete Container + * `DELETE ///` -> `DELETE /buckets/` +* Retrieve Container Metadata + * **TBD** +* Create/Update Container Metadata + * **TBD** +* Delete Container Metadata + * **TBD** + +### Storage Object Services + +* Retrieve Object + * `GET ////` -> `GET /buckets//objects/` +* Create/Update Object + * `PUT ////` -> `PUT /buckets//objects/` +* Delete Object + * `DELETE ////` -> `DELETE /buckets//objects/` +* Retrieve Object Metadata + * **TBD** +* Update Object Metadata + * **TBD** diff --git a/content/riak/cs/3.1.0/developing/apis/openstack/objects.md b/content/riak/cs/3.1.0/developing/apis/openstack/objects.md new file mode 100644 index 0000000000..cde52a1ab2 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/openstack/objects.md @@ -0,0 +1,22 @@ +--- +title_supertext: "APIs > OpenStack:" +title: "Managing Objects" +description: "Create and manage OpenStack Objects" +menu: + riak_cs-3.1.0: + name: "Objects" + identifier: "develop_apis_openstack_objects" + weight: 103 + parent: "develop_apis_openstack" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/cookbooks/Using-Riak-CS-With-Keystone/ +since: 3.1.0 +--- + +Create and manage OpenStack Objects. + +- [Create or Update an Object](./create-object) +- [Get an Object](./get-object) +- [Delete an Object](./delete-object) diff --git a/content/riak/cs/3.1.0/developing/apis/openstack/objects/create-object.md b/content/riak/cs/3.1.0/developing/apis/openstack/objects/create-object.md new file mode 100644 index 0000000000..1190672b5f --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/openstack/objects/create-object.md @@ -0,0 +1,68 @@ +--- +title_supertext: "APIs > OpenStack > Objects:" +title: "Create an Object" +description: "" +menu: + riak_cs-3.1.0: + name: "Create" + identifier: "develop_apis_openstack_objects_create" + weight: 103 + parent: "develop_apis_openstack_objects" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/references/apis/storage/openstack/RiakCS-OpenStack-Create-Object + - /riak/cs/3.1.0/references/apis/storage/openstack/RiakCS-OpenStack-Create-Object + - /riakcs/3.1.0/references/apis/storage/openstack/create-object + - /riak/cs/3.1.0/references/apis/storage/openstack/create-object +--- + +Writes or overwrites an object's content and metadata. + +Riak CS is a distributed system. If it receives multiple write requests for the same object at the same time, the system will overwrite all but the last object written. If necessary, you can build versioning or object locking into your application. + +To prevent the storage of data corrupted during transmission over a network, the Content-MD5 header instructs Riak CS to compare the object to the MD5 value provided. If the values don't match, the operation returns an error. In addition, if the PUT Object operation calculates the MD5, you can compare the ETag that is returned to the calculated MD5 value. + +**Note**: You can configure an application to use the `100-continue` HTTP status code, which sends the Request Headers prior to sending the request body. Doing so prevents sending the message body when the message is rejected based on the headers, for example, due to authentication failure or redirect. + +## Requests + +### Request Syntax + +```http +PUT //// HTTP/1.1 +Host: data.basho.com +X-Auth-Token: auth_token +``` + +## Responses + +This operation does not return a response. + +## Examples + +### Sample Request + +A request that stores the object `basho-process.jpg` in the container `basho-docs`. + +```http +PUT /v1.0/deadbeef/basho-docs/basho-process.jpg HTTP/1.1 +Host: data.basho.com +Date: Fri, 01 Jun 2012 12:00:00 GMT +X-Auth-Token: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa +Content-Type: text/plain +Content-Length: 201445 +Expect: 100-continue +[201445 bytes of object data] +``` + +### Sample Response + +```http +HTTP/1.1 201 Created +Date: Fri, 01 Jun 2012 12:00:00 GMT +ETag: "32cf731c97645a398434535f271b2358" +Content-Length: 0 +Connection: close +Server: RiakCS +``` diff --git a/content/riak/cs/3.1.0/developing/apis/openstack/objects/delete-object.md b/content/riak/cs/3.1.0/developing/apis/openstack/objects/delete-object.md new file mode 100644 index 0000000000..2c3f5361d1 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/openstack/objects/delete-object.md @@ -0,0 +1,56 @@ +--- +title_supertext: "APIs > OpenStack > Objects:" +title: "Delete an Object" +description: "" +menu: + riak_cs-3.1.0: + name: "Delete" + identifier: "develop_apis_openstack_objects_delete" + weight: 103 + parent: "develop_apis_openstack_objects" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/references/apis/storage/openstack/RiakCS-OpenStack-Delete-Object + - /riak/cs/3.1.0/references/apis/storage/openstack/RiakCS-OpenStack-Delete-Object + - /riakcs/3.1.0/references/apis/storage/openstack/delete-object + - /riak/cs/3.1.0/references/apis/storage/openstack/delete-object +--- + +Removes the specified object, if it exists. + +## Requests + +### Request Syntax + +```http +DELETE //// HTTP/1.1 +Host: data.basho.com +X-Auth-Token: auth_token +``` + +## Responses + +This operation does not return a response. + +## Examples + +### Sample Request + +The following request deletes the object `basho-process.jpg` from the container `basho-docs`. + +```http +DELETE /v1.0/deadbeef/basho-docs/basho-process.jpg HTTP/1.1 +Host: data.basho.com +Date: Fri, 01 Jun 2012 12:00:00 GMT +X-Auth-Token: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa +``` + +### Sample Response + +```http +HTTP/1.1 204 No Content +Date: Wed, 06 Jun 2012 20:47:15 GMT +Connection: close +Server: RiakCS +``` diff --git a/content/riak/cs/3.1.0/developing/apis/openstack/objects/get-object.md b/content/riak/cs/3.1.0/developing/apis/openstack/objects/get-object.md new file mode 100644 index 0000000000..6e9563d2dd --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/openstack/objects/get-object.md @@ -0,0 +1,57 @@ +--- +title_supertext: "APIs > OpenStack > Objects:" +title: "Get an Object" +description: "" +menu: + riak_cs-3.1.0: + name: "Get" + identifier: "develop_apis_openstack_objects_get" + weight: 103 + parent: "develop_apis_openstack_objects" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/references/apis/storage/openstack/RiakCS-OpenStack-Get-Object + - /riak/cs/3.1.0/references/apis/storage/openstack/RiakCS-OpenStack-Get-Object + - /riakcs/3.1.0/references/apis/storage/openstack/get-object + - /riak/cs/3.1.0/references/apis/storage/openstack/get-object +--- + +Retrieves an object from a Riak CS container. + +## Requests + +### Request Syntax + +```http +GET //// HTTP/1.1 +Host: data.basho.com +X-Auth-Token: auth_token +``` + +## Examples + +### Sample Request + +The following request returns the object `basho-process.jpg` from the container `basho-docs`. + +```http +GET /v1.0/deadbeef/basho-docs/basho-process.jpg HTTP/1.1 +Host: data.basho.com +Date: Fri, 01 Jun 2012 12:00:00 GMT +X-Auth-Token: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa +``` + +### Sample Response + +```http +HTTP/1.1 200 OK +Date: Wed, 06 Jun 2012 20:48:15 GMT +Last-Modified: Wed, 06 Jun 2012 13:39:25 GMT +ETag: "32cf731c97645a398434535f271b2358" +Content-Length: 201445 +Content-Type: text/plain +Connection: close +Server: RiakCS +[201445 bytes of object data] +``` diff --git a/content/riak/cs/3.1.0/developing/apis/openstack/using-with-keystone.md b/content/riak/cs/3.1.0/developing/apis/openstack/using-with-keystone.md new file mode 100644 index 0000000000..331d9ff674 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/openstack/using-with-keystone.md @@ -0,0 +1,518 @@ +--- +title_supertext: "APIs > OpenStack:" +title: "Using With Keystone" +description: "Configure Riak CS to work with OpenStack Keystone" +menu: + riak_cs-3.1.0: + name: "Using Riak CS With Keystone" + identifier: "develop_apis_openstack_keystone" + weight: 103 + parent: "develop_apis_openstack" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/Using-Riak-CS-With-Keystone/ + - /riakcs/3.1.0/cookbooks/Using-Riak-CS-With-Keystone/ + - /riak/cs/3.1.0/cookbooks/using-with-keystone/ + - /riakcs/3.1.0/cookbooks/using-with-keystone/ +--- + +This document shows you how to configure Riak CS to work with the +[OpenStack Keystone](http://docs.openstack.org/developer/keystone/) +authentication service. + +Riak CS can be configured to use either the OpenStack Object Storage API +or the S3 API in conjunction with Keystone for authentication. + +## Terminology + +In a system that uses Keystone for authentication, there are three main +entity types to be aware of: `tenants`, `users`, and `roles`. + +* `tenant` --- A tenant is a collection entity that can contain a number + of users +* `user` --- A user represents an individual that uses the OpenStack + system +* `role` --- A role is used to define a link between a user and a tenant + and to indicate permissions of the user within that tenant + +The OpenStack `tenant_id` maps to a `key_id` to identify a user account +in Riak CS. In OpenStack, only users who are assigned an `operator` role +for a tenant may perform operations. Other users that belong to a tenant +may be granted access using ACLs. + +Currently, Riak CS does not support OpenStack ACLs and only permits +access to tenant operators. ACLs will be supported at a later date. + +By default, Riak CS recognizes `admin` and `swiftoperator` as valid +operator roles, but that list can be configured. + +Riak CS does not currently support the use of multiple authentication +servers via *reseller prefixes*, but if this turns out to be important +based on user feedback, support may be added in the future. + +## Configuration + +#### API + +Set the API using the `rewrite_module` configuration in the Riak CS +`riak-cs.conf` file, or the old-style `app.config` file in the `riak_cs` +section. + +To use the S3 API, insert the following: + +```riakcsconf +rewrite_module = riak_cs_s3_rewrite +``` + +```appconfig +{riak_cs, [ + %% Other configs + {rewrite_module, riak_cs_s3_rewrite}, + %% Other configs + ]} +``` + +To use the OpenStack object storage API: + +```riakcsconf +rewrite_module = riak_cs_oos_rewrite +``` + +```appconfig +{riak_cs, [ + %% Other configs + {rewrite_module, riak_cs_oos_rewrite}, + %% Other configs + ]} +``` + +#### Authentication Module + +Set the authentication module using the `auth_module` configuration in the Riak +CS `riak-cs.conf` file, or the old-style `app.config` file in the `riak_cs` +section. + +To specify the Keystone authentication module: + +```riakcsconf +auth_module = riak_cs_keystone_auth +``` + +```appconfig +{riak_cs, [ + %% Other configs + {auth_module, riak_cs_keystone_auth}, + %% Other configs + ]} +``` + +#### Operator Roles + +You may optionally override the default list of valid operator roles in the +`advanced.config` file, or the`app.config` file. The default roles are `admin` +and `swiftoperator`, but others may be used: + +```advancedconfig + {riak_cs, [ + %% Other configs + {os_operator_roles, [<<"admin">>, <<"swiftoperator">>, <<"cinnamon">>]}, + %% Other configs + ]} +``` + +```appconfig + {riak_cs, [ + %% Other configs + {os_operator_roles, [<<"admin">>, <<"swiftoperator">>, <<"cinnamon">>]}, + %% Other configs + ]} +``` + +**Note**: Each role should be formatted as shown above, with two angle +brackets preceding and following each role value. + +#### Root Host + +Make sure that the value of the `root_host` key in the Riak CS `riak-cs.conf` +file, or the `cs_root_host` key in the old-style `advanced.config` or +`app.config` files matches the root host used for the object store in the +Keystone configuration. + +For example, given the following config snippet from a Keystone configuration +file, the value for `root_host` (or `cs_root_host`) should be set to +`object.store.host`: + +```config +catalog.RegionOne.object_store.publicURL = http://object.store.host/v1/AUTH_$(tenant_id)s +catalog.RegionOne.object_store.adminURL = http://object.store.host/ +catalog.RegionOne.object_store.internalURL = http://object.store.host/v1/AUTH_$(tenant_id)s +``` + +The entry in the Riak CS configuration file would be as follows: + +```riakcsconf +root_host = object.store.host +``` + +```advancedconfig + {riak_cs, [ + %% Other configs + {cs_root_host, "object.store.host"}, + %% Other configs + ]} +``` + +```appconfig + {riak_cs, [ + %% Other configs + {cs_root_host, "object.store.host"}, + %% Other configs + ]} +``` + +#### Admin Token + +Riak CS needs to know the administration token so that it can successfully +validate user tokens with Keystone. If no value for `os_admin_token` is +specified, the default value is `ADMIN`. The value can be set by adding the +following to the `riak_cs` section of the Riak CS `advanced.config` or +`app.config` files: + +```advancedconfig + {riak_cs, [ + %% Other configs + {os_admin_token, "SNARFSNARFSNARF"}, + %% Other configs + ]} +``` + +```appconfig + {riak_cs, [ + %% Other configs + {os_admin_token, "SNARFSNARFSNARF"}, + %% Other configs + ]} +``` + +#### Auth URL + +Riak CS also needs to know the authentication URL to use to communicate with +Keystone. The default value is `"http://localhost:5000/v2.0"`. To override this +value add the following to the `riak_cs` section of the Riak CS +`advanced.config` or `app.config` files: + +```advancedconfig + {riak_cs, [ + %% Other configs + {os_auth_url, "http://host.with.the.most.com:5000/v2.0"}, + %% Other configs + ]} +``` + +```appconfig + {riak_cs, [ + %% Other configs + {os_auth_url, "http://host.with.the.most.com:5000/v2.0"}, + %% Other configs + ]} +``` + +#### Keystone Resources + +Riak CS needs to be be aware of a few resources to be able to perform +authentication with Keystone. These resources are unlikely to need to be +changed from their defaults, but that capability is provided in case the +need arises. + +* Token Resources + +The default is `"tokens/"`. To override this, add the following to the `riak_cs` +section of the Riak CS `advanced.config` or `app.config` files: + +```advancedconfig + {riak_cs, [ + %% Other configs + {os_tokens_resource, "mytokens/"}, + %% Other configs + ]} +``` + +```appconfig + {riak_cs, [ + %% Other configs + {os_tokens_resource, "mytokens/"}, + %% Other configs + ]} +``` + +* S3 Token Resources + +This resource is only used when the S3 API is used in conjunction with Keystone +authentication. The default is `"s3tokens/"`. To override this, add the +following to the `riak_cs` section of the Riak CS `advanced.config` or +`app.config` files: + +```advancedconfig + {riak_cs, [ + %% Other configs + {os_s3_tokens_resource, "mys3tokens/"}, + %% Other configs + ]} +``` + +```appconfig + {riak_cs, [ + %% Other configs + {os_s3_tokens_resource, "mys3tokens/"}, + %% Other configs + ]} +``` + +* User Resources + +The default is `"users/"`. To override this, add the following to the `riak_cs` +section of the Riak CS `advanced.config` or `app.config` files: + +```advancedconfig + {riak_cs, [ + %% Other configs + {os_users_resource, "users/"}, + %% Other configs + ]} +``` + +```appconfig + {riak_cs, [ + %% Other configs + {os_users_resource, "users/"}, + %% Other configs + ]} +``` + +## Testing + +### Keystone Setup + +Follow the procedures documented in [Keystone Setup]({{}}riak/cs/3.0.1/cookbooks/keystone-setup) to set up and run +Keystone. + +1. Create a tenant called `test`: + + ```bash + keystone tenant-create --name test + ``` + +1. Using the tenant id of the tenant created in the previous step and + create a user called `test` that is a member of tenant `test`: + + ```bash + keystone user-create --name test / + --pass test --email test@test.com / + --tenant-id --enabled true + ``` + +1. Create a role called `swiftoperator`: + + ```bash + keystone role-create --name swiftoperator + ``` + +1. Add the `swiftoperator` role for user `test`: + + ```bash + keystone user-role-add --user-id / + --role-id --tenant-id + ``` + +1. Create ec2 credentials for the user `test`: + + ```bash + keystone ec2-credentials-create --user_id / + --tenant_id + ``` + +### Testing Openstack API and Keystone authentication + +1. Start Riak, Riak CS, and Stanchion. Make sure that the values for the + `rewrite_module` and `auth_module` keys in the Riak CS `riak-cs.conf` file, + or the old-style `advanced.config` or `app.config` file in the `riak_cs` + section, are set as follows: + + ```riakcsconf + rewrite_module = riak_cs_oos_rewrite + auth_module = riak_cs_keystone_auth + ``` + + ```advancedconfig + {riak_cs, [ + %% Other configs + {rewrite_module, riak_cs_oos_rewrite}, + {auth_module, riak_cs_keystone_auth}, + %% Other configs + ]} + ``` + + ```appconfig + {riak_cs, [ + %% Other configs + {rewrite_module, riak_cs_oos_rewrite}, + {auth_module, riak_cs_keystone_auth}, + %% Other configs + ]} + ``` + +1. Get an auth token for the `test` user to use in requests to Riak CS: + + ```curl + curl -s -d '{"auth": {"tenantName": "test", "passwordCredentials": {"username": "test", "password": "test"}}}' / + -H 'Content-type: application/json' / + http://localhost:5000/v2.0/tokens | python -mjson.tool + ``` + + The value of the `id` field of the `token` object in the response is + used as the value for the `X-Auth-Token` header in all subsequent + requests to Riak CS. The `publicURL` for the `object-store` service + listed in the `serviceCatalog` of the response is the base URL used + for all API requests to Riak CS. + + Now export the token and public URL, like this: + + ```bash + export ID=20f1a9e46ebd42a3bdd03e009722eeb8 + export URL=http://localhost:8080/v1/AUTH_8d84a17ac99d49fcb6f35c767dd562db + ``` + +1. Create a bucket (S3 bucket == OpenStack container) + + ```curl + curl -X PUT / + -H 'X-Auth-Token: $ID' / + $URL/bucket1 + ``` + +1. List the buckets + + ```curl + curl -H 'X-Auth-Token: $ID' / + $URL + ``` + +1. Put an object into the bucket + + ```curl + curl -X PUT / + -H 'X-Auth-Token: $ID' / + --data 'abcdefghi123456789' / + $URL/bucket1/object1 + ``` + +1. List the objects in the bucket + + ```curl + curl -H 'X-Auth-Token: $ID' / + $URL/bucket1 + ``` + +1. Fetch the object from the bucket + + ```curl + curl -H 'X-Auth-Token: $ID' / + $URL/bucket1/object1 + ``` + +1. Delete the object + + ```curl + curl -X DELETE / + -H 'X-Auth-Token: $ID' / + $URL/bucket1/object1 + ``` + +1. Delete the bucket + + ```curl + curl -X DELETE / + -H 'X-Auth-Token: $ID' / + $URL/bucket1 + ``` + +### Testing S3 API and Keystone Authentication + +1. If Riak and Stanchion are not already running, start them now. + +1. Edit the Riak CS `riak-cs.conf`, or the old-style `advanced.config` or + `app.config` file and restart Riak CS. The values for `rewrite_module` and + `auth_module` should be set as follows: + + ```riakcsconf + rewrite_module = riak_cs_s3_rewrite + auth_module = riak_cs_keystone_auth + ``` + + ```advancedconfig + {riak_cs, [ + %% Other configs + {rewrite_module, riak_cs_s3_rewrite}, + {auth_module, riak_cs_keystone_auth}, + %% Other configs + ]} + ``` + + ```appconfig + {riak_cs, [ + %% Other configs + {rewrite_module, riak_cs_s3_rewrite}, + {auth_module, riak_cs_keystone_auth}, + %% Other configs + ]} + ``` + +1. Use the values of `access` and `secret` from the EC2 credentials + created for the `test` user as the `key_id` and `key_secret` for + signing requests. For example, if you are using `s3cmd`, use these + credentials for the `access_key` and `secret_key` fields of the + `.s3cfg` file. The subsequent examples are done using `s3cmd` since + it is a fairly common tool. + +1. Create a sample file to upload + + ```bash + echo "ilovechickenilovelivermeowmixmeowmixwilldeliver" > upload.txt + ``` + +1. Create a bucket (i.e. container) + + ```bash + s3cmd mb s3://bucket2 + ``` + +1. List the buckets + + ```bash + s3cmd ls + ``` + +1. Put an object into the bucket + + ```bash + s3cmd put upload.txt s3://bucket2 + ``` + +1. Fetch the object from the bucket + + ```bash + ss3cmd get s3://bucket2/upload.txt download.txt + ``` + +1. Delete the object + + ```bash + s3cmd del s3://bucket2/upload.txt + ``` + +1. Delete the bucket + + ```bash + s3cmd rb s3://bucket2 + ``` diff --git a/content/riak/cs/3.1.0/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md b/content/riak/cs/3.1.0/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md new file mode 100644 index 0000000000..d655fecc74 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md @@ -0,0 +1,260 @@ +--- +title_supertext: "APIs > OpenStack > KeyStone:" +title: "Example Keystone Configuration" +description: "" +menu: + riak_cs-3.1.0: + name: "Config Sample" + identifier: "develop_apis_openstack_keystone_config_sample" + weight: 103 + parent: "develop_apis_openstack_keystone" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/Keystone-Conf-Sample/ + - /riakcs/3.1.0/cookbooks/Keystone-Conf-Sample/ + - /riak/cs/3.1.0/cookbooks/keystone-conf-sample/ + - /riakcs/3.1.0/cookbooks/keystone-conf-sample/ +--- + +The following displays the contents of a sample `keystone.conf` file +that can be used to test Riak CS with the Keystone authentication +service on a `localhost` setup. + +```config +[DEFAULT] +# A "shared secret" between keystone and other openstack services +admin_token = ADMIN + +# The IP address of the network interface to listen on +bind_host = 127.0.0.1 + +# The port number which the public service listens on +public_port = 5000 + +# The port number which the public admin listens on +admin_port = 35357 + +# The port number which the OpenStack Compute service listens on +# compute_port = 8774 + +# Path to your policy definition containing identity actions +# TODO(dolph): This config method will probably be deprecated during grizzly +# policy_file = policy.json + +# Rule to check if no matching policy definition is found +# FIXME(dolph): This should really be defined as [policy] default_rule +# policy_default_rule = admin_required + +# === Logging Options === +# Print debugging output +verbose = True + +# Print more verbose output +# (includes plaintext request logging, potentially including passwords) +debug = True + +# Name of log file to output to. If not set, logging will go to stdout. +log_file = keystone.log + +# The directory to keep log files in (will be prepended to --logfile) +log_dir = log/keystone + +# Use syslog for logging. +use_syslog = False + +# syslog facility to receive log lines +# syslog_log_facility = LOG_USER + +# If this option is specified, the logging configuration file specified is +# used and overrides any other logging options specified. Please see the +# Python logging module documentation for details on logging configuration +# files. +#log_config = logging.conf + +# A logging.Formatter log message format string which may use any of the +# available logging.LogRecord attributes. +# log_format = %(asctime)s %(levelname)8s [%(name)s] %(message)s + +# Format string for %(asctime)s in log records. +# log_date_format = %Y-%m-%d %H:%M:%S + +# onready allows you to send a notification when the process is ready to serve +# For example, to have it notify using systemd, one could set shell command: +# onready = systemd-notify --ready +# or a module with notify() method: +# onready = keystone.common.syst/ + +[sql] +# The SQLAlchemy connection string used to connect to the database +connection = sqlite:///keystone.db + +# the timeout before idle sql connections are reaped +idle_timeout = 200 + +[identity] +driver = keystone.identity.backends.sql.Identity + +[catalog] +# dynamic, sql-based backend (supports API/CLI-based management commands) +#driver = keystone.catalog.backends.sql.Catalog + +# static, file-based backend (does *NOT* support any management commands) +driver = keystone.catalog.backends.templated.TemplatedCatalog + +template_file = ./etc/default_catalog.templates + +[token] +# driver = keystone.token.backends.kvs.Token + +# Amount of time a token should remain valid (in seconds) +# expiration = 86400 + +[policy] +driver = keystone.policy.backends.sql.Policy + +[ec2] +# driver = keystone.contrib.ec2.backends.kvs.Ec2 + +[ssl] +#enable = True +#certfile = /etc/keystone/ssl/certs/keystone.pem +#keyfile = /etc/keystone/ssl/private/keystonekey.pem +#ca_certs = /etc/keystone/ssl/certs/ca.pem +#cert_required = True + +[signing] +token_format = UUID +#certfile = /etc/keystone/ssl/certs/signing_cert.pem +#keyfile = /etc/keystone/ssl/private/signing_key.pem +#ca_certs = /etc/keystone/ssl/certs/ca.pem +#key_size = 1024 +#valid_days = 3650 +#ca_password = None + +[ldap] +# url = ldap://localhost +# user = dc=Manager,dc=example,dc=com +# password = None +# suffix = cn=example,cn=com +# use_dumb_member = False +# allow_subtree_delete = False +# dumb_member = cn=dumb,dc=example,dc=com + +# user_tree_dn = ou=Users,dc=example,dc=com +# user_filter = +# user_objectclass = inetOrgPerson +# user_id_attribute = cn +# user_name_attribute = sn +# user_mail_attribute = email +# user_pass_attribute = userPassword +# user_enabled_attribute = enabled +# user_enabled_mask = 0 +# user_enabled_default = True +# user_attribute_ignore = tenant_id,tenants +# user_allow_create = True +# user_allow_update = True +# user_allow_delete = True + +# tenant_tree_dn = ou=Groups,dc=example,dc=com +# tenant_filter = +# tenant_objectclass = groupOfNames +# tenant_id_attribute = cn +# tenant_member_attribute = member +# tenant_name_attribute = ou +# tenant_desc_attribute = desc +# tenant_enabled_attribute = enabled +# tenant_attribute_ignore = +# tenant_allow_create = True +# tenant_allow_update = True +# tenant_allow_delete = True + +# role_tree_dn = ou=Roles,dc=example,dc=com +# role_filter = +# role_objectclass = organizationalRole +# role_id_attribute = cn +# role_name_attribute = ou +# role_member_attribute = roleOccupant +# role_attribute_ignore = +# role_allow_create = True +# role_allow_update = True +# role_allow_delete = True + +[filter:debug] +paste.filter_factory = keystone.common.wsgi:Debug.factory + +[filter:token_auth] +paste.filter_factory = keystone.middleware:TokenAuthMiddleware.factory + +[filter:admin_token_auth] +paste.filter_factory = keystone.middleware:AdminTokenAuthMiddleware.factory + +[filter:xml_body] +paste.filter_factory = keystone.middleware:XmlBodyMiddleware.factory + +[filter:json_body] +paste.filter_factory = keystone.middleware:JsonBodyMiddleware.factory + +[filter:user_crud_extension] +paste.filter_factory = keystone.contrib.user_crud:CrudExtension.factory + +[filter:crud_extension] +paste.filter_factory = keystone.contrib.admin_crud:CrudExtension.factory + +[filter:ec2_extension] +paste.filter_factory = keystone.contrib.ec2:Ec2Extension.factory + +[filter:s3_extension] +paste.filter_factory = keystone.contrib.s3:S3Extension.factory + +[filter:url_normalize] +paste.filter_factory = keystone.middleware:NormalizingFilter.factory + +[filter:stats_monitoring] +paste.filter_factory = keystone.contrib.stats:StatsMiddleware.factory + +[filter:stats_reporting] +paste.filter_factory = keystone.contrib.stats:StatsExtension.factory + +[app:public_service] +paste.app_factory = keystone.service:public_app_factory + +[app:service_v3] +paste.app_factory = keystone.service:v3_app_factory + +[app:admin_service] +paste.app_factory = keystone.service:admin_app_factory + +[pipeline:public_api] +pipeline = stats_monitoring url_normalize token_auth admin_token_auth xml_body json_body debug ec2_extension user_crud_extension public_service + +[pipeline:admin_api] +pipeline = stats_monitoring url_normalize token_auth admin_token_auth xml_body json_body debug stats_reporting ec2_extension s3_extension crud_extension admin_service + +[pipeline:api_v3] +pipeline = stats_monitoring url_normalize token_auth admin_token_auth xml_body json_body debug stats_reporting ec2_extension s3_extension service_v3 + +[app:public_version_service] +paste.app_factory = keystone.service:public_version_app_factory + +[app:admin_version_service] +paste.app_factory = keystone.service:admin_version_app_factory + +[pipeline:public_version_api] +pipeline = stats_monitoring url_normalize xml_body public_version_service + +[pipeline:admin_version_api] +pipeline = stats_monitoring url_normalize xml_body admin_version_service + +[composite:main] +use = egg:Paste#urlmap +/v2.0 = public_api +/v3 = api_v3 +/ = public_version_api + +[composite:admin] +use = egg:Paste#urlmap +/v2.0 = admin_api +/v3 = api_v3 +/ = admin_version_api +``` diff --git a/content/riak/cs/3.1.0/developing/apis/openstack/using-with-keystone/keystone-setup.md b/content/riak/cs/3.1.0/developing/apis/openstack/using-with-keystone/keystone-setup.md new file mode 100644 index 0000000000..792da13d3f --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/openstack/using-with-keystone/keystone-setup.md @@ -0,0 +1,143 @@ +--- +title_supertext: "APIs > OpenStack > KeyStone:" +title: "Keystone Setup Test Environment" +description: "" +menu: + riak_cs-3.1.0: + name: "Setup" + identifier: "develop_apis_openstack_keystone_setup" + weight: 103 + parent: "develop_apis_openstack_keystone" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/Keystone-Setup/ + - /riakcs/3.1.0/cookbooks/Keystone-Setup/ + - /riak/cs/3.1.0/cookbooks/keystone-setup/ + - /riakcs/3.1.0/cookbooks/keystone-setup/ +--- + +Keystone is a Python application that requires a number of dependencies +to be installed. This document covers how to use Python, +[pip](https://github.com/basho/stanchion), and +[virtualenv](https://github.com/basho/stanchion) to set up an isolated +test environment for running and testing Keystone. + +## Prerequisites + +1. Make sure Python is installed. +1. Install pip, the Python package tool. Installation instructions can + be found [here](http://guide.python-distribute.org/installation.html#installing-pip). + pip can also be installed via [Homebrew](http://brew.sh/) for Mac OS + X users. + +1. Install `virtualenv` and `virtualenvwrapper`: + + ```bash + pip install virtualenv virtualenvwrapper` + ``` + +1. Set up `virtualenvwrapper`. Add the following lines to your + `.bash_profile` to get the `virtualenvwrapper` scripts in the path. + + ```bash + export WORKON_HOME=$HOME/.virtualenvs + source /usr/local/bin/virtualenvwrapper.sh + ``` + +1. Clone the Keystone repo: + + ```bash + git clone https://github.com/openstack/keystone.git + ``` + +1. Navigate to the Keystone repo and checkout the proper tag: + + ```bash + git checkout grizzly-2 + ``` + +## Create a Virtual Environment for Keystone + +Run the following command to create a virtual environment: + +```bash +mkvirtualenv keystone-test +``` + +The `keystone-test` virtual environment is now created, activated, and +ready to use. + +## Install the Keystone dependencies + +The dependencies for running Keystone can be found in +`tools/pip-requires`. At the time of this writing, `grizzly-2` is the +latest tag of Keystone and the dependencies are based on versions that +work with that tag. Use `pip` to install the dependencies as follows: + +```bash +pip install -r tools/pip-requires +``` + +## Configure Keystone + +The next step is to select the appropriate options in the +`keystone.conf` configuration file. A sample configuration that is +useful for local testing with Riak CS can be found [here]({{}}riak/cs/3.0.1/cookbooks/keystone-conf-sample/). This configuration file sets up logging to +`./log/keystone/keystone.log` and uses the templated catalog backend to +set up the Riak CS object store service. This catalog backend uses a +local file to populate the service catalog. + +The default file in the previously referenced sample `keystone.conf` +file uses `etc/default_catalog.templates`, but this can be changed. Set +the contents of `etc/default_catalog.templates` to be the following: + +```config +# config for TemplatedCatalog, using camelCase +catalog.RegionOne.identity.publicURL = http://localhost:$(public_port)s/v2.0 +catalog.RegionOne.identity.adminURL = http://localhost:$(admin_port)s/v2.0 +catalog.RegionOne.identity.internalURL = http://localhost:$(public_port)s/v2.0 +catalog.RegionOne.identity.name = Identity Service + +catalog.RegionOne.object-store.publicURL = http://localhost:8080/v1/AUTH_$(tenant_id)s +catalog.RegionOne.object-store.adminURL = http://localhost:8080/ +catalog.RegionOne.object-store.internalURL = http://localhost:8080/v1/AUTH_$(tenant_id)s +catalog.RegionOne.object-store.name = 'Object Store Service' +``` + +## Optional configuration + +For testing, it can be easier to configure keystone to use UUID as the +token format. To do this, edit `keystone.conf` and set the following: + +```config +token_format = UUID +``` + +## Prepare the database + +```bash +./bin/keystone-manage db_sync +``` + +## Run Keystone + +```bash +./bin/keystone-all --config-file / + //keystone/etc/keystone.conf -d --debug +``` + +The following script can be used to set a number of useful environment +variables to make using the Keystone client less cumbersome. + +```bash +#!/bin/bash + +export OS_SERVICE_TOKEN=ADMIN +export OS_SERVICE_ENDPOINT=http://localhost:35357/v2.0 +export OS_IDENTITY_API_VERSION=2.0 +export OS_AUTH_URL=http://localhost:5000/v2.0 +export OS_USERNAME=test +export OS_PASSWORD=test +export OS_TENANT_NAME=test +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3.md b/content/riak/cs/3.1.0/developing/apis/s3.md new file mode 100644 index 0000000000..6a9bd1fe56 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3.md @@ -0,0 +1,105 @@ +--- +title_supertext: "Developing > APIs:" +title: "S3 Storage API" +description: "" +menu: + riak_cs-3.1.0: + name: "S3 API" + identifier: "develop_apis_s3" + weight: 300 + parent: "develop_apis" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/ + - /riak/cs/3.1.0/references/apis/storage/s3/ +--- + +The Riak CS storage API is compatible with the Amazon S3 REST API, which +means that any of the operations listed below can be executed against +Riak CS using any of the commonly available S3 libraries and tools. + +## API Feature Comparison + +The following table describes the support status for current Amazon S3 +functional features. + +Feature | Status | Remark +--------|--------|-------- +GET Service (lists all buckets for authenticated user) | | | +DELETE Bucket | | | +PUT Bucket | | | +Bucket Lifecycle | | | +Policy (Buckets, Objects) {{1.3.0+}} | | Supports the "*" principal type and the "Secure Transport" and "IP address" conditions. | +Policy (Buckets, Objects) {{1.3.0-}} | Coming Soon | Planned for future release | +Bucket Website | | | +Bucket ACLs (GET, PUT) | | | +Bucket Location | | | +Bucket Notification | | | +Bucket Object Versions | | | +GET Bucket Info (HEAD) | | | +Bucket Request Payment | | | +PUT Object | | | +PUT Object (Copy) {{1.5.0+}} | | | +PUT Object (Copy) {{1.3.0-1.4.5}} | | Support is limited to a 0 byte copy from an object to itself for the purpose of updating metadata. | +PUT Object (Copy) {{1.3.0-}} | Coming Soon | Planned for future release | +DELETE Object | | | +DELETE Multiple Objects | | | +GET Object {{1.3.0+}} | | | +GET Object {{1.3.0-}} | | Range query unimplemented | +Object ACLs (GET, PUT) | | | +HEAD Object | | | +POST Object | | | +Copy Object | | | +Multipart Uploads {{1.5.0+}} | | | +Multipart Uploads {{1.3.0-1.4.5}} | | UploadPartCopy unimplemented | +Multipart Uploads {{1.3.0-}} | Coming Soon | Planned for future release | +Multipart Uploads {{1.5.0+}} | | | + +## Service-level Operations + +* [GET Service]({{}}riak/cs/3.0.1/references/apis/storage/s3/get-service) --- Returns a list of all buckets owned by the user who sent the request + +## Bucket-level Operations + +* [GET Bucket]({{}}riak/cs/3.0.1/references/apis/storage/s3/get-bucket) --- Returns a list of the objects + within a bucket +* [GET Bucket ACL]({{}}riak/cs/3.0.1/references/apis/storage/s3/get-bucket-acl) --- Returns the [Access Control List (ACL)](http://docs.aws.amazon.com/AmazonS3/latest/dev/ACLOverview.html) associated with a bucket +* [GET Bucket policy]({{}}riak/cs/3.0.1/references/apis/storage/s3/get-bucket-policy) --- Gets the policy of a bucket +* [PUT Bucket]({{}}riak/cs/3.0.1/references/apis/storage/s3/put-bucket) --- Creates a new bucket +* [PUT Bucket ACL]({{}}riak/cs/3.0.1/references/apis/storage/s3/put-bucket-acl) --- Sets the ACL permissions + for a bucket +* [PUT Bucket policy]({{}}riak/cs/3.0.1/references/apis/storage/s3/put-bucket-policy) --- Sets the policy for a bucket +* [DELETE Bucket]({{}}riak/cs/3.0.1/references/apis/storage/s3/delete-bucket) --- Deletes a bucket +* [DELETE Bucket policy]({{}}riak/cs/3.0.1/references/apis/storage/s3/delete-bucket-policy) --- Deletes the policy of a bucket + +## Object-level Operations + +* [GET Object]({{}}riak/cs/3.0.1/references/apis/storage/s3/get-object) --- Retrieves an object +* [GET Object ACL]({{}}riak/cs/3.0.1/references/apis/storage/s3/get-object-acl) --- Returns the ACLs associated with an object +* [PUT Object]({{}}riak/cs/3.0.1/references/apis/storage/s3/put-object) --- Stores an object to a bucket +* [PUT Object (Copy)]({{}}riak/cs/3.0.1/references/apis/storage/s3/put-object-copy) --- Creates a copy of an object +* [PUT Object ACL]({{}}riak/cs/3.0.1/references/apis/storage/s3/put-object-acl) --- Sets the ACLs associated with an object +* [HEAD Object]({{}}riak/cs/3.0.1/references/apis/storage/s3/head-object) --- Retrieves object metadata (not the full content of the object) +* [DELETE Object]({{}}riak/cs/3.0.1/references/apis/storage/s3/delete-object) --- Deletes an object + +## Multipart Upload + +Multipart upload allows you to upload a single object as a set of parts. +Object parts can be uploaded independently and in any order. After all +parts are uploaded, Riak CS assembles an object out of the parts. When +your object size reaches 100MB, you should consider using multipart +uploads instead of uploading the object in a single operation. Read more +about multipart uploads on the [overview page]({{}}riak/cs/3.0.1/cookbooks/multipart-upload-overview). + +* [Initiate Multipart Upload]({{}}riak/cs/3.0.1/references/apis/storage/s3/initiate-multipart-upload) --- Initiates a multipart upload and returns an upload ID +* [Upload Part]({{}}riak/cs/3.0.1/references/apis/storage/s3/upload-part) --- Uploads a part in a multipart upload +* [Complete Multipart Upload]({{}}riak/cs/3.0.1/references/apis/storage/s3/complete-multipart-upload) --- Completes a multipart upload and assembles previously uploaded parts +* [Abort Multipart Upload]({{}}riak/cs/3.0.1/references/apis/storage/s3/abort-multipart-upload) --- Aborts a multipart upload and eventually frees storage consumed by previously uploaded parts +* [List Parts]({{}}riak/cs/3.0.1/references/apis/storage/s3/list-parts) --- Lists the parts that have been uploaded for a specific multipart upload. +* [List Multipart Uploads]({{}}riak/cs/3.0.1/references/apis/storage/s3/list-multipart-uploads) --- Lists multipart uploads that have not yet been completed or aborted. + +## Common Headers + +* [Common Riak CS Request Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-request-headers) +* [Common Riak CS Response Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-response-headers) diff --git a/content/riak/cs/3.1.0/developing/apis/s3/buckets.md b/content/riak/cs/3.1.0/developing/apis/s3/buckets.md new file mode 100644 index 0000000000..4bc75150b6 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/buckets.md @@ -0,0 +1,41 @@ +--- +title_supertext: "APIs > S3:" +title: "Manage Buckets" +description: "" +menu: + riak_cs-3.1.0: + name: "Buckets" + identifier: "develop_apis_s3_buckets" + weight: 301 + parent: "develop_apis_s3" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: +since: 3.1.0 +--- + +Create, Retrieve, and Delete Buckets, and Manage their ACLs and Policies. + +## Create + +- [Create Bucket](./put-bucket) + +## Retrieve + +- [Get Bucket](./get-bucket) +- [Get List of Buckets](./get-service) + +## Delete + +- [Delete Bucket](./delete-bucket) + +## Manage ACLs and Policies + +- ACLs + - [Create Bucket ACL](./put-bucket-acl) + - [Get Bucket ACL](./get-bucket-acl) +- Policies + - [Create Bucket Policy](./put-bucket-policy) + - [Get Bucket Policy](./get-bucket-policy) + - [Delete Bucket Policy](./delete-bucket-policy) diff --git a/content/riak/cs/3.1.0/developing/apis/s3/buckets/delete-bucket-policy.md b/content/riak/cs/3.1.0/developing/apis/s3/buckets/delete-bucket-policy.md new file mode 100644 index 0000000000..1c4000c5bd --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/buckets/delete-bucket-policy.md @@ -0,0 +1,78 @@ +--- +title_supertext: "APIs > S3 > Buckets:" +title: "Delete a Bucket policy" +description: "" +menu: + riak_cs-3.1.0: + name: "Delete Policy" + identifier: "develop_apis_s3_buckets_delete_policy" + weight: 402 + parent: "develop_apis_s3_buckets" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-DELETE-Bucket-policy + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-DELETE-Bucket-policy + - /riakcs/3.1.0/references/apis/storage/s3/delete-bucket-policy + - /riak/cs/3.1.0/references/apis/storage/s3/delete-bucket-policy +--- + +The `DELETE Bucket policy` operation deletes the `policy` subresource of an existing bucket. To perform this operation, you must be the bucket owner. + +## Requests + +### Request Syntax + +```curl +DELETE /?policy HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Authorization: signatureValue + +``` + +### Request Parameters + +This operation does not use request parameters. + +### Request Headers + +This operation uses only request headers that are common to all operations. For more information, see [Common Riak CS Request Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-request-headers). + +### Request Elements + +No body should be appended. + +## Response + +### Response Headers + +This implementation of the operation uses only response headers that are common to most responses. For more information, see [Common Riak CS Response Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-response-headers). + +### Response Elements + +`DELETE` response elements return whether the operation succeeded or not. + +## Examples + +### Sample Request + +The following request shows the DELETE individual policy request for the bucket. + +```curl +DELETE /?policy HTTP/1.1 +Host: bucketname.data.basho.com +Date: Tue, 04 Apr 2010 20:34:56 GMT +Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE= + +``` + +### Sample Response + +```curl +HTTP/1.1 204 No Content +Date: Tue, 04 Apr 2010 12:00:01 GMT +Connection: keep-alive +Server: Riak CS +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/buckets/delete-bucket.md b/content/riak/cs/3.1.0/developing/apis/s3/buckets/delete-bucket.md new file mode 100644 index 0000000000..d38184a2cd --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/buckets/delete-bucket.md @@ -0,0 +1,62 @@ +--- +title_supertext: "APIs > S3 > Buckets:" +title: "Delete a Bucket" +description: "" +menu: + riak_cs-3.1.0: + name: "Delete" + identifier: "develop_apis_s3_buckets_delete" + weight: 301 + parent: "develop_apis_s3_buckets" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-DELETE-Bucket + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-DELETE-Bucket + - /riakcs/3.1.0/references/apis/storage/s3/delete-bucket + - /riak/cs/3.1.0/references/apis/storage/s3/delete-bucket +--- + +The `DELETE Bucket` operation deletes the bucket specified in the URI. + +{{% note title="Note" %}} +All objects in the bucket must be deleted before you can delete the bucket. +{{% /note %}} + +## Requests + +### Request Syntax + +```curl +DELETE / HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Authorization: signature_value +``` + +## Responses + +DELETE Bucket uses only common response headers and doesn't return any response elements. + +## Examples + +### Sample Request + +The DELETE Bucket operation deletes the bucket name "projects". + +```curl +DELETE / HTTP/1.1 +Host: projects.data.basho.com +Date: Wed, 06 Jun 2012 20:47:15 +0000 +Authorization: AWS QMUG3D7KP5OQZRDSQWB6:4Pb+A0YT4FhZYeqMdDhYls9f9AM= +``` + +### Sample Response + +```curl +HTTP/1.1 204 No Content +Date: Wed, 06 Jun 2012 20:47:15 +0000 +Connection: close +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/buckets/get-bucket-acl.md b/content/riak/cs/3.1.0/developing/apis/s3/buckets/get-bucket-acl.md new file mode 100644 index 0000000000..5e25bda3e5 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/buckets/get-bucket-acl.md @@ -0,0 +1,167 @@ +--- +title_supertext: "APIs > S3 > Buckets:" +title: "Get a Bucket ACL" +description: "" +menu: + riak_cs-3.1.0: + name: "Get ACL" + identifier: "develop_apis_s3_buckets_get ACL" + weight: 203 + parent: "develop_apis_s3_buckets" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-GET-Bucket-ACL + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-GET-Bucket-ACL + - /riakcs/3.1.0/references/apis/storage/s3/get-bucket-acl + - /riak/cs/3.1.0/references/apis/storage/s3/get-bucket-acl +--- + +The `GET Bucket acl` operation uses the `acl` subresource to return the access control list (ACL) of a bucket. + +*Note:* You must have READ_ACP access to the bucket to use this operation. If the anonymous user has READ_ACP permission, this operation will return the ACL of the bucket without an authorization header. + +## Requests + +### Request Syntax + +```curl +GET /?acl HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Authorization: signature_value +``` + +### Request Parameters + +The GET Bucket acl operation doesn't use request parameters. + +## Response Elements + +**AccessControlList** - Container for ACL information. + +* *Type*: Container +* *Ancestry*: AccessControlPolicy + +**AccessControlPolicy** - Container for the response. + +* *Type*: Container +* *Ancestry*: None + +**DisplayName** - Bucket owner's display name. + +*Note*: The operation returns the `DisplayName` only if the owner's e-mail address can be determined from the `ID`. + +* *Type*: String +* *Ancestry*: AccessControlPolicy.Owner + +**Grant** - Container for `Grantee` and `Permission`. + +* *Type*: Container +* *Ancestry*: AccessControlPolicy.AccessControlList + +**Grantee** - Container for `DisplayName` and `ID` of the person who is being granted permissions. + +* *Type*: Container +* *Ancestry*: AccessControlPolicy.AccessControlList.Grant + +**ID** - Bucket owner's ID. + +* *Type*: String +* *Ancestry*: AccessControlPolicy.Owner + +**Owner** - Container for bucket owner information. + +* *Type*: Container +* *Ancestry*: AccessControlPolicy + +**Permission** - Permission granted to the `Grantee` for bucket. + +* *Type*: String +* *TypeValid Values*: FULL_CONTROL|WRITE|WRITE_ACP|READ|READ_ACP + +*Ancestry*: AccessControlPolicy.AccessControlList.Grant**AccessControlList** - Container for ACL information. + +* *Type*: Container +* *Ancestry*: AccessControlPolicy + +**AccessControlPolicy** - Container for the response. + +* *Type*: Container +* *Ancestry*: None + +**DisplayName** - Bucket owner's display name. + +*Note*: The operation returns the `DisplayName` only if the owner's e-mail address can be determined from the `ID`. + +* *Type*: String +* *Ancestry*: AccessControlPolicy.Owner + +**Grant** - Container for `Grantee` and `Permission`. + +* *Type*: Container +* *Ancestry*: AccessControlPolicy.AccessControlList + +**Grantee** - Container for `DisplayName` and `ID` of the person who is being granted permissions. + +* *Type*: Container +* *Ancestry*: AccessControlPolicy.AccessControlList.Grant + +**ID** - Bucket owner's ID. + +* *Type*: String +* *Ancestry*: AccessControlPolicy.Owner + +**Owner** - Container for bucket owner information. + +* *Type*: Container +* *Ancestry*: AccessControlPolicy + +**Permission** - Permission granted to the `Grantee` for bucket. + +* *Type*: String +* *Valid Values*: FULL_CONTROL|WRITE|WRITE_ACP|READ|READ_ACP +* *Ancestry*: AccessControlPolicy.AccessControlList.Grant + +## Examples + +### Sample Request + +This request returns the ACL of the specified bucket. + +```curl +GET ?acl HTTP/1.1 +Host:bucket.data.basho.com +Date: Wed, 06 Jun 2012 20:47:15 +0000 +Authorization: AWS QMUG3D7KP5OQZRDSQWB6:4Pb+A0YT4FhZYeqMdDhYls9f9AM= +``` + +### Sample Response + +```curl +HTTP/1.1 200 OK +Date: Wed, 06 Jun 2012 20:47:15 +0000 +Last-Modified: Mon, 04 Jun 2012 12:00:00 GMT +Content-Length: 124198 +Content-Type: text/plain +Connection: close +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) + + + + 24ef09aa099d10f75aa57c8caeab4f8c8e7faeebf76c078efc7c6caea54ba06a + UserName@basho.com + + + + + 24ef09aa099d10f75aa57c8caeab4f8c8e7faeebf76c078efc7c6caea54ba06a + UserName@basho.com + + FULL_CONTROL + + + +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/buckets/get-bucket-policy.md b/content/riak/cs/3.1.0/developing/apis/s3/buckets/get-bucket-policy.md new file mode 100644 index 0000000000..d1cbd61890 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/buckets/get-bucket-policy.md @@ -0,0 +1,98 @@ +--- +title_supertext: "APIs > S3 > Buckets:" +title: "Get a Bucket Policy" +description: "" +menu: + riak_cs-3.1.0: + name: "Get Policy" + identifier: "develop_apis_s3_buckets_get_policy" + weight: 204 + parent: "develop_apis_s3_buckets" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-GET-Bucket-policy + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-GET-Bucket-policy + - /riakcs/3.1.0/references/apis/storage/s3/get-bucket-policy + - /riak/cs/3.1.0/references/apis/storage/s3/get-bucket-policy +--- + +The `GET Bucket policy` operation uses the `policy` subresource to fetch the policy currently set to an existing bucket. If the bucket does not have a policy the call ends up in 404 Not Found. To perform this operation, you must be the bucket owner. + +## Requests + +### Request Syntax + +This example shows the syntax for setting the policy in the request body. + +```curl +GET /?policy HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Authorization: signatureValue +``` + +### Request Parameters + +This operation does not use request parameters. + +### Request Headers + +This operation uses only request headers that are common to all operations. For more information, see [Common Riak CS Request Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-request-headers). + +### Request Elements + +No body should be appended. + +## Response + +### Response Headers + +This implementation of the operation uses only response headers that are common to most responses. For more information, see [Common Riak CS Response Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-response-headers). + +### Response Elements + +`GET` response has a JSON which was PUT as its body. + +## Examples + +### Sample Request + +The following request shows the GET individual policy request for the bucket. + +```curl +GET /?policy HTTP/1.1 +Host: bucketname.data.basho.com +Date: Tue, 04 Apr 2010 20:34:56 GMT +Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE= +Content-size: 0 +``` + +### Sample Response + +```curl +HTTP/1.1 200 OK +Date: Tue, 04 Apr 2010 12:00:01 GMT +Connection: keep-alive +Server: Riak CS +Content-size: 256 + +{ + "Version": "2008-10-17", + "Statement": [ + { + "Sid": "Stmtaaa", + "Effect": "Allow", + "Principal": "*", + "Action": ["s3:GetObjectAcl","s3:GetObject"], + "Resource": "arn:aws:s3:::bucketname/*", + "Condition": { + "IpAddress": { + "aws:SourceIp": "127.0.0.1/32" + } + } + } + ] +} +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/buckets/get-bucket.md b/content/riak/cs/3.1.0/developing/apis/s3/buckets/get-bucket.md new file mode 100644 index 0000000000..82be60856c --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/buckets/get-bucket.md @@ -0,0 +1,249 @@ +--- +title_supertext: "APIs > S3 > Buckets:" +title: "Get a Bucket" +description: "" +menu: + riak_cs-3.1.0: + name: "Get" + identifier: "develop_apis_s3_buckets_get" + weight: 202 + parent: "develop_apis_s3_buckets" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-GET-Bucket + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-GET-Bucket + - /riakcs/3.1.0/references/apis/storage/s3/get-bucket + - /riak/cs/3.1.0/references/apis/storage/s3/get-bucket +--- + +The `GET Bucket` operation returns a list of objects (all or up to 1,000) in a bucket. + +*Note:* You must have READ access to the bucket to use this operation. + +## Requests + +### Request Syntax + +```curl +GET / HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Authorization: signature_value +``` + +### Request Parameters + +GET Bucket uses the following parameters to return a subset of the objects in a bucket. + +**prefix** - A string with which keys must begin to be included in the response. + +You can use prefixes to separate the objects in a bucket into groupings of keys. + +* *Type*: String +* *Default*: None + +**Delimiter** - Keys that contain the same string between the `prefix` and the first occurrence of the `delimiter` are rolled up into a single result in the `CommonPrefixes` collection and aren't returned anywhere else in the response. + +* *Type*: String +* *Default*: None + +**Marker** - The starting location in the bucket for the list of objects. + +* *Type*: String +* *Default*: None + +**MaxKeys** - The maximum number of keys returned in the response body. + +* *Type*: String +* *Default*: 1000 + +## Response Elements + +**Contents** - Metadata about each object returned in the response. + +* *Type*: XML metadata +* *Ancestry*: ListBucketResult + +**CommonPrefixes** - Keys, if any, between the `Prefix` and the next occurrence of the `delimiter` string. + +A response contains `CommonPrefixes` only if the request includes a `delimiter`. `CommonPrefixes` lists keys that act like subdirectories in the directory specified by `Prefix`. If `Prefix` is *projects/* and `delimiter` is */*, the common prefix in *projects/marketing/2012* is *projects/marketing/*. The keys rolled up into a common prefix represent a single return for the calculation of the number of returns (which is limited by `MaxKeys`). + +* *Type*: String +* *Ancestry*: ListBucketResult + +**Delimiter** - Keys that contain the same string between the `prefix` and the first occurrence of the `delimiter` are rolled up into a single result in the `CommonPrefixes` collection and aren't returned anywhere else in the response. + +* *Type*: String +* *Ancestry*: ListBucketResult + +**DisplayName** - Object owner's display name. + +* *Type*: String +* *Ancestry*: ListBucketResult.Contents.Owner + +**ETag** - The entity tag is an MD5 hash of the object and reflects only changes to the object contents, not the object's metadata. + +* *Type*: String +* *Ancestry*: ListBucketResult.Contents + +**ID** - Object owner's user ID. + +* *Type*: String +* *Ancestry*: ListBucketResult.Contents.Owner + +**IsTruncated** - Indicates whether all of the results were returned (`true`) or only a subset (`false`) because the number of results returned exceeded the maximum specified by `MaxKeys`. + +* *Type*: String +* *Ancestry*: boolean + +**Key** - The object key. + +* *Type*: String +* *Ancestry*: ListBucketResult.Contents + +**LastModified** - The date and time that the object was last modified. + +* *Type*: Date +* *Ancestry*: ListBucketResult.Contents + +**Marker** - The starting location in the bucket for the list of objects. + +* *Type*: String +* *Ancestry*: ListBucketResult + +**MaxKeys** - The maximum number of keys returned in the response body. + +* *Type*: String +* *Ancestry*: ListBucketResult + +**Name** - Bucket's name. + +* *Type*: String +* *Ancestry*: ListBucketResult + +**Owner** - Bucket owner. + +* *Type*: String +* *Children*: DisplayName, ID +* *Ancestry*: ListBucketResult.Contents|CommonPrefixes + +**Prefix** - Keys that begin with the indicated prefix. + +* *Type*: String +* *Ancestry*: ListBucketResult + +**Size** - The object's size in bytes. + +* *Type*: String +* *Ancestry*: ListBucketResult.Contents + +**StorageClass** - Always STANDARD. + +* *Type*: String +* *Ancestry*: ListBucketResult.Contents + +## Examples + +### Sample Request + +A request that returns the objects in the bucket, `projects`. + +```curl +GET / HTTP/1.1 +Host: projects.data.basho.com +Date: Wed, 06 Jun 2012 20:47:15 +0000 +Authorization: AWS QMUG3D7KP5OQZRDSQWB6:4Pb+A0YT4FhZYeqMdDhYls9f9AM= +Content-Type: text/plain +``` + +### Sample Response + +```xml + + + projects + + + 1000 + false + + scheduleQ1.jpg + 2012-06-01T09:20:03.000Z + "f77127731fba39869dede5c9645a3328" + 519226 + STANDARD + + 324ABC0713CD0B420EFC086821BFAE7ED81442C + + + + + scheduleQ2.jpg + 2012-06-02T11:02:42 + "645a39851b2cf27731c974f535343328" + 990102 + STANDARD + + 324ABC0713CD0B420EFC086821BFAE7ED81442C + foobar + + + +``` + +### Sample Request Using Request Parameters + +This sample request lists up to 100 keys in the `projects` bucket that start with `IT` and occur after the key that begins with `ITdb`. + +```curl +GET ?prefix=IT HTTP/1.1 +Host: projects.data.basho.com +Date: Wed, 06 Jun 2012 20:47:15 +0000 +Authorization: AWS QMUG3D7KP5OQZRDSQWB6:4Pb+A0YT4FhZYeqMdDhYls9f9AM= +``` + +### Sample Response Based on Request Parameters + +```curl +HTTP/1.1 200 OK +x-amz-id-2: gyB+3jRPnrkN98ZajxHXr3u7EFM67bNgSAxexeEHndCX/7GRnfTXxReKUQF28IfP +x-amz-request-id: 3B3C7C725673C630 +Date: Wed, 06 Jun 2012 20:48:15 GMT +Content-Type: application/xml +Content-Length: 302 +Connection: close +Server: BashoData + + + + projects + IT + + 1000 + false + + ITdb + 2012-06-01T09:20:03.000Z + "f77127731fba39869dede5c9645a3328" + 29493 + STANDARD + + B420EFC086821B324ABC0713CD0FAE7ED81442C + richardp + + + + ITstorage + 2012-04-14T04:20:10.000Z + "a96f00ad9f27c3828ef3fdf83fc9ac7f" + 4 + STANDARD + + 324ABC0713CD0B420EFC086821BFAE7ED81442C + foobar + + + +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/buckets/get-service.md b/content/riak/cs/3.1.0/developing/apis/s3/buckets/get-service.md new file mode 100644 index 0000000000..0a2a2ebed7 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/buckets/get-service.md @@ -0,0 +1,113 @@ +--- +title_supertext: "APIs > S3 > Buckets:" +title: "Get a List of all Buckets owned" +description: "" +menu: + riak_cs-3.1.0: + name: "List Buckets" + identifier: "develop_apis_s3_buckets_list" + weight: 201 + parent: "develop_apis_s3_buckets" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-GET-Service + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-GET-Service + - /riakcs/3.1.0/references/apis/storage/s3/get-service + - /riak/cs/3.1.0/references/apis/storage/s3/get-service +--- + +The `GET Service` operation returns a list of all buckets owned by the *authenticated* user who sent sent the request. + +*Note:* The GET Service operation doesn't list buckets created by other users. It also doesn't list buckets for anonymous requests. + +## Requests + +### Request Syntax + +```curl +GET / HTTP/1.1 +Host: data.basho.com +Date: date +Authorization: signature_value +``` + +## Response Elements + +**Bucket** - Container for bucket information. + +* *Type*: Container +* *Children*: Name,CreationDate +* *Ancestor*: ListAllMyBucketsResult.Buckets + +**Buckets** - Container for one or more buckets. + +* *Type*: Container +* *Children*: Bucket +* *Ancestor*: ListAllMyBucketsResult + +**CreationDate** - Date the bucket was created. + +* *Type*: date (format yyyy-mm-ddThh:mm:ss.timezone, e.g., 2012-06-03T15:4548:02.000Z) +* *Ancestor*: ListAllMyBucketsResult.Buckets.Bucket + +**DisplayName** - Bucket owner's display name. + +* *Type*: String +* *Ancestor*: ListAllMyBucketsResult.Owner + +**ID** - Bucket owner's user ID. + +* *Type*: String +* *Ancestor*: ListAllMyBucketsResult.Owner + +**ListAllMyBucketsResult** - Container for response. + +* *Type*: Container +* *Children*: Owner, Buckets +* *Ancestor*: None + +**Name** - Bucket's name. + +* *Type*: String +* *Ancestor*: ListAllMyBucketsResult.Buckets.Bucket + +**Owner** - Container for bucket owner information. + +* *Type*: Container +* *Ancestor*: ListAllMyBucketsResult + +## Examples + +### Sample Request + +The GET operation on the Service endpoint (data.basho.com in this example) returns a list of all of the buckets owned by the authenticated sender of the request. + +```curl +Host: data.basho.com +Date: Wed, 06 Jun 2012 20:47:15 +0000 +Authorization: AWS QMUG3D7KP5OQZRDSQWB6:4Pb+A0YT4FhZYeqMdDhYls9f9AM= +``` + +### Sample Response + +```xml + + + + 324ABC0713CD0B420EFC086821BFAE7ED81442C + "foobar + + + + projects + 2011-05-10T14:10:15.000Z + + + templates + 2011-05-10T14:18:25.000Z + + + +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/buckets/put-bucket-acl.md b/content/riak/cs/3.1.0/developing/apis/s3/buckets/put-bucket-acl.md new file mode 100644 index 0000000000..6ec7abd5a0 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/buckets/put-bucket-acl.md @@ -0,0 +1,222 @@ +--- +title_supertext: "APIs > S3 > Buckets:" +title: "Create or Update a Bucket ACL" +description: "" +menu: + riak_cs-3.1.0: + name: "Create or Update ACL" + identifier: "develop_apis_s3_buckets_create_acl" + weight: 102 + parent: "develop_apis_s3_buckets" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-PUT-Bucket-ACL/ + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-PUT-Bucket-ACL/ + - /riakcs/3.1.0/references/apis/storage/s3/put-bucket-acl/ + - /riak/cs/3.1.0/references/apis/storage/s3/put-bucket-acl/ +--- + +The `PUT Bucket acl` operation uses the `acl` subresource to set the permissions on an existing bucket using an access control list (ACL). + +*Note:* You must have WRITE_ACP access to the bucket to use this operation. + +`PUT Bucket acl` offers two methods for setting a bucket's permissions: + +* Specify the ACL in the request body +* Specify permissions using request headers + +*Note*: You can specify an ACL in the request body or with request headers, not both. + +## Requests + +### Request Syntax + +This example shows the syntax for setting the ACL in the request body. The Request Headers section contain a list of headers you can use instead. + +```curl +PUT /?acl HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Authorization: signatureValue + + + + ID + EmailAddress + + + + + ID + EmailAddress + + Permission + + ... + + +``` + +### Request Parameters + +This operation does not use request parameters. + +### Request Headers + +`PUT Bucket acl` offers the following request headers in addition to the request headers common to all operations. + +**x-amz-acl** - This request header specifies a predefined ACL to apply to the bucket being created. A predefined ACL grants specific permissions to individual accounts or predefined groups. + +* *Type*: String +* *Valid Values*: private | public-read | public-read-write | authenticated-read | bucket-owner-read | bucket-owner-full-control +* *Default*: private + +### Request Elements + +If you specify the ACL using the request body, you must use the following elements: + +**AccessControlList** - Container for ACL information (Grant, Grantee, and Permission). + +* *Type*: Container +* *Ancestors*: AccessControlPolicy + +**AccessControlPolicy** - Contains the elements that set the ACL permissions for each grantee. + +* *Type*: Container +* *Ancestors*: None + +**DisplayName** - Bucket owner's display name. + +* *Type*: String +* *Ancestors*: AccessControlPolicy.Owner + +**Grant** - Container for `Grantee` and `Permission`. + +* *Type*: Container +* *Ancestors*: AccessControlPolicy.AccessControlList + +**Grantee** - The `ID`, `Emailaddress`, or `uri` of the subject who is being granted permissions. + +* *Type*: String +* *Ancestors*: AccessControlPolicy.AccessControlList.Grant + +**ID** - Bucket owner's ID. + +* *Type*: String +* *Ancestors*: AccessControlPolicy.Owner|AccessControlPolicy.AccessControlList.Grant + +**Owner** - Container for bucket owner information. + +* *Type*: Container +* *Ancestors*: AccessControlPolicy + +**Permission** - Permission granted to the `Grantee` for bucket. + +* *Type*: String +* *Valid Values*: FULL_CONTROL|WRITE|WRITE_ACP|READ|READ_ACP +* *Ancestors*: AccessControlPolicy.AccessControlList.Grant + +In request elements, you can specify the grantee to whom you are granting permissions in the following ways: + +* *emailAddress*: The email address of an account + +```xml + + user1@basho.com + +``` + +From the email address, the grantee is resolved to the CanonicalUser. The response to a `GET Object acl` request displays the grantee as the CanonicalUser. + +* *id*: The user ID of an account + +```xml + + ID + GranteesEmail + +``` + +For the id method, DisplayName is optional and ignored in the request. + +* *uri*: The uri that defines a group + +```xml + + http://data.basho.com/groups/AuthenticatedUsers + +``` + +### Response Elements + +PUT Bucket acl does not return response elements. + +## Examples + +### Sample Request with Access Permission Specified in the Request Body + +This sample request grants access permission to an existing bucket, named basho_docs, by specifying the ACL in the request body. In addition to granting full control to the bucket owner, the request specifies the following grants: + +* Grant AllUsers group READ permission on the bucket. +* Grant the Dev group WRITE permission on the bucket. +* Grant an account, which is identified by email address, WRITE_ACP permission. +* Grant an account, which is identified by canonical user ID, READ_ACP permission. + +```curl +PUT /?acl HTTP/1.1 +Host: basho_docs.data.basho.com +Content-Length: 1660202 +x-amz-date: Fri, 01 Jun 2012 12:00:00 GMT +Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE= + + + + BucketOwnerCanonicalUserID + OwnerDisplayName + + + + + 852b113e7a2f25102679df27bb0ae12b3f85be6BucketOwnerCanonicalUserID + OwnerDisplayName + + FULL_CONTROL + + + + http://acs.data.basho.com/groups/global/AllUsers + + READ + + + + http://acs.data.basho.com/groups/global/Dev + + WRITE + + + + user1@basho.com + + WRITE_ACP + + + + f30716ab7115dcb44a5ef76e9d74b8e20567f63TestAccountCanonicalUserID + + READ_ACP + + + +``` + +### Sample Response + +```curl +HTTP/1.1 200 OK +Date: Fri, 01 Jun 2012 12:00:00 GMT +Content-Length: 0 +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/buckets/put-bucket-policy.md b/content/riak/cs/3.1.0/developing/apis/s3/buckets/put-bucket-policy.md new file mode 100644 index 0000000000..9cbc9287d2 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/buckets/put-bucket-policy.md @@ -0,0 +1,143 @@ +--- +title_supertext: "APIs > S3 > Buckets:" +title: "Create or Upload a Bucket Policy" +description: "" +menu: + riak_cs-3.1.0: + name: "Create or Update Policy" + identifier: "develop_apis_s3_buckets_create_policy" + weight: 103 + parent: "develop_apis_s3_buckets" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-PUT-Bucket-policy/ + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-PUT-Bucket-policy/ + - /riakcs/3.1.0/references/apis/storage/s3/put-bucket-policy/ + - /riak/cs/3.1.0/references/apis/storage/s3/put-bucket-policy/ +--- + +The `PUT Bucket policy` operation uses the `policy` subresource to add or replace the policy on an existing bucket. If the bucket already has a policy, the one in this request completely replaces it. To perform this operation, you must be the bucket owner. + +{{% note title="Note" %}} +Currently only the `aws:SourceIp` and `aws:SecureTransport` policy conditions +are supported. +{{% /note %}} + +## Requests + +### Request Syntax + +This example shows the syntax for setting the policy in the request body. + +```curl +PUT /?policy HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Authorization: signatureValue + +Policy written in JSON +``` + +### Request Parameters + +This operation does not use request parameters. + +### Request Headers + +This operation uses only request headers that are common to all operations. For more information, see [Common Riak CS Request Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-request-headers). + +### Request Elements + +The body is a JSON string containing the policy elements. The supported policy elements are detailed below. + +#### Version + +The Version element specifies the policy language version. If a version is not specified, this defaults to `2008-10-17`. + +#### ID + +The Id element specifies an optional identifier for the policy. + +#### Statement + +The Statement element is the main element for a policy. This element is required. It can include multiple elements. The Statement element contains an array of individual statements. Each individual statement is a JSON block enclosed in braces, i.e. `{ ... }`. Below is a list of currently supported statements. + +**SID** : The Sid (statement ID) is an optional identifier that you provide for the policy statement. You can assign a Sid value to each statement in a statement array. + +**Effect** : The Effect element is required and specifies whether the statement will result in an allow or an explicit deny. Valid values for Effect are `Allow` and `Deny`. + +**Principal** : The Principal element specifies the user, account, service, or other entity that is allowed or denied access to a resource. Currently, Riak CS only supports the `*` principal type. + +**Action** : The Action element describes the type of access that should be allowed or denied. + +Supported actions are: + +- `s3:GetObject`, `s3:PutObject`, `s3:DeleteObject`, +- `s3:GetObjectAcl`, `s3:PutObjectAcl`, +- `s3:ListMultipartUploadParts`, `s3:AbortMultipartUpload`, +- `s3:CreateBucket`, `s3:DeleteBucket`, `s3:ListBucket`, `s3:ListAllMyBuckets`, +- `s3:GetBucketAcl`, `s3:PutBucketAcl`, +- `s3:GetBucketPolicy`, `s3:DeleteBucketPolicy`, `s3:PutBucketPolicy`, +- `s3:ListBucketMultipartUploads` . + +**Resource** : The Resource element specifies the object or objects that the statement covers. Currently, Riak only supports buckets as resources, specified as: `"arn:aws:s3:::/*"`. + +**Condition** : The Condition element (or Condition block) lets you specify conditions for when a policy is in effect. The Condition element is optional.Riak CS supports 3 Condition Types: `Bool`, `IpAddress`, and `NotIpAddress`. + +Riak CS supports two keys to be used with these conditions: `aws:SecureTransport` and `aws:SourceIp`. `aws:SecureTransport` is used with the `Bool` condition to check whether the request was sent with SSL. Accepted values for this key are `true` and `false`. `aws:SourceIp` is used with the `IpAddress` and `NotIpAddress` conditions, and represents the requester's IP address. IPv4 IP addresses in CIDR notation are supported. + +The IP address to be compared with `IpAddress` or `NotIpAddress` is taken from the source IP address of the TCP connection. If Riak CS is behind a load balancer that does not preserve source IP address and bucket policies related to IP addresses, Riak CS can be configured to adopt IP address described in the `X-Forwarded-For` request header, which is added by the load balancer. Set `trust_x_forwarded_for` to `true` in `app.config` when the header can be trusted and secure. The default is `false`, where Riak CS uses the source IP address of the TCP connection. + +More information on S3 Policies can be found in Amazon's [Permissions And Policies](http://docs.aws.amazon.com/IAM/latest/UserGuide/PermissionsAndPolicies.html) documentation. + +## Response + +### Response Headers + +This implementation of the operation uses only response headers that are common to most responses. For more information, see [Common Riak CS Response Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-response-headers). + +### Response Elements + +`PUT` response elements return whether the operation succeeded or not. + +## Examples + +### Sample Request + +The following request shows the PUT individual policy request for the bucket. + +```curl +PUT /?policy HTTP/1.1 +Host: bucketname.data.basho.com +Date: Tue, 04 Apr 2010 20:34:56 GMT +Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE= + +{ + "Version": "2008-10-17", + "Statement": [ + { + "Sid": "0xDEADBEEF", + "Effect": "Allow", + "Principal": "*", + "Action": ["s3:GetObjectAcl","s3:GetObject"], + "Resource": "arn:aws:s3:::bucketname/*", + "Condition": { + "IpAddress": { + "aws:SourceIp": "192.0.72.1/24" + } + } + } + ] +} +``` + +### Sample Response + +```curl +HTTP/1.1 204 No Content +Date: Tue, 04 Apr 2010 12:00:01 GMT +Connection: keep-alive +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/buckets/put-bucket.md b/content/riak/cs/3.1.0/developing/apis/s3/buckets/put-bucket.md new file mode 100644 index 0000000000..08235ef76f --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/buckets/put-bucket.md @@ -0,0 +1,130 @@ +--- +title_supertext: "APIs > S3 > Buckets:" +title: "Create or Update a Bucket" +description: "" +menu: + riak_cs-3.1.0: + name: "Create or Update" + identifier: "develop_apis_s3_buckets_create" + weight: 101 + parent: "develop_apis_s3_buckets" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-PUT-Bucket/ + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-PUT-Bucket/ + - /riakcs/3.1.0/references/apis/storage/s3/put-bucket/ + - /riak/cs/3.1.0/references/apis/storage/s3/put-bucket/ +--- + +The `PUT Bucket` operation creates a new bucket. The user who sends the request to create the bucket becomes the bucket owner. Anonymous requests can't create buckets. + +*Note:* To create a bucket, you must have a valid Key ID, which is used to authenticate requests. + +## Bucket Naming + +A best practice is to use DNS-compliant bucket names. DNS-compliant bucket names ensure that virtual hosted-style requests can locate buckets. + +A bucket name must obey the following rules, which produces a DNS-compliant bucket name: + +* Must be from 3 to 63 characters. +* Must be one or more labels, each separated by a period (.). Each label: +* Must start with a lowercase letter or a number. Must end with a lowercase letter or a number. Can contain lowercase letters, numbers and dashes. +* Must not be formatted as an IP address (e.g., 192.168.9.2). + +## Access Permissions + +PUT Bucket offers the option to specify the permissions you want to grant to specific accounts or groups for the bucket. You can grant permissions to accounts or groups with request headers, using one of the following two methods: + +* Specify a predefined ACL using the x-amz-acl request header. More information about predefined ACLs is available [here](http://docs.amazonwebservices.com/AmazonS3/latest/dev/ACLOverview.html#CannedACL). +* Specify access permissions explicitly using the x-amz-grant-read, x-amz-grant-write, x-amz-grant-read-acp, x-amz-grant-write-acp, x-amz-grant-full-control headers, which map to the set of ACL permissions supported by Amazon S3. + +*Note*: You can use either a predefined ACL or specify access permissions explicitly, not both. + +## Requests + +### Request Syntax + +```curl +PUT / HTTP/1.1 +Host: bucketname.data.basho.com +Content-Length: length +Date: date +Authorization: signature_value + + + BucketRegion + +``` + +{{% note title="Note" %}} +This example includes some request headers. The Request Headers section +contains the complete list of headers. +{{% /note %}} + +### Request Parameters + +This operation does not use request parameters. + +### Request Headers + +PUT Bucket offers the following request headers in addition to the request headers common to all operations. + +**x-amz-acl** - This request header specifies a predefined ACL to apply to the bucket being created. A predefined ACL grants specific permissions to individual accounts or predefined groups. + +* *Type*: String +* *Valid Values*: private | public-read | public-read-write | authenticated-read | bucket-owner-read | bucket-owner-full-control + +### Response Elements + +PUT Bucket does not return response elements. + +## Examples + +### Sample Request + +A request that creates a bucket named `basho_docs`. + +```curl +PUT / HTTP/1.1 +Host: basho_docs.data.basho.com +Content-Length: 0 +Date: Fri, 01 Jun 2012 12:00:00 GMT +Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE= +``` + +### Sample Response + +```curl +HTTP/1.1 200 OK +Date: Fri, 01 Jun 2012 12:00:00 GMT +Content-Length: 0 +Connection: close +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) +``` + +### Sample Request to Configure Access Permission Using Predefined ACL + +This request creates a bucket named `basho_docs` and sets the ACL to private. + +```curl +PUT / HTTP/1.1 +Host: basho_docs.data.basho.com +Content-Length: 0 +x-amz-acl: private +Date: Fri, 01 Jun 2012 12:00:00 GMT +Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE= +``` + +### Sample Response For Bucket with Predefined ACL + +```curl +HTTP/1.1 200 OK +Date: Fri, 01 Jun 2012 12:00:00 GMT + +Location: /basho_docs +Content-Length: 0 +Connection: close +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/common-request-headers.md b/content/riak/cs/3.1.0/developing/apis/s3/common-request-headers.md new file mode 100644 index 0000000000..4087907991 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/common-request-headers.md @@ -0,0 +1,32 @@ +--- +title_supertext: "APIs > S3:" +title: "Common Request Headers" +description: "" +menu: + riak_cs-3.1.0: + name: "Common Request Headers" + identifier: "develop_apis_s3_common_request_headers" + weight: 102 + parent: "develop_apis_s3" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/Common-RiakCS-Request-Headers + - /riak/cs/3.1.0/references/apis/storage/s3/Common-RiakCS-Request-Headers + - /riakcs/3.1.0/references/apis/storage/s3/common-request-headers/ + - /riak/cs/3.1.0/references/apis/storage/s3/common-request-headers/ +--- + +These are the headers that are common to all Riak CS REST requests. + +Header | Description | Data type +:------|:------------|:--------- +`Authorization` | Information required to requests authentication. This header is not required for anonymous requests. +`Cache-Control` | This header is for use by caches and intermediate proxies. It can be any string. {{1.5.0+}} +`Content-Length` | The length of the message without headers according to [RFC 2616](https://www.ietf.org/rfc/rfc2616.txt). This header is required for PUTs and for operations that load XML. +`Content-Type` | The content type of the resource, e.g. `application/json`. +`Content-MD5` | The base64-encoded 128-bit MD5 digest of the message without the headers according to [RFC 1864](https://www.ietf.org/rfc/rfc1864.txt). Although this header is optional, the `Content-MD5` header can be used to confirm that the data is the same as what was originally sent. +`Date` | The current data and time according to the requester, e.g. `Fri, 01 Jun 2012 12:00:00 GMT`. With the `Authorization` header, you must specify either the `x-amz-date` or `Date` header. +`Expect` | When you use `100-continue` in your application, it doesn't send the request body until it receives an acknowledgment. That way, the body of the message isn't sent if the message is rejected based on the headers. +`Host` | For path-style requests, the value is something like `data.basho.com`. For virtual-style requests, the value is something like `bucketname.data.basho.com`. +`x-amz-date` | This header is optional for HTTP 1.0 requests but required for HTTP 1.1. Registers the current date and time according to the requester, e.g. `Fri, 01 Jun 2012 12:00:00 GMT`. With the `Authorization` header, you must specify either the `x-amz-date` or `Date` header. If you specify both, the value for this header takes precedence. diff --git a/content/riak/cs/3.1.0/developing/apis/s3/common-response-headers.md b/content/riak/cs/3.1.0/developing/apis/s3/common-response-headers.md new file mode 100644 index 0000000000..b7e544a132 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/common-response-headers.md @@ -0,0 +1,28 @@ +--- +title_supertext: "APIs > S3:" +title: "Common Response Headers" +description: "" +menu: + riak_cs-3.1.0: + name: "Common Response Headers" + identifier: "develop_apis_s3_common_response_headers" + weight: 103 + parent: "develop_apis_s3" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/Common-RiakCS-Response-Headers + - /riak/cs/3.1.0/references/apis/storage/s3/Common-RiakCS-Response-Headers + - /riakcs/3.1.0/references/apis/storage/s3/common-response-headers/ + - /riak/cs/3.1.0/references/apis/storage/s3/common-response-headers/ +--- + +These are the headers that are common to all Riak CS REST responses. + +Header | Description | Data type +:------|:------------|:--------- +`Content-Length` | The length in bytes of the response body. | string | +`Connection` | Whether the connection to the server is open or closed. | enum (`open` or `close`) | +`Date` | The date and time that Riak CS responded, e.g. `Fri, 01 Jun 2012 12:00:00 GMT` | string | +`Etag` | The entity tag is an MD5 hash of the object and reflects only changes to the object contents, not the object's metadata. The ETag is set when an object is created. | string | +`Server` | The name of the server that created the response. | string | diff --git a/content/riak/cs/3.1.0/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md b/content/riak/cs/3.1.0/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md new file mode 100644 index 0000000000..22abca781d --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md @@ -0,0 +1,85 @@ +--- +title_supertext: "APIs > S3:" +title: "Mapping From S3 API to Riak CS internal API" +description: "" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/Mapping-From-S3-API-to-Riak-CS-internal-API + - /riak/cs/3.1.0/references/apis/storage/s3/Mapping-From-S3-API-to-Riak-CS-internal-API +--- + +## Overview + +This document is to outline a mapping of S3 API URLs to their +rewritten format that is processed by Webmachine. + +## URL Mapping + +### Service Operations + +* `GET Service` + * `GET /` -> `GET /buckets` + +### Bucket Operations + +*Note* Common method to specify bucket is to prefix bucket name to `Host` header value + +* `GET Bucket` + * `GET /` or `GET /` -> `GET /buckets//objects` +* `HEAD Bucket` + * `HEAD /` or `HEAD /` -> `HEAD /buckets/` +* `PUT Bucket` + * `PUT /` or `PUT /` -> `PUT /buckets/` +* `DELETE Bucket` + * `DELETE /` or `DELETE /` -> `DELETE /buckets/` +* `GET Bucket acl` + * `GET /?acl` -> `GET /buckets//acl` +* `PUT Bucket acl` + * `PUT /?acl` -> `PUT /buckets//acl` +* `GET Bucket location` + * `GET /?location`-> `GET /buckets//location` +* `PUT Bucket location` + * `PUT /?location`-> `PUT /buckets//location` +* `GET Bucket versioning` + * `GET /?versioning`-> `GET /buckets//versioning` +* `PUT Bucket versioning` + * `PUT /?versioning`-> `PUT /buckets//versioning` +* `GET Bucket policy` + * `GET /?policy`-> `GET /buckets//policy` +* `PUT Bucket policy` + * `PUT /?policy`-> `PUT /buckets//policy` +* `DELETE Bucket policy` + * `DELETE /?policy`-> `DELETE /buckets//policy` +* `List Multipart Uploads` + * `GET /?uploads` -> `GET /buckets//uploads` +* `Delete Multiple Objects` (This is listed in the S3 docs as an object operation, but it fits better here) + * `POST /?delete` -> `POST /buckets//delete` + +### Object Operations + +*Note* Common method to specify bucket is to prefix bucket name to `Host` header value + +* `GET Object` + * `GET /` -> `GET /buckets//objects/` +* `HEAD Object` + * `HEAD /` -> `HEAD /buckets//objects/` +* `PUT Object` + * `PUT /` -> `PUT /buckets//objects/` +* `DELETE Object` + * `DELETE /` -> `DELETE /buckets//objects/` +* `GET Object acl` + * `GET /?acl` -> `GET /buckets//objects//acl` +* `PUT Object acl` + * `PUT /` -> `PUT /buckets//objects//acl` +* `Initiate Multipart Upload` + * `POST /?uploads` -> `POST /buckets//objects//uploads` +* `Upload Part` + * `PUT /?partNumber=&uploadId=` -> `PUT /buckets//objects//uploads/?partNumber=` +* `Complete Multipart Upload` + * `POST /?uploads` -> `POST /buckets//objects//uploads` +* `Upload Part` + * `DELETE /&uploadId=` -> `DELETE /buckets//objects//uploads/` +* `List Parts` + * `GET /?uploadId=` -> `GET /buckets//objects//uploads/` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/objects.md b/content/riak/cs/3.1.0/developing/apis/s3/objects.md new file mode 100644 index 0000000000..6f7c9303f3 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/objects.md @@ -0,0 +1,45 @@ +--- +title_supertext: "APIs > S3:" +title: "Manage Objects" +description: "" +menu: + riak_cs-3.1.0: + name: "Objects" + identifier: "develop_apis_s3_objects" + weight: 201 + parent: "develop_apis_s3" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: +since: 3.1.0 +--- + +Create, Update, Retrieve, Delete Objects, and Manage their ACLs. + +## Create or Update + +- [Create or Write (PUT) Object](./put-object) +- [Duplicate an Object (PUT with Copy)](./put-object-copy) +- [Upload large Objects (Multi-Part Uploads)](./multipart-uploads) + - [Initiate Multi-Part Upload](./multipart-uploads/initiate-multipart-upload) + - [Upload Parts](./multipart-uploads/upload-part) + - [Complete a Multi-Part Upload](./multipart-uploads/complete-multipart-upload) + - [Abort a Multi-Part Upload](./multipart-uploads/abort-multipart-upload) + - [List the parts already uploaded](./multipart-uploads/list-parts) + - [List Multi-Part Uploads that are still in-progress](./multipart-uploads/list-multipart-uploads) + +## Retrieve + +- [Get an Object](./get-object) +- [Get only the HEAD of an Object](./head-object) + +## Delete + +- [Delete an Object](./delete-object) +- [Delete multiple Objects](./delete-multiple) + +## Manage ACLs + +- [Create or Update ACL for an Object (PUT Object ACL)](./put-object-acl) +- [Get the ACL of an Object](./get-object-acl) diff --git a/content/riak/cs/3.1.0/developing/apis/s3/objects/delete-multiple.md b/content/riak/cs/3.1.0/developing/apis/s3/objects/delete-multiple.md new file mode 100644 index 0000000000..fab5760668 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/objects/delete-multiple.md @@ -0,0 +1,90 @@ +--- +title_supertext: "APIs > S3 > Objects:" +title: "Delete multiple Objects" +description: "" +menu: + riak_cs-3.1.0: + name: "Delete multiple objects" + identifier: "develop_apis_s3_objects_delete_multiple" + weight: 402 + parent: "develop_apis_s3_objects" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-DELETE-Multi + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-DELETE-Multi + - /riakcs/3.1.0/references/apis/storage/s3/delete-multi + - /riak/cs/3.1.0/references/apis/storage/s3/delete-multi +--- + +Multi-object `DELETE` enables you to delete multiple objects from a +bucket at the same time if those objects exist. Multi-object `DELETE`s +require you to `POST` an XML object to Riak CS specifying object key +and version information, as in the example below. + +## Requests + +### Request Syntax + +```curl +POST /?delete HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Content-Length: length +Authorization: signature_value + + + + true + + Key + + + Key + + ... + +``` + +## Example + +### Sample Request + +```curl +POST /?delete HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Content-Length: length +Authorization: signature_value + + + + sample1.txt + + + sample2.txt + + +``` + +### Sample Response + +```curl +HTTP/1.1 200 OK +Date: Wed, 06 Jun 2012 20:47:15 GMT +Connection: close +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) + + + + + sample1.txt + + + sample2.txt + AccessDenied + Access Denied + + +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/objects/delete-object.md b/content/riak/cs/3.1.0/developing/apis/s3/objects/delete-object.md new file mode 100644 index 0000000000..3d1fe4bb5e --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/objects/delete-object.md @@ -0,0 +1,55 @@ +--- +title_supertext: "APIs > S3 > Objects:" +title: "Delete an Object" +description: "" +menu: + riak_cs-3.1.0: + name: "Delete Object" + identifier: "develop_apis_s3_objects_delete" + weight: 401 + parent: "develop_apis_s3_objects" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-DELETE-Object + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-DELETE-Object + - /riakcs/3.1.0/references/apis/storage/s3/delete-object + - /riak/cs/3.1.0/references/apis/storage/s3/delete-object +--- + +The `DELETE Object` operation removes an object, if one exists. + +## Requests + +### Request Syntax + +```curl +DELETE /ObjectName HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Content-Length: length +Authorization: signature_value +``` + +## Examples + +### Sample Request + +The DELETE Object operation deletes the object, `projects-schedule.jpg`. + +```curl +DELETE /projects-schedule.jpg HTTP/1.1 +Host: bucketname.data.basho.com +Date: Wed, 06 Jun 2012 20:47:15 GMT +Authorization: AWS QMUG3D7KP5OQZRDSQWB6:4Pb+A0YT4FhZYeqMdDhYls9f9AM= +``` + +### Sample Response + +```curl +HTTP/1.1 204 No Content +Date: Wed, 06 Jun 2012 20:47:15 GMT +Connection: close +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/objects/get-object-acl.md b/content/riak/cs/3.1.0/developing/apis/s3/objects/get-object-acl.md new file mode 100644 index 0000000000..8fe04ad369 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/objects/get-object-acl.md @@ -0,0 +1,123 @@ +--- +title_supertext: "APIs > S3 > Objects:" +title: "Get the ACL of an Object" +description: "" +menu: + riak_cs-3.1.0: + name: "Get Object ACL" + identifier: "develop_apis_s3_objects_get_acl" + weight: 303 + parent: "develop_apis_s3_objects" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-GET-Object-ACL + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-GET-Object-ACL + - /riakcs/3.1.0/references/apis/storage/s3/get-object-acl + - /riak/cs/3.1.0/references/apis/storage/s3/get-object-acl +--- + +The `GET Object acl` operation uses the `acl` subresource to return the access control list (ACL) of an object. + +*Note:* You must have READ_ACP access to the object to use this operation. + +## Requests + +### Request Syntax + +```curl +GET /ObjectName?acl HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Authorization: signature_value +``` + +### Request Parameters + +The GET Object acl operation doesn't use request parameters. + +## Response Elements + +**AccessControlList** - Container for ACL information (Grant, Grantee, and Permission). + +* *Type*: Container +* *Ancestors*: AccessControlPolicy + +**AccessControlPolicy** - Contains the elements that set the ACL permissions for each grantee. + +* *Type*: String +* *Ancestors*: None + +**DisplayName** - Bucket owner's display name. + +* *Type*: String +* *Ancestors*: AccessControlPolicy.Owner + +**Grant** - Container for `Grantee` and `Permission`. + +* *Type*: Container +* *Ancestors*: AccessControlPolicy.AccessControlList + +**Grantee** - The `ID`, `Emailaddress`, or `uri` of the subject who is being granted permissions. + +* *Type*: String +* *Ancestors*: AccessControlPolicy.AccessControlList.Grant + +**ID** - Bucket owner's ID. + +* *Type*: String +* *Ancestors*: AccessControlPolicy.Owner|AccessControlPolicy.AccessControlList.Grant + +**Owner** - Container for bucket owner information. + +* *Type*: Container +* *Ancestors*: AccessControlPolicy + +**Permission** - Permission granted to the `Grantee` for bucket. + +* *Type*: String +* *Valid Values*: FULL_CONTROL|WRITE|READ_ACP +* *Ancestors*: AccessControlPolicy.AccessControlList.Grant + +## Examples + +### Sample Request + +This request returns the ACL of the object, `basho-process.jpg`. + +```curl +GET /basho-process.jpg?acl HTTP/1.1 +Host:bucket.data.basho.com +Date: Wed, 06 Jun 2012 20:47:15 +0000 +Authorization: AWS QMUG3D7KP5OQZRDSQWB6:4Pb+A0YT4FhZYeqMdDhYls9f9AM= +``` + +### Sample Response + +```curl +HTTP/1.1 200 OK +Date: Wed, 06 Jun 2012 20:47:15 GMT +Last-Modified: Mon, 04 Jun 2012 12:00:00 GMT +Content-Length: 124 +Content-Type: text/plain +Connection: close +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) + + + + 24ef09aa099d10f75aa57c8caeab4f8c8e7faeebf76c078efc7c6caea54ba06a + UserName@basho.com + + + + + 24ef09aa099d10f75aa57c8caeab4f8c8e7faeebf76c078efc7c6caea54ba06a + UserName@basho.com + + FULL_CONTROL + + + +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/objects/get-object.md b/content/riak/cs/3.1.0/developing/apis/s3/objects/get-object.md new file mode 100644 index 0000000000..667687fa75 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/objects/get-object.md @@ -0,0 +1,87 @@ +--- +title_supertext: "APIs > S3 > Objects:" +title: "Get an Object" +description: "" +menu: + riak_cs-3.1.0: + name: "Get Object" + identifier: "develop_apis_s3_objects_get" + weight: 301 + parent: "develop_apis_s3_objects" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-GET-Object + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-GET-Object + - /riakcs/3.1.0/references/apis/storage/s3/get-object + - /riak/cs/3.1.0/references/apis/storage/s3/get-object +--- + +The `GET Object` operation retrieves objects from the Riak CS storage. + +*Note:* You must have READ access to the object to use this operation. If the anonymous user has READ access, you can retrieve an object without using an authorization header. + +GET Object retrieves an object. + +## Requests + +### Request Syntax + +```curl +GET /objectName HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Authorization: signature_value +``` + +## Examples + +### Sample Request + +The following request returns the object, `basho-process.jpg`. + +```curl +GET /basho-process.jpg HTTP/1.1 +Host: bucket.data.basho.com +Date: Wed, 06 Jun 2012 20:47:15 +0000 +Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU= +``` + +### Sample Response + +```curl +HTTP/1.1 200 OK +Date: Wed, 06 Jun 2012 20:48:15 GMT +Last-Modified: Wed, 06 Jun 2012 13:39:25 GMT +ETag: "3327731c971645a398fba9dede5f2768" +Content-Length: 611892 +Content-Type: text/plain +Connection: close +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) +[611892 bytes of object data] +``` + +### Sample Request Using the Range Header + +This sample request asks for only the first `1000` bytes of a `1705` byte file + +```curl +GET build.sh HTTP/1.1 +Host: projects.data.basho.com +Date: Tue, 07 Jan 2014 19:49:11 +0000 +Authorization: AWS QMUG3D7KP5OQZRDSQWB6:4Pb+A0YT4FhZYeqMdDhYls9f9AM= +Range: bytes=0-999 +``` + +### Sample Response Using the Range Header + +```curl +HTTP/1.1 206 Partial Content +Server: BashoData +Date: Tue, 07 Jan 2014 19:49:11 GMT +Content-Type: application/xml +Content-Range: bytes 0-1000/1705 +Content-Length: 1000 +Accept-Ranges: bytes +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/objects/head-object.md b/content/riak/cs/3.1.0/developing/apis/s3/objects/head-object.md new file mode 100644 index 0000000000..776ce791b9 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/objects/head-object.md @@ -0,0 +1,62 @@ +--- +title_supertext: "APIs > S3 > Objects:" +title: "Get only the HEAD of an Object" +description: "" +menu: + riak_cs-3.1.0: + name: "Get Object HEAD" + identifier: "develop_apis_s3_objects_get_head" + weight: 302 + parent: "develop_apis_s3_objects" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-HEAD-Object + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-HEAD-Object + - /riakcs/3.1.0/references/apis/storage/s3/head-object + - /riak/cs/3.1.0/references/apis/storage/s3/head-object +--- + +The `HEAD Object` operation retrieves metadata from an object without returning the object. + +*Note:* You must have READ access to the object to use this operation. + +A HEAD request has the same options as a GET operation on an object, and the HEAD response is identical to the GET response, except that there is no response body. + +## Requests + +### Request Syntax + +```curl +HEAD /ObjectName HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Authorization: signature_value +``` + +## Examples + +### Sample Request + +The following request returns the metadata of an object. + +```curl +HEAD /basho-process.jpg HTTP/1.1 +Host: bucket.data.basho.com +Date: Wed, 06 Jun 2012 20:47:15 +0000 +Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU= +``` + +### Sample Response + +```curl +HTTP/1.1 200 OK +Date: Wed, 06 Jun 2012 20:48:15 GMT +Last-Modified: Wed, 06 Jun 2012 13:39:25 GMT +ETag: "3327731c971645a398fba9dede5f2768" +Content-Length: 611892 +Content-Type: text/plain +Connection: close +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads.md b/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads.md new file mode 100644 index 0000000000..ceca306310 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads.md @@ -0,0 +1,158 @@ +--- +title_supertext: "APIs > S3 > Objects:" +title: "Upload Large Objects" +description: "" +menu: + riak_cs-3.1.0: + name: "Upload Large Objects" + identifier: "develop_apis_s3_objects_multipart_uploads" + weight: 201 + parent: "develop_apis_s3_objects" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-PUT-Object/ + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-PUT-Object/ + - /riakcs/3.1.0/references/apis/storage/s3/multipart-uploads/ + - /riak/cs/3.1.0/references/apis/storage/s3/multipart-uploads/ + - /riakcs/3.1.0/cookbooks/multipart-upload-overview/ + - /riak/cs/3.1.0/cookbooks/multipart-upload-overview/ +--- + +When an Object is too large to upload in a single part, use the Multi-Part Upload +functions to upload the object in smaller parts. + +Multipart upload allows users of Riak CS to do the following: + +- upload large objects, potentially multiple terabytes, as a set of + smaller parts +- pause and resume the upload of a large object +- begin an upload without prior knowledge of the total size of the whole + object + +In general, multipart uploads tend to be more efficient because parts +may be uploaded in parallel. In Riak CS they are designed to both behave +like Amazon S3 multipart uploads and to utilize the same user-facing +API. + +{{% note title="Note on file size limit" %}} +The size limit on individual parts of a multipart upload is 5 gigabytes. +{{% /note %}} + +There are three phases to a multipart upload: **initiation**, **parts +upload**, and **completion**. Each phase is described in more detail +below. + +## Multipart Upload Phases + +### Initiation + +Initiation is done by sending a properly formatted multipart upload +initiation request to Riak CS. If the upload initiation is successful, +the response from Riak CS includes an upload ID. + +This ID is a unique identifier for a particular multipart upload and +*must* be included with all subsequent requests to Riak CS pertaining to +this upload. This includes any of the upload operations described in the +remainder of this document except for listing all active multipart +uploads. + +Metadata may be attached to an object uploaded using multipart upload +just like any other object stored in Riak CS. To do so, the metadata +should be included with the multipart upload initiation request. + +[Read More >>](./initiate-multipart-upload) + +### Parts Upload + +A part upload must include both the upload ID received in response to an +initiation request and a part number. Part numbers should be integers +between 1 and 10,000. These numbers identify a part within the context +of the multipart upload and also specify positioning within the final +object. Uploading a part with a part number that has previously been +uploaded results in the previous part associated with that part number +being overwritten. + +For each part that is uploaded, Riak CS returns an `ETag` header as part +of the response. Each `ETag` value and the part number it corresponds to +should be reserved for use in the multipart upload completion request. + +The size of each part may be in the range of 5MB to 5GB. + +[Read More >>](./upload-part) + +### Completion + +Once a complete multipart upload request is received, Riak CS assembles +the object from the uploaded parts. Subsequently, the object is +presented as a single entity to the user with no difference from any +other object stored in Riak CS. The uploaded parts are no longer +individually accessible. + +A complete multipart upload request *must* include the upload ID and a +list of all part numbers and their corresponding `ETag` values. Riak CS +returns another `ETag` that identifies the completed object. It should +be noted that this `ETag` value is not necessarily an MD5 hash of the +object data and that this fact may cause warnings to be issued by some +client libraries or tools. + +[Read More >>](./complete-multipart-upload) + +## Terminating an upload + +#### Abort Multipart Upload + +A multipart upload request may be aborted prior to sending an upload +completion request. The storage for all parts that have been fully +uploaded will be released. + +Part uploads that are in-progress *may not* have their storage released, +so the abort request should only be sent after all parts already in +progress have uploaded to ensure that all storage is reclaimed. + +Once a multipart upload is aborted, the upload ID is no longer valid. + +[Read More >>](./abort-multipart-upload) + +## Listing uploads + +#### Active Multipart Uploads + +Riak CS can list all of the active multipart uploads for each user +account. The number of multipart uploads included in the response is +capped at 1000. If there are more than 1000 active multipart uploads for +a particular user account, they can be listed by using multiple +requests. + +[Read More >>](./list-multipart-uploads) + +#### Completed Parts From An Active Upload + +Riak CS can list the parts that have been successfully uploaded for a +specific multipart upload. If a multipart upload is comprised of more +than 1000 parts then the parts must be retrieved using multiple parts +requests. + +The results of this request are not intended to be used when sending a +complete multipart upload request. The proper procedure is to record the +part numbers and the associated `ETag` values returned with part upload +responses and use that information when completing a multipart upload. + +[Read More >>](./list-parts) + +## Storage Calculation + +As with [Amazon +S3](http://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html), +once you initiate a multipart upload, Riak CS retains all of the parts +of the upload until it is either completed or aborted. If the upload is +aborted, Riak CS deletes all upload artifacts and they will no longer be + +For example, if a user has uploaded a 10 GB object via multipart upload without +completing the request, the object won't appear in the list objects +result but its object size _will_ be included in the user's usage +statistics. + +Once the user completes the upload, it will show up in the list objects result. +Or, if the user aborts the upload, the user's usage statistics will go down by the object size. diff --git a/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md b/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md new file mode 100644 index 0000000000..43ded8900f --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md @@ -0,0 +1,80 @@ +--- +title_supertext: "APIs > S3 > Objects > Multi-part:" +title: "Riak CS Abort Multipart Upload" +description: "" +menu: + riak_cs-3.1.0: + name: "Abort" + identifier: "develop_apis_s3_objects_multipart_uploads_abort" + weight: 104 + parent: "develop_apis_s3_objects_multipart_uploads" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-Abort-Multipart-Upload + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-Abort-Multipart-Upload + - /riakcs/3.1.0/references/apis/storage/s3/abort-multipart-upload + - /riak/cs/3.1.0/references/apis/storage/s3/abort-multipart-upload +--- + +Aborts a multipart upload. After a multipart upload is aborted, the storage +consumed by any previously uploaded parts will be freed. + +## Requests + +### Request Syntax + +This example shows the syntax for aborting a multipart upload. + +```curl +DELETE /ObjectName?uploadId=UploadId HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Authorization: signatureValue +``` + +### Request Headers + +This implementation of the operation uses only response headers that are common to most responses. For more information, see [Common Riak CS Response Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-response-headers). + +### Request Elements + +This operation does not use request elements. + +## Response + +### Response Headers + +This implementation of the operation uses only response headers that are common to most responses. For more information, see [Common Riak CS Response Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-response-headers). + +### Response Elements + +This operation does not use response elements. + +### Special Errors + +**NoSuchUpload** - The specified multipart upload does not exist. + +## Examples + +### Sample Request + +The following request aborts a multipart upload identified by its upload ID. + +```curl +DELETE /large.iso?uploadId=VXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZA HTTP/1.1 +Host: os.data.basho.com +Date: Mon, 1 Nov 2010 20:34:56 GMT +Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf3/cRonhpaBX5sCYVf1bNRuU= +``` + +### Sample Response + +```curl +HTTP/1.1 204 OK +Date: Mon, 1 Nov 2010 20:34:56 GMT +Content-Length: 0 +Connection: keep-alive +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md b/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md new file mode 100644 index 0000000000..7a5fec4cd0 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md @@ -0,0 +1,171 @@ +--- +title_supertext: "APIs > S3 > Objects > Multi-part:" +title: "Riak CS Complete Multipart Upload" +description: "" +menu: + riak_cs-3.1.0: + name: "Complete" + identifier: "develop_apis_s3_objects_multipart_uploads_complete" + weight: 103 + parent: "develop_apis_s3_objects_multipart_uploads" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-Complete-Multipart-Upload + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-Complete-Multipart-Upload + - /riakcs/3.1.0/references/apis/storage/s3/complete-multipart-upload + - /riak/cs/3.1.0/references/apis/storage/s3/complete-multipart-upload +--- + +Completes a multipart upload by assembling previously uploaded parts. Upon +receiving this request, Riak CS concatenates all the parts in ascending order by +part number to create a new object. The parts list (part number and ETag header +value)must be provided in the Complete Multipart Upload request. + +Processing of a Complete Multipart Upload request could take several minutes to +complete. An HTTP response header that specifies a `200 OK` response is sent +while processing is in progress. After that, Riak CS periodically sends +whitespace characters to keep the connection from timing out. Because a request +could fail after the initial `200 OK` response has been sent, it is important +that you check the response body to determine whether the request succeeded. + +## Requests + +### Request Syntax + +This example shows the syntax for completing a multipart upload. + +```curl +POST /ObjectName?uploadId=UploadId HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Content-Length: size +Authorization: signatureValue + + + + PartNumber + ETag + + ... + +``` + +### Request Headers + +This implementation of the operation uses only response headers that are common to most responses. For more information, see [Common Riak CS Response Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-response-headers). + +### Request Elements + +**CompleteMultipartUpload** - Container for the request. + +* *Type*: Container +* *Children*: One or more `Part` elements +* *Ancestors*: None + +**Part** - Container for elements related to a particular previously uploaded part. + +* *Type*: Container +* *Children*: `PartNumber`, `ETag` +* *Ancestors*: `CompleteMultipartUpload` + +**PartNumber** - Part number that identifies the part. + +* *Type*: Integer +* *Ancestors*: `Part` + +**ETag** - Entity tag returned when the part was uploaded. + +* *Type*: String +* *Ancestors*: `Part` + +## Response + +### Response Headers + +This implementation of the operation uses only response headers that are common to most responses. For more information, see [Common Riak CS Response Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-response-headers). + +### Response Elements + +**CompleteMultipartUploadResult** - Container for the response. + +* *Type*: Container +* *Children*: `Location`, `Bucket`, `Key`, `ETag` +* *Ancestors*: None + +**Location** - The URI that identifies the newly created object. + +* *Type*: URI +* *Ancestors*: `CompleteMultipartUploadResult` + +**Bucket** - The name of the bucket that contains the newly created object. + +* *Type*: String +* *Ancestors*: `CompleteMultipartUploadResult` + +**Key** - The object key of the newly created object. + +* *Type*: String +* *Ancestors*: `CompleteMultipartUploadResult` + +**ETag** - Entity tag that identifies the newly created object's data. + +* *Type*: String +* *Ancestors*: `CompleteMultipartUploadResult` + +### Special Errors + +**EntityTooSmall** - Your proposed upload is smaller than the minimum allowed object size. Each part must be at least 5 MB in size, except the last part. + +**InvalidPart** - One or more of the specified parts could not be found. The part might not have been uploaded, or the specified entity tag might not have matched the part's entity tag. + +**InvalidPartOrder** - The list of parts was not in ascending order. Parts list must specified in order by part number. + +**NoSuchUpload** - The specified multipart upload does not exist. The upload ID might be invalid, or the multipart upload might have been aborted or completed. + +## Examples + +### Sample Request + +The following Complete Multipart Upload request specifies three parts in the `CompleteMultipartUpload` element. + +```curl +POST /large.iso?uploadId=VXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZA HTTP/1.1 +Host: os.data.basho.com +Date: Mon, 1 Nov 2010 20:34:56 GMT +Content-Length: 391 +Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU= + + + + 1 + "a54357aff0632cce46d942af68356b38" + + + 2 + "0c78aef83f66abc1fa1e8477f296d394" + + + 3 + "acbd18db4cc2f85cedef654fccc4a4d8" + + +``` + +### Sample Response + +```curl +HTTP/1.1 200 OK +Date: Mon, 1 Nov 2010 20:34:56 GMT +Connection: close +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) + + + + http://os.data.basho.com/large.iso + os + large.iso + "3858f62230ac3c915f300c664312c11f-9" + +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md b/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md new file mode 100644 index 0000000000..02aba1f27e --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md @@ -0,0 +1,121 @@ +--- +title_supertext: "APIs > S3 > Objects > Multi-part:" +title: "Riak CS Initiate Multipart Upload" +description: "" +menu: + riak_cs-3.1.0: + name: "Initiate" + identifier: "develop_apis_s3_objects_multipart_uploads_initiate" + weight: 101 + parent: "develop_apis_s3_objects_multipart_uploads" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-Initiate-Multipart-Upload/ + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-Initiate-Multipart-Upload/ + - /riakcs/3.1.0/references/apis/storage/s3/initiate-multipart-upload/ + - /riak/cs/3.1.0/references/apis/storage/s3/initiate-multipart-upload/ +--- + +Initiates a multipart upload and returns an upload ID. The upload ID is used to associate all the parts in the specific multipart upload. + +## Requests + +### Request Syntax + +This example shows the syntax for initiating a multipart upload. + +```curl +POST /ObjectName?uploads HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Authorization: signatureValue +``` + +### Request Headers + +**Content-Type** - A standard MIME type that describes the content format. + +* *Type*: String +* *Default*: binary/octet-stream +* *Valid Values*: 100-continue +* *Constraints*: None + +**x-amz-meta-*** - User specified metadata fields which can be stored with the object. + +* *Type*: String +* *Default*: None +* *Constraints*: None + +#### Permission Request Headers + +**x-amz-acl** - This request header specifies a predefined ACL to apply to the object being created. A predefined ACL grants specific permissions to individual accounts or predefined groups. + +* *Type*: String +* *Valid Values*: private | public-read | public-read-write | authenticated-read | bucket-owner-read | bucket-owner-full-control +* *Constraints*: None + +### Request Elements + +This operation does not use request elements. + +## Response + +### Response Headers + +This implementation of the operation uses only response headers that are common to most responses. For more information, see [Common RiakCS Response Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-response-headers). + +### Response Elements + +**InitiateMultipartUploadResult** - Container for response. + +* *Type*: Container +* *Children*: `Bucket`, `Key`, `UploadId` +* *Ancestors*: None + +**Bucket** - Name of the bucket to which the multipart upload was initiated. + +* *Type*: String +* *Children*: `Bucket`, `Key`, `UploadId` +* *Ancestors*: `InitiateMultipartUploadResult` + +**Key** - Object key for which the multipart upload was initiated. + +* *Type*: String +* *Ancestors*: `InitiateMultipartUploadResult` + +**UploadId** - ID for the initiated multipart upload. + +* *Type*: String +* *Ancestors*: `InitiateMultipartUploadResult` + +## Examples + +### Sample Request + +This operation initiates a multipart upload for the `large.iso` object. + +```curl +POST /large.iso?uploads HTTP/1.1 +Host: os.data.basho.com +Date: Mon, 1 Nov 2010 20:34:56 GMT +Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU= +``` + +### Sample Response + +```curl +HTTP/1.1 200 OK +Date: Mon, 1 Nov 2010 20:34:56 GMT +Content-Length: 197 +Connection: keep-alive +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) + + + + os + large.iso + VXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZA + +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md b/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md new file mode 100644 index 0000000000..e16f1cf064 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md @@ -0,0 +1,231 @@ +--- +title_supertext: "APIs > S3 > Objects > Multi-part:" +title: "Riak CS List Multipart Uploads" +description: "" +menu: + riak_cs-3.1.0: + name: "In-Progress Uploads" + identifier: "develop_apis_s3_objects_multipart_uploads_list_multipart_uploads" + weight: 106 + parent: "develop_apis_s3_objects_multipart_uploads" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-List-Multipart-Uploads/ + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-List-Multipart-Uploads/ + - /riakcs/3.1.0/references/apis/storage/s3/list-multipart-uploads/ + - /riak/cs/3.1.0/references/apis/storage/s3/list-multipart-uploads/ +--- + +Lists multipart uploads that have not yet been completed or aborted. + +In the response, the uploads are sorted by key. If your application has +initiated more than one multipart upload using the same object key, then uploads +in the response are first sorted by key. Additionally, uploads are sorted in +ascending order within each key by the upload initiation time. + +## Requests + +### Request Syntax + +This example shows the syntax for listing of multipart uploads. + +```curl +GET /?uploads HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Authorization: signatureValue +``` + +### Request Parameters + +**delimiter** - Character you use to group keys. + +* *Type*: String + +**max-uploads** - Sets the maximum number of multipart uploads, from 1 to 1,000, to return in the response body. + +* *Type*: Integer +* *Default*: 1,000 + +**key-marker** - Together with `upload-id-marker`, this parameter specifies the multipart upload after which listing should begin. + +* *Type*: String + +**prefix** - Lists in-progress uploads only for those keys that begin with the specified prefix. + +* *Type*: String + +**upload-id-​marker** - Together with `key-marker`, specifies the multipart upload after which listing should begin. + +* *Type*: String + +### Request Headers + +This implementation of the operation uses only response headers that are common to most responses. For more information, see [Common RiakCS Response Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-response-headers). + +### Request Elements + +This operation does not use request elements. + +## Response + +### Response Headers + +This implementation of the operation uses only response headers that are common to most responses. For more information, see [Common RiakCS Response Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-response-headers). + +### Response Elements + +**ListMultipartUploadsResult** - Container for the response. + +* *Type*: Container +* *Children*: `Bucket`, `KeyMarker`, `UploadIdMarker`, `NextKeyMarker`, `NextUploadIdMarker`, `MaxUploads`, `Delimiter`, `Prefix`, `CommonPrefixes`, `IsTruncated` +* *Ancestors*: None + +**Bucket** - Name of the bucket to which the multipart upload was initiated. + +* *Type*: String +* *Ancestors*: `ListMultipartUploadsResult` + +**KeyMarker** - The key at or after which the listing began. + +* *Type*: String +* *Ancestors*: `ListMultipartUploadsResult` + +**UploadIdMarker** - Upload ID after which listing began. + +* *Type*: String +* *Ancestors*: `ListMultipartUploadsResult` + +**NextKeyMarker** - When a list is truncated, this element specifies the value that should be used for the key-marker request parameter in a subsequent request. + +* *Type*: Container +* *Ancestors*: `ListMultipartUploadsResult` + +**NextUploadIdMarker** - When a list is truncated, this element specifies the value that should be used for the `upload-id-marker` request parameter in a subsequent request. + +* *Type*: String +* *Ancestors*: `ListMultipartUploadsResult` + +**MaxUploads** - Maximum number of multipart uploads that could have been included in the response. + +* *Type*: Integer +* *Ancestors*: `ListMultipartUploadsResult` + +**IsTruncated** - Indicates whether the returned list of parts is truncated. + +* *Type*: Boolean +* *Ancestors*: `ListPartsResult` + +**Upload** - Container for elements related to a particular multipart upload. + +* *Type*: Container +* *Children*: `Key`, `UploadId`, `InitiatorOwner`, `StorageClass`, `Initiated` +* *Ancestors*: `ListMultipartUploadsResult` + +**Key** - Key of the object for which the multipart upload was initiated. + +* *Type*: Integer +* *Ancestors*: `Upload` + +**UploadId** - Upload ID that identifies the multipart upload. + +* *Type*: Integer +* *Ancestors*: `Upload` + +**Initiator** - Container element that identifies who initiated the multipart upload. + +* *Type*: Container +* *Children*: `ID`, `DisplayName` +* *Ancestors*: `Upload` + +**ID** - Canonical User ID. + +* *Type*: String +* *Ancestors*: `Initiator`, `Owner` + +**DisplayName** - Principal's name. + +* *Type*: String +* *Ancestors*: `Initiator`, `Owner` + +**Owner** - Container element that identifies the object owner, after the object is created. + +* *Type*: Container +* *Children*: `ID`, `DisplayName` +* *Ancestors*: `Upload` + +**Initiated** - Date and time at which the multipart upload was initiated. + +* *Type*: Date +* *Ancestors*: `Upload` + +**ListMultipartUploadsResult.Prefix** - When a prefix is provided in the request, this field contains the specified prefix. + +* *Type*: String +* *Ancestors*: `ListMultipartUploadsResult` + +**Delimiter** - Contains the delimiter you specified in the request. + +* *Type*: String +* *Ancestors*: `ListMultipartUploadsResult` + +**CommonPrefixes** - If you specify a delimiter in the request, then the result returns each distinct key prefix containing the delimiter in a CommonPrefixes element. + +* *Type*: Container +* *Ancestors*: `ListMultipartUploadsResult` + +**CommonPrefixes.Prefix** - If the request does not include the Prefix parameter, then this element shows only the substring of the key that precedes the first occurrence of the delimiter character. These keys are not returned anywhere else in the response. + +* *Type*: String +* *Ancestors*: `CommonPrefixes` + +## Examples + +### Sample Request + +The following request lists three multipart uploads. + +```curl +GET /?uploads HTTP/1.1 +Host: os.data.basho.com +Date: Mon, 1 Nov 2010 20:34:56 GMT +Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU= +``` + +### Sample Response + +```curl +HTTP/1.1 200 OK +Date: Mon, 1 Nov 2010 20:34:56 GMT +Content-Length: 1330 +Connection: keep-alive +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) + + + + os + + + large.iso + + + + + my-divisor + VXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZA + + arn:aws:iam::111122223333:user/user1-11111a31-17b5-4fb7-9df5-b111111f13de + user1-11111a31-17b5-4fb7-9df5-b111111f13de + + + 75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a + OwnerDisplayName + + STANDARD + 2010-11-10T20:48:33.000Z + + ... + +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/list-parts.md b/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/list-parts.md new file mode 100644 index 0000000000..e165ce3188 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/list-parts.md @@ -0,0 +1,201 @@ +--- +title_supertext: "APIs > S3 > Objects > Multi-part:" +title: "Riak CS List Parts" +description: "" +menu: + riak_cs-3.1.0: + name: "List Uploaded Parts" + identifier: "develop_apis_s3_objects_multipart_uploads_list_uploaded_parts" + weight: 105 + parent: "develop_apis_s3_objects_multipart_uploads" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-List-Parts/ + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-List-Parts/ + - /riakcs/3.1.0/references/apis/storage/s3/list-parts/ + - /riak/cs/3.1.0/references/apis/storage/s3/list-parts/ +--- + +Lists the parts that have been uploaded for a specific multipart upload. + +## Requests + +### Request Syntax + +This example shows the syntax for listing parts of a multipart upload. + +```curl +GET /ObjectName?uploadId=UploadId HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Authorization: signatureValue +``` + +### Request Parameters + +**uploadId** - Upload ID identifying the multipart upload whose parts are being listed. + +* *Type*: String +* *Default*: None + +**max-parts** - Sets the maximum number of parts to return in the response body. + +* *Type*: String +* *Default*: 1,000 + +**part-number​-marker** - Specifies the part after which listing should begin. Only parts with higher part numbers will be listed. + +* *Type*: String +* *Default*: None + +### Request Headers + +This implementation of the operation uses only response headers that are common to most responses. For more information, see [Common Riak CS Response Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-response-headers). + +### Request Elements + +This operation does not use request elements. + +## Response + +### Response Headers + +This implementation of the operation uses only response headers that are common to most responses. For more information, see [Common Riak CS Response Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-response-headers). + +### Response Elements + +**ListPartsResult** - Container for the response. + +* *Type*: Container +* *Children*: `Bucket`, `Key`, `UploadId`, `Initiator`, `Owner`, `StorageClass`, `PartNumberMarker`, `NextPartNumberMarker`, `MaxParts`, `IsTruncated`, `Part` + +**Bucket** - Name of the bucket to which the multipart upload was initiated. + +* *Type*: String +* *Ancestors*: `ListPartsResult` + +**Key** - Object key for which the multipart upload was initiated. + +* *Type*: String +* *Ancestors*: `ListPartsResult` + +**UploadId** - Upload ID identifying the multipart upload whose parts are being listed. + +* *Type*: String +* *Ancestors*: `ListPartsResult` + +**Initiator** - Container element that identifies who initiated the multipart upload. + +* *Type*: Container +* *Children*: `ID`, `DisplayName` +* *Ancestors*: `ListPartsResult` + +**ID** - Canonical User ID. + +* *Type*: String +* *Ancestors*: `Initiator` + +**DisplayName** - Principal's name. + +* *Type*: String +* *Ancestors*: `Initiator` + +**Owner** - Container element that identifies the object owner, after the object is created. + +* *Type*: Container +* *Children*: `ID`, `DisplayName` +* *Ancestors*: `ListPartsResult` + +**PartNumberMarker** - Part number after which listing begins. + +* *Type*: Integer +* *Ancestors*: `ListPartsResult` + +**NextPartNumberMarker** - When a list is truncated, this element specifies the last part in the list, as well as the value to use for the `part-number-marker` request parameter in a subsequent request. + +* *Type*: Integer +* *Ancestors*: `ListPartsResult` + +**MaxParts** - Maximum number of parts that were allowed in the response. + +* *Type*: Integer +* *Ancestors*: `ListPartsResult` + +**IsTruncated** - Indicates whether the returned list of parts is truncated. + +* *Type*: Boolean +* *Ancestors*: `ListPartsResult` + +**Part** - Container for elements related to a particular part. + +* *Type*: String +* *Children*: `PartNumber`, `LastModified`, `ETag`, `Size` +* *Ancestors*: `ListPartsResult` + +**PartNumber** - Part number identifying the part. + +* *Type*: Integer +* *Ancestors*: `Part` + +**LastModified** - Date and time at which the part was uploaded. + +* *Type*: Date +* *Ancestors*: `Part` + +**ETag** - Entity tag returned when the part was uploaded. + +* *Type*: String +* *Ancestors*: `Part` + +**Size** - Size of the uploaded part data. + +* *Type*: Integer +* *Ancestors*: `Part` + +## Examples + +### Sample Request + +The following request lists multipart upload parts. + +```curl +GET /large.iso?uploadId=VXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZA HTTP/1.1 +Host: os.data.basho.com +Date: Mon, 1 Nov 2010 20:34:56 GMT +Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU= +``` + +### Sample Response + +```curl +HTTP/1.1 200 OK +Date: Mon, 1 Nov 2010 20:34:56 GMT +Content-Length: 985 +Connection: keep-alive +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) + + + + os + large.iso + VXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZA + + arn:aws:iam::111122223333:user/some-user-11116a31-17b5-4fb7-9df5-b288870f11xx + umat-user-11116a31-17b5-4fb7-9df5-b288870f11xx + + + 75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a + someName + + STANDARD + + 1 + 2010-11-10T20:48:34.000Z + "7778aef83f66abc1fa1e8477f296d394" + 10485760 + + ... + +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/upload-part.md b/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/upload-part.md new file mode 100644 index 0000000000..b1ce7a831d --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/objects/multipart-uploads/upload-part.md @@ -0,0 +1,100 @@ +--- +title_supertext: "APIs > S3 > Objects > Multi-part:" +title: "Upload a Part of a Multi-Part Upload" +description: "" +menu: + riak_cs-3.1.0: + name: "Upload a Part" + identifier: "develop_apis_s3_objects_multipart_uploads_upload_part" + weight: 102 + parent: "develop_apis_s3_objects_multipart_uploads" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-Upload-Part/ + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-Upload-Part/ + - /riakcs/3.1.0/references/apis/storage/s3/upload-part/ + - /riak/cs/3.1.0/references/apis/storage/s3/upload-part/ +--- + +This operation uploads a part in a multipart upload. You must [initiate a multipart upload]({{}}riak/cs/3.0.1/references/apis/storage/s3/initiate-multipart-upload) before you can upload any part. In this operation you provide part data in your request. + +## Requests + +### Request Syntax + +This example shows the syntax for uploading a part in a multipart upload. + +```curl +PUT /ObjectName?partNumber=PartNumber&uploadId=UploadId HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Content-Length: size +Authorization: signatureValue +``` + +### Request Headers + +**Content-Length** - The size of the object in bytes. This header is required. + +* *Type*: String +* *Default*: None +* *Constraints*: None + +**Content-MD5** - The base64-encoded 128-bit MD5 digest of the message without the headers according to RFC 1864. Although this header is optional, the Content-MD5 header can be used to confirm that the data is the same as what was originally sent. + +* *Type*: String +* *Default*: None +* *Constraints*: None + +**Expect** - When you use `100-continue` in your application, it doesn't send the request body until it receives an acknowledgment. That way, the body of the message isn't sent if the message is rejected based on the headers. + +* *Type*: String +* *Default*: None +* *Valid Values*: 100-continue +* *Constraints*: None + +### Request Elements + +This operation does not use request elements. + +## Response + +### Response Headers + +This implementation of the operation uses only response headers that are common to most responses. For more information, see [Common Riak CS Response Headers]({{}}riak/cs/3.0.1/references/apis/storage/s3/common-response-headers). + +### Response Elements + +This operation does not use response elements. + +## Examples + +### Sample Request + +The following `PUT` request uploads part number 1 in a multipart upload. This request includes the upload ID from an [Initiate Multipart Upload]({{}}riak/cs/3.0.1/references/apis/storage/s3/initiate-multipart-upload) request. + +```curl +PUT /large.iso?partNumber=1&uploadId=VXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZA HTTP/1.1 +Host: os.data.basho.com +Date: Mon, 1 Nov 2010 20:34:56 GMT +Content-Length: 10485760 +Content-MD5: pUNXr/BjKK5G2UKvaRRrOA== +Authorization: AWS AKIAIOSFODNN7EXAMPLE:VGhpcyBtZXNzYWdlIHNpZ25lZGGieSRlbHZpbmc= + +[10485760 bytes of object data] +``` + +### Sample Response + +The response includes the `ETag` header. This value must be retained for when you send the [Complete Multipart Upload]({{}}riak/cs/3.0.1/references/apis/storage/s3/complete-multipart-upload) request. + +```curl +HTTP/1.1 200 OK +Date: Mon, 1 Nov 2010 20:34:56 GMT +ETag: "b54357faf0632cce46e942fa68356b38" +Content-Length: 0 +Connection: keep-alive +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/objects/put-object-acl.md b/content/riak/cs/3.1.0/developing/apis/s3/objects/put-object-acl.md new file mode 100644 index 0000000000..c8123e6263 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/objects/put-object-acl.md @@ -0,0 +1,223 @@ +--- +title_supertext: "APIs > S3 > Objects:" +title: "Create or Update ACL for an Object (PUT Object ACL)" +description: "" +menu: + riak_cs-3.1.0: + name: "Set Object ACL" + identifier: "develop_apis_s3_objects_acl" + weight: 102 + parent: "develop_apis_s3_objects" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-PUT-Object-ACL/ + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-PUT-Object-ACL/ + - /riakcs/3.1.0/references/apis/storage/s3/put-object-acl/ + - /riak/cs/3.1.0/references/apis/storage/s3/put-object-acl/ +--- + +The `PUT Object acl` operation uses the `acl` subresource to set the access control list (ACL) permissions for an existing object in a bucket. + +*Note:* You must have WRITE_ACP access to the object to use this operation. + +`PUT Object acl` offers two methods for setting an object's permissions: + +* Specify the ACL in the request body +* Specify permissions using request headers + +*Note*: You can specify an ACL in the request body or with request headers, not both. + +## Requests + +### Request Syntax + +This example shows the syntax for setting the ACL in the request body. The Request Headers section contain a list of headers you can use instead. + +```curl +PUT /ObjectName?acl HTTP/1.1 +Host: bucketname.data.basho.com +Date: date +Authorization: signatureValue + + + + ID + EmailAddress + + + + + ID + EmailAddress + + Permission + + ... + + +``` + +### Request Parameters + +This operation does not use request parameters. + +### Request Headers + +`PUT Object acl` offers the following request headers in addition to the request headers common to all operations. + +**x-amz-acl** - This request header specifies a predefined ACL to apply to the object being created. A predefined ACL grants specific permissions to individual accounts or predefined groups. + +* *Type*: String +* *Valid Values*: private | public-read | public-read-write | authenticated-read | bucket-owner-read | bucket-owner-full-control +* *Default*: private + +### Request Elements + +If you specify the ACL using the request body, you must use the following elements: + +**AccessControlList** - Container for ACL information (Grant, Grantee, and Permission). + +* *Type*: Container +* *Ancestors*: AccessControlPolicy + +**AccessControlPolicy** - Contains the elements that set the ACL permissions for each grantee. + +* *Type*: Container +* *Ancestors*: None + +**DisplayName** - Object owner's display name. + +* *Type*: String +* *Ancestors*: AccessControlPolicy.Owner + +**Grant** - Container for `Grantee` and `Permission`. + +* *Type*: Container +* *Ancestors*: AccessControlPolicy.AccessControlList + +**Grantee** - The subject who is being granted permissions. + +* *Type*: String +* *Valid Values*: DisplayName|EmailAddress|AuthenticatedUser +* *Ancestors*: AccessControlPolicy.AccessControlList.Grant + +**ID** - Object owner's ID. + +* *Type*: String +* *Ancestors*: AccessControlPolicy.Owner|AccessControlPolicy.AccessControlList.Grant + +**Owner** - Container for object owner information. + +* *Type*: Container +* *Ancestors*: AccessControlPolicy + +**Permission** - Permission granted to the `Grantee`. + +* *Type*: String +* *Valid Values*: FULL_CONTROL|WRITE_ACP|READ|READ_ACP +* *Ancestors*: AccessControlPolicy.AccessControlList.Grant + +In request elements, you can specify the grantee to whom you are granting permissions in the following ways: + +* *emailAddress*: The email address of an account + +```xml + + user1@basho.com + +``` + +From the email address, the grantee is resolved to the CanonicalUser. The response to a `GET Object acl` request displays the grantee as the CanonicalUser. + +* *id*: The user ID of an account + +```xml + + ID + GranteesEmail + +``` + +For the id method, DisplayName is optional and ignored in the request. + +* *uri*: The uri that defines a group + +```xml + + http://data.basho.com/groups/AuthenticatedUsers + +``` + +### Response Elements + +PUT Bucket acl does not return response elements. + +## Examples + +### Sample Request with Access Permission Specified in Request Body + +This sample request grants access permission to an existing object, named `basho-process.jpg`, by specifying the ACL in the request body. In addition to granting full control to the bucket owner, grant full control to an account identified by its canonical user ID. + +```curl +PUT /basho-process.jpg?acl HTTP/1.1 +Host: basho_docs.data.basho.com +Date: Fri, 01 Jun 2012 12:00:00 GMT +Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE= +Content-Length: 124 + + + + 75aa57f09aa0c8caeab4f8c24e99d10f8e7faeebf76c078efc7c6caea54ba06a + user1@basho.com + + + + + 75aa57f09aa0c8caeab4f8c24e99d10f8e7faeeExampleCanonicalUserID + user2@basho.com + + FULL_CONTROL + + + +``` + +### Sample Response + +This is the sample response when versioning is enabled. + +```curl +HTTP/1.1 200 OK +Date: Fri, 01 Jun 2012 12:00:00 GMT +Last-Modified:Fri, 01 Jun 2012 10:30:15 GMT +Content-Length: 0 +Connection: close +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) +``` + +### Sample Request Setting Access Permissions with Headers + +The following request uses ACL-specific request headers, x-amz-acl, and specifies a predefined ACL (public_read) to grant object read access to everyone. + +```curl +PUT basho-process.jpg?acl HTTP/1.1 +Host: examplebucket.data.basho.com +x-amz-acl: public-read +Accept: */* +Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE= +Host: data.basho.com +Connection: Keep-Alive +``` + +### Sample Response to Setting Permissions with Headers + +```curl +HTTP/1.1 200 OK +x-amz-id-2: ZDsjJI9E3ke4WK56w5YegkbG6RWPxNQHIQ0CjrjyRVFZhEbabXnBO9w5G7Dmxsgk +x-amz-request-id: 827BD84C13B255B1 +Date: Fri, 01 Jun 2012 12:00:00 GMT +Content-Length: 0 +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/objects/put-object-copy.md b/content/riak/cs/3.1.0/developing/apis/s3/objects/put-object-copy.md new file mode 100644 index 0000000000..97b6d63649 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/objects/put-object-copy.md @@ -0,0 +1,102 @@ +--- +title_supertext: "APIs > S3 > Objects:" +title: "Duplicate an Object (PUT with Copy)" +description: "" +menu: + riak_cs-3.1.0: + name: "Copy an Object" + identifier: "develop_apis_s3_objects_copy" + weight: 103 + parent: "develop_apis_s3_objects" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-PUT-Object-Copy/ + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-PUT-Object-Copy/ + - /riakcs/3.1.0/references/apis/storage/s3/put-object-copy/ + - /riak/cs/3.1.0/references/apis/storage/s3/put-object-copy/ +--- + +The `PUT Object (Copy)` creates a copy of an object that is already stored in Riak CS. Adding the `x-amz-copy-source` HTTP header makes the PUT operation copy the source object into the destination bucket. + +## Access Permissions + +PUT Object (Copy) offers the option to specify the permissions you want to grant to specific accounts or groups for the copied object. You can grant permissions to accounts or groups with request headers, using one of the following two methods: + +* Specify a predefined ACL using the `x-amz-acl` request header. More information about predefined ACLs is available [here](http://docs.amazonwebservices.com/AmazonS3/latest/dev/ACLOverview.html#CannedACL). +* Specify access permissions explicitly using the `x-amz-grant-read`, `x-amz-grant-write`, `x-amz-grant-read-acp`, `x-amz-grant-write-acp`, `x-amz-grant-full-control` headers, which map to the set of ACL permissions supported by Amazon S3. + +{{% note title="Note" %}} +You can use either a predefined ACL or specify access permissions explicitly, +not both. +{{% /note %}} + +*Note*: You can configure an application to use the `100-continue` HTTP status code, which sends the Request Headers prior to sending the request body. Doing so prevents sending the message body when the message is rejected based on the headers, for example, due to authentication failure or redirect). + +## Requests + +### Request Syntax + +```curl +PUT /ObjectNameCopy HTTP/1.1 +Host: bucketname.data.example.com +x-amz-copy-source: /ObjectName +Date: date +Authorization: signature_value +``` + +### Request Headers + +PUT Object (Copy) offers the following request headers in addition to request headers common to all operations: + +**Expect** - When you use `100-continue` in your application, it doesn't send the request body until it receives an acknowledgment. That way, the body of the message isn't sent if the message is rejected based on the headers. + +* *Type*: String +* *Default*: None +* *Valid Values*: 100-continue +* *Constraints*: None + +**x-amz-copy-source** - Path to source object (object to be copied). + +* *Type*: String +* *Default*: None +* *Constraints*: None + +#### Permission Request Headers + +**x-amz-acl** - This request header specifies a predefined ACL to apply to the object being created. A predefined ACL grants specific permissions to individual accounts or predefined groups. + +* *Type*: String +* *Valid Values*: private | public-read | public-read-write | authenticated-read | bucket-owner-read | bucket-owner-full-control +* *Constraints*: None + +## Examples + +### Sample Request + +A request that copies the object, `basho-process.jpg` in the bucket, `basho_docs`. + +```curl +PUT /basho-process.jpg HTTP/1.1 +Host: basho_docs.data.basho.com +x-amz-copy-source: /basho-process.jpg +Date: Mon, 18 Feb 2013 16:38:49 GMT +Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE= +Content-Type: text/plain +Content-Length: 0 +Expect: 100-continue +``` + +### Sample Response + +```curl +HTTP/1.1 100 Continue +HTTP/1.1 200 OK +Server: Riak CS +ETag: "d41d8cd98f00b204e9800998ecf8427e" +Date: Mon, 18 Feb 2013 16:38:49 GMT +Content-Type: text/plain +Content-Length: 0 +Connection: close +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/objects/put-object.md b/content/riak/cs/3.1.0/developing/apis/s3/objects/put-object.md new file mode 100644 index 0000000000..9d2eef461c --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/objects/put-object.md @@ -0,0 +1,152 @@ +--- +title_supertext: "APIs > S3 > Objects:" +title: "Create or Write (PUT) Object" +description: "" +menu: + riak_cs-3.1.0: + name: "Create or Update" + identifier: "develop_apis_s3_objects_create" + weight: 101 + parent: "develop_apis_s3_objects" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: + - /riakcs/3.1.0/references/apis/storage/s3/RiakCS-PUT-Object/ + - /riak/cs/3.1.0/references/apis/storage/s3/RiakCS-PUT-Object/ + - /riakcs/3.1.0/references/apis/storage/s3/put-object/ + - /riak/cs/3.1.0/references/apis/storage/s3/put-object/ +--- + +The `PUT Object` operation adds an object to a bucket. The PUT Object operation does not add partial objects, so a success response indicates that the entire object was added to the bucket. + +*Note:* You must have WRITE permission on a bucket to use this operation. + +Riak CS is a distributed system. If it receives multiple write requests for the same object at the same time, the system will overwrite all but the last object written. If necessary, you can build versioning or object locking into your application. + +To prevent the storage of data corrupted during transmission over a network, the Content-MD5 header instructs Riak CS to compare the object to the MD5 value provided. If the values don't match, the operation returns an error. In addition, if the PUT Object operation calculates the MD5, you can compare the ETag that is returned to the calculated MD5 value. + +*Note*: You can configure an application to use the `100-continue` HTTP status code, which sends the Request Headers prior to sending the request body. Doing so prevents sending the message body when the message is rejected based on the headers, for example, due to authentication failure or redirect). + +## Access Permissions + +PUT Object offers the option to specify the permissions you want to grant to specific accounts or groups for the object. You can grant permissions to accounts or groups with request headers, using one of the following two methods: + +* Specify a predefined ACL using the x-amz-acl request header. More information about predefined ACLs is available [here](http://docs.amazonwebservices.com/AmazonS3/latest/dev/ACLOverview.html#CannedACL). +* Specify access permissions explicitly using the x-amz-grant-read, x-amz-grant-write, x-amz-grant-read-acp, x-amz-grant-write-acp, x-amz-grant-full-control headers, which map to the set of ACL permissions supported by Amazon S3. + +{{% note title="Note" %}} +You can use either a predefined ACL or specify access permissions explicitly, +not both. +{{% /note %}} + +## Requests + +### Request Syntax + +```curl +PUT /ObjectName HTTP/1.1 +Host: bucketname.data.example.com +Date: date +Authorization: signature_value +``` + +### Request Headers + +PUT Object offers the following request headers in addition to request headers common to all operations: + +**Content-Length** - The size of the object in bytes. This header is required. + +* *Type*: String +* *Default*: None +* *Constraints*: None + +**Content-MD5** - The base64-encoded 128-bit MD5 digest of the message without the headers according to RFC 1864. Although this header is optional, the Content-MD5 header can be used to confirm that the data is the same as what was originally sent. + +* *Type*: String +* *Default*: None +* *Constraints*: None + +**Content-Type** - A standard MIME type that describes the content format. + +* *Type*: String +* *Default*: binary/octet-stream +* *Valid Values*: 100-continue +* *Constraints*: None + +**Expect** - When you use `100-continue` in your application, it doesn't send the request body until it receives an acknowledgment. That way, the body of the message isn't sent if the message is rejected based on the headers. + +* *Type*: String +* *Default*: None +* *Valid Values*: 100-continue +* *Constraints*: None + +**x-amz-meta-*** - User specified metadata fields which can be stored with the object. + +* *Type*: String +* *Default*: None +* *Constraints*: None + +#### Permission Request Headers + +**x-amz-acl** - This request header specifies a predefined ACL to apply to the object being created. A predefined ACL grants specific permissions to individual accounts or predefined groups. + +* *Type*: String +* *Valid Values*: private | public-read | public-read-write | authenticated-read | bucket-owner-read | bucket-owner-full-control +* *Constraints*: None + +## Examples + +### Sample Request + +A request that stores the object, `basho-process.jpg` in the bucket, `basho_docs`. + +```curl +PUT /basho-process.jpg HTTP/1.1 +Host: basho_docs.data.basho.com +Date: Fri, 01 Jun 2012 12:00:00 GMT +Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE= +Content-Type: text/plain +Content-Length: 201445 +Expect: 100-continue +[201445 bytes of object data] +``` + +### Sample Response + +```curl +HTTP/1.1 200 OK +Date: Fri, 01 Jun 2012 12:00:00 GMT +ETag: "32cf731c97645a398434535f271b2358" +Content-Length: 0 +Connection: close +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) +``` + +### Sample Request with Predefined Access Permissions + +This request uses an `x-amz-acl` header to specify a predefined ACL to grant READ permission to the public. + +```curl +...Object data in the body... +PUT draftschedule.jpg HTTP/1.1 +Host: myBucket.data.basho.com +x-amz-date: b24cf9553547f8b395dd038b34a81474 +x-amz-acl: public-read +Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE= +Content-Length: 300 +Expect: 100-continue +Connection: Keep-Alive + +...Object data in the body... +``` + +### Sample Response for Predefined Access Permissions + +```curl +HTTP/1.1 200 OK +Date: b24cf9553547f8b395dd038b34a81474 +ETag: "b24cf9553547f8b395dd038b34a81474" +Content-Length: 0 +Server: MochiWeb/1.1 WebMachine/1.9.0 (someone had painted it blue) +``` diff --git a/content/riak/cs/3.1.0/developing/apis/s3/other-clients.md b/content/riak/cs/3.1.0/developing/apis/s3/other-clients.md new file mode 100644 index 0000000000..f6c00cd459 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/other-clients.md @@ -0,0 +1,24 @@ +--- +title_supertext: "APIs > S3:" +title: "Other AWS S3 Clients" +description: "" +menu: + riak_cs-3.1.0: + name: "Other Clients" + identifier: "develop_apis_s3_other_clients" + weight: 401 + parent: "develop_apis_s3" +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: +since: 3.1.0 +--- + +You can use most AWS-S3-compatible clients with Riak CS. + +For example: + +- [DragonDisk](./dragondisk) +- [Fog](./fog) +- [Transmit](./transmit) diff --git a/content/riak/cs/3.1.0/developing/apis/s3/other-clients/dragondisk.md b/content/riak/cs/3.1.0/developing/apis/s3/other-clients/dragondisk.md new file mode 100644 index 0000000000..7a57df57bf --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/other-clients/dragondisk.md @@ -0,0 +1,331 @@ +--- +title: "Configuring DragonDisk" +description: "" +menu: + riak_cs-3.1.0: + name: "Dragondisk on Riak CS" + identifier: "develop_apis_s3_other_clients_dragondisk" + weight: 401 + parent: "develop_apis_s3_other_clients" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/configuration/dragondisk/ + - /riakcs/3.1.0/cookbooks/configuration/dragondisk/ + - /riakcs/3.1.0/cookbooks/configuration/Configuring-DragonDisk/ + - /riak/cs/3.1.0/cookbooks/configuration/Configuring-DragonDisk/ +--- + +[DragonDisk](http://www.dragondisk.com/) is a cross-platform, +S3-compatible client with a graphical user interface available for +Linux, Mac OS X, and Windows. The following guide describes +configuration of DragonDisk for use with Riak CS. + +## Configuration for Linux + +DragonDisk is available for multiple Linux distributions. This section +specifically describes configuration for Ubuntu Linux version 12.04 +(Precise Pangolin) 32 bit, but the configuration will be similar for +other Linux distributions. + +This is the main DragonDisk window as it appears upon starting the +application. + +![DragonDisk screenshot]({{}}images/dragondisk_linux0.png) + +## Create an account + +Before you can connect DragonDisk to Riak CS, you'll need to create and +save an account. The following describes the process for doing so. + +* From the **File** menu, select **Accounts**. + +![DragonDisk screenshot]({{}}images/dragondisk_linux1.png) + +* Click **New**. + +![DragonDisk screenshot]({{}}images/dragondisk_linux2.png) + +* In the **Account** dialog window, choose **Other S3 compatible + service** under the **Provider** drop down menu. + +![DragonDisk screenshot]({{}}images/dragondisk_linux3.png) + +* Enter the hostname or IP address of your Riak CS cluster's public + interface into the **Service Endpoint** field. +* Enter your Riak CS username into the **Account name** field. +* Enter the access key associated with your username into the **Access + Key** field. +* Enter the secret key associated with your username into the **Secret + Key** field. +* Enter the Riak CS public interface HTTP port into the **HTTP Port** + field. + +{{% note title="Note on HTTPS" %}} +If you'll be using HTTPS, be sure to enter the correct public HTTPS port into +the **HTTPS Port** field and click the **Connect using SSL/HTTS** check box. +{{% /note %}} + +* Click **OK** to save the account configuration. + +![DragonDisk screenshot]({{}}images/dragondisk_linux4.png) + +* Click **Close** to complete account creation and to continue to + attempt connecting to Riak CS. + +![DragonDisk screenshot]({{}}images/dragondisk_linux5.png) + +### Connect to Riak CS + +Now let's try to connect to Riak CS with the newly defined account +configuration. + +* In the **Root** drop down menu on the right pane of the DragonDisk + interface, select the **Riak CS** account definition that you created. +* If no error occurs and you see the account definition appear in the + right pane, then you're connected to Riak CS and can proceed to + creating a bucket. + +![DragonDisk screenshot]({{}}images/dragondisk_linux6.png) + +### Create a bucket + +Now that you're connected, create a bucket for testing file access with +Riak CS. + +* Click the **Create bucket** icon to open the bucket creation dialog. + +![DragonDisk screenshot]({{}}images/dragondisk_linux7.png) + +* In the **Create bucket** dialog, give the bucket a name. In this + example we're naming the bucket `dragondisklinux`. +* Click **OK** to create the bucket. +* The bucket should now appear in the right pane and you can now proceed + with copying some test files into the bucket. + +![DragonDisk screenshot]({{}}images/dragondisk_linux8.png) + +### Copy files to bucket + +Finally, navigate your local computer in the left pane and select a file +or files to copy from your local computer to the newly created Riak CS +bucket. + +![DragonDisk screenshot]({{}}images/dragondisk_linux9.png) + +* After selecting a file or files, you can drag them to the bucket you + created in the right pane and the copy operation will begin. +* After the files are copied, they'll appear in the bucket. + +![DragonDisk screenshot]({{}}images/dragondisk_linux10.png) + +* You have now successfully verified connectivity, bucket creation, and + file copying operations for your Riak CS installation with DragonDisk. + +Consult the [DragonDisk +documentation](http://www.dragondisk.com/getting-started-guide.html) for +details on performing other operations. + +## Configuration for Mac OS X + +This section describes configuration of DragonDisk for Mac OS X. + +* This is the main DragonDisk window as it appears upon starting the + application. + +![DragonDisk screenshot]({{}}images/dragondisk_osx0.png) + +### Create an account + +Before you can connect DragonDisk to Riak CS, you'll need to create and +save an account. The following describes the process for doing so. + +* From the **File** menu, select **Accounts**. + +![DragonDisk screenshot]({{}}images/dragondisk_osx1.png) + +* Click **New**. + +![DragonDisk screenshot]({{}}images/dragondisk_osx2.png) + +* In the **Account** dialog window, choose **Other S3 compatible + service** under the **Provider** drop down menu. + +![DragonDisk screenshot]({{}}images/dragondisk_osx3.png) + +* Enter the hostname or IP address of your Riak CS cluster's public + interface into the **Service Endpoint** field. +* Enter your Riak CS username into the **Account name** field. +* Enter the access key associated with your username into the **Access + Key** field. +* Enter the secret key associated with your username into the **Secret + Key** field. +* Enter the Riak CS public interface HTTP port into the **HTTP Port** + field. + +{{% note title="Note on HTTPS" %}} +If you'll be using HTTPS, be sure to enter the correct public HTTPS port into +the **HTTPS Port** field and click the **Connect using SSL/HTTS** check box. +{{% /note %}} + +* Click **OK** to save the account configuration. + +![DragonDisk screenshot]({{}}images/dragondisk_osx4.png) + +* Click **Close** to complete account creation and continue try + connecting to Riak CS. + +![DragonDisk screenshot]({{}}images/dragondisk_osx5.png) + +### Connect to Riak CS + +Now let's try to connect to Riak CS with the newly defined account +configuration. + +* In the **Root** drop down menu on the right pane of the DragonDisk + interface, select the **Riak CS** account definition that you created. +* If no error occurs and you see the account definition appear in the + right pane, then you're connected to Riak CS and can proceed to + creating a bucket. + +![DragonDisk screenshot]({{}}images/dragondisk_osx6.png) + +### Create a bucket + +Now that you're connected, create a bucket for testing file access with +Riak CS. + +* Click the **Create bucket** icon to open the bucket creation dialog. + +![DragonDisk screenshot]({{}}images/dragondisk_osx7.png) + +* In the **Create bucket** dialog, give the bucket a name. In this + example we're naming the bucket *dragondiskosx*. +* Click **OK** to create the bucket. +* The bucket should now appear in the right pane and you can now proceed + with copying some test files into the bucket. + +![DragonDisk screenshot]({{}}images/dragondisk_osx8.png) + +### Copy files to bucket + +Finally, navigate your local computer in the left pane and select a file +or files to copy from your local computer to the newly created Riak CS +bucket. + +![DragonDisk screenshot]({{}}images/dragondisk_osx9.png) + +* After selecting a file or files, you can drag them to the bucket you + created in the right pane and the copy operation will begin. + +* After the files are copied, they'll appear in the bucket. + +![DragonDisk screenshot]({{}}images/dragondisk_osx10.png) + +* You have now successfully verified connectivity, bucket creation, and +file copying operations for your Riak CS installation with DragonDisk. + +Consult the [DragonDisk +documentation](http://www.dragondisk.com/getting-started-guide.html) for +details on performing other operations. + +## Configuration for Windows + +This section describes configuration of DragonDisk for Windows. + +* This is the main DragonDisk window as it appears upon starting the + application. + +![DragonDisk screenshot]({{}}images/dragondisk_windows0.png) + +### Create an account + +Before you can connect DragonDisk to Riak CS, you'll need to create and +save an account. The following describes the process for doing so. + +* From the **File** menu, select **Accounts**. + +![DragonDisk screenshot]({{}}images/dragondisk_windows1.png) + +* Click **New**. + +![DragonDisk screenshot]({{}}images/dragondisk_windows2.png) + +* In the **Account** dialog window, choose **Other S3-compatible + service** under the **Provider** drop down menu. + +![DragonDisk screenshot]({{}}images/dragondisk_windows3.png) + +* Enter the hostname or IP address of your Riak CS cluster's public + interface into the **Service Endpoint** field. +* Enter your Riak CS username into the **Account name** field. +* Enter the access key associated with your username into the **Access + Key** field. +* Enter the secret key associated with your username into the **Secret + Key** field. +* Enter the Riak CS public interface HTTP port into the **HTTP Port** + field. + +{{% note title="Note on HTTPS" %}} +If you'll be using HTTPS, be sure to enter the correct public HTTPS port into +the **HTTPS Port** field and click the **Connect using SSL/HTTS** check box. +{{% /note %}} + +* Click **OK** to save the account configuration. + +![DragonDisk screenshot]({{}}images/dragondisk_windows4.png) + +* Click **Close** to complete account creation and continue try + connecting to Riak CS. + +![DragonDisk screenshot]({{}}images/dragondisk_windows5.png) + +### Connect to Riak CS + +Now let's try to connect to Riak CS with the newly defined account +configuration. + +* In the **Root** drop down menu on the right pane of the DragonDisk + interface, select the **Riak CS** account definition that you created. +* If no error occurs and you see the account definition appear in the + right pane, then you're connected to Riak CS and can proceed to + creating a bucket. + +![DragonDisk screenshot]({{}}images/dragondisk_windows6.png) + +### Create a bucket + +* Now that you're connected, create a bucket for testing file access + with Riak CS. +* Click the **Create bucket** icon to open the bucket creation dialog. + +![DragonDisk screenshot]({{}}images/dragondisk_windows7.png) + +* In the **Create bucket** dialog, give the bucket a name. In this + example we're naming the bucket *dragonbucket*. +* Click **OK** to create the bucket. +* The bucket should now appear in the right pane and you can now proceed + with copying some test files into the bucket. + +![DragonDisk screenshot]({{}}images/dragondisk_windows8.png) + +### Copy files to bucket + +Finally, navigate your local computer in the left pane and select a file +or files to copy from your local computer to the newly created Riak CS +bucket. + +![DragonDisk screenshot]({{}}images/dragondisk_windows9.png) + +* After selecting a file or files, you can drag them to the bucket you + created in the right pane and the copy operation will begin. +* After the files are copied, they'll appear in the bucket. + +![DragonDisk screenshot]({{}}images/dragondisk_windows10.png) + +* You have now successfully verified connectivity, bucket creation, and +file copying operations for your Riak CS installation with DragonDisk. + +Consult the [DragonDisk +documentation](http://www.dragondisk.com/getting-started-guide.html) for +details on performing other operations. diff --git a/content/riak/cs/3.1.0/developing/apis/s3/other-clients/fog.md b/content/riak/cs/3.1.0/developing/apis/s3/other-clients/fog.md new file mode 100644 index 0000000000..e9ae9cc32b --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/other-clients/fog.md @@ -0,0 +1,154 @@ +--- +title: "Fog on Riak CS" +description: "" +menu: + riak_cs-3.1.0: + name: "Fog on Riak CS" + identifier: "develop_apis_s3_other_clients_fog" + weight: 402 + parent: "develop_apis_s3_other_clients" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/fog/ + - /riakcs/3.1.0/cookbooks/fog/ +--- + +Fog is a general cloud services library written in Ruby. It is built to +support as many cloud providers as possible, ranging from most AWS +services to Rackspace, Linode, Joyent, and beyond, and this includes an +extension for Riak CS. + +You can install it via [RubyGems](http://rubygems.org/): + +```bash +gem install fog +``` + +Or using [Bundler](http://gembundler.com/): + +```ruby +gem "fog", "~> 1.10.1" +``` + +## User Management + +The first thing that needs to be done when using Fog is creating a new +user. Before you can do that, however, you must create connections to +your Riak CS server to handle communication to different services. + +### Setup + +First, create a new instance of the provisioning object (capitalized +constants are to be set by you). + +```ruby +client = Fog::RiakCS::Provisioning.new( + :riakcs_access_key_id => RIAK_CS_ADMIN_KEY, + :riakcs_secret_access_key => RIAK_CS_ADMIN_SECRET, + :host => RIAK_CS_HOST, + :port => RIAK_CS_PORT +) +``` + +### Create User + +The following command creates a user, given an email or name. This will +either return a response object or raise an error if the operation +fails. The response body will contain a JSON document containing the +user's information, while the `key_id` is required for further +operations on the user. + +```ruby +response = client.create_user(email, name) +``` + +### List Users + +You can list the users in the current Riak CS cluster, optionally +filtering by the user's status. The response body is an array of hashes +representing each matching user. + +```ruby +users = client.list_users(:status => 'enabled') +``` + +### Get User + +With the user's `key_id` (`riakcs_access_key_id`), `get_user` either +returns a JSON document describing the user or raises and error if the +user doesn't exist. + +```ruby +user = client.get_user(key_id) +user.body +# {"key_secret"=>"XXX", "display_name"=>"dizzy", "email"=>"dizzy@basho.com", "status"=>"enabled", "name"=>"Eric Redmond", "key_id"=>"YYY", "id"=>"ZZZ"} +``` + +### Manage User + +You can enable or disable users' access with the following commands. + +```ruby +client.enable_user(key_id) +client.disable_user(key_id) +``` + +You can also revoke users' current credentials and grant new +credentials. The `regrant_secret` function returns a JSON document with +the users' refreshed credentials. + +```ruby +client.regrant_secret(key_id) +``` + +## Usage Retrieval + +Fetches information about Riak CS requests. + +### Setup + +First, create a new instance of the Usage object. + +```ruby +usage = Fog::RiakCS::Usage.new( + :riakcs_access_key_id => RIAK_CS_ADMIN_KEY, + :riakcs_secret_access_key => RIAK_CS_ADMIN_SECRET, + :host => RIAK_CS_HOST, + :port => RIAK_CS_PORT +) +``` + +The example below is targeted at [riakcs.net](https://www.riakcs.net): + +```ruby +usage = Fog::RiakCS::Usage.new( + :riakcs_access_key_id => 'XXXPRQ_MVWUC7QZ5OBHF', + :riakcs_secret_access_key => 'Hhti-b9YFBjYkFgFFq5PbrOs2pFgBIhu3LF6Aw==', + :host => 'data.riakcs.net', + :port => 8080 +) +``` + +**Note**: You may use regular (non-admin) credentials for usage +retrieval if you are accessing your own usage. + +### Get usage + +The `get_usage` method returns usage information for the +`requested_key_id`. You can choose which type of usage you want via the +`:types` attribute: `:access` or `:storage` (defaults to both). You may +also specify a `:start_time` and an `:end_time` (this defaults to the +previous 24-hour window). You'll receive a response object, whose `body` +is a nested set of hashes containing usage data broken down by `type`, +and further by `node`. + +```ruby +response = client.get_usage(requested_key_id, + :types => [:access, :storage], + :start_time => start_time, + :end_time => end_time) +``` + +If user access is denied, it will return a `Excon::Errors::Forbidden` +error. diff --git a/content/riak/cs/3.1.0/developing/apis/s3/other-clients/transmit.md b/content/riak/cs/3.1.0/developing/apis/s3/other-clients/transmit.md new file mode 100644 index 0000000000..0f321c1ea7 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/other-clients/transmit.md @@ -0,0 +1,82 @@ +--- +title: "Transmit on Riak CS" +description: "" +menu: + riak_cs-3.1.0: + name: "Transmit on Riak CS" + identifier: "develop_apis_s3_other_clients_transmit" + weight: 403 + parent: "develop_apis_s3_other_clients" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/cookbooks/configuration/transmit/ + - /riak/cs/3.1.0/cookbooks/configuration/transmit/ + - /riakcs/3.1.0/cookbooks/configuration/Configuring-Transmit/ + - /riak/cs/3.1.0/cookbooks/configuration/Configuring-Transmit/ +--- + +[Transmit](https://www.panic.com/transmit/) is an S3-compatible client with a +graphical user interface for Mac OS X. The following guide describes configuration of Transmit for use with Riak CS. + +{{% note title="Note" %}} +S3 support was added in Transmit version 4.4, so ensure that you're following +along with a version that supports S3 before continuing. +{{% /note %}} + +## Define a Connection + +When Transmit is started, a new connection window appears. Ensure that you've +selected the **S3** tab, then complete the details in the **Connect to S3** +dialog as follows: + +* **Server** --- Enter the fully qualified domain name of the Riak CS server here. Be sure that this matches the value specified for `cs_root_host` in the Riak CS `app.config`. + +* **Access Key ID** --- Enter the Access Key ID (`key_id`) for the user account you will use to connect to Riak CS. + +* **Secret** --- Enter the Access Key Secret (`key_secret`) matching the user account you entered for the Access Key ID above. + +* **Initial Path** --- If you're connecting to a Riak CS instance with existing buckets to which the user account has access, you can optionally enter a specific bucket name to use for this connection here. + +Defining a connection looks like this: + +![Trasmit screenshot]({{}}images/riak_cs_transmit0.jpg) + +> **Note** +> +> Transmit expects a secure connection, so ensure that your Riak CS proxy server is configured with SSL support. For information on configuring a software solution like HAProxy with SSL for use with Riak CS, see [Load Balancing and Proxy Configuration]({{}}riak/cs/3.0.1/cookbooks/configuration/load-balancing-proxy). + +Finally, test the connection to Riak CS by clicking **Connect**. + +## Create a Bucket + +After successfully connecting to Riak CS, verify that you can create a bucket. + +1. From the **File** menu, select **New Bucket...** +2. In the bucket creation dialog, enter the name of the new bucket +3. Click **Create** + +The new bucket creation dialog looks like this: + +![Trasmit screenshot]({{}}images/riak_cs_transmit1.jpg) + +The newly created bucket is listed in the right hand pane of the Transmit interface: + +![Trasmit screenshot]({{}}images/riak_cs_transmit2.jpg) + +## Copy Files + +Now that you've created a bucket, you can perform a basic file copy test. + +Double-click the bucket icon in the right hand pane of the Transmit interface +to access the bucket. + +Drag and drop one or more files to the right hand pane to initiate +copying of the files to the bucket. + +After copying, the files will appear in the bucket: + +![Trasmit screenshot]({{}}images/riak_cs_transmit3.jpg) + +You have now successfully configured a Transmit connection to Riak CS and +verified basic file copying capabilities. diff --git a/content/riak/cs/3.1.0/developing/apis/s3/s3-client.md b/content/riak/cs/3.1.0/developing/apis/s3/s3-client.md new file mode 100644 index 0000000000..bc70058c3e --- /dev/null +++ b/content/riak/cs/3.1.0/developing/apis/s3/s3-client.md @@ -0,0 +1,164 @@ +--- +title_supertext: "APIs > S3:" +title: "Configuring an S3 Client" +description: "" +menu: + riak_cs-3.1.0: + name: "Configuring an S3 Client" + identifier: "develop_apis_s3_config_s3_client" + weight: 101 + parent: "develop_apis_s3" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/configuring/Configuring-an-S3-Client/ + - /riak/cs/3.1.0/configuring/Configuring-an-S3-Client/ + - /riakcs/3.1.0/cookbooks/configuration/s3-client/ + - /riak/cs/3.1.0/cookbooks/configuration/s3-client/ +--- + +This tutorial will show you how to use [s3cmd](http://s3tools.org/s3cmd) +as an S3 client. While it won't cover all of the client's features, it +will show you how to create a configuration and run some basic commands. + +>**Warning: s3cmd Signature Version** +> +> If you are using s3cmd version 1.5.0 or greater you will need to append the +> `--signature-v2` flag to every command that targets a Riak CS cluster to have +> s3cmd use the AWS Signature version 2 rather than the default AWS Signature +> version 3 + +## Initial Setup + +To use s3cmd in conjunction with Riak CS, you must configure it to +interact with your Riak CS system. One way to do so is to create a +`.s3cfg` file and store it in your home directory. When you run any +s3cmd-related command, the contents of that file will be read by +default. Alternatively, you can specify a non-default configuration +file location using the `-c` flag. Here's an example: + +```bash +s3cmd -c /PATH/TO/CONFIG/FILE +``` + +Another way to configure s3cmd is to run `s3cmd --configure`, which +launches an interactive tool that will assemble a configuration file for +you on the basis of what you enter. + +In the next section you'll find a few sample `.s3cfg` files that can be +used to configure s3cmd to interact with Riak CS. + +## Sample s3cmd Configuration File for Local Use + +Use this `.s3cfg` configuration file example to interact with Riak CS +locally via port `8080` with s3cmd (remember to use information specific +to your Riak CS installation where necessary): + +```config +[default] +access_key = 8QON4KC7BMAYYBCEX5J+ +bucket_location = US +cloudfront_host = cloudfront.amazonaws.com +cloudfront_resource = /2010-07-15/distribution +default_mime_type = binary/octet-stream +delete_removed = False +dry_run = False +enable_multipart = False +encoding = UTF-8 +encrypt = False +follow_symlinks = False +force = False +get_continue = False +gpg_command = /usr/local/bin/gpg +gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s +gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s +gpg_passphrase = password +guess_mime_type = True +host_base = s3.amazonaws.com +host_bucket = %(bucket)s.s3.amazonaws.com +human_readable_sizes = False +list_md5 = False +log_target_prefix = +preserve_attrs = True +progress_meter = True +proxy_host = localhost +proxy_port = 8080 +recursive = False +recv_chunk = 4096 +reduced_redundancy = False +secret_key = rGyDLBi7clBuvrdrkFA6mAJkwJ3ApUVr4Pr9Aw== +send_chunk = 4096 +simpledb_host = sdb.amazonaws.com +skip_existing = False +socket_timeout = 300 +urlencoding_mode = normal +use_https = False +verbosity = WARNING +signature_v2 = True +``` + +## Sample s3cmd Configuration File for Production Use + +Use this `.s3cfg` configuration file example to interact with Riak CS +using s3cmd in a production system: + +```config +[default] +access_key = EJ8IUJX9X0F2P9HAMIB0 +bucket_location = US +cloudfront_host = cloudfront.amazonaws.com +cloudfront_resource = /2010-07-15/distribution +default_mime_type = binary/octet-stream +delete_removed = False +dry_run = False +enable_multipart = False +encoding = UTF-8 +encrypt = False +follow_symlinks = False +force = False +get_continue = False +gpg_command = /usr/local/bin/gpg +gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s +gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s +gpg_passphrase = password +guess_mime_type = True +host_base = +host_bucket = %(bucket)s. +human_readable_sizes = False +list_md5 = False +log_target_prefix = +preserve_attrs = True +progress_meter = True +proxy_host = +proxy_port = 0 +recursive = False +recv_chunk = 4096 +reduced_redundancy = False +secret_key = XOY/9IFKVEDUl6Allrkj7oyH9XW+CANnFLEVuw== +send_chunk = 4096 +simpledb_host = sdb.amazonaws.com +skip_existing = False +socket_timeout = 300 +urlencoding_mode = normal +use_https = True +verbosity = WARNING +signature_v2 = True +``` + +To configure the s3cmd client for the user, you must change the +`access_key` and `secret_key` settings. + +## Specifying Storage Location + +By default, the `.s3cfg` file uses the Amazon S3 service as the storage +backend. For a Riak CS system, change the following settings to point to +your storage system: + +* `host_base` --- Specify the domain name or the path to your data + storage, such as `data.example.com` +* `host_bucket` --- Specify the bucket location, such as + `my_cs_bucket.data.example.com`. + +## Enabling SSL in the Client + +If you are using SSL, set `use_https` equal to `True`. diff --git a/content/riak/cs/3.1.0/developing/usage-and-billing-data.md b/content/riak/cs/3.1.0/developing/usage-and-billing-data.md new file mode 100644 index 0000000000..8abed07107 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/usage-and-billing-data.md @@ -0,0 +1,390 @@ +--- +title_supertext: "Developing:" +title: "Usage and Billing Data" +description: "" +menu: + riak_cs-3.1.0: + name: "Usage and Billing Data" + identifier: "develop_usage_billing" + weight: 500 + parent: "develop" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/Usage-and-Billing-Data/ + - /riakcs/3.1.0/cookbooks/Usage-and-Billing-Data/ + - /riak/cs/3.1.0/cookbooks/usage-and-billing-data/ + - /riakcs/3.1.0/cookbooks/usage-and-billing-data/ +--- + +Like many other object storage systems, Riak CS gathers a variety of +usage statistics and makes them available through its administrative +API. + +{{% note title="Note on terminology" %}} +In this and other documents in the Riak CS documentation, the terms "storage" +and "billing" are used interchangeably. The same goes for the terms "usage" +and access. +{{% /note %}} + +## Access Statistics + +Access stats are tracked on a per-user basis, as rollups for slices of +time. They are stored just like other Riak CS data, in the `cs.access` +bucket in particular. For information about querying access statistics, +please read [Querying Access Statistics](./access-statistics). + +## Overview + +The basic process driving usage and billing data in Riak CS is the +following: + +1. Riak CS determines whom, if anyone, should be billed for each access +2. Riak CS send this and some statistical information about the + accesses to an aggregation subsystem +3. The aggregation subsystem periodically sends its accumulated log to + be archived +4. The archival subsystem sums all recorded accesses for each user and + stores a record for each user for the time slice + +Log retrieval then involves simply making a request to Riak for all +slice objects for a user in a time period. No access data will be logged +unless the user for the access is known. + +### Tracked Statistics + +Several statistics are logged automatically is a user is specified for +the request: + +* `Count` --- the number of times this operation was used, where each + request counts as one (1) +* `BytesIn` --- the number of bytes that were included in the request + body +* `BytesOut` --- the number of bytes that were sent in the response body + +For successful requests, each of these stats is logged under the name +given. For unsuccessful requests, they are logged under this name with a +prefix of either `SystemError` for requests that end in response codes +500+, or `UserError` for requests that end in response codes 400-499. +For example, if a user tries to download a nonexistent file, it will be +logged under `UserErrorCount` with the bytes of the message logged under +`UserErrorBytesOut`. + +These three metrics are logged for each operation separately. The access +logger determines the operation type by comparing the method, resource +module, and path to a known table. For example, it knows that a `GET` on +the *key* module with the `acl` query parameter in the path is a +`KeyReadACL` operation. A `PUT` to the same resource without the `acl` +query parameter is a `KeyWrite` operation. See [Querying Access Statistics](./access-statistics) for a list of all operation types. + +### Log Accumulation + +As resources finish their processing, the access logger module is called +by Webmachine to log the access. This module implements a server that +finds all of the access notes in the request's log data and stores them +until the current interval ends. + +When the current interval ends, the access module transfers ownership of +its accumulated data to the archiver module. The logger module then +resets for logging the next slice's accesses. + +#### Interval Duration + +The length of the log flushing interval is configured by the application +environment variable `access_log_flush_factor`. The value is expressed +as an integer divisor of the `access_archive_period` setting. That is, +if `access_log_flush_factor` is 5 and `access_archive_period` is 3600 +(== 1 hour) seconds, the log will be flushed every 720 seconds (== 12 +minutes), which is 5 times per archive period. + +The value of `access_log_flush_factor` must be an integer factor of +`access_archive_period`. If the factor does not divide the period +evenly, an error will be printed in the log, and the Riak CS node will +refuse to start. + +The default value for `access_log_flush_factor` is 1 (once per archive +period). These settings may be manipulated in the Riak CS `app.config` +file, normally located at `/etc/riak-cs/app.config`. + +#### Log Size Trigger for Archival + +Archival of the access log will also be triggered if the number of +records waiting to be archived reaches a certain configured level. When +the threshold is reached, all accumulated records are transferred to the +archiver, which writes out a sample with *now* as the end-time. +Accumulation is then restarted with *now* as the start time, and will +continue until either the end of the time interval or until the log +threshold is reached again. + +This level is configured by the application environment variable +`access_log_flush_size`. Its default value is `1000000` (one million). + +#### Backlog Caveat + +If the logger finds itself so far behind that it would need to schedule +its next archival in the past---that is, after sending a log +accumulation for interval N to the archiver, it finds that the end of +interval N+1 has already passed---the logger will drop the backlog in +its message box by exiting and allowing its supervisor process to +restart it. Just before exiting, it will print an error message +describing how far behind it was: + +```log +09:56:02.584 [error] Access logger is running 302 seconds behind, skipping 0 log messages to catch up +``` + +With the default one-hour archive period, this case will only be +encountered when the logger is an entire hour behind. This behavior is +meant as a safety valve to prevent that hour lag from growing due to +memory pressure from the logger processes's message queue. + +#### Manually Triggering Archival + +When taking a machine out of service, it may be desirable to trigger log +archival before the end of the interval. To do so, use the +`riak-cs-access` script with the command `flush`. It should be installed +on the same path as the `riak-cs` script. For most OS distributions this +will be at `/usr/local/sbin`. + +By default, the script will wait up to 50 seconds for the logger to +acknowledge that it has passed its accumulation to the archiver and +another 50 seconds for the archiver to acknowledge that it has finished +archiving all accumulations it has received. To wait longer, use the +`-w` parameter on the command line with an integer number of 5-second +intervals to wait. That is, to wait for 100 seconds for each phase, use: + +```bash +riak-cs-access flush -w 20 +``` + +### Archive Retrieval + +When a request is received for a user's access stats over some time +period, the objects for all intervals in that time period must be +retrieved. + +It is important to note that the archival process does not attempt a +read/modify/write cycle when writing a slice record. The `cs.access` +bucket should have the `allow_mult=true` flag set, and so multiple Riak +CS nodes writing the same slice record for the same user create +siblings. Riak CS attempts to check and set the `allow_mult` bucket +property when it starts up, and will print a warning in the log about +being `unable to configure` or `unable to verify` bucket settings if it +fails. + +Siblings should be handled at read time. Sibling resolution should be +nothing more than a set union of all records. The HTTP resource serving +the statistics expects to provide them on a node-accumulated basis, so +it is important to set a **unique Erlang node name for each Riak CS +node**. + +## Storage Statistics + +Storage statistics are also tracked on a per-user basis, as rollups for +slices of time. They are stored in the same Riak cluster as other Riak +CS data, in the `cs.storage` bucket. + +For detailed information about querying storage statistics, please read +[Querying Storage Statistics](./storage-statistics). + +### High Level + +1. Storage is calculated for all users either + a. on a regular schedule or + b. when manually triggered with the `riak-cs-storage` script +2. Each user's sum is stored in an object named for the timeslice in + which the aggregation took place +3. Sums are broken down by bucket + +Log retrieval is then simply making a request to Riak for all slice +objects for a user in a particular time period. + +#### Prerequisite: Code Paths for MapReduce + +The storage calculation system uses MapReduce to sum the files in a +bucket. This means you must tell all of your Riak nodes where to find +Riak CS's compiled files before calculating storage. + +See [Configuring Riak for CS]({{}}riak/cs/3.1.0/configuring/riak-kv-for-cs) for directions on setting this up. + +### Scheduling and Manual Triggering + +Triggering the storage calculation is a matter of setting up a regular +schedule or manually starting the process via the `riak-cs-storage` +script. + +#### Regular Schedules + +If you would like to have an Riak CS node calculate the storage used by every +user at the same time (or times) each day, specify a schedule in that node's +Riak CS `riak-cs.conf` file, or in the old-style `advanced.config` or +`app.config` file. + +In the `riak_cs` section of the file, add an entry for +`storage_schedule` like this: + +```riakcsconf +stats.storage.schedule.1 = 0600 +``` + +```advancedconfig +{storage_schedule, "0600"} +``` + +```appconfig +{storage_schedule, "0600"} +``` + +The time is given as a string of the form `HHMM`, representing the +hour and minute GMT to start the calculation process. In this example, the node +would start the storage calculation at 6am GMT every day. + +To set up multiple times, simply specify multiple times. For example, +to schedule the calculation to happen at both 6am and 6pm, use: + +```riakcsconf +stats.storage.schedule.1 = 0600 +stats.storage.schedule.2 = 1800 +``` + +```advancedconfig +{storage_schedule, ["0600", "1800"]} +``` + +```appconfig +{storage_schedule, ["0600", "1800"]} +``` + +{{% note title="Note on archive periods" %}} +When using multiple times in a storage schedule, they must be scheduled for +different archive periods (see details for `storage_archive_period` in the +**Archival** section below). Extra scheduled times in the same archive period +are skipped. This is intended to allow more than one Riak CS node to calculate +storage statistics concurrently, as they will take notice of users already +calculated by other nodes and skip them (see details in the Manual Triggering +section about overriding this behavior). +{{% /note %}} + +By default, no schedule is specified, so the storage calculation is +never done automatically. + +#### Manual Triggering + +If you would rather trigger storage calculations manually, simply use +the `batch` command in the `riak-cs-storage` script: + +```bash +riak-cs-storage batch +# Response: +# Batch storage calculation started. +``` + +If there is already a calculation in progress, or if starting the +calculation fails for some other reason, the script will print an error +message saying so. + +By default, a manually triggered calculation run will skip users that +have already been calculated in the current archive period (see the +Archival section below for details about `storage_archive_period`). If +you would rather calculate an additional sample for every user in this +period, add the `--recalc` (or `-r` for short) option to the command +line: + +```bash +riak-cs-storage batch -r # force recalculation of every user +``` + +#### Further Control + +In-process batch calculations can also be paused or canceled using the +`riak-cs-storage` script. + +To pause an in-process batch, use: + +```bash +riak-cs-storage pause +# Response: +# The calculation was paused. +``` + +To resume a paused batch, use: + +```bash +riak-cs-storage resume +# Response: +# The calculation was resumed. +``` + +To cancel an in-process batch (whether *paused* or *active*), use: + +```bash +riak-cs-storage cancel +# Response: +# The calculation was canceled. +``` + +You can also retrieve the current state of the daemon by using the +`status` command. The first line will indicate whether the daemon is +*idle*, *active*, or *paused*, and it will be followed by further + details based on progress. For example: + +```log +A storage calculation is in progress +Schedule: none defined +Last run started at: 20120316T204135Z +Current run started at: 20120316T204203Z +Next run scheduled for: unknown/never +Elapsed time of current run: 3 +Users completed in current run: 1 +Users left in current run: 4 +``` + +### Results + +When the node finishes calculating every user's storage, it will print a +message to the log noting how long the entire process took: + +```log +08:33:19.282 [info] Finished storage calculation in 1 seconds. +``` + +### Process + +The calculation process is coordinated by a long-lived finite state +machine process that handles both the scheduling (if a schedule is +defined) and the running of the process. + +When a storage calculation starts, the first step is to obtain a list of +known users of the system. Each user's record contains information about +the buckets that the user owns. + +For each bucket that a user owns, a MapReduce query is run. The query's +inputs are the list of the keys in the bucket (the input is +`BucketName`, so the keys stay on the server). The query then has two +phases: a map that produces tuples of the form `{1, +ByteSize(File)}`---if *active*; nothing if *inactive*---and a reduce +that sums those tuples element-wise. The result is one tuple whose first +element is the number of files in the bucket and whose second element is +the total number of bytes stored in that file. + +Only one bucket is calculated at a time to prevent putting too much load +on the Riak cluster. Only one user is calculated at a time as well to +prevent too large of a temporary list on the Riak CS node. + +Once the sum for each of the user's buckets is calculated, a record is +written to the `cs.storage` Riak bucket. + +### Archival + +Records written to the `cs.storage` bucket are very similar to records +written to the `cs.access` bucket used for logging access statistics. +The value is a JSON object with one field per bucket. The key is a +combination of the user's `key_id` and the timestamp of the time slice +for which the calculation was run. + +The period for storage archival is separate from the period for access +archival. The storage archival period is configured by the application +environment variable `storage_archive_period`. The default is 86400 (one +day). This is because storage calculations are expected to be archived +much less frequently than access logs, and so specifying fewer possible +keys to look up later reduces overhead at reporting time. diff --git a/content/riak/cs/3.1.0/developing/usage-and-billing-data/access-statistics.md b/content/riak/cs/3.1.0/developing/usage-and-billing-data/access-statistics.md new file mode 100644 index 0000000000..86ebcbb77b --- /dev/null +++ b/content/riak/cs/3.1.0/developing/usage-and-billing-data/access-statistics.md @@ -0,0 +1,414 @@ +--- +title_supertext: "Developing > Usage and Billing:" +title: "Querying Access Statistics" +description: "" +menu: + riak_cs-3.1.0: + name: "Access Statistics" + identifier: "develop_usage_billing_access_stats" + weight: 100 + parent: "develop_usage_billing" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/Querying-Access-Statistics/ + - /riakcs/3.1.0/cookbooks/Querying-Access-Statistics/ + - /riak/cs/3.1.0/cookbooks/querying-access-statistics/ + - /riakcs/3.1.0/cookbooks/querying-access-statistics/ +--- + +Access statistics are tracked on a per-user basis as rollups for slices +of time. Querying these statistics is done via the +`/riak-cs/usage/$USER_KEY_ID` resource. + +{{% note title="Note on terminology" %}} +In this and other documents in the Riak CS documentation, the terms "storage" +and "billing" are used interchangeably. The same goes for the terms "usage" +and access. +{{% /note %}} + +For information about how access statistics are logged, please read +[Usage and Billing Data](../). + +The following sections discuss accessing the access statistics using +bare HTTP requests. Query parameters are used to specify the types and +date ranges of information to include. For information on using `s3cmd` +(or other tools) to fetch statistics as S3 objects, skip to the [The Magic `usage` Bucket](#the-magic-usage-bucket) section. + +The examples on this page assume that the `admin_port` has not +been configured to something other than default CS port of `8080`. + +## Choosing the Result Format + +Results are available as either JSON or XML. Request the appropriate +format by using the HTTP `Accept` header with either `application/json` +or `application/xml`, respectively. + +## Specifying the User + +Access statistics are provided on a per-user basis. Specify which user's +statistics you want by providing that user's `key_id` in the URL. For +example, to get access statistics for the user key +`8NK4FH2SGKJJM8JIP2GU`, use the URL +`/riak-cs/usage/8NK4FH2SGKJJM8JIP2GU`. + +**Note**: The new user id generator should not include non-URL-safe + characters, but if it does, those characters will need to be escaped + in this URL. + +A `404` code with an error message body will be returned if the user +does not exist. For example, there is no `ASDF` user in my cluster, so +fetching `http://localhost:8080/riak-cs/usage/ASDF` produces the +following JSON/XML (reformatted for easy reading): + +```json +HTTP/1.1 404 Object Not Found + +{ + "Error": { + "Message":"Unknown user" + } +} +``` + +```xml +HTTP/1.1 404 Object Not Found + + + + Unknown user + +``` + +## Enable Access Results + +> **Authentication Required** +> +> Queries to the usage resources described here must be authenticated as +described in the [Authentication documentation](../../accounts-and-admin/authentication). +Keep this in mind when using `curl`. Authentication credentials for `s3cmd` or `s3-curl` +can be specified in their respective configuration files. + +The usage HTTP resource provides both access and storage statistics. +Since each of these queries can be taxing in its own right, they are +both omitted from the result by default: + +```curl +curl http://localhost:8080/riak-cs/usage/8NK4FH2SGKJJM8JIP2GU +``` + +Sample responses (reformatted for easy reading): + +```json +{ + "Access" :"not_requested", + "Storage":"not_requested" +} +``` + +```xml + + + not_requested + not_requested + +``` + +To request that access results be included, pass the query parameter `a` +to the resource (any true-ish value will work, including just the bare +`a`, `t`, `true`, `1`, `y`, and `yes`): + +```curl +curl http://localhost:8080/riak-cs/usage/8NK4FH2SGKJJM8JIP2GU?a +``` + +Sample responses (reformatted for easy reading): + +```json +{ + "Access": [ + { "Errors": [] } + ], + "Storage": "not_requested" +} +``` + +```xml + + + + + + not_requested + +``` + +There are no statistics included in this report because the default time +span is *now*, which is not available in the archives. + +## Specifying the Time Span to Report + +Request the time span you want data for by passing `s` (start) and `e` +(end) query parameters to the resource. The slices for which data will +be returned are all of those between `s` and `e`, as well as the slice +including `s` and the slice including `e`. + +For example, for slices `A`-`I`: + + A B C D E F G H I + |-----|-----|-----|-----|-----|-----|-----|-----|-----| + s e + +Specifying an `s` that falls somewhere in slice `C` and an `e` that +falls somewhere in slice `F` means that data for slices `C`, `D`, `E`, +and `F` will be returned. + +Each should be provided in ISO 8601 format (`yyyymmddThhmmssZ`). For +example, the following values would request the span between 2:00pm and +4:00pm (GMT) on January 30, 2012: + +```curl +http://localhost:8080/riak-cs/usage/8NK4FH2SGKJJM8JIP2GU?a&s=20120315T140000Z&e=20120315T160000Z +``` + +Sample responses (reformatted for easy reading): + +```json +{ + "Access": [ + { + "Node": "riak_cs@127.0.0.1", + "Samples": [ + { + "StartTime": "20120315T150000Z", + "EndTime":"20120315T152931Z", + "KeyWrite": { "BytesIn": 32505856, "Count": 1 }, + "KeyRead": { "BytesOut": 32505856, "Count": 1 }, + "BucketRead": { "BytesOut": 3633, "Count": 5 } + } + ] + }, + { + "Errors": [] + } + ], + "Storage": "not_requested" +} +``` + +```xml + + + + + + + 32505856 + 1 + + + 32505856 + 1 + + + 3633 + 5 + + + + + + not_requested + +``` + +The behavior of the resource when the `s` or `e` parameter is omitted +may change, but is currently as follows: + +* Omitting `e` will cause the resource to return only data for the slice + in which `s` falls +* Omitting `s` will cause the resource to return data for all slices + from `e` through the current time + +Or, more simply, the default `s` is *now* and the default `e` is equal +to `s`. + +### Time Span Limit + +To prevent excessive time and memory from being accidentally consumed, +the amount of time that may be retrieved in any request is limited. + +The limit is configured by the `riak_cs` application environment +variable `usage_request_limit`. The value is expressed as an integer +number of archive intervals (see [Usage and Billing Data](../) for a +description of archive intervals). + +The default value is `744`, which is 31 days at the default archive +interval of one hour. + +## The Magic `usage` Bucket + +If you would prefer to use `s3cmd` or another S3 library to fetch access +stats, you may do so by referencing objects in the global `usage` +bucket. The format for objects in the usage bucket is: + +```bash +s3://riak-cs/usage/UserKeyId/Options/StartTime/EndTime +``` + +Or, if `/` is automatically quoted (`%2f`) by your client, the `.` +character may be used (this is also nicer for s3cmd, since it will +automatically choose a more useful name for the file it creates): + +```bash +s3://riak-cs/usage/UserKeyId.Options.StartTime.EndTime +``` + +That is, in the usage bucket, this is a sub-bucket named for the user's +`key_id` (the `UserKeyId` part of the path). + +Inside the user's bucket is a sub-bucket named for the contents and +their representation (the `Options` part of the path). This portion +should be: + +* `aj` to receive access statistics as JSON data +* `ax` to receive access statistics as XML data + +The next two portions of the path, `StartTime` and `EndTime`, are the +start and end times for the window to report, respectively. These take +the same ISO 8601 format that the `s` and `e` query parameters take in +the other request method. + +As an example, making the same request as the last example, for +JSON-format access statistics between 2:00pm and 4:00pm GMT on January +30, 2012, looks like this: + +```bash +s3cmd get s3://riak-cs/usage/8NK4FH2SGKJJM8JIP2GU/aj/20120315T140000Z/20120315T160000Z +``` + +**Note**: All objects in the `usage` bucket are read-only. `PUT` and +`DELETE` requests will fail for them. + +**Note**: Regular users are only allowed to access the statistics bucket +for their own `key_id`. The admin user is allowed to access any stat +bucket. + +## Interpreting the Results + +Results of the access query are grouped by node. That is, within the +access field of the result will be one entry for each Riak CS node that +had data for the requested time span. + +Each node entry will contain one or more "samples" for each time slice +that the user accessed that Riak CS node. The sample will have a start +time and end time describing what span the sample covers. + +The other entries of each sample are the operations the user performed +during the sampled time. Operation statistics are provided as rollups +for each operation type. The rollup includes one or more of the +following fields: + +* `Count` --- the number of times this operation was used successfully +* `UserErrorCount` --- the number of times this operation was used but + ended in a 400-499 response code +* `SystemErrorCount` --- the number of times this operation was used but + ended in a 500-599 response code +* `BytesIn` --- the number of bytes that were included in the request + bodies of successful operations +* `UserErrorBytesIn` --- the number of bytes that were included in the + request bodies of operations that ended in 400-499 response codes +* `SystemErrorBytesIn` --- the number of bytes that were included in the + request bodies of operations that ended in 500-599 response codes +* `BytesOut` --- the number of bytes that were included in the response + bodies of successful operations +* `UserErrorBytesOut` --- the number of bytes that were included in the + response bodies of operations that ended in 400-499 response codes +* `SystemErrorBytesOut` --- the number of bytes that were included in + the response bodies of operations that ended in 500-599 response codes +* `BytesOutIncomplete` --- the number of bytes that were sent in + response bodies before the client disconnected, if there was more that + could have been sent afterward (i.e. the byte count of partial + downloads) + +It is important to note that accesses are only logged when the +Webmachine request finishes. This means that, for example, an upload +started in one time slice but ended in another will only add to the +`bytes in` field for the time slice in which in finished, rather than +splitting the statistics between the slices in which they actually +happened. + +### Operation Types + +The operation types that are currently tracked are the following: + +Operation | Description +:---------|:----------- +`ListBuckets` | Lists a user's buckets (`GET /`) +`UsageRead` | Reads a user's usage statistics (`GET /riak-cs/usage/user/*`) +`BucketRead` | Lists the files in a bucket (`GET /bucket`) +`BucketStat` | Checks for the existence of a bucket (`HEAD /bucket`) +`BucketCreate` | Creates a bucket (`PUT /bucket`) +`BucketDelete` | Deletes a bucket (`DELETE /bucket`) +`BucketUnknown` | Unknown bucket operation (`?? /bucket`) +`BucketReadACL` | Retrieves the ACL of a bucket (`GET /bucket?acl`) +`BucketStatACL` | Checks for the existence of a bucket (`HEAD /bucket?acl`) +`BucketWriteACL` | Changes the ACL of a bucket (`PUT /bucket?acl`) +`BucketUnknownACL` | Unknown bucket ACL operation (`?? /bucket?acl`) +`KeyRead` | Fetches an object (`GET /bucket/key`) +`KeyStat` | Checks for the existence of an object (`HEAD /bucket/key`) +`KeyWrite` | Uploads an object (`PUT /bucket/key`) +`KeyDelete` | Deletes an object (`DELETE /bucket/key`) +`KeyUnknown` | Unknown object operation (`?? /bucket/key`) +`KeyReadACL` | Retrieves the ACL of a key (`GET /bucket/key?acl`) +`KeyStatACL` | Checks for the existence of an object (`HEAD /bucket/key?acl`) +`KeyWriteACL` | Changes the ACL of an object (`PUT /bucket/key?acl`) +`KeyUnknownACL` | Unknown key ACL operation (`?? /bucket/key?acl`) +`UnknownGET` | A `GET` was issued on an unrecognized resource, which likely means that the `riak_cs_access_logger:operation/1` function is out of date +`UnknownHEAD` | See `UnknownGET` +`UnknownPUT` | See `UnknownGET` +`UnknownPOST` | See `UnknownGET` +`UnknownDELETE` | See `UnknownGET` + +### Lookup Errors + +In addition to the node entries in the access results, there is also an +entry for errors that Riak CS encountered while fetching access +archives. The errors list is very similar to the samples of a node list: +each entry will contain the start and end times of the period, as well +as the "reason" the lookup failed. + +For example, if the Riak lookups that Riak CS uses end in timeout +instead of success, the result including an errors list might look like +the following (reformatted for easy reading): + +```json +{ + "Access": [ + { + "Errors": [ + { + "StartTime": "20120315T160000Z", + "EndTime": "20120315T170000Z", + "Reason": "timeout" + } + ] + } + ], + "Storage": "not_requested" +} +``` + +```xml + + + + + + timeout + + + + not_requested + +``` diff --git a/content/riak/cs/3.1.0/developing/usage-and-billing-data/storage-statistics.md b/content/riak/cs/3.1.0/developing/usage-and-billing-data/storage-statistics.md new file mode 100644 index 0000000000..4df9101471 --- /dev/null +++ b/content/riak/cs/3.1.0/developing/usage-and-billing-data/storage-statistics.md @@ -0,0 +1,184 @@ +--- +title_supertext: "Developing > Usage and Billing:" +title: "Querying Storage Statistics" +description: "" +menu: + riak_cs-3.1.0: + name: "Storage Statistics" + identifier: "develop_usage_billing_storage_stats" + weight: 200 + parent: "develop_usage_billing" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/querying-storage-statistics/ + - /riakcs/3.1.0/cookbooks/querying-storage-statistics/ + - /riak/cs/3.1.0/cookbooks/Querying-Storage-Statistics/ + - /riakcs/3.1.0/cookbooks/Querying-Storage-Statistics/ +--- + +Storage statistics are tracked on a per-user basis, as rollups for +slices of time. Querying these statistics is done via the +`/riak-cs/usage/$USER_KEY_ID` resource. + +{{% note title="Note on terminology" %}} +In this and other documents in the Riak CS documentation, the terms "storage" +and "billing" are used interchangeably. The same goes for the terms "usage" +and access. +{{% /note %}} + +> **Note**: +> +> Storage statistics are not calculated by default. Please read [Usage and Billing Data](../) for details about how to enable storage calculation archiving. + +The basics of querying storage statistics, including the URL used and the parameters for specifying the time slice, are the same as they are for [Querying Access Statistics](../access-statistics). + +Please refer to the descriptions there for more details. + +The examples on this page assume that the `admin_port` has not +been configured to something other than default CS port of `8080`. + +## Enable Storage Results + +> **Authentication Required** +> +> Queries to the usage resources described here must be authenticated as described in the [Authentication documentation](../../accounts-and-admin/authentication). Keep this in mind when using `curl`. Authentication credentials for `s3cmd` or `s3-curl` can be specified in their respective configuration files. + +The usage HTTP resource provides both access and storage statistics. Since each of these queries can be taxing in its own right, they are both omitted from the result by default: + +```curl +curl http://localhost:8080/riak-cs/usage/8NK4FH2SGKJJM8JIP2GU +``` + +Sample responses (reformatted for easy reading): + +```json +{ + "Access": "not_requested", + "Storage": "not_requested" +} +``` + +```xml + + + not_requested + not_requested + +``` + +To request that storage results be included, pass the query parameter `b` to the resource (any true-ish value will work, including just the bare `b`, `t`, `true`, `1`, `y`, and `yes`): + +```curl +curl http://localhost:8080/riak-cs/usage/8NK4FH2SGKJJM8JIP2GU?b +``` + +Sample responses (reformatted for easy reading): + +```json +{ + "Access": "not_requested", + "Storage": [ + { + "Errors":[] + } + ] +} +``` + +```xml + + + not_requested + + + + +``` + +There are no statistics included in this report because the default time span is *now*, which is not available in the archives. + +### S3 Object-style Access + +As described in [Querying Access Statistics](../access-statistics), these statistics are also available as S3 objects. To add storage statistics to the result, add the character `b` to the `Options` portion of the object's path. For example, the following command would produce storage statistics in XML format: + +```bash +s3cmd get s3://riak-cs/usage/8NK4FH2SGKJJM8JIP2GU/bx/20120315T140000Z/20120315T160000Z +``` + +You may also pass both `b` and `a` as `Options` to fetch both types of stats, as in: + +```bash +s3cmd get s3://riak-cs/usage/8NK4FH2SGKJJM8JIP2GU/abx/20120315T140000Z/20120315T160000Z +``` + +## Interpreting the Results + +The result of the storage query is one or more "samples" for each time slice in which storage was calculated for the user. The sample will have a start time and end time describing what span the sample covers. + +The other entries of each sample are the buckets the user owned during the sampled time. Bucket statistics are provided as rollups including each of the following fields: + +* `Objects` --- the number of active---not deleted and not incompletely uploaded---files in the bucket +* `Bytes` --- the total of number of bytes stored in the files of the bucket + +For example, a user that owns two buckets, `foo` and `bar`, where `foo` contains one 32MB file and `bar` contains 4 32MB files, would have a sample similar to the following. + +Sample responses (reformatted for easy reading): + +```json +{ + "Access": "not_requested", + "Storage": [ + { + "StartTime": "20120316T123318Z", + "EndTime": "20120316T123319Z", + "foo": { + "Objects": 1, + "Bytes": 32505856 + }, + "bar": { + "Objects": 4, + "Bytes": 130023424 + } + }, + { + "Errors": [] + } + ] +} +``` + +```xml + + + not_requested + + + + 1 + 32505856 + + + 4 + 130023424 + + + + + +``` + +If any errors occurred during calculation for a bucket, the error will +be returned (e.g., timeout) instead of a bucket's usage. + +```json + { + "StartTime": "20120316T123318Z", + "EndTime": "20120316T123319Z", + "baz": "{error,{timeout,[]}}", + "bar": { + "Objects": 4, + "Bytes": 130023424 + } + }, +``` diff --git a/content/riak/cs/3.1.0/downloads.md b/content/riak/cs/3.1.0/downloads.md new file mode 100644 index 0000000000..f38a94e13c --- /dev/null +++ b/content/riak/cs/3.1.0/downloads.md @@ -0,0 +1,25 @@ +--- +title: "Download Riak CS 3.1.0 and Other Tools" +description: "Download some stuff!" +menu: + riak_cs-3.1.0: + name: "Download Riak CS" + identifier: "download_riak_cs" + weight: 300 + pre: download-alt +project: "riak_cs" +project_version: "3.1.0" +toc: true +layout: downloads +listed_projects: + - project: "riak_cs" + version: "3.1.0" + title: "Riak CS" + install_instructions_set: "setup/installing" + - project: "riak_cs_control" + version: "1.0.2" + title: "Riak CS Control" +aliases: + - /riakcs/3.1.0/riakcs-downloads/ + - /riak/cs/3.1.0/riakcs-downloads/ +--- diff --git a/content/riak/cs/3.1.0/index.md b/content/riak/cs/3.1.0/index.md new file mode 100644 index 0000000000..1178e27d45 --- /dev/null +++ b/content/riak/cs/3.1.0/index.md @@ -0,0 +1,49 @@ +--- +title: "Riak Cloud Storage" +description: "" +menu: + riak_cs-3.1.0: + name: "Riak CS" + identifier: "index" + weight: 100 + pre: bolt +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/ +--- + +Riak CS (Cloud Storage) is easy-to-use object storage software built on top of +[Riak KV]({{}}riak/kv/latest/), Basho's distributed database. Riak CS is +designed to provide simple, available, distributed cloud storage at any scale, +and can be used to build cloud architectures---be they public or private---or +as storage infrastructure for heavy-duty applications and services. Riak CS's +API is [Amazon S3 compatible](http://docs.aws.amazon.com/AmazonS3/latest/API/APIRest.html) +and supports per-tenant reporting for use cases involving billing +and metering. + +Riak CS is open source and [free for download]({{}}riak/cs/3.1.0/downloads). + +This release is tested with OTP 22, 24 and 25. Best performance will be achieved with OTP 25. + +## Notable Riak CS Features + +### Amazon S3-API Compatibility + +Riak CS has a built-in S3 interface with S3 Access Control List ([ACL](http://docs.aws.amazon.com/AmazonS3/latest/dev/ACLOverview.html)) support, which means that you can both use existing S3 tools and frameworks to manage your data and also import and extract data from Amazon directly. The HTTP REST API supports service, bucket, and object-level operations to easily store and retrieve data. There is also support for the [OpenStack Swift API]({{}}riak/cs/3.1.0/learning/comparisons/swift/) + +### Per-Tenant Visibility + +With the Riak CS [Reporting API]({{}}riak/cs/3.1.0/using/monitoring-and-metrics), you can access per-tenant usage data and statistics over network I/O. This reporting functionality supports use cases including accounting, +subscription, chargebacks, plugins with billing systems, efficient multi-department utilization, and much more. + +### Supports Large Objects of Arbitrary Content Type, Plus Metadata + +Riak CS enables you to store any conceivable data type, such as +images, text, video, documents, database backups, or software binaries. +Riak CS can store objects into the terabyte size range using multipart +file uploads. Riak CS also supports standard Amazon [metadata headers](http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html). + +### Multi-Datacenter Replication + +Riak CS Multi-Datacenter Replication for active backups, disaster recovery, and data locality. Provide low-latency storage wherever your users are and maintain availability even in the event of site failure. diff --git a/content/riak/cs/3.1.0/learning.md b/content/riak/cs/3.1.0/learning.md new file mode 100644 index 0000000000..470f2855e6 --- /dev/null +++ b/content/riak/cs/3.1.0/learning.md @@ -0,0 +1,26 @@ +--- +title: "Learn about Riak CS" +description: "" +menu: + riak_cs-3.1.0: + name: "Learning" + identifier: "learning" + weight: 900 + pre: references +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/theory/ + - /riakcs/3.1.0/theory/ +--- + +### In This Section + +- [Frequently Asked Questions](../learning/faqs/) + +- [Comparisons](../learning/comparisons/) +- [Garbage Collection](../learning/garbage-collection/) +- [Multi-Datacenter](../learning/multi-datacenter-overview/) +- [Multipart Uploading](../learning/multipart-upload-overview/) +- [Stanchion](../learning/stanchion/) +- [Version Compatibility](../learning/version-compatibility/) diff --git a/content/riak/cs/3.1.0/learning/comparisons.md b/content/riak/cs/3.1.0/learning/comparisons.md new file mode 100644 index 0000000000..636ab0bd88 --- /dev/null +++ b/content/riak/cs/3.1.0/learning/comparisons.md @@ -0,0 +1,21 @@ +--- +title_supertext: "Learning:" +title: "Riak CS Compared To" +description: "" +menu: + riak_cs-3.1.0: + name: "Comparisons" + identifier: "learning_comparisons" + weight: 110 + parent: "learning" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/theory/comparisons/ + - /riakcs/3.1.0/theory/comparisons/ +--- + +### In This Section + +- [Riak CS Compared To Swift](../../references/appendices/comparisons/swift/) +- [Riak CS Compared To Atmos](../../references/appendices/comparisons/atmos/) diff --git a/content/riak/cs/3.1.0/learning/comparisons/atmos.md b/content/riak/cs/3.1.0/learning/comparisons/atmos.md new file mode 100644 index 0000000000..cc14203307 --- /dev/null +++ b/content/riak/cs/3.1.0/learning/comparisons/atmos.md @@ -0,0 +1,73 @@ +--- +title_supertext: "Learning > Riak CS Compared To:" +title: "Atmos" +description: "" +menu: + riak_cs-3.1.0: + name: "To Atmos" + identifier: "compare_atmos" + weight: 100 + parent: "learning_comparisons" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/references/appendices/comparisons/Riak-Compared-to-Atmos/ + - /riak/cs/3.1.0/references/appendices/comparisons/Riak-Compared-to-Atmos/ + - /riak/cs/3.1.0/references/appendices/comparisons/atmos/ + - /riakcs/3.1.0/references/appendices/comparisons/atmos/ +--- + +The purpose of this comparison is not to serve as an introduction to Riak CS and EMC Atmos, or their commonalities, but rather to enumerate interesting differences between the two systems. This document is intended for those who already have a basic understanding of both systems. + +If you feel that this comparison is unfair to either of these technologies, please [submit an issue on GitHub](https://github.com/basho/basho_docs/issues/new) or send us an **[email]({{}})**. + +## Feature/Capability Comparison + +The table below gives a high-level comparison of Riak CS and Atmos features and capabilities. For low-level details, please refer to the Riak CS and [Atmos docs](https://community.emc.com/community/edn/atmos). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Feature/CapabilityRiakAtmos
InterfacesRiak CS offers an S3-compatible interface that can be used with existing S3 clients and libraries. + Atmos offers a REST and SOAP API, an S3-compatible API, and an Atmos SDK as well as interfaces to traditional storage solutions, including NFS/CIF and CAS. +
Availability and Architecture for Reads/WritesOn write, Riak CS breaks large objects into blocks. Riak CS distributes data across physical machines using consistent hashing and replicates objects a default of 3 times in the underlying Riak storage system. A manifest is maintained for each object that points to which blocks comprise the object. The manifest is used to retrieve all blocks and present them to a client on read.
+ Riak CS is a masterless system in that any node can receive and route client requests, making it highly resilient to failure conditions like network partition and hardware failure. Riak uses a request serializer for globally unique entities like users and buckets. This request serializer runs on a single node and in the event of failure, a portion of write operations (specifically, creating new buckets and users) will be unavailable until service is restored.
+ In Riak, by default, objects (including their manifests) are replicated 3 times in the underlying system. Riak can also be configured to store more replicas in a given site. +
EMC Atmos stores objects and their metadata separately. The + Metadata Service is responsible for storing all of an object's metadata, including policy and user-defined data, and for providing the object layout which is required for both writes and reads to the underlying storage service. On read, the client will connect with a Resource Management Service to talk to a Metadata Location Service, which then locates the correct Metadata Service for the object.
+ The Metadata Location Service, responsible for finding a local Metadata Service on read, is deployed on two nodes of the first rack in an EMC Atmos implementation. The Metadata Service itself is a master/slave system with a primary and secondary node. The use of a master/slave architecture for metadata services that are required for reads and writes may compromise availability in the event of hardware failure or network partition. Additionally, Atmos stores only two copies of the metadata for an object at a site, which may also cause availability problems in certain failure conditions. +
Users and MultitenancyRiak exposes multitenancy using S3 conventions for user provisioning and management. Administrators can create users which are then able to authenticate, create buckets, upload and download data, retrieve account information and other user privileges. + EMC Atmos implements a more complex tenant scheme. Atmos recommends implementing 1-2 tenants in a system and using multiple sub-tenants underneath each tenant. The number of tenants is limited to the number of physical nodes, as front-end nodes are assigned to a specific tenant for client access. Configuring tenants and subtenants may be operationally complex, while assigning specific tenants to specific front-end nodes may cause end-user availability issues in the event of node failure. +
HardwareRiak CS ships as software and can be installed from source or with packages, including Ubuntu and CentOS. There is no hardware lock-in to specific vendors, and Riak CS is designed to be run on commodity hardware so that enterprises can achieve economies of scale. + EMC Atmos can be deployed as a software/hardware bundle on Atmos Hardware or as a virtual edition deployed on a VMware-certified third-party storage system. +
Multi-Datacenter ReplicationFor multi-site replication in Riak CS, global information for users, bucket information, and manifests are streamed in real time from a primary implementation to a secondary site, so that global state is maintained across locations. Objects can then be replicated in either fullsync or realtime sync mode. The secondary site will replicate the object as in normal operations. Additional datacenters can be added in order to create availability zones or additional data redundancy and locality. Riak CS can also be configured for bi-directional replication. + In EMC Atmos, object replication to secondary sites is done via synchronous or asynchronous replication configured by policies. These policies are implemented as part of the Metadata Service. A read-only copy of the metadata is maintained at secondary sites. +
diff --git a/content/riak/cs/3.1.0/learning/comparisons/swift.md b/content/riak/cs/3.1.0/learning/comparisons/swift.md new file mode 100644 index 0000000000..83626d68d4 --- /dev/null +++ b/content/riak/cs/3.1.0/learning/comparisons/swift.md @@ -0,0 +1,80 @@ +--- +title_supertext: "Learning > Riak CS Compared To:" +title: "Swift" +description: "" +menu: + riak_cs-3.1.0: + name: "To Swift" + identifier: "compare_swift" + weight: 110 + parent: "learning_comparisons" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/references/appendices/comparisons/Riak-Compared-to-Swift/ + - /riak/cs/3.1.0/references/appendices/comparisons/Riak-Compared-to-Swift/ + - /riak/cs/3.1.0/references/appendices/comparisons/swift/ + - /riakcs/3.1.0/references/appendices/comparisons/swift/ +--- + +Riak CS and Swift---the object storage component of OpenStack---are both cloud storage systems that hold many design and implementation details in common. The purpose of this document is not to serve as an introduction to Riak CS and Swift or to their commonalities, but rather to enumerate important differences between the two systems. This document is intended for those who already have a basic understanding of both systems. + +If you feel that this comparison is unfair to either of these technologies, please [submit an issue on GitHub](https://github.com/basho/basho_docs/issues/new) or send us an **[email]({{}})**. + +## Feature/Capability Comparison + +The table below gives a high-level comparison of Riak CS and Swift features and capabilities. For low-level details, please refer to the Riak CS and [Swift docs](http://docs.openstack.org/developer/swift/). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Feature/CapabilityRiakSwift
Anti-EntropyRiak CS supports Active Anti-Entropy, which monitors and repairs inconsistencies between divergent replicas. Riak CS also supports "passive" read-time anti-entropy, which provides repair of inconsistencies immediately at client-read time. Swift does not perform repair at read or write time, but rather resolves such issues during its next rsync cycle.Swift has a continuous anti-entropy process via frequent invocation of "rsync" for repairing any inconsistencies between data node file systems.
Write-Time Communication & Host FailuresRiak CS always writes to the full number of desired hosts, using fallback nodes to perform hinted handoff and stand in for any missing or failing hosts in order to immediately reach full redundancy. As soon as the primary Riak CS nodes are once again reachable, copies on the fallbacks will be sent to them, quickly repairing the state of the cluster.Swift will write at least a majority/quorum of replicas before declaring success, and will allow anti-entropy to bring the number of replicas up to the full count later if needed due to node failures.
Quorum ModelsRiak CS’s underlying quorum model is not only about availability, it also provides a latency-smoothing effect by replying to the user without the need to block on the slowest host in the replication set. This prevents brief per-host performance problems from affecting end-users.Swift, despite replying only with the "best" single response, will wait for all relevant storage nodes to finish before sending a response to a write request. This can adversely impact latency. However, Swift's read requests do not wait for a quorum; they simply try one replica at a time at random until they get a response with a fairly short timeout before moving on to try another. There are plans to improve the latency of Swift’s write requests.
Full-Stack IntegrationRiak CS stands alone as a storage service that has no specific related services for compute, VM image management, etc.Though it can run on its own, Swift is part of the OpenStack project, a highly regarded and well-defined "stack" of services.
LanguagesRiak CS is written in Erlang, a language and platform engineered for extremely high availability, making it easier to build Riak CS on industry-tested distributed systems components, and to attract engineers that specialize in such systems.Swift is written in Python, a language with a very large, accessible developer community who could readily contribute to Swift without the need to learn a new language.
InstallationRiak CS is designed for easy installation, with a relatively small number of independent components to manage. A minimal installation requires installing just three components and editing fewer than 10 lines of configuration data.Swift’s "toolbox" approach requires the installation and ongoing operational supervision of various components, including Memcached, SQLite, and Keystone (the OpenStack authentication server), each of which have deep dependency trees of their own. An upside of this approach is that the system’s overall behavior is extremely modifiable by changing the behavior of any of the many dependencies.
OperationsWith Riak CS, a single administrative command on a newly provisioned host tells the system to automatically integrate the new device. Well-defined underlying system components ensure correct behavior during transitions.Swift requires a high degree of manual management. Devices are added to the definition of the ring by defining their node, name and zone. To change the definitions, mapping must be regenerated and new definitions must be pushed out to every node with whichever means is available (rsync appears to be the most common). When these files fall out of sync, the system will experience strange behavior or cease to function altogether.
Support For Amazon S3 APIRiak CS directly and natively supports the widely adopted S3 API, including such commonly used aspects as S3-keyed ACLs, hostname-to-bucket translation, etc.Swift has its own custom (non-S3) API with its own strengths. Optional, externally developed middleware that emulates the S3 API on top of Swift is, however, available.
GovernanceRiak CS is open source and is managed by Basho. It is available under the Apache 2 License.Swift is entirely open source and is managed by the OpenStack Foundation. No license is required in any way and no single company can either block or cause any changes to it on their own.
diff --git a/content/riak/cs/3.1.0/learning/faqs.md b/content/riak/cs/3.1.0/learning/faqs.md new file mode 100644 index 0000000000..d434815297 --- /dev/null +++ b/content/riak/cs/3.1.0/learning/faqs.md @@ -0,0 +1,67 @@ +--- +title_supertext: "Learning:" +title: "Frequently Asked Questions" +description: "" +menu: + riak_cs-3.1.0: + name: "FAQs" + identifier: "learning_faq" + weight: 100 + parent: "learning" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/cookbooks/faqs/riak-cs/ + - /riak/cs/3.1.0/cookbooks/faqs/riak-cs/ +keywords: "faq faqs" +--- + +Q: What is Riak CS? +A: + Riak CS is [multi-tenant](http://en.wikipedia.org/wiki/Multitenancy) cloud storage software for public and private clouds. Built on Basho's distributed database [Riak KV]({{}}riak/kv/3.0.9), Riak CS is commercial software designed to provide simple, available, distributed cloud storage at any scale. Riak CS is S3 API compatible and supports per-tenant reporting for billing and metering use cases. + +Q: Can users share data? +A: + Data is private by default. Users can manipulate Access Control Lists (ACLs) to grant access to their buckets or objects to other users---or even to unauthenticated requesters. + + For implementation details, see the [Access Control Lists](http://docs.aws.amazon.com/AmazonS3/latest/dev/ACLOverview.html) documentation. + +Q: Is it possible to specify a filesystem where my Riak CS buckets will live? +A: You can specify the location of **all** Riak CS bucket data by changing the settings for Riak's backends to a path on a particular filesystem. If this is your goal, you can configure Riak to suit your environment. + + If you look at our example Riak `advanced.config`/`app.config` backend + definition from the [Configuring Riak for CS]({{}}riak/cs/3.1.0/configuring/riak-kv-for-cs) section, it looks like this: + + ```advanced.config + {riak_kv, [ + {add_paths, ["/usr/lib/riak-cs/lib/riak_cs-3.1.0/ebin"]}, + {storage_backend, riak_cs_kv_multi_backend}, + {multi_backend_prefix_list, [{<<"0b:">>, be_blocks}]}, + {multi_backend_default, be_default}, + {multi_backend, [ + {be_default, riak_kv_eleveldb_backend, [ + {total_leveldb_mem_percent, 30}, + {data_root, "/var/lib/riak/leveldb"} + ]}, + {be_blocks, riak_kv_bitcask_backend, [ + {data_root, "/var/lib/riak/bitcask"} + ]} + ]}, + %% Other configs + ]}, + %% Other sections + ``` + + You need to change the two `data_root` values, substituting `/var/lib/riak` as shown in the above example with the path to the filesystem you prefer. Please note that you should do this before starting Riak for the + first time; if you do make these changes *after* you've started Riak, the previous data will not be available unless you manually move it to to the new location. + + This will allow you to change the location of all bucket data. Riak CS does not yet currently support specifying per-bucket filesystem granularity. + +Q: Does Riak CS encrypt data at rest? +A: No, Riak CS does not currently support encryption of data at rest. However, you can use standard OS encrypted disk partitions or business-logic encryption to encrypt data at rest. + +Q: Does Riak CS support compression of objects at rest? +A: By default, the LevelDB backend used by Riak CS relies on [gzip](http://www.gzip.org/) compression for data at higher levels in LevelDB's storage system. Any additional object compression needs to be performed by clients connecting to Riak CS. + +Q: Does Riak CS support object search? +A: There is currently no search functionality in Riak CS. Search functionality can be provided using an external application to read and index items stored in Riak CS (provided that they are not encrypted). diff --git a/content/riak/cs/3.1.0/learning/garbage-collection.md b/content/riak/cs/3.1.0/learning/garbage-collection.md new file mode 100644 index 0000000000..58705595b5 --- /dev/null +++ b/content/riak/cs/3.1.0/learning/garbage-collection.md @@ -0,0 +1,266 @@ +--- +title_supertext: "Learning:" +title: "Garbage Collection" +description: "" +menu: + riak_cs-3.1.0: + name: "Garbage Collection" + identifier: "learning_garbage_collection" + weight: 120 + parent: "learning" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/cookbooks/garbage-collection/ + - /riak/cs/3.1.0/cookbooks/garbage-collection/ +--- + +This document describes some of the implementation details behind Riak +CS's garbage collection process. For information on configuring this +system, please see our documentation on [configuring Riak CS]({{}}riak/cs/3.1.0/configuring/riak-cs). + +## Versions and Manifests + +In Riak CS, any named object bears multiple **versions** that are stored +in the system at any given time. These versions are not exposed to end +users and are used only for internal purposes. Each version of the +object is accessible via an object **manifest** that includes a +[UUID](http://en.wikipedia.org/wiki/Universally_unique_identifier) for +that version. + +At the system level, Riak CS attempts to have only one _active_ manifest +for a named object at any given time, although multiple active manifests +can coexist in some cases. In spite of this, **only one active object +manifest is available to users accessing Riak CS at any given time**, +which means that Riak CS users are never exposed to multiple manifests. + +Garbage collection (GC) of object versions involves a variety of actions +that can be divided into two essential phases: + +1. Synchronous actions that occur in the foreground while the user is + waiting for notification of successful command completion +2. Asynchronous actions that occur in the background and are not + directly tied to user actions + +These two phases are described in more detail in the following sections. + +{{% note title="Note on manifest pruning" %}} +A Riak CS object's manifest is updated any time a write, i.e. a `PUT` or +`DELETE` request, is issued, which means that manifest sizes can grow +significantly over time. This can lead to latency problems. Riak CS's GC +subsystem will prune these manifests. If you're experiencing manifest-related +issues, we would recommend using GC. +{{% /note %}} + +## Synchronous GC Actions + +Riak CS users can undertake two actions to initiate garbage collection +of an object version: + +1. Overwriting the object with a new version +2. Deleting the object + +When an object version is overwritten, a new object manifest is written +with the state set to `active`. This new version is then made available +to Riak CS users. When an object is explicitly deleted, however, this +means that no active versions remain and thus that the object is no +longer externally available to users. + +Behind the scenes, overwriting or deleting an object also means that a +set of eligible manifest versions is determined, while the state of each +eligible manifest is changed to `pending_delete` and the +`delete_marked_time` field is set to a time value representing the +current time. + +The method for compiling the list of eligible manifests is dependent +on the operation, i.e. whether the object is being overwritten or +deleted. + +If the object is being overwritten, the previously `active` manifest +version is selected along with any manifest versions that are in the +`writing` state. An object is in a `writing` state if the +`last_block_written_time` field represents a time value greater than +`gc.leeway_period` ago (or the `write_start_time` in cases where the +`last_block_written_time` is undefined). + +If a manifest version remains in the `writing` state for greater than +`gc.leeway_period`, Riak CS assumes that that manifest version +represents a failed upload attempt. In that case, Riak CS deems it +acceptable to reap any object blocks that may have been written. +Manifest versions in the `writing` state whose `last_block_written_time` +has not exceeded the `gc.leeway_period` threshold are _not_ deemed +eligible because they could represent an object version that is still in +the process of writings its blocks. + +Object deletes are more straightforward. Since no object is externally +available to the user after a delete operation, any manifest versions +in the `active` or `writing` state are eligible to be cleaned up. In +this case, there is no concern about reaping the object version that is +currently being written to become the next `active` version. + +Once the states of the eligible manifests have been updated to +`pending_delete` the manifest information for any `pending_delete` +manifest versions are collected into a CRDT set and the set is written +as a value to the `riak-cs-gc` bucket keyed by a time value +representing the current epoch time. If that write is +successful then the state for each manifest in the set is updated to +`scheduled_delete`. This indicates that the blocks of the object have +been scheduled for deletion by the garbage collection daemon and +avoids other manifest resolution processes for the object from +scheduling unnecessary deletions. + +The use of the current epoch time as the basis for the keys in the +`riak-cs-gc` bucket is a change from previous versions of Riak +CS. Previously the current epoch time the value of `gc.leeway_period` +was used. This change means that the `gc.leeway_period` interval is +enforced by the garbage collection daemon process and not during the +synchronous portion of the garbage collection process. The benefit of +this is that the `gc.leeway_period` interval may be changed for objects +that have already been deleted or overwritten and allows system +operators to potentially reap objects sooner than originally specified +`gc.leeway_period` interval if it is necessary. + +Once the manifest enters the `scheduled_delete` state it remains as a +tombstone for a minimum of `gc.leeway_period`. + +After these actions have been attempted, the synchronous portion of the +garbage collection process is concluded and a response is returned to +the user who issued the request. + +## Garbage Collection Daemon + +The asynchronous portion of the garbage collection process is +orchestrated by the garbage collection daemon that wakes up at specific +intervals and checks the `riak-cs-gc` bucket for any scheduled entries +that are eligible for reaping. + +The daemon gathers the eligible keys for deletion by performing a +secondary index range query on the `$key` index with a lower bound of +time *0* and an upper bound of the current time. This allows the +daemon to collect all the keys that are eligible for deletion and have +some way of accounting for clock skew. + +The daemon may also be configured to use more efficient paginated +index queries to gather the deletion-eligible keys by setting the +`gc_paginated_indexes` configuration option to `true`. In this case the gc +daemon requests up to `gc_batch_size` keys from the GC bucket and +deletes the manifests associated with those keys before requesting the +next set of keys. + +The initial query performed by the garbage collection daemon may +return a subset of the eligible records if `gc_paginated_indexes` is +`true` or all eligible records otherwise. + +The daemon starts up a worker process to carry out the actual reaping +of the records and passes it the batch of keys from the query of the +`riak-cs-gc` bucket. The value for each key received by the worker +process is a set containing one or more object manifests that must be +reaped. The worker process removes the objects represented by each +object manifest in the set and then notifies the garbage collection +daemon that it has completed the task and is available for more work. + +Meanwhile, the daemon repeats the process of querying the `riak-cs-gc` +bucket for more eligible records to delete and feeding the resulting +keys to worker processes until either the maximum number of worker +processes is reached (`gc.max_workers`) or there are no remaining +records eligible for removal. + +Deletion eligibility is determined using the key values in the +`riak-cs-gc` bucket. The keys in the `riak-cs-gc` bucket are +representations of epoch time values with random suffixes +appended. The purpose of the random suffix is to avoid hot keys when +the system is dealing with high volumes of deletes or overwrites. If +the current time according to the daemon minus the leeway interval is +later than the time represented by a key then the blocks for any +object manifests stored at that key are eligible for deletion and the +daemon passes them off to a worker process that attempts to delete +them. + +There are two levels of concurrency within the garbage collection +process. The first is the use of worker processes by the garbage +collection daemon to allow different groups of eligible records from +the garbage collection bucket to be processed independently. The +second is that multiple workers processes can be employed in the +deletion of data blocks associated with a single object. The latter is +discussed more in the *Object Block Reaping* section below. + +Once all of the objects represented by manifests stored for a +particular key in the `riak-cs-gc` bucket have been deleted, the key +is deleted from the `riak-cs-gc` bucket. + +### One Daemon per Cluster + +We recommend using only _one_ active garbage collection daemon in any +Riak CS cluster. If multiple daemons are currently being used, you can +disable the others by setting the `gc.interval` parameter to `infinity` +on those nodes. More information on how to do that can be found in the +[CS configuration doc]({{}}riak/cs/3.1.0/cookbooks/configuring/riak-cs/#garbage-collection-settings). + +## Controlling the GC Daemon + +The garbage collection daemon may be queried and manipulated using the +`riak-cs-gc` script. The script is installed to the `bin` or `sbin` +directory (depending on OS) along with the primary `riak-cs` script. +The available commands that can be used with the `riak-cs-gc` script are +listed below. Running the script with no command provided displays a +list of the available commands. + +Command | Description +:-------|:----------- +`batch` | Manually start garbage collection for a batch of eligible objects. This command takes an optional argument to indicate a leeway time other than the currently configured `gc.leeway_period` time for the batch. +`status` | Get the current status of the garbage collection daemon. The output is dependent on the current state of the daemon. +`pause` | Pause the current batch of object garbage collection. It has no effect if there is no active batch. +`resume` | Resume a paused garbage collection batch. It has no effect if there is no previously paused batch. +`set-interval` | Set or update the garbage collection interval. This setting uses a unit of seconds. +`set-leeway` | Set or update the garbage collection leeway time. This setting indicates how many seconds must elapse after an object is deleted or overwritten before the garbage collection system may reap the object. This setting uses a unit of seconds. + +For more information, see our documentation on [Riak CS command-line tools]({{}}riak/cs/3.1.0/using/command-line-tools). + +## Manifest Updates + +Manifest versions are retrieved and updated by the +`riak_cs_manifest_fsm` module with very few exceptions. This module +encapsulates the logic needed to retrieve the manifests, resolve any +conflicts due to siblings, and write updated manifest versions back to +Riak. + +## Object Block Reaping + +The actual deletion of the blocks of an object is managed by the +`riak_cs_delete_fsm` module. It starts up a number of delete workers +(based on the configured delete concurrency) and passes off object +block information to those workers who in turn carry out the actual +delete operation for that block. The delete workers are instances of +the `riak_cs_block_server` module. + +Once a worker deletes a block it notifies the delete fsm and waits for +notification about another block to delete. Once all blocks of an +object are deleted then the delete fsm starts an instance of the +manifest fsm to handle deleting the manifest version from the object +manifest data structure and if there are no remaining manifest +versions to delete the entire object manifest data structure. The goal +of this final step is to avoid the cost of scanning through empty +manifest keys that could linger indefinitely. + +## Trade-offs + +1. A **slow** reader may have blocks GC'd as it is reading an object if + the read exceeds the leeway interval. +2. There is some reliance on system clocks and this could lead to object + blocks being deleted earlier or later than their intended eligibility + window dictates due to clock skew. +3. A network partition (or machine failure) lasting longer than + `gc.leeway_period` could cause a manifest to "come back to life" and + appear active, it would then continually serve requests whose blocks + could not be found. + +## Configuration + +Riak CS's garbage collection implementation gives the deployer several +knobs to adjust for fine-tuning system performace. More information +can be found in our documentation on [configuring Riak CS]({{}}riak/cs/3.1.0/configuring/riak-cs/#garbage-collection-settings). + +## More Information + +If you'd like more in-depth material on garbage collection in Riak CS, +we recommend consulting the [Riak CS wiki](https://github.com/basho/riak_cs/wiki/Object-Chunking-and-Garbage-Collection) diff --git a/content/riak/cs/3.1.0/learning/multi-datacenter-overview.md b/content/riak/cs/3.1.0/learning/multi-datacenter-overview.md new file mode 100644 index 0000000000..eecc98acaf --- /dev/null +++ b/content/riak/cs/3.1.0/learning/multi-datacenter-overview.md @@ -0,0 +1,64 @@ +--- +title_supertext: "Learning:" +title: "Multi-Datacenter Replication" +description: "" +menu: + riak_cs-3.1.0: + name: "Multi-Datacenter" + identifier: "learning_mdc_overview" + weight: 130 + parent: "learning" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/cookbooks/mdc-overview/ + - /riak/cs/3.1.0/cookbooks/mdc-overview/ + - /riak/cs/3.1.0/cookbooks/multi-datacenter-overview/ + - /riakcs/3.1.0/cookbooks/multi-datacenter-overview/ +--- + +## Multi-Datacenter Replication + +Customers may use Multi-Datacenter Replication to serve global traffic, +create availability zones, maintain active backups, or meet disaster +recovery and regulatory requirements. Multi-Datacenter Replication can +be used in two or more sites, and data can be replicated across +datacenters using realtime and/or fullsync synchronization. + +Multi-Datacenter Replication in Riak CS provides two modes of object +replication: **fullsync** and **realtime sync**. Data is streamed over a +TCP connection and Multi-Datacenter Replication in Riak CS has support +for SSL so that data can be securely replicated between sites. It is +also possible to stream the data unencrypted if required but it is generally +recommended to do so over VPN if that is the case. + +In Riak CS, large objects are broken into blocks and streamed to the +underlying Riak cluster on write, where they are replicated for high +availability (3 replicas by default). A manifest for each object is +maintained so that blocks can be retrieved from the cluster and the full +object presented to clients. For multi-site replication in Riak CS, +global information for users, bucket information, and manifests are +streamed in realtime from a primary implementation (a **source** +cluster) to a secondary site (a **sink** cluster) so that global state +is maintained across locations. Objects can then be replicated in either +fullsync or realtime sync mode. + +## Fullsync Mode + +In a fullsync operation, objects are replicated from a primary Riak CS +implementation to a secondary site on a configurable interval (the +default is 6 hours). In fullsync replication, each cluster computes a +hash for each key’s block value. Key/block pairs are compared and the +primary site streams any missing blocks or updates needed to the +secondary site. + +## Realtime Mode + +Realtime sync is triggered when an update is sent from a client to a +primary Riak CS implementation. Once replicated in the first location, +the updated manifests are streamed in real time to the secondary site. +But what happens if a client requests an object from the secondary +cluster and not all of its blocks have been replicated to that cluster? +With Riak multi-site replication, the secondary cluster will request any +missing blocks via `proxy_get` from the primary cluster so that the +client can be served. diff --git a/content/riak/cs/3.1.0/learning/stanchion.md b/content/riak/cs/3.1.0/learning/stanchion.md new file mode 100644 index 0000000000..e9dc1428cd --- /dev/null +++ b/content/riak/cs/3.1.0/learning/stanchion.md @@ -0,0 +1,74 @@ +--- +title_supertext: "Learning:" +title: "Stanchion" +description: "" +menu: + riak_cs-3.1.0: + name: "Stanchion" + identifier: "learning_stanchion" + weight: 150 + parent: "learning" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/theory/stanchion/ + - /riak/cs/3.1.0/theory/stanchion/ + - /riakcs/3.1.0/learning/stanchion/ +--- + +**THIS NEEDS A MAJOR UPDATE!** + +Stanchion is an application used by Riak CS to manage the serialization +of requests, which enables Riak CS to manage [globally unique entities](#globally-unique-entities) like users and bucket names. Serialization in this context means that the entire cluster agrees upon a single value for any globally unique entity at any given time; when that value is changed, the new value must be recognized throughout the entire cluster. + +## The Role of Stanchion in a Riak CS Cluster + +Unlike Riak and Riak CS, which both run on multiple nodes in your +cluster, there should be only _one_ running Stanchion instance in your +Riak CS cluster at any time. Correspondingly, your Stanchion +installation must be managed and configured separately. For more +information, see the following documents: + +* [Configuring Stanchion]({{}}riak/cs/3.0.1/configuring/stanchion) +* [The Stantion Command-line Interface]({{}}riak/cs/3.0.1/cookbooks/command-line-tools#stanchion) + +For a more in-depth discussion of implementation details, see the +project's +[README](https://github.com/basho/stanchion/blob/master/README.org) on +GitHub. + +## Globally Unique Entities + +There are two types of entities that must be globally unique within a +Riak CS system: + +1. **User identifiers** --- Riak CS mandates that each user create an +account using an email address as an identifier. Stanchion takes steps +to ensure that an email address has not already been used before +accepting a user creation request. +2. **Bucket names** --- Bucket names must be unique within a Riak CS +system (just as they must be unique in S3 and other systems) and any +attempt to create a bucket with a name that is already in use are +rejected. + +The uniqueness of these entities is enforced by serializing any creation +or modification requests that involve them. This process is handled by +Stanchion. What happens under the hood is essentially that Stanchion +mandates that all [vnodes]({{}}riak/kv/latest/learn/glossary#vnode) in the underlying Riak cluster that are responsible for the user or bucket being created must be available at creation time. + +One result of this enforcement is that user creation requests and bucket +creation or modification, i.e. deletion, requests are not highly +available like other Riak CS system operations. If the Stanchion +application is unavailable or cannot be reached for whatever reason, +you will not be able to carry out user- and bucket-related operations. +In addition, instability in the Riak cluster may lead to user and bucket +requests being disallowed. If this happens, you will see something like +this in the Stanchion console or error logs: + +```log +2013-01-03 05:24:24.028 [warning] <0.110.0>@stanchion_utils:bucket_available:501 Error occurred trying to check if the bucket <<"mybucket">> exists. Reason: <<"{pr_val_unsatisfied,3,2}">> +``` + +Because of this, user- and bucket-related operations should be used +_only_ as preparation for a workflow and not included as part of a +highly available workflow. diff --git a/content/riak/cs/3.1.0/learning/version-compatibility.md b/content/riak/cs/3.1.0/learning/version-compatibility.md new file mode 100644 index 0000000000..66a6a8c798 --- /dev/null +++ b/content/riak/cs/3.1.0/learning/version-compatibility.md @@ -0,0 +1,77 @@ +--- +title_supertext: "Learning:" +title: "Version Compatibility" +description: "" +menu: + riak_cs-3.1.0: + name: "Version Compatibility" + identifier: "learning_version_compat" + weight: 160 + parent: "learning" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/cookbooks/Version-Compatibility/ + - /riak/cs/3.1.0/cookbooks/Version-Compatibility/ + - /riak/cs/3.1.0/cookbooks/version-compatibility/ + - /riakcs/3.1.0/cookbooks/version-compatibility/ +--- + +If you are deploying Riak CS in combination with an existing Riak +cluster, you should verify that the version of Riak that you are using +is compatible with the version of Riak CS that you intend to use. + +It is important to note that not all versions of Riak are compatible +with Riak CS, but a number of version combinations have been tested, are +known to function together, and can be recommended for use. + +The following details combinations of Riak and Riak CS versions which +are known to function together and provides some general tips about Riak +versions for use with Riak CS. + +## Unsupported Riak Versions + +Riak versions prior to version 1.2.0 are known to have performance +issues and are not tested, recommended, or supported for use with Riak +CS. Additionally, Riak versions prior to 1.0.0 are missing essential +functionality, such as Secondary Indexes or LevelDB support, required by +Riak CS. + +## Working Version Combinations + +Basic functional testing has been performed with the following combinations of +Riak and Riak CS. These versions are also known to be functioning in production environments. + +Riak version | Stanchion version | Riak CS version +--------------|-------------------|---------------- +1.2.1 | 1.2.2 | 1.2.2 +1.2.1 | 1.3.0 | 1.3.0 +1.3.0 | 1.2.2 | 1.2.2 +1.3.0 | 1.3.0 | 1.3.0 +1.4.0 | 1.4.0 | 1.4.0 +1.4.1 | 1.4.0 | 1.4.0 +1.4.8 | 1.4.3 | 1.4.5 +1.4.10 | 1.5.0 | 1.5.0 +1.4.10 | 1.5.0 | 1.5.1 +1.4.10 | 1.5.0 | 1.5.2 +1.4.12 | 1.5.0 | 1.5.3 +1.4.12 | 1.5.0 | 1.5.4 +2.0.5 | 2.0.0 | 2.0.0 +2.0.5 | 2.0.0 | 2.0.1 +2.1.4 | 2.1.1 | 2.1.1 +2.9.8 | 2.1.2 | 2.1.2 +3.0.9 | 3.0.1 | 3.0.1 +**3.0.9** | - | **3.1.0** + +**Note**: While Riak CS versions 1.5.0 and later will work with Riak +1.4.x, we highly recommend running CS with at least Riak 1.4.8, +preferably 1.4.10. In the same way, Riak CS 2.1.2 will work with Riak + from KV 2.1.x through to KV 3.0.x. + +Basic functionality testing consists of account creation, object storage and +retrieval, bucket listing operations, and Access Control List (ACL) enforcement +verification. + +Note that functional testing of Riak CS clusters operating with mixed versions +(e.g., a combination of Riak CS version 1.2.2 and version 1.3.0 nodes) has not +been performed, and cannot be recommended at this time. diff --git a/content/riak/cs/3.1.0/lists.md b/content/riak/cs/3.1.0/lists.md new file mode 100644 index 0000000000..caa252ade3 --- /dev/null +++ b/content/riak/cs/3.1.0/lists.md @@ -0,0 +1,142 @@ +--- +title: "List Tests" +description: "" +project: "riak_cs" +project_version: "3.1.0" +draft: true +aliases: +--- + +This is where I test that lists work as expected. + +Should be 1-5: + +1. Item A +2. Item B +3. Item C +4. Item D +5. Item E + +## Normal numbered list + +Should be 1-5: + +1. Item A +2. Item B +3. Item C +4. Item D +5. Item E + +## Normal numbered list with long test + +Should be 1-5: + +1. Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A Item A +2. Item B +3. Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C Item C +4. Item D Item D Item D Item D Item D Item D Item D Item D Item D Item D Item D Item D Item D Item D Item D Item D Item D Item D +5. Item E +6. Item F +7. Item G +8. Item H +9. Item I +10. Item J + +## Simple nested numbered list + +Should be 1-3, and 1-1 to 1-2: + +1. Item A + 1. Item A-A + 2. Item A-B +2. Item B +3. Item C + +## Complex nested numbered list + +1. Item A + 1. Item A-A + 2. Item A-B +2. Item B + 1. Item B-A + 1. Item B-A-A + 2. Item B-A-B + 2. Item B-B + 1. Item B-B-A + 2. Item B-B-B +3. Item C + 1. Item C-A + 1. Item C-A-A + 2. Item C-A-B + 2. Item C-B + +## Numbered list with a split by P + +Should be 1-5: + +1. Item A +2. Item B + +Breaking paragraph + +1. Item C +2. Item D +3. Item E + +## Numbered list with a split by Note + +Should be 1-5: + +1. Item A +2. Item B + +{{% note title="Breaking note" %}} +This should not matter. +{{% /note %}} + +1. Item C +2. Item D +3. Item E + +## Complex nested numbered list with breaks + +This is broken, but is a markdown limitation. + +1. Item A + 1. Item A-A + + {{% note title="Breaking note after A-A" %}} +This should not matter. + {{% /note %}} + + 2. Item A-B + +2. Item B + 1. Item B-A + 1. Item B-A-A + + {{% note title="Breaking note after B-A-A" %}} +This should not matter. + {{% /note %}} + + 2. Item B-A-B + + {{% note title="Breaking note after B-A-B" %}} +This should not matter. + {{% /note %}} + + {{% note title="Second breaking note after B-A-B" %}} +This should not matter. + {{% /note %}} + + 2. Item B-B + 1. Item B-B-A + 2. Item B-B-B +3. Item C + 1. Item C-A + 1. Item C-A-A + + Second paragraph for C-A-A + + 2. Item C-A-B + 2. Item C-B diff --git a/content/riak/cs/3.1.0/notes.txt b/content/riak/cs/3.1.0/notes.txt new file mode 100644 index 0000000000..280041718c --- /dev/null +++ b/content/riak/cs/3.1.0/notes.txt @@ -0,0 +1,116 @@ +# Migration to same folder structure as KV + +## Things to do for each page + +1. Create page + 1. Check for changes needed +2. If location changed + 1. Create redirect link in latest ✅ + 2. Create redirect link in 3.0.1/redirects ✅ + +## Things to do afterwards + +1. Copy redirects folders from 3.0.1 to each old version ✅ +2. Perform a search/replace on each version of redirects ✅ + +## New structure + +Riak CS ✅🔗 +- Release Notes ✅🔗 +- Download Riak CS ✅🔗 +- Quick Guide (aka Fast Track) ✅🔗 + - What is Riak CS? ✅🔗 + - Building a Local Test Environment ✅🔗 Needs Stanchion update ❌ + - Building a Virtual Test Environment ✅🔗 + - Testing the Installation ✅🔗 +- Setup ✅🔗 + - Installing ✅🔗 + - Alpine ✅🔗 + - Amazon Web Services ✅🔗 + - Debian & Ubuntu ✅🔗 + - FreeBSD ✅🔗 + - Oracle ✅🔗 + - RHEL & Centos ✅🔗 + - Upgrading ✅🔗 Needs Stanchion update ❌ +- Configuring ✅🔗 + - Configuring Riak KV for CS ✅🔗 + - Riak CS Configuration ✅🔗 + - Stanchion Configuration ✅🔗 + - Load Balancing & Proxy Configuration (load-balancing-proxy) ✅🔗 + - MDC Configuration (multi-datacenter) ✅🔗 + - Supercluster Configuration (supercluster) ✅🔗 + - Configuration Reference (reference) ✅🔗 +- Using ✅🔗 + - Command-line Tools ✅🔗 Needs Stanchion update ✅ + - Launching and Stopping ✅🔗 + - Logging ✅🔗 + - Monitoring and Metrics ✅🔗 +- Developing ✅🔗 + - Accounts & Admin (accounts-and-admin) ✅🔗 + - Account Management (account-management) ✅🔗 + - Access Control Lists (access-control-lists) ✅🔗 + - Authentication (authentication) ✅🔗 + - Designating an Admin User ✅🔗 + - APIs ✅🔗 + - Riak CS Storage API ✅🔗 + - S3 API ✅🔗 + - Configuring an S3 Client (s3-client-config) ✅🔗 + - Common Request Headers ✅🔗 + - Common Response Headers ✅🔗 + - Objects ✅🔗 + - Create or Update ✅🔗 + - Set Object ACL ✅🔗 + - Copy an Object ✅🔗 + - Upload Large Objects ✅🔗 + - Initiate ✅🔗 + - Upload a Part ✅🔗 + - Complete ✅🔗 + - Abort ✅🔗 + - List Uploaded Parts ✅🔗 + - In-Progress Uploads ✅🔗 + - Get Object ✅🔗 + - Get Object HEAD ✅🔗 + - Get Object ACL ✅🔗 + - Delete Object ✅🔗 + - Delete multiple objects ✅🔗 + - Buckets ✅🔗 + - Create or Update ✅🔗 + - Create or Update ACL ✅ + - Create or Update Policy ✅ + - List Buckets ✅🔗 + - Get ✅🔗 + - Get ACL ✅🔗 + - Get Policy ✅🔗 + - Delete ✅🔗 + - Delete Policy ✅🔗 + - Other Clients ✅🔗 + - Fog ✅🔗 + - DragonDisk ✅🔗 + - Transmit ✅🔗 + - OpenStack API ✅🔗 (openstack) + - Containers ✅🔗 + - Create ✅🔗 + - Delete ✅🔗 + - List ✅🔗 + - List Objects ✅🔗 + - Objects ✅🔗 + - Create ✅🔗 + - Delete ✅🔗 + - Get ✅🔗 + - Using With Keystone ✅🔗 + - Config Sample ✅🔗 + - Setup ✅🔗 + - Usage and Billing Data (usage-and-billing-data) ✅🔗 + - Access Statistics ✅🔗 + - Storage Statistics ✅🔗 +- Add-ons ✅🔗 + - Riak CS Control ✅🔗 +- Learning ✅🔗 + - FAQs ✅🔗 + - Stanchion ✅🔗 Needs Stanchion update ❌ + - Multi-Datacenter Overview ✅🔗 + - Garbage Collection ✅🔗 + - Comparisons ✅🔗 + - Compared to Swift ✅🔗 + - Compared to Atmos ✅🔗 + - Version Compatibility ✅🔗 diff --git a/content/riak/cs/3.1.0/quick-guide.md b/content/riak/cs/3.1.0/quick-guide.md new file mode 100644 index 0000000000..f1f31c1ca3 --- /dev/null +++ b/content/riak/cs/3.1.0/quick-guide.md @@ -0,0 +1,53 @@ +--- +title: "The Quick Guide to Riak CS" +description: "" +menu: + riak_cs-3.1.0: + name: "Quick Guide" + identifier: "quick_guide" + pre: time + weight: 200 +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/tutorials/fast-track/ + - /riakcs/3.1.0/tutorials/fast-track/ + - /riak/cs/3.1.0/cookbooks/tutorials/fast-track/ + - /riakcs/3.1.0/cookbooks/tutorials/fast-track/ +--- + +Riak CS (Cloud Storage) is simple, open source storage software built on +top of Riak. It can be used to build public or private clouds, or as +reliable storage to power applications and services. It features: + +* Highly available, fault-tolerant storage +* Large object support and multipart upload +* S3-compatible API and authentication +* OpenStack Swift API (not covered in this fast track) +* Multi-tenancy and per-user reporting +* Simple operational model for adding capacity +* Robust stats for monitoring and metrics + +## What is The Quick Guide to Riak CS? + +The Quick Guide to Riak CS aims to get you up and running with Riak as +quickly as possible, so that you can learn by doing. It presents +alternatives to configuration and deployment of a local test environment +and enumerates performing basic operations that illustrate Riak CS core +concepts. + +The Quick Guide is designed for people with little or no experience with +Riak CS, but can still be useful for more experienced users as well. + +## What does the Quick Guide cover? + +The Quick Guide takes you through the following sections: + +* [What is Riak CS?](what-is-riak-cs) --- A high-level overview of Riak + CS and its architecture +* [Building a Local Test Environment](local-testing-environment) --- Instructions on setting up a + local environment on your machine +* [Building a Virtual Testing Environment](virtual-test-environment) --- Instructions on setting + up a virtual environment on your machine +* [Testing the Riak CS Installation](test-installation) --- Using s3cmd to test your + local Riak CS installation diff --git a/content/riak/cs/3.1.0/quick-guide/local-testing-environment.md b/content/riak/cs/3.1.0/quick-guide/local-testing-environment.md new file mode 100644 index 0000000000..bf9e79e6af --- /dev/null +++ b/content/riak/cs/3.1.0/quick-guide/local-testing-environment.md @@ -0,0 +1,469 @@ +--- +title_supertext: "Quick Guide:" +title: "Building a Local Test Environment" +description: "" +menu: + riak_cs-3.1.0: + name: "Building a Local Test Environment" + identifier: "quick_guide_local_test" + weight: 101 + parent: "quick_guide" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/tutorials/fast-track/local-testing-environment/ + - /riak/cs/3.1.0/tutorials/fast-track/local-testing-environment/ + - /riakcs/3.1.0/cookbooks/tutorials/fast-track/Building-a-Local-Test-Environment/ + - /riak/cs/3.1.0/cookbooks/tutorials/fast-track/Building-a-Local-Test-Environment/ +--- + +The following instructions will guide you through installing a Riak CS +test environment. This guide does not cover system/service tuning and it +does not attempt to optimize your installation for your particular +architecture. + +If you want to build a testing environment with a minimum of +configuration, there is an option for [Building a Virtual Testing Environment]({{}}riak/cs/3.1.0/quick-guide/virtual-test-environment). + +## Installing Your First Node + +You should complete the following preparatory steps _before_ installing +and running Riak and Riak CS. + +### Step 1: Raise your system's open file limits + +Riak can consume a large number of open file handles during normal +operation. See the [Open Files Limit]({{}}riak/kv/latest/using/performance/open-files-limit) document for more information on +how to increase your system's open files limit. + +If you are the root user, you can increase the system's open files limit +*for the current session* with this command: + +```bash +ulimit -n 65536 +``` + +For this setting to persist in most Linux distributions, you also need +to save it for the `root` and `riak` users in +`/etc/security/limits.conf`: + +```bash +# ulimit settings for Riak CS +root soft nofile 65536 +root hard nofile 65536 +riak soft nofile 65536 +riak hard nofile 65536 +``` + +For Mac OS X, consult the [open files limit]({{}}riak/kv/latest/using/performance/open-files-limit/) documentation for Mac OS X specific details. + +### Step 2: Download and install packages + +This guide uses `curl` for downloading packages and interacting with the +Riak CS API, so let's make sure that it's installed: + +```bash +sudo apt-get install -y curl +``` + +**Note**: If you're running Riak CS on a non-Debian/Ubuntu OS, +substitute the appropriate CLI commands. + +Now, grab the appropriate packages: Riak, Riak CS, and Stanchion. See +[Download Riak]({{}}riak/kv/latest/downloads/) and [Download Riak CS]({{}}riak/cs/3.1.0/downloads). +You can skip Riak CS Control for now. + +Once you have the packages, install them per the instructions below. + +#### First, install Riak + +The following links provide platform-specific instructions for +installing Riak. + +**Do not attempt to configure or start Riak until step 3 in this +document.** + +- [Debian and Ubuntu]({{}}riak/kv/latest/setup/installing/debian-ubuntu) +- [RHEL and CentOS]({{}}riak/kv/latest/setup/installing/rhel-centos) +- [Mac OS X]({{}}riak/kv/latest/setup/installing/mac-osx) +- [FreeBSD]({{}}riak/kv/latest/setup/installing/freebsd) +- [SUSE]({{}}riak/kv/latest/setup/installing/suse) +- [Windows Azure]({{}}riak/kv/latest/setup/installing/windows-azure) +- [AWS Marketplace]({{}}riak/kv/latest/setup/installing/amazon-web-services) +- [From Source]({{}}riak/kv/latest/setup/installing/source) + +#### Next, install Riak CS + +For Mac OS X: + +```bash +curl -O http://s3.amazonaws.com/downloads.basho.com/ +tar -xvzf +``` + +Replace `` with the actual filename for the package +you are installing. + +For RedHat Enterprise distributions (and similar): + +```bash +rpm -Uvh +``` + +Replace `` with the actual filename for the package +you are installing. + +Ubuntu distributions and similar: + +```bash +sudo dpkg -i +``` + +Replace `` with the actual filename for the package +you are installing. + +#### Finally, install Stanchion + +For Mac OS X: + +```bash +curl -O http://s3.amazonaws.com/downloads.basho.com/ +tar -xvzf +``` + +Replace `` with the actual filename for the +package you are installing. + +For RedHat Enterprise distributions (and similar): + +```bash +sudo rpm -Uvh +``` + +Replace `` with the actual filename for the +package you are installing. + +For Ubuntu distributions: + +```bash +sudo dpkg -i +``` + +Replace `` with the actual filename for the +package you are installing. + +### Step 3: Set service configurations and start the services + +You will need to make changes to several configuration files. + +#### `/etc/riak/riak.conf` + +Be sure the storage backend is not set: + +```riakconf +## Delete this line + +storage_backend = . . . +``` + +And that the default bucket properties allow siblings: + +```riakconf +## Append this line at the end of the file + +buckets.default.allow_mult = true +``` + +Next, you need to expose the necessary Riak CS modules to Riak and instruct Riak +to use the custom backend provided by Riak CS. You'll have to use the old-style +`/etc/riak/advanced.config` for these settings. The file should look like: + +```advancedconfig +[ + {riak_kv, [ + {add_paths, ["/usr/lib/riak-cs/lib/riak_cs-3.1.0/ebin"]}, + {storage_backend, riak_cs_kv_multi_backend}, + {multi_backend_prefix_list, [{<<"0b:">>, be_blocks}]}, + {multi_backend_default, be_default}, + {multi_backend, [ + {be_default, riak_kv_eleveldb_backend, [ + {total_leveldb_mem_percent, 30}, + {data_root, "/var/lib/riak/leveldb"} + ]}, + {be_blocks, riak_kv_bitcask_backend, [ + {data_root, "/var/lib/riak/bitcask"} + ]} + ]} + ]} +]. +``` + +{{% note title="Note on OS-specific paths" %}} +The path for `add_paths` may be `/usr/lib/riak-cs` or `/usr/lib64/riak-cs` +depending on your operating system. +{{% /note %}} + +Next, set your interface IP addresses in the `riak.conf` file. In a +production environment, you'd likely have multiple NICs, but for this +test cluster, assume one NIC with an example IP address of 10.0.2.10. + +Change the following lines in `/etc/riak/riak.conf` + +```riakconf +listener.http.internal = 127.0.0.1:8098 +listener.protobuf.internal = 127.0.0.1:8087 +``` + +to + +```riakconf +listener.http.internal = 10.0.2.10:8098 +listener.protobuf.internal = 10.0.2.10:8087 +``` + +#### `/etc/riak-cs/riak-cs.conf` + +Change the following lines in `/etc/riak-cs/riak-cs.conf` + +```riakcsconf +listener = 127.0.0.1:8080 +riak_host = 127.0.0.1:8087 +stanchion_host = 127.0.0.1:8085 +``` + +to + +```riakcsconf +listener = 10.0.2.10:8080 +riak_host = 10.0.2.10:8087 +stanchion_host = 10.0.2.10:8085 +``` + +The `listener` could also be set to `0.0.0.0` if you prefer Riak CS to listen on +all interfaces. + +#### `/etc/stanchion/stanchion.conf` + +Change the following lines in `/etc/stanchion/stanchion.conf` + +```stanchionconf +listener = 127.0.0.1:8085 +riak_host = 127.0.0.1:8087 +``` + +to + +```stanchionconf +listener = 10.0.2.10:8085 +riak_host = 10.0.2.10:8087 +``` + +#### Service names + +Next, set your service names, using either use the local IP address for +this or set hostnames. If you choose to set hostnames, you should ensure +that the hostnames are resolvable by DNS or set in `/etc/hosts` on all +nodes. **Note**: Service names require at least one period in the name. + +Change the following line in `/etc/riak/riak.conf` + +```riakconf +nodename = riak@127.0.0.1 +``` + +to + +```riakconf +nodename = riak@10.0.2.10 +``` + +Then change the following line in `/etc/riak-cs/riak-cs.conf` + +```riakcsconf +nodename = riak-cs@127.0.0.1 +``` + +to + +```riakcsconf +nodename = riak-cs@10.0.2.10 +``` + +Change the following line in `/etc/stanchion/stanchion.conf` + +```stanchionconf +nodename = stanchion@127.0.0.1 +``` + +to + +```stanchionconf +nodename = stanchion@10.0.2.10 +``` + +#### Start the services + +That is the minimum amount of service configuration required to start a +complete node. To start the services, run the following commands in the +appropriate `/bin` directories: + +```bash +sudo riak start +sudo stanchion start +sudo riak-cs start +``` + +The order in which you start the services is important, as each is a +dependency for the next. Make sure that you successfully start Riak +before Stanchion and Stanchion before Riak CS. + +You can check the liveness of your Riak CS installation and its +connection to the supporting Riak node. If the Riak CS node is running, +the following command should return `PONG`. + +```bash +riak-cs ping +``` + +To check that the Riak CS node is communicating with its supporting Riak +node, run a `GET` request against the `riak-cs/ping` endpoint of the +Riak CS node. For example: + +```curl +curl http://localhost:8080/riak-cs/ping +``` + +### Step 4: Create the admin user + +Creating the admin user is an optional step, but it's a good test of our +new services. Creating a Riak CS user requires two inputs: + +1. **Name** --- A URL-encoded string, e.g. `admin%20user` +2. **Email** --- A unique email address, e.g. `admin@admin.com` + +To create an admin user, we need to grant permission to create new users +to the `anonymous` user. This configuration setting is only required on +a single Riak CS node. + +Add this entry to `/etc/riak-cs/riak-cs.conf`: + +```riakcsconf +anonymous_user_creation = on +``` + +Then run `sudo riak-cs stop && sudo riak-cs start` to put the new config setting into +effect. + +We can create the admin user with the following `curl` command, on the +same Riak CS machine where the `anonymous_user_creation` configuration +option was enabled: + +```curl +curl -XPOST http://localhost:8080/riak-cs/user / + -H 'Content-Type: application/json' / + -d '{"email":"admin@admin.com", "name":"admin"}' +``` + +The output of this command will be a JSON object that looks something like this: + +```json +{ + "email": "admin@admin.com", + "display_name": "admin", + "name": "admin user", + "key_id": "5N2STDSXNV-US8BWF1TH", + "key_secret": "RF7WD0b3RjfMK2cTaPfLkpZGbPDaeALDtqHeMw==", + "id": "4b823566a2db0b7f50f59ad5e43119054fecf3ea47a5052d3c575ac8f990eda7" +} +``` + +The user's access key and secret key are returned in the `key_id` and +`key_secret` fields respectively. Take note of these keys as they will +be required in the testing step. + +In this case, those keys are: + +- **Access key** --- `5N2STDSXNV-US8BWF1TH` +- **Secret key** -- `RF7WD0b3RjfMK2cTaPfLkpZGbPDaeALDtqHeMw==` + +You can use this same process to create additional Riak CS users. To +make this user the admin user, we set these keys in the Riak CS +`riak-cs.conf` and `stanchion.conf` files. + +{{% note title="Note on admin keys" %}} +The same admin keys will need to be set on all nodes of the cluster. +{{% /note %}} + +Change the following lines in `/etc/riak-cs/riak-cs.conf` on all Riak CS +machines: + +```riakcsconf +admin.key = admin-key +admin.secret = admin-secret +``` + +to + +```riakcsconf +admin.key = 5N2STDSXNV-US8BWF1TH +admin.secret = RF7WD0b3RjfMK2cTaPfLkpZGbPDaeALDtqHeMw== +``` + +**Note**: Make sure to set the `anonymous_user_creation` setting to +`off` at this point. + +Change the following lines in `/etc/stanchion/stanchion.conf` + +```stanchion.conf +admin.key = admin-key +admin.secret = admin-secret +``` + +to + +```stanchion.conf +admin.key = 5N2STDSXNV-US8BWF1TH +admin.secret = RF7WD0b3RjfMK2cTaPfLkpZGbPDaeALDtqHeMw== +``` + +Now we have to restart the services for the change to take effect: + +```bash +sudo stanchion stop && sudo stanchion start +sudo riak-cs stop && sudo riak-cs start +``` + +## Installing Additional Nodes + +The process for installing additional nodes is identical to installing +your first node with two exceptions: + +1. Stanchion only needs to be installed on your first node; there is no + need to install it again on each node. The `stanchion_ip` setting in + your Riak CS `app.config` files should be set to the `stanchion_ip` + from your first node. +2. To add additional nodes to the Riak cluster, use the following + command + + ```bash + sudo riak-admin cluster join riak@10.0.2.10 + ``` + + where `riak@10.0.2.10` is the Riak node name set in your first + node's `/etc/riak/vm.args` file + +You will then need to verify the cluster plan with the `riak-admin +cluster plan` command, and commit the cluster changes with `riak-admin +cluster commit` to complete the join process. More information is +available in the [Command Line Tools]({{}}riak/kv/latest/using/admin/riak-admin/#cluster) documentation. + +> **Note** +> +> **Riak CS is not designed to function directly on TCP port 80, and +should not be operated in a manner which exposes it directly to the +public internet**. Instead, consider a load balancing solution, +such as a dedicated device, [HAProxy](http://haproxy.1wt.eu), +or [Nginx](http://wiki.nginx.org/Main) between Riak CS and +the outside world. + +Once you have completed this step, You can progress to [testing the Riak CS installation]({{}}riak/cs/3.1.0/quick-guide/test-installation) using s3cmd. diff --git a/content/riak/cs/3.1.0/quick-guide/test-installation.md b/content/riak/cs/3.1.0/quick-guide/test-installation.md new file mode 100644 index 0000000000..ede094ecdb --- /dev/null +++ b/content/riak/cs/3.1.0/quick-guide/test-installation.md @@ -0,0 +1,149 @@ +--- +title_supertext: "Quick Guide:" +title: "Testing the Riak CS Installation" +description: "" +menu: + riak_cs-3.1.0: + name: "Testing the Installation" + identifier: "quick_guide_test_install" + weight: 103 + parent: "quick_guide" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/tutorials/fast-track/test-installation/ + - /riak/cs/3.1.0/tutorials/fast-track/test-installation/ + - /riakcs/3.1.0/cookbooks/tutorials/fast-track/Testing-the-Installation/ + - /riak/cs/3.1.0/cookbooks/tutorials/fast-track/Testing-the-Installation/ +--- + +## Installing & Configuring s3/ + +### Installation + +The simplest way to test the installation is using the `s3cmd` script. +We can install it on Ubuntu by typing: + +``` bash +sudo apt-get -y install s3/ +``` + +>**s3cmd versions** +> +> The above command will install s3cmd version 1.1.0~beta3, which is the latest +> version available in Debian's package reposiory. More current insatll +> instructions suggest using Python's [pip](https://pypi.python.org/pypi/pip) +> module to install s3cmd. +> If this method is used, s3cmd will use AWS Signature version 3 which is +> incompatible with RIak CS. As of s3cmd version 1.5.0, there is a +> `--signature-v2` flag that can be used to have s3cmd use the older format, and +> correctly interact with Riak CS. + +For OS X users, either use the package manager of your preference or [download the S3 cmd package](http://sourceforge.net/projects/s3tools/files/s3cmd/). +You will need need to extract the `.tar` file, change directories into the +folder, and build the package. The process should look something like this: + +``` bash +tar -xvzf s3cmd-1.6.1.tar.gz +cd s3cmd-1.6.1 +sudo python setup.py install +``` + +You will be prompted to enter your system password. Enter it and then +wait for the installation to complete. + +### Configuration + +We need to configure `s3cmd` to use our Riak CS server rather than S3 as +well as our user keys. To do that interactively, type the following: + +``` bash +s3cmd -c ~/.s3cfgfasttrack --configure +``` + +If you are already using `s3cmd` on your local machine, the `-c` switch +allows you to specify a `.s3cfg` file without overwriting anything you +may have presently configured. + +There are 4 default settings you should change: + +- Access Key --- Use the Riak CS user access key you generated above. +- Secret Key --- Use the Riak CS user secret key you generated above. +- Proxy Server --- Use your Riak CS IP. If you followed the virtual + environment configuration, use `localhost`. +- Proxy Port --- The default Riak CS port is `8080`. + +You should have copied your Access Key and Secret Key from the prior +installation steps. + +## Interacting with Riak CS via S3/ + +>**Warning: s3cmd Signature Version** +> +> If you are using s3cmd version 1.5.0 or greater you will need to append the +> `--signature-v2` flag to every command that targets a Riak CS cluster to have +> s3cmd use the AWS Signature version 2 rather than the default AWS Signature +> version 3 + +Once `s3cmd` is configured, we can use it to create a test bucket: + +``` bash +s3cmd -c ~/.s3cfgfasttrack mb s3://test-bucket +``` + +We can see if it was created by typing: + +``` bash +s3cmd -c ~/.s3cfgfasttrack ls +``` + +We can now upload a test file to that bucket: + +``` bash +dd if=/dev/zero of=test_file bs=1M count=2 # Create a test file +s3cmd -c ~/.s3cfgfasttrack put test_file s3://test-bucket +``` + +We can see if it was properly uploaded by typing: + +``` bash +s3cmd -c ~/.s3cfgfasttrack ls s3://test-bucket +``` + +We can now download the test file. First, let's remove the file we +generated previously: + +``` bash +rm test_file +``` + +Now, we can download the `test_file`stored in Riak CS: + +```bash +s3cmd -c ~/.s3cfgfasttrack get s3://test-bucket/test_file +``` + +We should immediately see output like this: + +```plaintext +s3://test-bucket/test_file -> ./test_file [1 of 1] + 2097152 of 2097152 100% in 0s 59.63 MB/s done +``` + +To verify that the file has been downloaded into the current directory: + +```bash +ls -lah test_file +``` + +## What's Next + +If you have made it this far, congratulations! You now have a working +Riak CS test instance (either virtual or local). There is still a fair +bit of learning to be done, so make sure and check out the Reference +section (click "Reference" on the nav on the left side of this page). A +few items that may be of particular interest: + +- [Details about API operations]({{}}riak/cs/3.1.0/developing/apis/) +- [Information about the Ruby Fog client]({{}}riak/cs/3.1.0/developing/apis/s3/other-clients/fog) +- [Release Notes]({{}}riak/cs/3.1.0/release-notes) diff --git a/content/riak/cs/3.1.0/quick-guide/virtual-test-environment.md b/content/riak/cs/3.1.0/quick-guide/virtual-test-environment.md new file mode 100644 index 0000000000..0a298012bd --- /dev/null +++ b/content/riak/cs/3.1.0/quick-guide/virtual-test-environment.md @@ -0,0 +1,105 @@ +--- +title_supertext: "Quick Guide:" +title: "Building a Virtual Test Environment" +description: "" +menu: + riak_cs-3.1.0: + name: "Building a Virtual Test Environment" + identifier: "quick_guide_virtual_test" + weight: 102 + parent: "quick_guide" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/tutorials/fast-track/virtual-test-environment/ + - /riak/cs/3.1.0/tutorials/fast-track/virtual-test-environment/ + - /riakcs/3.1.0/cookbooks/tutorials/fast-track/Building-a-Virtual-Test-Environment/ + - /riak/cs/3.1.0/cookbooks/tutorials/fast-track/Building-a-Virtual-Test-Environment/ +--- + +This option for building an environment uses a Vagrant project powered +by Chef to bring up a local Riak CS cluster. Each node can run either +Ubuntu 12.04 or CentOS 6.5 64-bit with 1536MB of RAM by default. If you +want to tune the OS or node/memory count, you'll have to edit the +`Vagrantfile` directly. + +If you want to build a testing environment with more flexibility in +configuration and durability across environment resets, there are +instructions for [Building a Local Test Environment]({{}}riak/cs/3.1.0/quick-guide/local-testing-environment). + +## Configuration + +### Install Prerequisites + +* Download and install VirtualBox from [VirtualBox Downloads](https://www.virtualbox.org/wiki/Downloads). +* Download and install Vagrant via the [Vagrant Installer](http://downloads.vagrantup.com/). + +**Note**: Please make sure to install Vagrant 1.1.0 and above. + +### Install Vagrant plugins + +Install the following Vagrant plugins: + +```bash +vagrant plugin install vagrant-berkshelf +vagrant plugin install vagrant-omnibus +vagrant plugin install vagrant-cachier # Use RIAK_CS_USE_CACHE to enable +``` + +### Clone the Repository + +In order to begin, it is necessary to clone a GitHub repository to your +local machine and change directories into the cloned folder. + +``` bash +git clone https://github.com/basho/vagrant-riak-cs-cluster +cd vagrant-riak-cs-cluster +``` + +### Launch Cluster + +With VirtualBox and Vagrant installed, it's time to launch our virtual +environment. The command below will initiate the Vagrant project: + +``` bash +RIAK_CS_CREATE_ADMIN_USER=1 vagrant up +``` + +If you haven't already downloaded the Ubuntu or CentOS Vagrant box, this +step will download it. + +### Recording Admin User credentials + +In the Chef provisioning output, you will see entries that look like +this: + +```log +[2013-03-27T11:59:12+00:00] INFO: Riak CS Key: 5N2STDSXNV-US8BWF1TH +[2013-03-27T11:59:12+00:00] INFO: Riak CS Secret: RF7WD0b3RjfMK2cTaPfLkpZGbPDaeALDtqHeMw== +``` + +Take note of these keys as they will be required in the testing step. + +In this case, those keys are: + +```config +Access key: 5N2STDSXNV-US8BWF1TH +Secret key: RF7WD0b3RjfMK2cTaPfLkpZGbPDaeALDtqHeMw== +``` + +## Next Steps + +Congratulations! You have deployed a virtualized environment of Riak CS. +You are ready to progress to [Testing the Riak CS Installation]({{}}riak/cs/3.1.0/quick-guide/test-installation). + +### Stopping Your Virtual Environment + +When you are done testing or simply want to start again from scratch, +you can end the current virtualized environment: + +```bash +vagrant destroy +``` + +**Note**: Executing this command will reset the environment to a clean +state, removing any and all changes that you have committed. diff --git a/content/riak/cs/3.1.0/quick-guide/what-is-riak-cs.md b/content/riak/cs/3.1.0/quick-guide/what-is-riak-cs.md new file mode 100644 index 0000000000..3abd6fcb14 --- /dev/null +++ b/content/riak/cs/3.1.0/quick-guide/what-is-riak-cs.md @@ -0,0 +1,58 @@ +--- +title_supertext: "Quick Guide:" +title: "What Is Riak CS?" +description: "" +menu: + riak_cs-3.1.0: + name: "What Is Riak CS?" + identifier: "quick_guide_what" + weight: 100 + parent: "quick_guide" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/tutorials/fast-track/what-is-riak-cs/ + - /riakcs/3.1.0/cookbooks/tutorials/fast-track/What-is-Riak-CS/ + - /riak/cs/3.1.0/tutorials/fast-track/what-is-riak-cs/ + - /riak/cs/3.1.0/cookbooks/tutorials/fast-track/What-is-Riak-CS/ +--- + +This page introduces the architecture behind Riak CS. If you already +know this, you can skip it and progress to +[Building a Local Test Environment](../local-testing-environment) or +[Building a Virtual Testing Environment](../virtual-test-environment). + +## Architecture + +Riak CS is built on Riak. When an object is uploaded, Riak CS breaks the +object into smaller blocks that are streamed, stored, and replicated in +the underlying Riak cluster. Each block is associated with metadata for +retrieval. Since data is replicated, and other nodes automatically take +over responsibilities of nodes that go down, data remains available even +in failure conditions. + +### How It Works + +In a Riak CS system, any node can respond to client requests - there is +no master node and each node has the same responsibilities. Since data +is replicated (three replicas per object by default), and other nodes +automatically take over the responsibility of failed or +non-communicative nodes, data remains available even in the event of +node failure or network partition. + +When an object is uploaded via the one of the provided +[APIs]({{}}riak/cs/3.1.0/developing/apis/), +Riak CS breaks the object into smaller chunks that are streamed, +written, and replicated in Riak. Each chunk is associated with metadata +for later retrieval. The diagram below provides a visualization. + +![Riak CS Chunking]({{}}images/Riak-CS-Overview.png) + +## Multi-DataCenter Replication + +Riak CS also features Multi-Datacenter Replication. Customers use +Multi-Datacenter Replication to serve global traffic, create +availability zones, maintain active backups, or meet disaster recovery + and regulatory requirements. Multi-Datacenter Replication can be used +in two or more sites. Data can be replicated across data centers using +realtime or fullsync replication. diff --git a/content/riak/cs/3.1.0/release-notes.md b/content/riak/cs/3.1.0/release-notes.md new file mode 100644 index 0000000000..bf19162de7 --- /dev/null +++ b/content/riak/cs/3.1.0/release-notes.md @@ -0,0 +1,179 @@ +--- +title: "Riak CS Release Notes" +description: "" +menu: + riak_cs-3.1.0: + name: "Release Notes" + identifier: "reference_release_notes" + weight: 110 + parent: "index" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/release-notes/ + - /riak/cs/3.1.0/cookbooks/Riak-CS-Release-Notes/ + - /riakcs/3.1.0/cookbooks/release-notes/ + - /riakcs/3.1.0/cookbooks/Riak-CS-Release-Notes/ +--- + +[riak_cs_multibag_support]: {{}}riak/cs/3.0.1/configuration/supercluster +[riak_docs_cs_2.1.2_release_notes]: {{}}riak/cs/2.1.2/cookbooks/release-notes/ + +[riak_1.4_release_notes]: https://github.com/basho/riak/blob/1.4/RELEASE-NOTES.md +[riak_2.0_release_notes]: https://github.com/basho/riak/blob/2.0/RELEASE-NOTES.md +[riak_2.0_release_notes_bitcask]: https://github.com/basho/riak/blob/2.0/RELEASE-NOTES.md#bitcask +[riak_cs_1.4_release_notes]: https://github.com/basho/riak_cs/blob/release/1.5/RELEASE-NOTES.md#riak-cs-145-release-notes +[riak_cs_1.5_release_notes]: https://github.com/basho/riak_cs/blob/release/1.5/RELEASE-NOTES.md#riak-cs-154-release-notes +[riak_cs_1.5_release_notes_upgrading]: https://github.com/basho/riak_cs/blob/release/1.5/RELEASE-NOTES.md#notes-on-upgrading +[riak_cs_1.5_release_notes_upgrading_1]: https://github.com/basho/riak_cs/blob/release/1.5/RELEASE-NOTES.md#notes-on-upgrading-1 +[riak_cs_1.5_release_notes_incomplete_mutipart]: https://github.com/basho/riak_cs/blob/release/1.5/RELEASE-NOTES.md#incomplete-multipart-uploads +[riak_cs_1.5_release_notes_leeway_and_disk]: https://github.com/basho/riak_cs/blob/release/1.5/RELEASE-NOTES.md#leeway-seconds-and-disk-space +[upgrading_to_2.0]: {{}}riak/2.0.5/upgrade-v20/ +[proper_backend]: {{}}riak/cs/2.0.0/configuring/Configuring-Riak/#Setting-up-the-Proper-Riak-Backend +[configuring_elvevedb]: {{}}riak/latest/ops/advanced/backends/leveldb/#Configuring-eLevelDB +[bitcask_capactiy_planning]: {{}}riak/2.0.5/ops/building/planning/bitcask/ +[upgrading_your_configuration]: {{}}riak/2.0.5/upgrade-v20/#Upgrading-Your-Configuration-System +[storage_statistics]: {{}}riak/cs/latest/cookbooks/Usage-and-Billing-Data/#Storage-Statistics +[downgrade_notes]: https://github.com/basho/riak/wiki/2.0-downgrade-notes + +[riak_cs_1.5_release_notes_upgrading]: https://github.com/basho/riak_cs/blob/release/1.5/RELEASE-NOTES.md#notes-on-upgrading +[riak_cs_1.5_release_notes_upgrading_1]: https://github.com/basho/riak_cs/blob/release/1.5/RELEASE-NOTES.md#notes-on-upgrading-1 +[riak_cs_1.5_release_notes_incomplete_mutipart]: https://github.com/basho/riak_cs/blob/release/1.5/RELEASE-NOTES.md#incomplete-multipart-uploads +[riak_cs_1.5_release_notes_leeway_and_disk]: https://github.com/basho/riak_cs/blob/release/1.5/RELEASE-NOTES.md#leeway-seconds-and-disk-space +[riak_cs_2.0.0_release_notes]: https://github.com/basho/riak_cs/blob/develop/RELEASE-NOTES/ + +[riak_cs_docker_bundle]: https://github.com/TI-Tokyo/riak_cs_service_bundle +[ti_tokyo_github]: https://github.com/TI-Tokyo +[riak_cs_3_codebeam_america_2021]: https://youtu.be/CmmeYza5HPg + +[riak_cs_3_object_versions]: https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html +[riak_cs_3_getbucketversioning]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetBucketVersioning.html +[riak_cs_3_putbucketversioning]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketVersioning.html +[riak_cs_3_listobjectversions]: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html + +[riak_cs_3_docker_service]: https://github.com/TI-Tokyo/riak_cs_service_bundle +[riak_cs_3_load_test]: https://github.com/TI-Tokyo/s3-benchmark + +## Riak CS 3.1.0 + +Released March 15, 2023. + +This release is centred around a single architectural change: the merge of Stanchion into Riak CS. There are no substantial additions in the scope of supported S3 methods, and no changes to the behaviour or feature set otherwise. + +## New Features + +- Stanchion is now colocated on one of the Riak CS nodes. Stanchion was a separate Erlang application serving the purpose of serializing CRUD operations on users and buckets. It previously had to run alongside Riak CS nodes on a dedicated Stanchion node. + - In auto mode, it is dynamically created at the Riak CS node receiving the first request that needs to be serialized. This node will then store Stanchion details (ip:port) in a special service bucket on a configured Riak KV node. Riak CS nodes will read that ip:port and send subsequent Stanchion requests to that endpoint. If a Riak CS node finds that Stanchion is unreachable, it will spawn a new instance on its premises and update the details in Riak KV. When a node that previously hosted Stanchion, after being temporarily unavailable, sees the Stanchion ip:port has changed, it will stop its Stanchion instance. +- Riak CS now can be built on OTP-22 through 25. +- A new subcommand, `supps` has been added to `riak-cs admin`, which will produce a ps-like output for the processes in the Riak CS main supervisor tree with some stats. + +## Changes + +### User-Visible Changes + +- New configuration parameters: + - `stanchion_hosting_mode`, with acceptable values: `auto`, `riak_cs_with_stanchion`, `riak_cs_only`, `stanchion_only` (default is `auto`). + - `tussle_voss_riak_host` ("voss" stands for "VOlatile, Storage, Serialized"), which can set to be `auto` or a `fqdn:port` at which Riak CS will store Stanchion details. A value of `auto` is equivalent to setting it to riak_host. The purpose of this parameter is to enable users operating in suboptimal networking conditions to set it to a dedicated, single-node Riak cluster on a separate network, which can be made more reliable than the one carrying S3 traffic. + - `stanchion_port`, port at which Stanchion instance will listen (if/when this node gets to start it). + - `stanchion_subnet` and `stanchion_netmask` (with default values of `127.0.0.1` and `255.255.255.255` respectively), to use when selecting which network to place Stanchion on. + +- The `riak-cs admin stanchion` switch command has been removed. The purpose of this command was to enable operators to change the ip:port of Stanchion endpoint without restarting the node. With Stanchion location now being set dynamically and discovered automatically, there is no need to expose an option for operators to intervene in this process. + +### Other Changes + +- A fair bit of work has gone to uplift riak_cs_test, hopefully making life easier for the next decade. Specifically: + - we switched erlcloud from an ancient, Basho-patched fork to upstream (tag 3.6.7), incidentally triggereing (and fixing) a bug with /stats endpoint, which previously only accepted v2 signatures. + - riak_cs_test can be built with OTP-24, and has lager replaced by the standard kernel logger facility. + - php and ruby tests have been updated and re-included in external client tests. +- [Riak CS Service Bundle](https://github.com/TI-Tokyo/riak_cs_service_bundle) has been updated to accommodate stanchion-less version of Riak CS. + +## Riak CS 3.0.1 + +Released June 10, 2022. + +### General + +This is a correction release that includes one feature that slipped from 3.0.0. + +### New Features + +- Support for fqdn data type for `riak_host` and `stanchion_host` configuration items in _riak-cs.conf_. + +## Riak CS 3.0.0 + +Released May 30, 2022. + +### General + +This release was originally envisaged as an uplift of 2.1.2 to OTP-22 and rebar3. There were no known critical bugs that needed fixing. We did, however, identifiy and implement a new S3 API call (ListObjectVersions and related), to give more substance to the major version bump. + +We also provide Dockerfiles, and a [Riak CS Docker Service Bundle][riak_cs_docker_bundle], as a convenient way to set up the full Riak CS suite locally. + +All principal repositories are in [TI Tokyo org on Github][ti_tokyo_github]. + +This release was [presented][riak_cs_3_codebeam_america_2021] at Code BEAM America 2021. + +### New features + +- Support for [object versions][riak_cs_3_object_versions], including new S3 API calls: + - [GetBucketVersioning][riak_cs_3_getbucketversioning], [PutBucketVersioning][riak_cs_3_putbucketversioning] and [ListObjectVersions][riak_cs_3_listobjectversions]. + - For buckets with versioning enabled, `GetObject` will return the specific version if it is given in the request, or the `null` version if it is not. + - As a Riak CS extension, rather than generating a random id for the new version, `PutObject` will read a `versionId` from header `x-rcs-versionid`, and use that instead. +- Riak CS Suite as a [Docker service][riak_cs_3_docker_service], allowing the (prospective) users quickly to bring up a fully functional Riak CS cluster running locally, complete with Riak CS Control, and + - properly configured and set up with a new user, whose credentials will be shown; + - with riak data persisted; + - ready for a [load-test][riak_cs_3_load_test]. +- Packaging: + - New packages are provided for FreeBSD 13 and OSX 14 (in the latter case, the package is the result of `make rel` tarred; no special user is created). + - Packages have been verified for: o RPM-based: Centos 7 and 8, Amazon Linux 2, SLES 15, Oracle Linux 8; o DEB-based: Debian 8 and 11, Ubuntu Bionic and Xenial; o Other: FreeBSD 13, OSX 14; Alpine Linux 3.15. +- A Dockerfile, bypassing cuttlefish mechanism to enable run-time configuration via environment variables. +- `riak-cs-admin` now has a new option, `test`, which creates a bucket and performs a basic write-read-delete cycle in it (useful to test that the riak cluster is configured properly for use with Riak CS). + +### Changes + +#### User-visible changes + +- S3 request signature v4 is now the default. The old (v2) signatures + continue to be supported. +- A change of internal structures needed to support object versions, + meaning downgrade to 2.x is no longer possible (even if the objects + created with 3.0 have no versions). Upgrade from 2.x is possible. +- The rpm and deb packages now rely on systemd (old-style SysV init + scripts are no longer included). + +#### Other changes + +- Riak CS and Stanchion now require OTP-22 and rebar3. +- Riak CS Test framework: + - The framework, along with a suite of tests (also the [multibag + additions](https://github.com/TI-Tokyo/riak_cs_multibag)), has been + upgraded to OTP-22/rebar3 and moved into a separate project, + [riak_cs_test](https://github.com/TI-Tokyo/riak_cs_test). + - A new battery of tests is written for `s3cmd` as a client. + - The Python client tests have been upgraded to boto3 and python-3.9. +- A refactoring of code shared between Riak CS and stanchion resulted + in that code being collected into a separate dependency, + [rcs_common](https://github.com/TI-Tokyo/rcs_common). +- [Riak CS Control](https://github.com/TI-Tokyo/riak_cs_control) + application has been upgraded to OTP-22/rebar3, too, however without + any new features. +- All EQC tests have been converted to use PropEr (no shortcuts taken, + all coverage is preserved). + +### Upgrading + +Existing data in the riak cluster underlying a 2.x instance of Riak CS +can be used with Riak CS 3.0 without any modification. + +*Note:* Once a new object is written into a database by Riak CS 3.0, +that database cannot be used again with 2.x. + +### Compatibility + +Riak CS 3.0 has been tested with Riak versions 2.2.6, 2.9.8 through +.10, and 3.0.7 and .9. It requires Stanchion 3.0.x (2.x versions not +supported due to changes in the manifest record). + +## CS 2.1.2 and Earlier + +[Click here][riak_docs_cs_2.1.2_release_notes] to read the Riak CS 2.1.2 release notes, which include all earlier releases. diff --git a/content/riak/cs/3.1.0/setup.md b/content/riak/cs/3.1.0/setup.md new file mode 100644 index 0000000000..069a245097 --- /dev/null +++ b/content/riak/cs/3.1.0/setup.md @@ -0,0 +1,30 @@ +--- +title: "Setup Riak CS" +description: "" +menu: + riak_cs-3.1.0: + name: "Setup" + identifier: "setup" + weight: 400 + pre: install +project: "riak_cs" +project_version: "3.1.0" +aliases: +--- + +[install index]: ../setup/installing +[upgrade index]: ../setup/upgrading + +## In This Section + +#### [Installing][install index] + +Step-by-step tutorials on installing Riak CS. + +[Learn More >>][install index] + +#### [Upgrading][upgrade index] + +Guides on upgrading your Riak CS cluster. + +[Learn More >>][upgrade index] diff --git a/content/riak/cs/3.1.0/setup/installing.md b/content/riak/cs/3.1.0/setup/installing.md new file mode 100644 index 0000000000..f59e0c622d --- /dev/null +++ b/content/riak/cs/3.1.0/setup/installing.md @@ -0,0 +1,82 @@ +--- +title_supertext: "Setup:" +title: "Installing Riak CS" +description: "" +menu: + riak_cs-3.1.0: + name: "Installing Riak CS" + identifier: "installing" + weight: 100 + parent: setup +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/installing/ + - /riakcs/3.1.0/cookbooks/installing/ + - /riak/cs/3.1.0/setup/installing/chef/ + - /riak/cs/3.1.0/cookbooks/installing/Riak-CS-Using-Chef/ + - /riak/cs/3.1.0/cookbooks/installing/chef/ + - /riakcs/3.1.0/cookbooks/installing/Riak-CS-Using-Chef/ + - /riakcs/3.1.0/cookbooks/installing/chef/ +--- + +[install alpine]: {{}}riak/cs/3.1.0/setup/installing/alpine-linux +[install aws]: {{}}riak/cs/3.1.0/setup/installing/amazon-web-services +[install debian & ubuntu]: {{}}riak/cs/3.1.0/setup/installing/debian-ubuntu +[install freebsd]: {{}}riak/cs/3.1.0/setup/installing/freebsd +[install oracle]: {{}}riak/cs/3.1.0/setup/installing/oracle +[install rhel & centos]: {{}}riak/cs/3.1.0/setup/installing/rhel-centos +[install windows azure]: {{}}riak/cs/3.1.0/setup/installing/windows-azure +[install source index]: {{}}riak/cs/3.1.0/setup/installing/source + +[community projects]: {{}}community/projects + +[upgrade cs]: {{}}riak/cs/3.1.0/setup/upgrading +[version compat]: {{}}riak/cs/3.1.0/learning/version-compatibility/ +[config kv for cs]: {{}}riak/cs/3.1.0/configuring/riak-kv-for-cs/ + +[setup kv]: {{}}riak/kv/latest/setup/ + +## Overview + +To install Riak CS requires two steps: + +1. Create a Riak KV cluster and configure it for Riak CS +2. Install Riak CS on each node and configure them + +We strongly recommend using one of the documented [version combinations][version compat] +when installing and running Riak CS. + +## Installing and Configuring Riak KV for Riak CS + +Before installing Riak CS, Riak KV must be installed on each node in +your cluster. You can install Riak KV either as part of an OS-specific package +or from source. + +More details can be found in the [Riak KV Setup][setup kv] documentation. + +Remember that you must repeat this installation process on each node in +your cluster. For future reference, you should make note of the Riak KV +installation directory. + +If you want to fully configure Riak KV prior to installing Riak CS, see our +documentation on [configuring Riak KV for CS][config kv for cs]. + +## Installing Riak CS + +After you have created and (ideally) configured your Riak KV cluster, you can then +install Riak CS. + +The following information will help you to properly install or upgrade Riak +in one of the supported environments: + +- [Alpine][install alpine] +- [Amazon Web Services][install aws] +- [Debian & Ubuntu][install debian & ubuntu] +- [FreeBSD][install freebsd] +- [Orcale][install oracle] +- [RHEL & CentOS][install rhel & centos] + +## Upgrading + +For information on upgrading an existing cluster see [Upgrading Riak CS][upgrade cs]. diff --git a/content/riak/cs/3.1.0/setup/installing/alpine-linux.md b/content/riak/cs/3.1.0/setup/installing/alpine-linux.md new file mode 100644 index 0000000000..1ac9dbfa1a --- /dev/null +++ b/content/riak/cs/3.1.0/setup/installing/alpine-linux.md @@ -0,0 +1,103 @@ +--- +title_supertext: "Setup > Installing:" +title: "Alpine Linux" +title_supertext: "Installing on" +menu: + riak_cs-3.1.0: + name: "Alpine Linux" + identifier: "install-alpine-linux" + parent: "installing" + weight: 100 +project: "riak_cs" +project_version: 3.1.0 +toc: true +aliases: +--- + +[configure cs]: {{}}riak/cs/3.1.0/configuring + +Riak KV can be installed on Alpine Linux using our Alpine package repo. + +Riak CS has been tested on: + +* Alpine Linux 3.16 +* Alpine Linux 3.18 + +## Alpine Linux 3.16 + +To install Riak CS on Alpine Linux 3.16: + +1. Add the Riak repository by running: + + ```bash + echo https://files.tiot.jp/alpine/v3.16/main >> /etc/apk/repositories + ``` + +2. Download and install the Riak repository public key by running: + + ```bash + wget http://files.tiot.jp/alpine/alpine@tiot.jp.rsa.pub -O /etc/apk/keys/alpine@tiot.jp.rsa.pub + ``` + +3. Update your list of packages by running: + + ```bash + apk update + ``` + +4. Install Riak: + * For the latest version, run: + + ```bash + apk add riak + ``` + + * For a specific version, run `apk add riak=w.x.y.z-r0` where `w.x.y` is the Riak CS version and `z` is the OTP version. + + For example, to install Riak CS 3.1.0 using OTP 25, run: + + ```bash + apk add riak=3.1.0.25-r0 + ``` + +## Alpine Linux 3.18 + +To install Riak CS on Alpine Linux 3.18: + +1. Add the Riak repository by running: + + ```bash + echo https://files.tiot.jp/alpine/v3.18/main >> /etc/apk/repositories + ``` + +2. Download and install the Riak repository public key by running: + + ```bash + wget http://files.tiot.jp/alpine/alpine@tiot.jp.rsa.pub -O /etc/apk/keys/alpine@tiot.jp.rsa.pub + ``` + +3. Update your list of packages by running: + + ```bash + apk update + ``` + +4. Install Riak: + * For the latest version, run: + + ```bash + apk add riak + ``` + + * For a specific version, run `apk add riak=w.x.y.z-r0` where `w.x.y` is the Riak CS version and `z` is the OTP version. + + For example, to install Riak CS 3.1.0 using OTP 25, run: + + ```bash + apk add riak=3.1.0.25-r0 + ``` + +## What's Next? + +Once you've completed installation of Riak CS and Riak, you're ready to +learn more about [configuring Riak CS][configure cs]. diff --git a/content/riak/cs/3.1.0/setup/installing/amazon-web-services.md b/content/riak/cs/3.1.0/setup/installing/amazon-web-services.md new file mode 100644 index 0000000000..f6b345b54d --- /dev/null +++ b/content/riak/cs/3.1.0/setup/installing/amazon-web-services.md @@ -0,0 +1,43 @@ +--- +title_supertext: "Setup > Installing:" +title: "Amazon Web Services" +menu: + riak_cs-3.1.0: + name: "Amazon Web Services" + identifier: "install-amazon-web-services" + weight: 110 + parent: installing +project: "riak_cs" +toc: true +project_version: "3.1.0" +aliases: +--- + +[files amazon]: https://files.tiot.jp/riak/cs/3.1/3.1.0/amazon/ +[downloads amazon]: {{}}riak/cs/3.1.0/downloads#amazon-linux +[configure cs]: {{}}riak/cs/3.1.0/configuring + +## Installing Riak CS on Amazon Linux 2 + +Riak CS packages for Amazon Linux are hosted on +[files.tiot.jp][files amazon]. + +Platform-specific pages are available on the [Downloads][downloads amazon] page. + +### yum Installation + +For the simplest installation process on LTS (Long-Term Support) +releases, download the appropriate package for your OS and OTP preference +and use `yum localinstall` to install it. + +For example, for the Amazon Linux 2 with OTP 25 release of Riak CS 3.1.0 for a 64-bit architecture one would run: + +```bash +wget https://files.tiot.jp/riak/cs/3.1/3.1.0/amazon/2/riak-cs-3.1.0.OTP25-1.amzn2.x86_64.rpm +sudo yum localinstall -y riak-cs-3.1.0.OTP25-1.amzn2.x86_64.rpm +``` + +## What's Next? + +Once you've completed installation of Riak CS and Riak, you're ready to +learn more about [configuring Riak CS][configure cs]. diff --git a/content/riak/cs/3.1.0/setup/installing/debian-ubuntu.md b/content/riak/cs/3.1.0/setup/installing/debian-ubuntu.md new file mode 100644 index 0000000000..51ab3eb5e1 --- /dev/null +++ b/content/riak/cs/3.1.0/setup/installing/debian-ubuntu.md @@ -0,0 +1,65 @@ +--- +title_supertext: "Setup > Installing:" +title: "Debian & Ubuntu" +menu: + riak_cs-3.1.0: + name: "Debian & Ubuntu" + identifier: "install-debian-ubuntu" + weight: 120 + parent: installing +project: "riak_cs" +toc: true +project_version: "3.1.0" +aliases: +--- + +[files debian]: https://files.tiot.jp/riak/cs/3.1/3.1.0/debian/ +[files ubuntu]: https://files.tiot.jp/riak/cs/3.1/3.1.0/ubuntu/ +[downloads debian]: {{}}riak/cs/3.1.0/downloads#debian +[downloads ubuntu]: {{}}riak/cs/3.1.0/downloads#ubuntu +[configure cs]: {{}}riak/cs/3.1.0/configuring + +## Installing Riak CS on Debian + +Riak CS packages for Debian are hosted on +[files.tiot.jp][files debian]. + +Platform-specific pages are available on the [Downloads][downloads debian] page. + +### dpkg Installation + +For the simplest installation process on LTS (Long-Term Support) +releases, download the appropriate package for your OS and OTP preference +and use `dpkg -i` to install it. + +For example, for the Debian 11 with OTP 25 release of Riak CS 3.1.0 for a 64-bit architecture one would run: + +```bash +wget https://files.tiot.jp/riak/cs/3.1/3.1.0/debian/11/riak-cs_3.1.0-OTP25_amd64.deb +sudo dpkg -i riak-cs_3.1.0-OTP25_amd64.deb +``` + +## Installing Riak CS on Ubuntu + +Riak CS packages for Ubuntu are hosted on +[files.tiot.jp][files ubuntu]. + +Platform-specific pages are available on the [Downloads][downloads ubuntu] page. + +### dpkg Installation + +For the simplest installation process on LTS (Long-Term Support) +releases, download the appropriate package for your OS and OTP preference +and use `dpkg -i` to install it. + +For example, for the Ubuntu 22.04 (Jammy) with OTP 25 release of Riak CS 3.1.0 for a 64-bit architecture one would run: + +```bash +wget https://files.tiot.jp/riak/cs/3.1/3.1.0/ubuntu/jammy_64/riak-cs_3.1.0-OTP25_amd64.deb +sudo dpkg -i riak-cs_3.1.0-OTP25_amd64.deb +``` + +## What's Next? + +Once you've completed installation of Riak CS and Riak, you're ready to +learn more about [configuring Riak CS][configure cs]. diff --git a/content/riak/cs/3.1.0/setup/installing/freebsd.md b/content/riak/cs/3.1.0/setup/installing/freebsd.md new file mode 100644 index 0000000000..3a3b6b6281 --- /dev/null +++ b/content/riak/cs/3.1.0/setup/installing/freebsd.md @@ -0,0 +1,43 @@ +--- +title_supertext: "Setup > Installing:" +title: "FreeBSD" +menu: + riak_cs-3.1.0: + name: "FreeBSD" + identifier: "install-freebsd" + weight: 130 + parent: installing +project: "riak_cs" +toc: true +project_version: "3.1.0" +aliases: +--- + +[files freebsd]: https://files.tiot.jp/riak/cs/3.1/3.1.0/freebsd/ +[downloads freebsd]: {{}}riak/cs/3.1.0/downloads#freebsd +[configure cs]: {{}}riak/cs/3.1.0/configuring + +## Installing Riak CS on FreeBSD + +Riak CS packages for FreeBDF are hosted on +[files.tiot.jp][files freebsd]. + +Platform-specific pages are available on the [Downloads][downloads freebsd] page. + +### pkg Installation (FreeBSD) + +For the simplest installation process on LTS (Long-Term Support) +releases, download the appropriate package for your OS and OTP preference +and use `pkg -i` to install it. + +For example, for the FreeBDF 13.1 with OTP 25 release of Riak CS 3.1.0 for a 64-bit architecture one would run: + +```bash +wget https://files.tiot.jp/riak/cs/3.1/3.1.0/freebsd/13.1/riak_cs-3.1.0-OTP25.pkg +sudo pkg -i riak_cs-3.1.0-OTP25.pkg +``` + +## What's Next? + +Once you've completed installation of Riak CS and Riak, you're ready to +learn more about [configuring Riak CS][configure cs]. diff --git a/content/riak/cs/3.1.0/setup/installing/oracle.md b/content/riak/cs/3.1.0/setup/installing/oracle.md new file mode 100644 index 0000000000..4c1e3c19b4 --- /dev/null +++ b/content/riak/cs/3.1.0/setup/installing/oracle.md @@ -0,0 +1,43 @@ +--- +title_supertext: "Setup > Installing:" +title: "Oracle Linux" +menu: + riak_cs-3.1.0: + name: "Oracle Linux" + identifier: "install-oracle" + parent: installing + weight: 140 +project: "riak_cs" +toc: true +project_version: "3.1.0" +aliases: +--- + +[files oracle]: https://files.tiot.jp/riak/cs/3.1/3.1.0/oracle/ +[downloads oracle]: {{}}riak/cs/3.1.0/downloads#oracle-linux +[configure cs]: {{}}riak/cs/3.1.0/configuring + +## Installing Riak CS on Oracle Linux + +Riak CS packages for Oracle Linux are hosted on +[files.tiot.jp][files oracle]. + +Platform-specific pages are available on the [Downloads][downloads oracle] page. + +### yum Installation + +For the simplest installation process on LTS (Long-Term Support) +releases, download the appropriate package for your OS and OTP preference +and use `yum localinstall` to install it. + +For example, for the Oracle 8 with OTP 25 release of Riak CS 3.1.0 for a 64-bit architecture one would run: + +```bash +wget https://files.tiot.jp/riak/cs/3.1/3.1.0/oracle/8/riak-cs-3.1.0.OTP25-1.el8.x86_64.rpm +sudo yum localinstall -y riak-cs-3.1.0.OTP25-1.el8.x86_64.rpm +``` + +## What's Next? + +Once you've completed installation of Riak CS and Riak, you're ready to +learn more about [configuring Riak CS][configure cs]. diff --git a/content/riak/cs/3.1.0/setup/installing/rhel-centos.md b/content/riak/cs/3.1.0/setup/installing/rhel-centos.md new file mode 100644 index 0000000000..1ede0e25dd --- /dev/null +++ b/content/riak/cs/3.1.0/setup/installing/rhel-centos.md @@ -0,0 +1,43 @@ +--- +title_supertext: "Setup > Installing:" +title: "RHEL & Centos" +menu: + riak_cs-3.1.0: + name: "RHEL & Centos" + identifier: "install-rhel-centos" + parent: installing + weight: 150 +project: "riak_cs" +project_version: "3.1.0" +toc: true +aliases: +--- + +[files rhel-centos]: https://files.tiot.jp/riak/cs/3.1/3.1.0/rhel/ +[downloads rhel-centos]: {{}}riak/cs/3.1.0/downloads#oracle-linux +[configure cs]: {{}}riak/cs/3.1.0/configuring + +## Installing Riak CS on Oracle Linux + +Riak CS packages for Oracle Linux are hosted on +[files.tiot.jp][files rhel-centos]. + +Platform-specific pages are available on the [Downloads][downloads rhel-centos] page. + +### yum Installation + +For the simplest installation process on LTS (Long-Term Support) +releases, download the appropriate package for your OS and OTP preference +and use `yum localinstall` to install it. + +For example, for the Centos 8 with OTP 25 release of Riak CS 3.1.0 for a 64-bit architecture one would run: + +```bash +wget https://files.tiot.jp/riak/cs/3.1/3.1.0/rhel/8/riak-cs-3.1.0.OTP25-1.el8.x86_64.rpm +sudo yum localinstall -y riak-cs-3.1.0.OTP25-1.el8.x86_64.rpm +``` + +## What's Next? + +Once you've completed installation of Riak CS and Riak, you're ready to +learn more about [configuring Riak CS][configure cs]. diff --git a/content/riak/cs/3.1.0/setup/upgrading.md b/content/riak/cs/3.1.0/setup/upgrading.md new file mode 100644 index 0000000000..3e492df6fc --- /dev/null +++ b/content/riak/cs/3.1.0/setup/upgrading.md @@ -0,0 +1,207 @@ +--- +title_supertext: "Setup:" +title: "Upgrading Riak CS" +description: "" +menu: + riak_cs-3.1.0: + name: "Upgrading" + identifier: "upgrading" + weight: 100 + parent: "setup" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/rolling-upgrades/ + - /riakcs/3.1.0/cookbooks/rolling-upgrades/ + - /riakcs/3.1.0/cookbooks/Rolling-Upgrades-For-Riak-CS/ + - /riak/cs/3.1.0/cookbooks/Rolling-Upgrades-For-Riak-CS/ +--- + +[version compat]: {{}}riak/cs/3.1.0/learning/version-compatibility +[configuring cs]: {{}}riak/cs/3.1.0/configuring/riak-cs + +A Riak CS cluster is upgraded using Rolling Upgrade. + +Each node in a Riak CS cluster contains settings that define its +operating modes and API coverage. The following steps outline the +process of upgrading Riak CS in a rolling fashion. + +Be sure to check the Riak CS [Version Compatibility][version compat] chart to ensure that your version of Riak, Riak CS, and Stanchion have been tested to work together. As Basho supports upgrades from the previous two major versions, this document will cover upgrades from Riak CS 1.4.x and Riak CS 1.5.x. + +As Riak CS 3.1.0 only works with Riak KV 3.0.9 and above, the underlying Riak KV installation +*must* be upgraded to Riak KV 3.0.9 or newer. + +{{% note title="Note on upgrading from Riak CS < 1.5.4" %}} + +Some key objects changed names after the upgrade. Applications may need to +change their behaviour due to this bugfix.{{% /note %}} + +{{% note title="Note on upgrading from Riak CS < 1.5.1" %}} + +Bucket number limitation per user have been introduced in 1.5.1. Users who +have more than 100 buckets cannot create any bucket after the upgrade unless +the limit is extended in the system configuration.{{% /note %}} + +{{% note title="Note on upgrading From Riak CS 1.4.x" %}} +An operational procedure + +to clean up incomplete multipart under deleted buckets is needed. Otherwise +new buckets with names that used to exist in the past can't be created. The +operation will fail with a `409 Conflict` error.

+ +Leeway seconds and disk space should also be carefully watched during the +upgrade, because timestamp management of garbage collection has changed since +the 1.5.0 release. Consult the + +Leeway seconds and disk space section of the 1.5 release notes +for a more detailed description.{{% /note %}} + +1. Stop Riak, Riak CS, and Stanchion: + + ```bash + riak stop + riak-cs stop + stanchion stop + ``` + +2. Back up Riak's configuration files: + + ```bash + sudo tar -czf riak_config_backup.tar.gz /etc/riak + ``` + +3. Optionally, back up your data directories: + + ```bash + sudo tar -czf riak_data_backup.tar.gz /var/lib/riak + ``` + + {{% note title="Note on Patches" %}} +Remember to remove all patches from the `basho-patches` directory, as the +version of Erlang has changed in Riak CS 3.1.0. All official patches +previously released by Basho have been included in this release. + {{% /note %}} + +4. Upgrade Riak, Riak CS, and Stanchion. See the Riak + CS Downloads and Riak Downloads + pages to find the appropriate packages. + + **Debian** / **Ubuntu** + + ```bash + sudo dpkg -i .deb + sudo dpkg -i .deb + sudo dpkg -i .deb + ``` + + **RHEL** / **CentOS** + + ```bash + sudo rpm -Uvh .rpm + sudo rpm -Uvh .rpm + sudo rpm -Uvh .rpm + ``` + +5. The `add_paths` setting in your configuration file must be updated to reflect + the current version's `/ebin` directory. To give an example, if the + previous `/ebin` directory was located at + `/usr/lib/riak-cs/lib/riak_cs-1.5.2/ebin` and you're upgrading to version + 2.0.0, you will need to change the value in `add_paths`: + + ```advancedconfig + {add_paths, ["/usr/lib/riak-cs/lib/riak_cs-3.1.0/ebin"]} + ``` + + ```appconfig + {add_paths, ["/usr/lib/riak-cs/lib/riak_cs-3.1.0/ebin"]} + ``` + +6. Riak CS 2.0 introduced a new style of configuration known as `riak-cs.conf`. + You may choose to continue the use of the `app.config` file, or migrate your + existing configuration to `riak-cs.conf` (recommended). If you choose to + use `riak-cs.conf`, you should migrate all supported settings to the new + format, and copy all others to the new `advanced.config` file. + + {{% note title="Note on Legacy app.config usage" %}} +**If you choose to use the legacy `app.config` files for Riak CS and/or +Stanchion, some parameters have changed names and must be updated**. + +In particular, for the Riak CS `app.config`: + +- `cs_ip` and `cs_port` have been combined into `listener`. +- `riak_ip` and `riak_pb_port` have been combined into `riak_host`. +- `stanchion_ip` and `stanchion_port` have been combined into +`stanchion_host`. +- `admin_ip` and `admin_port` have been combined into `admin_listener`. +- `webmachine_log_handler` has become `webmachine_access_log_handler`. +- `{max_open_files, 50}` has been deprecated and should be replaced with +`{total_leveldb_mem_percent, 30}`. + +For the Stanchion `app.config`: + +- `stanchion_ip` and `stanchion_port` have been combined into `listener`. +- `riak_ip` and `riak_port` have been combined into `riak_host`. + +Each of the above pairs follows a similar form. For example, if your legacy +`app.config` configuration was previously: + +``` +{riak_cs, [` + {cs_ip, "127.0.0.1"}, + {cs_port, 8080 }, + . . . +]}, +``` + +It should now read: + +``` +{riak_cs, [ + {listener, {"127.0.0.1", 8080}}, + . . . +]}, +``` + +and so on. More details can be found at [configuring Riak CS]({{}}riak/cs/3.1.0/configuring/riak-cs). + {{% /note %}} + + {{% note title="Note on Memory Sizing" %}} +Some changes have been made to both Riak and Riak CS that may warrant +some performance tuning. Please consult the + +Release Notes for more details. + {{% /note %}} + +7. Riak has also moved to the new configuration format, using a file called + `riak.conf`. Remember to migrate all existing Riak configurations during + the upgrade process. For example, the default bucket properties: + + ```riakconf + buckets.default.allow_mult = true + ``` + + ```appconfig + {riak_core, [ + ... + {default_bucket_props, [{allow_mult, true}]}, + ... + ]}. + ``` + +8. Start the node: + + ```bash + riak start + riak-cs start + ``` + +9. Wait for any handoff to complete: + + ```bash + riak-admin transfers + ``` + +10. Move on to the next node and repeat this process throughout the + cluster. diff --git a/content/riak/cs/3.1.0/using.md b/content/riak/cs/3.1.0/using.md new file mode 100644 index 0000000000..9624535207 --- /dev/null +++ b/content/riak/cs/3.1.0/using.md @@ -0,0 +1,27 @@ +--- +title_supertext: "Using Riak CS" +title: "Overview" +description: "" +menu: + riak_cs-3.1.0: + name: "Using" + identifier: "using" + weight: 600 + pre: database +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/operating/ + - /riakcs/3.1.0/operating/ + - /riak/cs/3.1.0/operating/running/ + - /riakcs/3.1.0/operating/running/ + - /riak/cs/3.1.0/operating/advanced/ + - /riakcs/3.1.0/operating/advanced/ +--- + +### In This Section + +- [Riak CS Command-line Tools](../../using/command-line-tools) +- [Launching and Stopping Riak CS](../../using/launching-and-stopping/) +- [Monitoring & Metrics](../../using/monitoring-and-metrics/) +- [Riak CS Logging](../../using/logging/) diff --git a/content/riak/cs/3.1.0/using/command-line-tools.md b/content/riak/cs/3.1.0/using/command-line-tools.md new file mode 100644 index 0000000000..113a4d1071 --- /dev/null +++ b/content/riak/cs/3.1.0/using/command-line-tools.md @@ -0,0 +1,644 @@ +--- +title_supertext: "Using:" +title: "Command-line Tools" +description: "" +menu: + riak_cs-3.1.0: + name: "Command-line Tools" + identifier: "using_cli" + weight: 100 + parent: "using" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/command-line-tools/ + - /riakcs/3.1.0/cookbooks/command-line-tools/ +--- + +Riak CS comes equipped with a variety of command-line interfaces that +you can use to manage each node in your Riak CS cluster. The scripts for +these commands are available by default in the `/bin` directory of each +node. + +## riak-cs + +This is the primary script for controlling the processes associated with +a Riak CS node. Running the `riak-cs` command by itself will output a +listing of available commands: + +```plaintext +Usage: riak-cs {start | stop | restart | reboot | ping | console | attach | + attach-direct | ertspath | chkconfig | escript | version | + getpid | top [-interval N] [-sort reductions|memory|msg_q] [-lines N] } +``` + +#### start + +Starts the Riak CS node. + +```bash +riak-cs start +``` + +If starting the node is successful, you will see no return output. If +the node is already running, this command will return `Node is already +running!`. + +#### stop + +Stops the Riak CS node. + +```bash +riak-cs stop +``` + +This command will print `ok` if the stoppage is successful. + +If you attempt to run `riak-cs stop` on a node that is not currently +running, you will see the following: + +```plaintext +Node not responding to pings. +Node is not running! +``` + +#### restart + +Stops and then starts a running Riak CS node without exiting the Erlang +VM. + +```bash +riak-cs restart +``` + +Prints `ok` when successful. If the node is already stopped or not +responding, you will see the following output: + +```plaintext +Node not responding to pings. +``` + +#### reboot + +Stops all applications and starts without restarting the Erlang VM. + +```bash +riak-cs reboot +``` + +{{% note title="Deprecation notice" %}} +The `riak-cs reboot` command has been deprecated. We recommend using the +`riak-cs restart` command instead. +{{% /note %}} + +#### ping + +Checks whether the Riak CS node is currently running. + +```bash +riak-cs ping +``` + +Prints `pong` when the node is running or `Node not +responding to pings` when the node is stopped or not responding. + +#### console + +Starts the Riak CS node in the foreground, providing direct access to +the node via the Erlang shell. + +```bash +riak-cs console +``` + +If the node is already running in the background, you will see the +output `Node is already running - use 'riak-cs attach' instead`. If the +command is successful, you can exit the shell by pressing **Ctrl-G q**. + +#### attach + +Attaches to the console of a Riak CS node running in the background, +providing access to the Erlang shell and to runtime messages. + +```bash +riak-cs attach +``` + +Prints `Node is not running!` when the node cannot be reached. + +#### attach-direct + +Attaches to the console of a Riak CS node running in the background +using a directly connected first-in-first-out (FIFO), providing access +to the Erlang shell and to runtime messages. + +```bash +riak-cs attach-direct +``` + +Prints `Node is not running!` when the node cannot be reached. You can +exit the shell by pressing **Ctrl-G q**. + +#### ertspath + +Outputs the path of Riak CS's Erlang runtime environment. + +```bash +riak-cs ertspath +``` + +#### chkconfig + +Checks whether the Riak CS nodes configuration files are valid. + +```bash +riak-cs chkconfig +``` + +If the files are valid, `config is OK` will be included in the output. + +#### escript + +Provides a means of calling [escript](http://www.erlang.org/doc/man/escript.html) +scripts using Riak CS's Erlang runtime environment. + +```bash +riak-cs escript +``` + +#### version + +Outputs the Riak CS version identifier. + +```bash +riak-cs version +``` + +#### getpid + +Outputs the process identifier for the currently running instance of +Riak CS. + +```bash +riak-cs getpid +``` + +#### top + +The `riak-cs top` command provides information about what the Erlang +processes inside of Riak CS are doing. `top` reports process reductions +(an indicator of CPU utilization), memory used, and message queue sizes. + +```bash +riak-cs top [-interval N] [-sort reductions|memory|msg_q] [-lines N] +``` + +Options: + +* `interval` specifies the number of seconds between each update of the + `top` output and defaults to 5 +* `sort` determines the category on which `riak-cs top` sorts and + defaults to `reductions` +* `lines` specifies the number of processes to display in the `top` + output and defaults to 10 + +More information about Erlang's etop tool can be found in the +[official documentation](http://www.erlang.org/doc/man/etop.html). + +## riak-cs-admin gc + +This command controls Riak CS's [garbage collection]({{}}riak/cs/3.1.0/learning/garbage-collection) system. + +```bash +riak-cs-admin gc +``` + +#### batch + +Starts garbage collection for a batch of eligible objects. + +```bash +riak-cs-admin gc batch +``` + +Optionally, you can specify the number of leeway seconds: + +```bash +riak-cs-admin gc batch +``` + +In Riak CS 2.1 you can specify the target range of GC bucket key range, with start and end timestamps. For example: + +```bash +riak-cs-admin gc batch --end=20150801T000000Z +``` + +Or + +```bash +riak-cs-admin gc batch --start=20150801T000000Z --end=20150901T000000Z +``` + +#### status + +Returns the status of the garbage collection daemon, depending on its +current state. + +```bash +riak-cs-admin gc status +``` + +#### pause + +Pauses the current batched garbage collection process and halts any +further garbage collection until the daemon is resumed. + +```bash +riak-cs-admin gc pause +``` + +#### resume + +Resumes a paused garbage collection process. This will have no effect if +there is no previously paused process. + +```bash +riak-cs-admin gc resume +``` + +#### cancel + +Cancels the current batch of garbage collection. This will have no +effect if there is no currently running garbage collection process. + +```bash +riak-cs-admin gc cancel +``` + +#### set-interval + +Sets or updates the garbage collection interval. Expressed in terms of +seconds: + +```bash +riak-cs-admin gc set-interval +``` + +#### set-leeway + +Sets or updates the garbage collection leeway time, which indicates how +many seconds must elapse after an object is deleted or overwritten +before the garbage collection system may reap the object. Expressed in +seconds. + +```bash +riak-cs-admin gc set-leeway +``` + +#### earliest-keys + +Find oldest entry after `epoch_start` in garbage collection. + +```bash +riak-cs-admin gc earliest-keys +``` + +## riak-cs-stanchion + +This command interface controls aspects of the interaction between Riak +CS and Stanchion, the access control and user management platform +undergirding Riak CS. + +#### switch + +Temporarily changes the host and/or port used by Stanchion. This change +is effective until the node is restarted, at which point Stanchion will +begin listening on the host and port specified in your [configuration files]({{}}riak/cs/3.1.0/configuring/reference). + +```bash +riak-cs-stanchion switch HOST PORT +``` + +The following command would change the host to 100.0.0.1 and the port to +9999: + +```bash +riak-cs-stanchion switch 100.0.0.1 9999 +``` + +The following output would appear if the change were successful: + +```plaintext +Successfully switched stanchion to 100.0.0.1:9999: This change is only effective until restart. +To make permanent change, be sure to edit app.config file. +``` + +#### show + +Shows the current host/port address for Stanchion. + +```bash +riak-cs-stanchion show +``` + +The output should look something like this: + +```plaintext +Current Stanchion Address: http://127.0.0.1:8085 +``` + +## riak-cs-admin storage + +This command is the direct equivalent of `riak-cs-admin storage` +documented [above](#riak-cs-admin). + +## stanchion + +This command interface enables you to control Stanchion, the user +management and access control platform undergirding Riak CS. + +#### start + +Starts Stanchion in the background. + +```bash +stanchion start +``` + +If Stanchion is already running on the node, the message `Node is +already running!` will be returned. + +#### stop + +Stops Stanchion on the node. + +```bash +stanchion stop +``` + +Prints `ok` when successful or `Node not responding to +pings` if the Stanchion node is not running. + +#### restart + +Stops and then starts the running Stanchion node without exiting the +Erlang VM. Prints `ok` when successful or `Node not +responding to pings.` when the node is stopped or not responding. + +```bash +stanchion restart +``` + +#### reboot + +Stops and then restarts the running node, exiting the Erlang VM. Prints +`ok` when successful or `Node not responding to pings.` when +the node is stopped or not responding. + +```bash +stanchion reboot +``` + +#### ping + +Checks that the Stanchion node is running. Prints `pong` when +successful or `Node not responding to pings.` when the +Stanchion node is stopped or not responding. + +```bash +stanchion ping +``` + +#### console + +Starts the Stanchion node in the foreground, providing access to the +Erlang shell and to runtime messages. + +```bash +stanchion console +``` + +Prints `Node is already running - use 'stanchion attach' instead` if +the node is already running in the background. + +#### attach + +Attaches to the console of a Stanchion node running in the background, +providing access to the Erlang shell and to runtime messages. + +```bash +stanchion attach +``` + +Prints `Node is not running!` when the node cannot be reached. + +#### attach-direct + +Attaches to the console of a Stanchion node running in the background +using a directly connected first-in-first-out (FIFO), providing access +to the Erlang shell and to runtime messages. + +```bash +stanchion attach-direct +``` + +Prints `Node is not running!` when the node cannot be reached. You can +exit the shell by typing **Ctrl-D**. + +#### ertspath + +Outputs the path of the Stanchion node's Erlang runtime environment. + +```bash +stanchion ertspath +``` + +#### chkconfig + +Checks whether Stanchion's configuration file is valid. + +```bash +stanchion chkconfig +``` + +If the file is valid, `config is OK` will be returned. If not, +appropriate error messages will be returned. + +#### escript + +Provides a means of calling [escript](http://www.erlang.org/doc/man/escript.html) +scripts using Stanchion's Erlang runtime environment. + +```bash +stanchion escript +``` + +#### version + +Outputs the Stanchion version identifier. + +```bash +stanchion version +``` + +#### getpid + +Outputs the process identifier for the currently running instance of +Stanchion. + +```bash +stanchion getpid +``` + +#### top + +The `stanchion top` command provides information about what the Erlang +processes inside of Stanchion are doing. `top` reports process +reductions (an indicator of CPU utilization), memory used, and message +queue sizes. + +```bash +stanchion top [-interval N] [-sort reductions|memory|msg_q] [-lines N] +``` + +Options: + +* `interval` specifies the number of seconds between each update of the + `top` output and defaults to 5 +* `sort` determines the category on which `riak-cs top` sorts and + defaults to `reductions` +* `lines` specifies the number of processes to display in the `top` + output and defaults to 10 + +More information about Erlang's etop tool can be found in the +[official documentation](http://www.erlang.org/doc/man/etop.html). + +## riak-cs-access + +This command is the direct equivalent of `riak-cs-admin access`, +documented [above](#riak-cs-admin-access). + +## riak-cs-supercluster + +Riak CS version 1.5 offers support for supercluster operations. The +`supercluster` command interface enables you to interact with that system. +More information can be found in [Riak CS Supercluster Support]({{}}riak/cs/3.1.0/configuring/supercluster). + +{{% note title="Note: technical preview" %}} +Riak CS supercluster support is available only as a technical preview for +users of Riak CS installations with support for Multi-Datacenter Replication. +{{% /note %}} + +#### list-members + +Lists the members currently available in a multi-cluster Riak CS setup. + +```bash +riak-cs-supercluster list-members +``` + +The output will list the name, host, and port for each member, as in the +following example output: + +```plaintext +sc-member-A 127.0.0.1:10017 +sc-member-B 127.0.0.1:10027 +# and so on +``` + +#### weight + +When new buckets are created, they are randomly assigned to a member. The +weight of each member is the likelihood, expressed as a percentage, that +new buckets will be stored in a given member. You can use the commands +under the `weight` heading to set, list, and refresh weight information +stored in the master member (which is shared between all Riak nodes). + +When the `weight` command itself is used without an argument, it will +return the weights of all members. + +```bash +riak-cs-supercluster weight +``` + +You can also return the weight for a specific member on the basis of its +member ID: + +```bash +riak-cs-supercluster weight +``` + +You can also set the weight for a member: + +```bash +riak-cs-supercluster weight +``` + +This command would set the weight for member `sc-member-A` to 40: + +```bash +riak-cs-supercluster weight sc-member-A 40 +``` + +Weights are assigned to members as an integer. The percentage weight +applied to a given member is a function of the total weight assigned to all +members. So if you assign 30 to member A, 30 to member B, and 60 to member C, they will bear the following weights, respectively: 25%, 25%, and 50%. +Consequently, there is no specific number to which all member weights need +to add up. + +#### weight-manifest + +Retrieves the manifest weights for all currently available members. + +```bash +riak-cs-supercluster weight-manifest +``` + +You can also retrieve the manifest weights for a specific member on the +basis of its member ID: + +```bash +riak-cs-supercluster weight-manifest +``` + +You can also set the manifest weight for a specific member: + +```bash +riak-cs-supercluster weight-manifest +``` + +#### weight-block + +Retrieves the block weights for all currently available members. + +```bash +riak-cs-supercluster weight-block +``` + +You can also retrieve the block weight for a specific member on the basis +of its member ID: + +```bash +riak-cs-supercluster weight-block +``` + +Or you can set the weight block for a specific member: + +```bash +riak-cs-supercluster weight-block +``` + +#### refresh + +Fetches all current weights from the master member. + +```bash +riak-cs-supercluster refresh +``` + +When a member's weight is updated, that weight is stored in the [master member]({{}}riak/cs/3.1.0/configuring/supercluster/#the-master-member) and cached in Riak CS. Riak CS fetches weights from the master member only periodically. The +`refresh` command syncs the weights stored in the master member with the +weights cached in Riak CS so that there is no discrepancy. + +This command is particularly useful immediately after any member weight +changes are made that need to be registered across all clusters. diff --git a/content/riak/cs/3.1.0/using/launching-and-stopping.md b/content/riak/cs/3.1.0/using/launching-and-stopping.md new file mode 100644 index 0000000000..542069f2fb --- /dev/null +++ b/content/riak/cs/3.1.0/using/launching-and-stopping.md @@ -0,0 +1,69 @@ +--- +title_supertext: "Using:" +title: "Launching and Stopping" +description: "" +menu: + riak_cs-3.1.0: + name: "Launching and Stopping" + identifier: "using_launch_stop" + weight: 200 + parent: "using" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riakcs/3.1.0/cookbooks/installing/launching-and-stopping/ + - /riak/cs/3.1.0/cookbooks/installing/launching-and-stopping/ + - /riakcs/3.1.0/cookbooks/installing/Launching-and-Stopping-Riak-CS/ + - /riak/cs/3.1.0/cookbooks/installing/Launching-and-Stopping-Riak-CS/ +--- + +To launch Riak CS in the background: + +```bash +sudo riak-cs start +``` + +To run Riak CS with an interactive Erlang console: + +```bash +sudo riak-cs console +``` + +When Riak CS is running, the Riak CS process appears in the process +list. To check for the Riak CS process, enter: + +```bash +ps -ef | grep riak-cs +``` + +To stop Riak CS, enter: + +```bash +sudo riak-cs stop +``` + +You can use the command + +```bash +sudo riak-cs attach +``` + +to attach and obtain an interactive console to a running instance of +Riak CS. + +You can check the liveness of your Riak CS installation with the +`riak-cs ping` command, which should return `pong` if Riak CS is up and +running. + +```bash +riak-cs ping +``` + +Please note that `riak-cs ping` tests only the liveness of Riak CS and +does not test the connection between Riak CS and Riak. In order to test +that, you can run a `GET` request against the `/riak-cs/ping` endpoint of a Riak +CS node, as in the example below: + +```curl +curl http://localhost:8080/riak-cs/ping +``` diff --git a/content/riak/cs/3.1.0/using/logging.md b/content/riak/cs/3.1.0/using/logging.md new file mode 100644 index 0000000000..010cd2a58a --- /dev/null +++ b/content/riak/cs/3.1.0/using/logging.md @@ -0,0 +1,46 @@ +--- +title_supertext: "Using:" +title: "Logging" +description: "" +menu: + riak_cs-3.1.0: + name: "Logging" + identifier: "using_log" + weight: 400 + parent: "using" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/logging/ + - /riakcs/3.1.0/cookbooks/logging/ +--- + +In versions 1.5.0 and later, you can use Riak CS in conjunction with +[Lager](https://github.com/basho/lager), the logging framework used for +Riak. By default, all Riak CS logs can be found in the `/log` directory +of each node. + +You can configure Lager for Riak CS in the `advanced.config` configuration +file in each Riak CS node, in the section of that file named `lager`. +That section looks something like this: + +```advancedconfig +{lager, [ + {handlers, [ + ... + + %% Other configs +]} +``` + +```appconfig +{lager, [ + {handlers, [ + ... + + %% Other configs +]} +``` + +A full description of all available parameters can be found in the +[configuration files]({{}}riak/kv/3.0.9/configuring/reference#logging) document for Riak KV. diff --git a/content/riak/cs/3.1.0/using/monitoring-and-metrics.md b/content/riak/cs/3.1.0/using/monitoring-and-metrics.md new file mode 100644 index 0000000000..41372c8321 --- /dev/null +++ b/content/riak/cs/3.1.0/using/monitoring-and-metrics.md @@ -0,0 +1,233 @@ +--- +title_supertext: "Using:" +title: "Monitoring and Metrics" +description: "" +menu: + riak_cs-3.1.0: + name: "Monitoring & Metrics" + identifier: "using_monitor_metrics" + weight: 300 + parent: "using" +project: "riak_cs" +project_version: "3.1.0" +aliases: + - /riak/cs/3.1.0/cookbooks/monitoring-and-metrics/ + - /riakcs/3.1.0/cookbooks/monitoring-and-metrics/ +--- + +[amazon]: http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html +[s3 api]: {{< baseurl >}}riak/cs/latest/references/apis/storage/s3/ + +Riak CS includes metrics and operational statistics to help you monitor your system in more detail and diagnose system issues more easily. There are three major categories of metrics: + +1. Frontend API performance +2. Backend Riak performance (Stanchion) +3. S2 internal performance + +Metrics are also available for Stanchion, in addition to the Stanchion-specific `stanchion-admin` command and `/stats` HTTP endpoint. + +provides operational statistics that can be useful for +monitoring through the Folsom statistics library, and initial probes for +analysis of the running system with +[DTrace](http://dtrace.org/blogs/about/). + +>**Note: Older Versions of Riak S2** +> +>All statistics available in versions of Riak CS below 2.0.x have either been renamed or removed entirely. + +## Using Metrics + +Riak CS exposes statistics on critical operations that +are commonly used for monitoring, alerting, and trend analysis. These +statistics can be accessed through the command line: + +```bash +riak-cs-admin status +``` + +or through HTTP requests to the following resource: + +```http +/riak-cs/stats +``` + +>**Note** +> +>In order to access statistics from the /stats endpoint, you +must issue signed requests containing the admin user's access key and +secret key. The interface used by Riak S2 is directly analogous to that +of Amazon S3. For more information on signed requests, see [Amazon's +documentation][amazon]. +> +>Unsigned requests will yield a 403 Forbidden error. + +## `riak-cs-admin status` + +Running `riak-cs-admin status` will show the names and values of all available metrics. + +There are too many metrics (over 1000) to list all of them here. The following sections provide an overview of each major statistic category, associated prefixes, and major operations for that category. + +### S3 API statistics + +S3 API statistics start with one of the following prefixes (all of which are names for S3 APIs): + +- `service` +- `bucket` +- `list` +- `multiple_delete` +- `object` +- `multipart` + +Each prefix is typically followed by operations such as: + +- `put` +- `get` +- `delete` + +Operation | Description +:---------|:----------- +`service_get` | GET Service +`bucket_(put∣head∣delete)` | PUT, HEAD, DELETE Bucket +`bucket_acl_(get∣put)` | PUT, GET Bucket ACL +`bucket_policy_(get∣put∣delete)` | PUT, GET, DELETE Bucket Policy +`bucket_location_get` | GET Bucket Location +`list_uploads` | listing all multipart uploads +`multiple_delete` | Delete Multiple Objects +`list_objects` | listing all objects in a bucket, equally GET Bucket +`object_(get∣put∣delete)` | GET, PUT, DELETE, HEAD Objects +`object_put_copy` | PUT Copy Object +`object_acl` | GET, PUT Object ACL +`multipart_post` | Initiate a multipart upload +`multipart_upload_put` | PUT Multipart Upload, putting a part of an object by copying from existing object +`multipart_upload_post` | complete a multipart upload +`multipart_upload_delete` | delete a part of a multipart upload +`multipart_upload_get` | get a list of parts in a multipart upload + +See the [S3 API documentation][s3 api] for information on all available APIs. + +### Stanchion access statistics + +Stanchion access statistics start with the prefix `velvet`. + +These statistics cover latency and counts for the Stanchion process creating/updating/deleting buckets or creating users. Stanchion access statistics can help determine if latency or slow requests are in Stanchion. + +Operation | Description +:---------|:----------- +`velvet_create_user` | requesting creating a user to Stanchion +`velvet_update_user` | requesting updating a user to Stanchion +`velvet_create_bucket` | requesting creating a bucket to Stanchion +`velvet_delete_bucket` | requesting deleting a bucket to Stanchion +`velvet_set_bucket_acl` | requesting updating a bucket ACL to Stanchion +`velvet_set_bucket_policy` | requesting putting a new bucket policy to Stanchion +`velvet_delete_bucket_policy` | requesting deleting a policy of the bucket to Stanchion + +### Riak access statistics + +Riak access statistics start with the prefix `riakc`. + +These statistics cover latency and call counts to Riak PB API. Riak access statistics are useful in determining the source of latency. For example getting a user record, bucket record, or updating manifests. + +The `riakc` prefix is typically followed by operations like: + +- `put` +- `get` + +And their targets, such as manifests or blocks. + +Operation | Description +:---------|:----------- +`riakc_ping` | ping PB API. invoked by /riak-cs/ping +`riakc_get_cs_bucket` | getting a bucket record +`riakc_get_cs_user_strong` | getting a user record with PR=all +`riakc_get_cs_user` | getting a user record with R=quorum and PR=one +`riakc_put_cs_user` | putting a user record after create/deleting a bucket +`riakc_get_manifest` | getting a manifest +`riakc_put_manifest` | putting a manifest +`riakc_delete_manifest` | deleting a manifest (invoked via GC) +`riakc_get_block_n_one` | getting a block with N=1 without sloppy quorum +`riakc_get_block_n_all` | getting a block with N=3 after N=1 get failed +`riakc_get_block_remote` | getting a block after N=3 get resulted in not found +`riakc_get_block_legacy` | getting a block when N=1 get is turned off +`riakc_put_block` | putting a block +`riakc_put_block_resolved` | putting a block when block siblings resolution is invoked +`riakc_head_block` | heading a block, invoked via GC +`riakc_delete_block_constrained` | first trial to delete block with PW=all +`riakc_delete_block_secondary` | second trial to delete block with PW=quorum, after PW=all failed +`riakc_(get∣put)_gc_manifest_set` | invoked when a manifest is being moved to GC bucket +`riakc_(get∣delete)_gc_manifest_set` | invoked when manifests are being collected +`riakc_(get∣put)_access` | getting access stats, putting access stats +`riakc_(get∣put)_storage` | getting storage stats, putting storage stats +`riakc_fold_manifest_objs` | invoked inside GET Bucket (listing objects within a bucket) +`riakc_mapred_storage` | stats on each MapReduce job performance +`riakc_list_all_user_keys` | all users are listed out when starting storage calculation +`riakc_list_all_manifest_keys` | only used when deleting a bucket to verify it's empty +`riakc_list_users_receive_chunk` | listing users invoked via /riak-cs/users API. +`riakc_get_uploads_by_index` | +`riakc_get_user_by_index` | +`riakc_get_gc_keys_by_index` | +`riakc_get_cs_buckets_by_index` | +`riakc_get_clusterid` | invoked when for the first time when a proxy_get is performed + +## `/riak-cs/stats` + +That will return a JSON object containing a series of latency histograms +and counters for a variety of operations, e.g. `object_get` and +`block_put`. Alongside each operation there will be a list showing the +count and rate for the operation, as well as a latency histogram showing +mean, median, and 95th and 99th percentiles: + +```json +: [MeterCount, MeterRate, LatencyMean, LatencyMedian, Latency95, Latency99] +``` + +You will see a list of that form for each of the following operations: + +Operation | Description +:---------|:----------- +`block_get` | Total BLOCK GET operations performed +`block_put` | Total BLOCK GET operations performed +`block_delete` | Total BLOCK DELETE operations performed +`service_get_buckets` | Total GET BUCKETS operations performed +`bucket_list_keys` | Total BUCKET LIST KEYS operations performed +`bucket_create` | Total BUCKET CREATE operations performed +`bucket_delete` | Total BUCKET DELETE operations performed +`bucket_get_acl` | Total BUCKET GET ACL operations performed +`bucket_put_acl` | Total BUCKET PUT ACL operations performed +`object_get` | Total GET operations performed +`object_put` | Total PUT operations performed +`object_head` | Total OBJECT HEAD operations performed +`object_delete` | Total OBJECT DELETE operations performed +`object_get_acl` | Total OBJECT GET ACL operations performed +`object_put_acl` | Total OBJECT PUT ACL operations performed + +## Stanchion + +## DTrace Probes + +Riak CS is built with some probes for use with +[DTrace](http://dtrace.org/blogs/about/) to inspect certain operations +in the live system, which can be helpful in diagnosing issues. + +### Usage Examples + +The following are examples of using DTrace for inspecting various +components of a running Riak CS installation. + +#### Trace User Object Requests + +```bash +dtrace -qn 'erlang*:::user_trace* /arg2 == 703/ {printf("pid %s: mod %s op %s: user %s bucket/file %s/n", copyinstr(arg0), copyinstr(arg6), copyinstr(arg7), copyinstr(arg8), copyinstr(arg9));}' +``` + +#### Trace Webmachine Resource Execution + +```bash +dtrace -qn 'erlang*:::user_trace* /arg2 == 705/ {printf("pid %s: %s:%s/n", copyinstr(arg0), copyinstr(arg6), copyinstr(arg7));}' +``` + +{{% note title="Note on DTrace Support" %}} +Work on packaging of Riak CS for SmartOS and other operating systems with +DTrace support is ongoing with the goal of providing enhanced ability to +diagnose low-level issues in instances of Riak CS running on such operating +systems. +{{% /note %}} diff --git a/content/riak/cs/latest/theory.md b/content/riak/cs/latest/add-ons.md similarity index 93% rename from content/riak/cs/latest/theory.md rename to content/riak/cs/latest/add-ons.md index ecd6e053a8..75d956419c 100644 --- a/content/riak/cs/latest/theory.md +++ b/content/riak/cs/latest/add-ons.md @@ -4,7 +4,6 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/theory/" --- # Redirect page diff --git a/content/riak/cs/latest/references/appendices/riak-cs-control.md b/content/riak/cs/latest/add-ons/riak-cs-control.md similarity index 71% rename from content/riak/cs/latest/references/appendices/riak-cs-control.md rename to content/riak/cs/latest/add-ons/riak-cs-control.md index 206a71bf8c..6544d435ee 100644 --- a/content/riak/cs/latest/references/appendices/riak-cs-control.md +++ b/content/riak/cs/latest/add-ons/riak-cs-control.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/references/appendices/riak-cs-control/" + - /riak/cs/latest/references/appendices/riak-cs-control/ + - /riakcs/latest/references/appendices/riak-cs-control/ + - /riakcs/latest/add-ons/riak-cs-control/ --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/authentication.md b/content/riak/cs/latest/configuring.md similarity index 82% rename from content/riak/cs/latest/cookbooks/authentication.md rename to content/riak/cs/latest/configuring.md index 4c9e4ffb23..b0c3aef144 100644 --- a/content/riak/cs/latest/cookbooks/authentication.md +++ b/content/riak/cs/latest/configuring.md @@ -4,7 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/authentication/" + - /riak/cs/latest/cookbooks/configuration/ + - /riakcs/latest/cookbooks/configuration/ --- # Redirect page diff --git a/content/riak/cs/latest/configuring/load-balancing-proxy.md b/content/riak/cs/latest/configuring/load-balancing-proxy.md new file mode 100644 index 0000000000..578d6fe67f --- /dev/null +++ b/content/riak/cs/latest/configuring/load-balancing-proxy.md @@ -0,0 +1,19 @@ +--- +layout: latest_redirect +project: riak_cs +replace_text: latest +latest_text: "{latest}" +aliases: + - /riak/cs/latest/cookbooks/configuration/load-balancing-proxy/ + - /riakcs/latest/cookbooks/configuration/load-balancing-proxy/ + - /riakcs/latest/configuring/load-balancing-proxy/ +--- + +# Redirect page + +Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` +where `{latest}` is the `project_descriptions.{project}.latest` value +and `{project}` is the metadata value of `project` above. + +This page exists solely to redirect from the generated URL to the latest version of +that url. diff --git a/content/riak/cs/latest/cookbooks/configuration/multi-datacenter.md b/content/riak/cs/latest/configuring/multi-datacenter.md similarity index 70% rename from content/riak/cs/latest/cookbooks/configuration/multi-datacenter.md rename to content/riak/cs/latest/configuring/multi-datacenter.md index f1607ab3f2..11ab053f5e 100644 --- a/content/riak/cs/latest/cookbooks/configuration/multi-datacenter.md +++ b/content/riak/cs/latest/configuring/multi-datacenter.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/configuration/multi-datacenter/" + - /riak/cs/latest/cookbooks/configuration/multi-datacenter/ + - /riakcs/latest/cookbooks/configuration/multi-datacenter/ + - /riakcs/latest/configuring/multi-datacenter/ --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/configuration/reference.md b/content/riak/cs/latest/configuring/reference.md similarity index 73% rename from content/riak/cs/latest/cookbooks/configuration/reference.md rename to content/riak/cs/latest/configuring/reference.md index 270f297f35..335116c16a 100644 --- a/content/riak/cs/latest/cookbooks/configuration/reference.md +++ b/content/riak/cs/latest/configuring/reference.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/configuration/reference/" + - /riak/cs/latest/cookbooks/configuration/reference/ + - /riakcs/latest/cookbooks/configuration/reference/ + - /riakcs/latest/configuring/reference/ --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/configuration/riak-cs.md b/content/riak/cs/latest/configuring/riak-cs.md similarity index 79% rename from content/riak/cs/latest/cookbooks/configuration/riak-cs.md rename to content/riak/cs/latest/configuring/riak-cs.md index 49fa4b592e..63524774d4 100644 --- a/content/riak/cs/latest/cookbooks/configuration/riak-cs.md +++ b/content/riak/cs/latest/configuring/riak-cs.md @@ -4,7 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/configuration/riak-cs/" + - /riak/cs/latest/cookbooks/configuration/riak-cs/ + - /riakcs/latest/cookbooks/configuration/riak-cs/ --- # Redirect page diff --git a/content/riak/cs/latest/configuring/riak-kv-for-cs.md b/content/riak/cs/latest/configuring/riak-kv-for-cs.md new file mode 100644 index 0000000000..a44ba64634 --- /dev/null +++ b/content/riak/cs/latest/configuring/riak-kv-for-cs.md @@ -0,0 +1,21 @@ +--- +layout: latest_redirect +project: riak_cs +replace_text: latest +latest_text: "{latest}" +aliases: + - /riak/cs/latest/cookbooks/configuration/riak-for-cs/ + - /riakcs/latest/cookbooks/configuration/riak-for-cs/ + - /riakcs/latest/cookbooks/configuration/Configuring-Riak/ + - /riak/cs/latest/cookbooks/configuration/Configuring-Riak/ + - /riakcs/latest/configuring/riak-kv-for-cs/ +--- + +# Redirect page + +Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` +where `{latest}` is the `project_descriptions.{project}.latest` value +and `{project}` is the metadata value of `project` above. + +This page exists solely to redirect from the generated URL to the latest version of +that url. diff --git a/content/riak/cs/latest/theory/stanchion.md b/content/riak/cs/latest/configuring/stanchion.md similarity index 73% rename from content/riak/cs/latest/theory/stanchion.md rename to content/riak/cs/latest/configuring/stanchion.md index 0e86fe9206..51033c9451 100644 --- a/content/riak/cs/latest/theory/stanchion.md +++ b/content/riak/cs/latest/configuring/stanchion.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/theory/stanchion/" + - /riak/cs/latest/cookbooks/configuration/stanchion/ + - /riakcs/latest/cookbooks/configuration/stanchion/ + - /riakcs/latest/configuring/stanchion/ --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/supercluster.md b/content/riak/cs/latest/configuring/supercluster.md similarity index 75% rename from content/riak/cs/latest/cookbooks/supercluster.md rename to content/riak/cs/latest/configuring/supercluster.md index 77fe075903..e132a7abf3 100644 --- a/content/riak/cs/latest/cookbooks/supercluster.md +++ b/content/riak/cs/latest/configuring/supercluster.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/supercluster/" + - /riak/cs/latest/cookbooks/supercluster/ + - /riakcs/latest/cookbooks/supercluster/ + - /riakcs/latest/configuring/supercluster/ --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/configuration/riak-for-cs.md b/content/riak/cs/latest/cookbooks/configuration/riak-for-cs.md deleted file mode 100644 index 10a4f412d4..0000000000 --- a/content/riak/cs/latest/cookbooks/configuration/riak-for-cs.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: latest_redirect -project: riak_cs -replace_text: latest -latest_text: "{latest}" -aliases: - - "/riakcs/latest/cookbooks/configuration/riak-for-cs/" ---- - -# Redirect page - -Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` -where `{latest}` is the `project_descriptions.{project}.latest` value -and `{project}` is the metadata value of `project` above. - -This page exists solely to redirect from the generated URL to the latest version of -that url. diff --git a/content/riak/cs/latest/cookbooks/multipart-upload-overview.md b/content/riak/cs/latest/cookbooks/multipart-upload-overview.md deleted file mode 100644 index 23512c3ba9..0000000000 --- a/content/riak/cs/latest/cookbooks/multipart-upload-overview.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: latest_redirect -project: riak_cs -replace_text: latest -latest_text: "{latest}" -aliases: - - "/riakcs/latest/cookbooks/multipart-upload-overview/" ---- - -# Redirect page - -Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` -where `{latest}` is the `project_descriptions.{project}.latest` value -and `{project}` is the metadata value of `project` above. - -This page exists solely to redirect from the generated URL to the latest version of -that url. diff --git a/content/riak/cs/latest/cookbooks/rolling-upgrades.md b/content/riak/cs/latest/cookbooks/rolling-upgrades.md deleted file mode 100644 index 4085c35780..0000000000 --- a/content/riak/cs/latest/cookbooks/rolling-upgrades.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: latest_redirect -project: riak_cs -replace_text: latest -latest_text: "{latest}" -aliases: - - "/riakcs/latest/cookbooks/rolling-upgrades/" ---- - -# Redirect page - -Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` -where `{latest}` is the `project_descriptions.{project}.latest` value -and `{project}` is the metadata value of `project` above. - -This page exists solely to redirect from the generated URL to the latest version of -that url. diff --git a/content/riak/cs/latest/cookbooks/system-features.md b/content/riak/cs/latest/cookbooks/system-features.md deleted file mode 100644 index a214054554..0000000000 --- a/content/riak/cs/latest/cookbooks/system-features.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: latest_redirect -project: riak_cs -replace_text: latest -latest_text: "{latest}" -aliases: - - "/riakcs/latest/cookbooks/system-features/" ---- - -# Redirect page - -Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` -where `{latest}` is the `project_descriptions.{project}.latest` value -and `{project}` is the metadata value of `project` above. - -This page exists solely to redirect from the generated URL to the latest version of -that url. diff --git a/content/riak/cs/latest/references/appendices/http-admin.md b/content/riak/cs/latest/developing/accounts-and-admin.md similarity index 81% rename from content/riak/cs/latest/references/appendices/http-admin.md rename to content/riak/cs/latest/developing/accounts-and-admin.md index 62a5ae051b..a2dad0fd2f 100644 --- a/content/riak/cs/latest/references/appendices/http-admin.md +++ b/content/riak/cs/latest/developing/accounts-and-admin.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/accounts-and-admin/" + - "/riak/cs/latest/references/appendices/http-admin/" - "/riakcs/latest/references/appendices/http-admin/" --- diff --git a/content/riak/cs/latest/developing/accounts-and-admin/access-control-lists.md b/content/riak/cs/latest/developing/accounts-and-admin/access-control-lists.md new file mode 100644 index 0000000000..42e318ca35 --- /dev/null +++ b/content/riak/cs/latest/developing/accounts-and-admin/access-control-lists.md @@ -0,0 +1,19 @@ +--- +layout: latest_redirect +project: riak_cs +replace_text: latest +latest_text: "{latest}" +aliases: + - "/riakcs/latest/developing/accounts-and-admin/access-control-lists/" + - "/riak/cs/latest/cookbooks/access-control-lists/" + - "/riakcs/latest/cookbooks/access-control-lists/" +--- + +# Redirect page + +Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` +where `{latest}` is the `project_descriptions.{project}.latest` value +and `{project}` is the metadata value of `project` above. + +This page exists solely to redirect from the generated URL to the latest version of +that url. diff --git a/content/riak/cs/latest/developing/accounts-and-admin/account-management.md b/content/riak/cs/latest/developing/accounts-and-admin/account-management.md new file mode 100644 index 0000000000..aea9557e29 --- /dev/null +++ b/content/riak/cs/latest/developing/accounts-and-admin/account-management.md @@ -0,0 +1,19 @@ +--- +layout: latest_redirect +project: riak_cs +replace_text: latest +latest_text: "{latest}" +aliases: + - "/riakcs/latest/developing/accounts-and-admin/account-management/" + - "/riak/cs/latest/cookbooks/account-management/" + - "/riakcs/latest/cookbooks/account-management/" +--- + +# Redirect page + +Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` +where `{latest}` is the `project_descriptions.{project}.latest` value +and `{project}` is the metadata value of `project` above. + +This page exists solely to redirect from the generated URL to the latest version of +that url. diff --git a/content/riak/cs/latest/cookbooks/configuration/load-balancing-proxy.md b/content/riak/cs/latest/developing/accounts-and-admin/authentication.md similarity index 72% rename from content/riak/cs/latest/cookbooks/configuration/load-balancing-proxy.md rename to content/riak/cs/latest/developing/accounts-and-admin/authentication.md index 163b02f645..55a3a35cd3 100644 --- a/content/riak/cs/latest/cookbooks/configuration/load-balancing-proxy.md +++ b/content/riak/cs/latest/developing/accounts-and-admin/authentication.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/configuration/load-balancing-proxy/" + - "/riakcs/latest/developing/accounts-and-admin/authentication/" + - "/riak/cs/latest/cookbooks/authentication/" + - "/riakcs/latest/cookbooks/authentication/" --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/designate-admin-user.md b/content/riak/cs/latest/developing/accounts-and-admin/designate-admin-user.md similarity index 78% rename from content/riak/cs/latest/cookbooks/designate-admin-user.md rename to content/riak/cs/latest/developing/accounts-and-admin/designate-admin-user.md index f4d4f9b33f..cc40ca8a76 100644 --- a/content/riak/cs/latest/cookbooks/designate-admin-user.md +++ b/content/riak/cs/latest/developing/accounts-and-admin/designate-admin-user.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/accounts-and-admin/designate-admin-user/" + - "/riak/cs/latest/cookbooks/designate-admin-user/" - "/riakcs/latest/cookbooks/designate-admin-user/" --- diff --git a/content/riak/cs/latest/developing/apis.md b/content/riak/cs/latest/developing/apis.md new file mode 100644 index 0000000000..566470c35e --- /dev/null +++ b/content/riak/cs/latest/developing/apis.md @@ -0,0 +1,19 @@ +--- +layout: latest_redirect +project: riak_cs +replace_text: latest +latest_text: "{latest}" +aliases: + - /riakcs/latest/developing/apis/ + - /riak/cs/latest/references/apis/ + - /riakcs/latest/references/apis/ +--- + +# Redirect page + +Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` +where `{latest}` is the `project_descriptions.{project}.latest` value +and `{project}` is the metadata value of `project` above. + +This page exists solely to redirect from the generated URL to the latest version of +that url. diff --git a/content/riak/cs/latest/references/apis/storage/openstack.md b/content/riak/cs/latest/developing/apis/openstack.md similarity index 81% rename from content/riak/cs/latest/references/apis/storage/openstack.md rename to content/riak/cs/latest/developing/apis/openstack.md index 7e5648d63c..c5661c00cd 100644 --- a/content/riak/cs/latest/references/apis/storage/openstack.md +++ b/content/riak/cs/latest/developing/apis/openstack.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/apis/openstack/" + - "/riak/cs/latest/references/apis/storage/openstack/" - "/riakcs/latest/references/apis/storage/openstack/" --- diff --git a/content/riak/cs/latest/references/apis/storage/openstack/create-container.md b/content/riak/cs/latest/developing/apis/openstack/containers/create-container.md similarity index 65% rename from content/riak/cs/latest/references/apis/storage/openstack/create-container.md rename to content/riak/cs/latest/developing/apis/openstack/containers/create-container.md index 3323683b9f..8b2d496f17 100644 --- a/content/riak/cs/latest/references/apis/storage/openstack/create-container.md +++ b/content/riak/cs/latest/developing/apis/openstack/containers/create-container.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/references/apis/storage/openstack/create-container/" + - /riakcs/latest/developing/apis/openstack/objects/create-container/ + - /riak/cs/latest/references/apis/storage/openstack/create-container/ + - /riakcs/latest/references/apis/storage/openstack/create-container/ --- # Redirect page diff --git a/content/riak/cs/latest/references/apis/storage/openstack/delete-container.md b/content/riak/cs/latest/developing/apis/openstack/containers/delete-container.md similarity index 65% rename from content/riak/cs/latest/references/apis/storage/openstack/delete-container.md rename to content/riak/cs/latest/developing/apis/openstack/containers/delete-container.md index 57679449a7..afee454454 100644 --- a/content/riak/cs/latest/references/apis/storage/openstack/delete-container.md +++ b/content/riak/cs/latest/developing/apis/openstack/containers/delete-container.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/references/apis/storage/openstack/delete-container/" + - /riakcs/latest/developing/apis/openstack/objects/delete-container/ + - /riak/cs/latest/references/apis/storage/openstack/delete-container/ + - /riakcs/latest/references/apis/storage/openstack/delete-container/ --- # Redirect page diff --git a/content/riak/cs/latest/references/apis/storage/openstack/list-containers.md b/content/riak/cs/latest/developing/apis/openstack/containers/list-containers.md similarity index 66% rename from content/riak/cs/latest/references/apis/storage/openstack/list-containers.md rename to content/riak/cs/latest/developing/apis/openstack/containers/list-containers.md index 6f49a44130..079a759965 100644 --- a/content/riak/cs/latest/references/apis/storage/openstack/list-containers.md +++ b/content/riak/cs/latest/developing/apis/openstack/containers/list-containers.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/references/apis/storage/openstack/list-containers/" + - /riakcs/latest/developing/apis/openstack/objects/list-containers/ + - /riak/cs/latest/references/apis/storage/openstack/list-containers/ + - /riakcs/latest/references/apis/storage/openstack/list-containers/ --- # Redirect page diff --git a/content/riak/cs/latest/references/apis/storage/openstack/list-objects.md b/content/riak/cs/latest/developing/apis/openstack/containers/list-objects.md similarity index 67% rename from content/riak/cs/latest/references/apis/storage/openstack/list-objects.md rename to content/riak/cs/latest/developing/apis/openstack/containers/list-objects.md index 63a793219c..63d2f4b028 100644 --- a/content/riak/cs/latest/references/apis/storage/openstack/list-objects.md +++ b/content/riak/cs/latest/developing/apis/openstack/containers/list-objects.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/references/apis/storage/openstack/list-objects/" + - /riakcs/latest/developing/apis/openstack/objects/list-objects/ + - /riak/cs/latest/references/apis/storage/openstack/list-objects/ + - /riakcs/latest/references/apis/storage/openstack/list-objects/ --- # Redirect page diff --git a/content/riak/cs/latest/references/apis/storage/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md b/content/riak/cs/latest/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md similarity index 72% rename from content/riak/cs/latest/references/apis/storage/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md rename to content/riak/cs/latest/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md index 32b2111e4b..005c854587 100644 --- a/content/riak/cs/latest/references/apis/storage/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md +++ b/content/riak/cs/latest/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/apis/openstack/mapping-from-oos-api-to-riak-cs-internal-api/" + - "/riak/cs/latest/references/apis/storage/openstack/mapping-from-oos-api-to-riak-cs-internal-api/" - "/riakcs/latest/references/apis/storage/openstack/mapping-from-oos-api-to-riak-cs-internal-api/" --- diff --git a/content/riak/cs/latest/references/apis/storage/openstack/create-object.md b/content/riak/cs/latest/developing/apis/openstack/objects/create-object.md similarity index 66% rename from content/riak/cs/latest/references/apis/storage/openstack/create-object.md rename to content/riak/cs/latest/developing/apis/openstack/objects/create-object.md index 08fe0ee4b8..d53cd4efb3 100644 --- a/content/riak/cs/latest/references/apis/storage/openstack/create-object.md +++ b/content/riak/cs/latest/developing/apis/openstack/objects/create-object.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/references/apis/storage/openstack/create-object/" + - /riakcs/latest/developing/apis/openstack/objects/create-object/ + - /riak/cs/latest/references/apis/storage/openstack/create-object/ + - /riakcs/latest/references/apis/storage/openstack/create-object/ --- # Redirect page diff --git a/content/riak/cs/latest/references/apis/storage/openstack/delete-object.md b/content/riak/cs/latest/developing/apis/openstack/objects/delete-object.md similarity index 66% rename from content/riak/cs/latest/references/apis/storage/openstack/delete-object.md rename to content/riak/cs/latest/developing/apis/openstack/objects/delete-object.md index 2283e7ebca..9b48173562 100644 --- a/content/riak/cs/latest/references/apis/storage/openstack/delete-object.md +++ b/content/riak/cs/latest/developing/apis/openstack/objects/delete-object.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/references/apis/storage/openstack/delete-object/" + - /riakcs/latest/developing/apis/openstack/objects/delete-object/ + - /riak/cs/latest/references/apis/storage/openstack/delete-object/ + - /riakcs/latest/references/apis/storage/openstack/delete-object/ --- # Redirect page diff --git a/content/riak/cs/latest/references/apis/storage/openstack/get-object.md b/content/riak/cs/latest/developing/apis/openstack/objects/get-object.md similarity index 67% rename from content/riak/cs/latest/references/apis/storage/openstack/get-object.md rename to content/riak/cs/latest/developing/apis/openstack/objects/get-object.md index 22f9fb6578..4cf87a1936 100644 --- a/content/riak/cs/latest/references/apis/storage/openstack/get-object.md +++ b/content/riak/cs/latest/developing/apis/openstack/objects/get-object.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/references/apis/storage/openstack/get-object/" + - /riakcs/latest/developing/apis/openstack/objects/get-object/ + - /riak/cs/latest/references/apis/storage/openstack/get-object/ + - /riakcs/latest/references/apis/storage/openstack/get-object/ --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/using-with-keystone.md b/content/riak/cs/latest/developing/apis/openstack/using-with-keystone.md similarity index 79% rename from content/riak/cs/latest/cookbooks/using-with-keystone.md rename to content/riak/cs/latest/developing/apis/openstack/using-with-keystone.md index bc76619e5b..053d25499c 100644 --- a/content/riak/cs/latest/cookbooks/using-with-keystone.md +++ b/content/riak/cs/latest/developing/apis/openstack/using-with-keystone.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/apis/openstack/using-with-keystone/" + - "/riak/cs/latest/cookbooks/using-with-keystone/" - "/riakcs/latest/cookbooks/using-with-keystone/" --- diff --git a/content/riak/cs/latest/cookbooks/keystone-conf-sample.md b/content/riak/cs/latest/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md similarity index 68% rename from content/riak/cs/latest/cookbooks/keystone-conf-sample.md rename to content/riak/cs/latest/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md index 5296b34601..f62c0a0a00 100644 --- a/content/riak/cs/latest/cookbooks/keystone-conf-sample.md +++ b/content/riak/cs/latest/developing/apis/openstack/using-with-keystone/keystone-conf-sample.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/keystone-conf-sample/" + - /riakcs/latest/developing/apis/openstack/using-with-keystone/keystone-conf-sample/ + - /riak/cs/latest/cookbooks/keystone-conf-sample/ + - /riakcs/latest/cookbooks/keystone-conf-sample/ --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/keystone-setup.md b/content/riak/cs/latest/developing/apis/openstack/using-with-keystone/keystone-setup.md similarity index 70% rename from content/riak/cs/latest/cookbooks/keystone-setup.md rename to content/riak/cs/latest/developing/apis/openstack/using-with-keystone/keystone-setup.md index 3856681a0a..4432de8f5f 100644 --- a/content/riak/cs/latest/cookbooks/keystone-setup.md +++ b/content/riak/cs/latest/developing/apis/openstack/using-with-keystone/keystone-setup.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/keystone-setup/" + - /riakcs/latest/developing/apis/openstack/using-with-keystone/keystone-setup/ + - /riak/cs/latest/cookbooks/keystone-setup/ + - /riakcs/latest/cookbooks/keystone-setup/ --- # Redirect page diff --git a/content/riak/cs/latest/references/apis/storage/s3.md b/content/riak/cs/latest/developing/apis/s3.md similarity index 83% rename from content/riak/cs/latest/references/apis/storage/s3.md rename to content/riak/cs/latest/developing/apis/s3.md index 61d34a0a1b..0d40d30803 100644 --- a/content/riak/cs/latest/references/apis/storage/s3.md +++ b/content/riak/cs/latest/developing/apis/s3.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/apis/s3/" + - "/riak/cs/latest/references/apis/storage/s3/" - "/riakcs/latest/references/apis/storage/s3/" --- diff --git a/content/riak/cs/latest/cookbooks/configuration.md b/content/riak/cs/latest/developing/apis/s3/buckets.md similarity index 89% rename from content/riak/cs/latest/cookbooks/configuration.md rename to content/riak/cs/latest/developing/apis/s3/buckets.md index be437fa967..fa583071d1 100644 --- a/content/riak/cs/latest/cookbooks/configuration.md +++ b/content/riak/cs/latest/developing/apis/s3/buckets.md @@ -4,7 +4,7 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/configuration/" + - "/riakcs/latest/developing/apis/s3/buckets/" --- # Redirect page diff --git a/content/riak/cs/latest/references/apis/storage/s3/delete-bucket-policy.md b/content/riak/cs/latest/developing/apis/s3/buckets/delete-bucket-policy.md similarity index 77% rename from content/riak/cs/latest/references/apis/storage/s3/delete-bucket-policy.md rename to content/riak/cs/latest/developing/apis/s3/buckets/delete-bucket-policy.md index 8c65534a95..89d764a2c5 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/delete-bucket-policy.md +++ b/content/riak/cs/latest/developing/apis/s3/buckets/delete-bucket-policy.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/apis/s3/buckets/delete-bucket-policy/" + - "/riak/cs/latest/references/apis/storage/s3/delete-bucket-policy/" - "/riakcs/latest/references/apis/storage/s3/delete-bucket-policy/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/delete-bucket.md b/content/riak/cs/latest/developing/apis/s3/buckets/delete-bucket.md similarity index 78% rename from content/riak/cs/latest/references/apis/storage/s3/delete-bucket.md rename to content/riak/cs/latest/developing/apis/s3/buckets/delete-bucket.md index 4017906822..e10e3f8066 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/delete-bucket.md +++ b/content/riak/cs/latest/developing/apis/s3/buckets/delete-bucket.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/apis/s3/buckets/delete-bucket/" + - "/riak/cs/latest/references/apis/storage/s3/delete-bucket/" - "/riakcs/latest/references/apis/storage/s3/delete-bucket/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/get-bucket-acl.md b/content/riak/cs/latest/developing/apis/s3/buckets/get-bucket-acl.md similarity index 78% rename from content/riak/cs/latest/references/apis/storage/s3/get-bucket-acl.md rename to content/riak/cs/latest/developing/apis/s3/buckets/get-bucket-acl.md index d6c757844e..99057cad01 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/get-bucket-acl.md +++ b/content/riak/cs/latest/developing/apis/s3/buckets/get-bucket-acl.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/apis/s3/buckets/get-bucket-acl/" + - "/riak/cs/latest/references/apis/storage/s3/get-bucket-acl/" - "/riakcs/latest/references/apis/storage/s3/get-bucket-acl/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/get-bucket-policy.md b/content/riak/cs/latest/developing/apis/s3/buckets/get-bucket-policy.md similarity index 78% rename from content/riak/cs/latest/references/apis/storage/s3/get-bucket-policy.md rename to content/riak/cs/latest/developing/apis/s3/buckets/get-bucket-policy.md index b9eb3c2818..f09ad1dd90 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/get-bucket-policy.md +++ b/content/riak/cs/latest/developing/apis/s3/buckets/get-bucket-policy.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/apis/s3/buckets/get-bucket-policy/" + - "/riak/cs/latest/references/apis/storage/s3/get-bucket-policy/" - "/riakcs/latest/references/apis/storage/s3/get-bucket-policy/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/get-bucket.md b/content/riak/cs/latest/developing/apis/s3/buckets/get-bucket.md similarity index 79% rename from content/riak/cs/latest/references/apis/storage/s3/get-bucket.md rename to content/riak/cs/latest/developing/apis/s3/buckets/get-bucket.md index 9444b59327..5c78887dfa 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/get-bucket.md +++ b/content/riak/cs/latest/developing/apis/s3/buckets/get-bucket.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/apis/s3/buckets/get-bucket/" + - "/riak/cs/latest/references/apis/storage/s3/get-bucket/" - "/riakcs/latest/references/apis/storage/s3/get-bucket/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/get-service.md b/content/riak/cs/latest/developing/apis/s3/buckets/get-service.md similarity index 78% rename from content/riak/cs/latest/references/apis/storage/s3/get-service.md rename to content/riak/cs/latest/developing/apis/s3/buckets/get-service.md index 2530e7bbe9..2820422729 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/get-service.md +++ b/content/riak/cs/latest/developing/apis/s3/buckets/get-service.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/references/apis/storage/s3/buckets/get-service/" + - "/riak/cs/latest/references/apis/storage/s3/get-service/" - "/riakcs/latest/references/apis/storage/s3/get-service/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/put-bucket-acl.md b/content/riak/cs/latest/developing/apis/s3/buckets/put-bucket-acl.md similarity index 78% rename from content/riak/cs/latest/references/apis/storage/s3/put-bucket-acl.md rename to content/riak/cs/latest/developing/apis/s3/buckets/put-bucket-acl.md index 67f3f8f1d5..b72834524e 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/put-bucket-acl.md +++ b/content/riak/cs/latest/developing/apis/s3/buckets/put-bucket-acl.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/apis/s3/buckets/put-bucket-acl/" + - "/riak/cs/latest/references/apis/storage/s3/put-bucket-acl/" - "/riakcs/latest/references/apis/storage/s3/put-bucket-acl/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/put-bucket-policy.md b/content/riak/cs/latest/developing/apis/s3/buckets/put-bucket-policy.md similarity index 78% rename from content/riak/cs/latest/references/apis/storage/s3/put-bucket-policy.md rename to content/riak/cs/latest/developing/apis/s3/buckets/put-bucket-policy.md index 8366638eda..1c6036f306 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/put-bucket-policy.md +++ b/content/riak/cs/latest/developing/apis/s3/buckets/put-bucket-policy.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/apis/s3/buckets/put-bucket-policy/" + - "/riak/cs/latest/references/apis/storage/s3/put-bucket-policy/" - "/riakcs/latest/references/apis/storage/s3/put-bucket-policy/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/put-bucket.md b/content/riak/cs/latest/developing/apis/s3/buckets/put-bucket.md similarity index 79% rename from content/riak/cs/latest/references/apis/storage/s3/put-bucket.md rename to content/riak/cs/latest/developing/apis/s3/buckets/put-bucket.md index b39108b061..433af5aa20 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/put-bucket.md +++ b/content/riak/cs/latest/developing/apis/s3/buckets/put-bucket.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/apis/s3/buckets/put-bucket/" + - "/riak/cs/latest/references/apis/storage/s3/put-bucket/" - "/riakcs/latest/references/apis/storage/s3/put-bucket/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/common-request-headers.md b/content/riak/cs/latest/developing/apis/s3/common-request-headers.md similarity index 77% rename from content/riak/cs/latest/references/apis/storage/s3/common-request-headers.md rename to content/riak/cs/latest/developing/apis/s3/common-request-headers.md index f7389327b2..848ef468f7 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/common-request-headers.md +++ b/content/riak/cs/latest/developing/apis/s3/common-request-headers.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/apis/s3/common-request-headers/" + - "/riak/cs/latest/references/apis/storage/s3/common-request-headers/" - "/riakcs/latest/references/apis/storage/s3/common-request-headers/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/common-response-headers.md b/content/riak/cs/latest/developing/apis/s3/common-response-headers.md similarity index 77% rename from content/riak/cs/latest/references/apis/storage/s3/common-response-headers.md rename to content/riak/cs/latest/developing/apis/s3/common-response-headers.md index 1d9729b1f7..b9b3f78e56 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/common-response-headers.md +++ b/content/riak/cs/latest/developing/apis/s3/common-response-headers.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/apis/s3/common-response-headers/" + - "/riak/cs/latest/references/apis/storage/s3/common-response-headers/" - "/riakcs/latest/references/apis/storage/s3/common-response-headers/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/mapping-from-s3-api-to-riak-cs-internal-api.md b/content/riak/cs/latest/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md similarity index 73% rename from content/riak/cs/latest/references/apis/storage/s3/mapping-from-s3-api-to-riak-cs-internal-api.md rename to content/riak/cs/latest/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md index 2135a95d5a..b3b32225b3 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/mapping-from-s3-api-to-riak-cs-internal-api.md +++ b/content/riak/cs/latest/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/apis/s3/mapping-from-s3-api-to-riak-cs-internal-api/" + - "/riak/cs/latest/references/apis/storage/s3/mapping-from-s3-api-to-riak-cs-internal-api/" - "/riakcs/latest/references/apis/storage/s3/mapping-from-s3-api-to-riak-cs-internal-api/" --- diff --git a/content/riak/cs/latest/cookbooks/faqs/riak-cs.md b/content/riak/cs/latest/developing/apis/s3/objects.md similarity index 89% rename from content/riak/cs/latest/cookbooks/faqs/riak-cs.md rename to content/riak/cs/latest/developing/apis/s3/objects.md index 4e5b3d9de1..531ca63f85 100644 --- a/content/riak/cs/latest/cookbooks/faqs/riak-cs.md +++ b/content/riak/cs/latest/developing/apis/s3/objects.md @@ -4,7 +4,7 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/faqs/riak-cs/" + - "/riakcs/latest/developing/apis/s3/objects/" --- # Redirect page diff --git a/content/riak/cs/latest/references/apis/storage/s3/delete-multi.md b/content/riak/cs/latest/developing/apis/s3/objects/delete-multi.md similarity index 77% rename from content/riak/cs/latest/references/apis/storage/s3/delete-multi.md rename to content/riak/cs/latest/developing/apis/s3/objects/delete-multi.md index b89442c496..e03697301a 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/delete-multi.md +++ b/content/riak/cs/latest/developing/apis/s3/objects/delete-multi.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/references/apis/storage/s3/objects/delete-multiple/" + - "/riak/cs/latest/references/apis/storage/s3/delete-multi/" - "/riakcs/latest/references/apis/storage/s3/delete-multi/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/delete-object.md b/content/riak/cs/latest/developing/apis/s3/objects/delete-object.md similarity index 77% rename from content/riak/cs/latest/references/apis/storage/s3/delete-object.md rename to content/riak/cs/latest/developing/apis/s3/objects/delete-object.md index 5543ad1c93..4a07561a8c 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/delete-object.md +++ b/content/riak/cs/latest/developing/apis/s3/objects/delete-object.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/references/apis/storage/s3/objects/delete-object/" + - "/riak/cs/latest/references/apis/storage/s3/delete-object/" - "/riakcs/latest/references/apis/storage/s3/delete-object/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/get-object-acl.md b/content/riak/cs/latest/developing/apis/s3/objects/get-object-acl.md similarity index 77% rename from content/riak/cs/latest/references/apis/storage/s3/get-object-acl.md rename to content/riak/cs/latest/developing/apis/s3/objects/get-object-acl.md index 4e62aecc5b..2de7bfea87 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/get-object-acl.md +++ b/content/riak/cs/latest/developing/apis/s3/objects/get-object-acl.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/references/apis/storage/s3/objects/get-object-acl/" + - "/riak/cs/latest/references/apis/storage/s3/get-object-acl/" - "/riakcs/latest/references/apis/storage/s3/get-object-acl/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/get-object.md b/content/riak/cs/latest/developing/apis/s3/objects/get-object.md similarity index 78% rename from content/riak/cs/latest/references/apis/storage/s3/get-object.md rename to content/riak/cs/latest/developing/apis/s3/objects/get-object.md index 301c77db48..d266ba309c 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/get-object.md +++ b/content/riak/cs/latest/developing/apis/s3/objects/get-object.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/references/apis/storage/s3/objects/get-object/" + - "/riak/cs/latest/references/apis/storage/s3/get-object/" - "/riakcs/latest/references/apis/storage/s3/get-object/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/head-object.md b/content/riak/cs/latest/developing/apis/s3/objects/head-object.md similarity index 78% rename from content/riak/cs/latest/references/apis/storage/s3/head-object.md rename to content/riak/cs/latest/developing/apis/s3/objects/head-object.md index f734cc6f4c..574f0d4fc9 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/head-object.md +++ b/content/riak/cs/latest/developing/apis/s3/objects/head-object.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/references/apis/storage/s3/objects/head-object/" + - "/riak/cs/latest/references/apis/storage/s3/head-object/" - "/riakcs/latest/references/apis/storage/s3/head-object/" --- diff --git a/content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads.md b/content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads.md new file mode 100644 index 0000000000..fe6d7246a9 --- /dev/null +++ b/content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads.md @@ -0,0 +1,23 @@ +--- +layout: latest_redirect +project: riak_cs +replace_text: latest +latest_text: "{latest}" +aliases: + - "/riakcs/latest/references/apis/storage/s3/objects/multipart-uplaods/" + - "/riak/cs/latest/references/apis/storage/s3/multipart-uploads/" + - "/riakcs/latest/references/apis/storage/s3/multipart-uploads/" + - /riak/cs/latest/cookbooks/multipart-upload-overview/ + - /riakcs/latest/cookbooks/multipart-upload-overview/ + - /riak/cs/latest/learning/multipart-upload-overview/ + - /riakcs/latest/learning/multipart-upload-overview/ +--- + +# Redirect page + +Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` +where `{latest}` is the `project_descriptions.{project}.latest` value +and `{project}` is the metadata value of `project` above. + +This page exists solely to redirect from the generated URL to the latest version of +that url. diff --git a/content/riak/cs/latest/references/apis/storage/s3/abort-multipart-upload.md b/content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md similarity index 73% rename from content/riak/cs/latest/references/apis/storage/s3/abort-multipart-upload.md rename to content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md index 4b52b2e9ef..5f2a4ff056 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/abort-multipart-upload.md +++ b/content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/abort-multipart-upload.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/references/apis/storage/s3/objects/multipart-uplaods/abort-multipart-upload/" + - "/riak/cs/latest/references/apis/storage/s3/abort-multipart-upload/" - "/riakcs/latest/references/apis/storage/s3/abort-multipart-upload/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/complete-multipart-upload.md b/content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md similarity index 73% rename from content/riak/cs/latest/references/apis/storage/s3/complete-multipart-upload.md rename to content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md index 5a1ab5822e..bee147d7b9 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/complete-multipart-upload.md +++ b/content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/complete-multipart-upload.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/references/apis/storage/s3/objects/multipart-uplaods/complete-multipart-upload/" + - "/riak/cs/latest/references/apis/storage/s3/complete-multipart-upload/" - "/riakcs/latest/references/apis/storage/s3/complete-multipart-upload/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/initiate-multipart-upload.md b/content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md similarity index 73% rename from content/riak/cs/latest/references/apis/storage/s3/initiate-multipart-upload.md rename to content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md index 5168817b10..40bd858339 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/initiate-multipart-upload.md +++ b/content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/initiate-multipart-upload.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/references/apis/storage/s3/objects/multipart-uplaods/initiate-multipart-upload/" + - "/riak/cs/latest/references/apis/storage/s3/initiate-multipart-upload/" - "/riakcs/latest/references/apis/storage/s3/initiate-multipart-upload/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/list-multipart-uploads.md b/content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md similarity index 73% rename from content/riak/cs/latest/references/apis/storage/s3/list-multipart-uploads.md rename to content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md index 3f12a1b4fa..d5d97fce9d 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/list-multipart-uploads.md +++ b/content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/list-multipart-uploads.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/references/apis/storage/s3/objects/multipart-uplaods/list-multipart-uploads/" + - "/riak/cs/latest/references/apis/storage/s3/list-multipart-uploads/" - "/riakcs/latest/references/apis/storage/s3/list-multipart-uploads/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/list-parts.md b/content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/list-parts.md similarity index 76% rename from content/riak/cs/latest/references/apis/storage/s3/list-parts.md rename to content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/list-parts.md index 2678e89963..234d020bde 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/list-parts.md +++ b/content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/list-parts.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/references/apis/storage/s3/objects/multipart-uplaods/list-parts/" + - "/riak/cs/latest/references/apis/storage/s3/list-parts/" - "/riakcs/latest/references/apis/storage/s3/list-parts/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/upload-part.md b/content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/upload-part.md similarity index 76% rename from content/riak/cs/latest/references/apis/storage/s3/upload-part.md rename to content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/upload-part.md index a6b1baaf85..3fff49a911 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/upload-part.md +++ b/content/riak/cs/latest/developing/apis/s3/objects/multipart-uploads/upload-part.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/references/apis/storage/s3/objects/multipart-uplaods/upload-part/" + - "/riak/cs/latest/references/apis/storage/s3/upload-part/" - "/riakcs/latest/references/apis/storage/s3/upload-part/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/put-object-acl.md b/content/riak/cs/latest/developing/apis/s3/objects/put-object-acl.md similarity index 77% rename from content/riak/cs/latest/references/apis/storage/s3/put-object-acl.md rename to content/riak/cs/latest/developing/apis/s3/objects/put-object-acl.md index 2119196a66..99b8f0f21a 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/put-object-acl.md +++ b/content/riak/cs/latest/developing/apis/s3/objects/put-object-acl.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/references/apis/storage/s3/objects/put-object-acl/" + - "/riak/cs/latest/references/apis/storage/s3/put-object-acl/" - "/riakcs/latest/references/apis/storage/s3/put-object-acl/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/put-object-copy.md b/content/riak/cs/latest/developing/apis/s3/objects/put-object-copy.md similarity index 77% rename from content/riak/cs/latest/references/apis/storage/s3/put-object-copy.md rename to content/riak/cs/latest/developing/apis/s3/objects/put-object-copy.md index 8cb752de9d..7202804bd7 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/put-object-copy.md +++ b/content/riak/cs/latest/developing/apis/s3/objects/put-object-copy.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/references/apis/storage/s3/objects/put-object-copy/" + - "/riak/cs/latest/references/apis/storage/s3/put-object-copy/" - "/riakcs/latest/references/apis/storage/s3/put-object-copy/" --- diff --git a/content/riak/cs/latest/references/apis/storage/s3/put-object.md b/content/riak/cs/latest/developing/apis/s3/objects/put-object.md similarity index 78% rename from content/riak/cs/latest/references/apis/storage/s3/put-object.md rename to content/riak/cs/latest/developing/apis/s3/objects/put-object.md index a20e40925d..1dbc3b79cd 100644 --- a/content/riak/cs/latest/references/apis/storage/s3/put-object.md +++ b/content/riak/cs/latest/developing/apis/s3/objects/put-object.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/references/apis/storage/s3/objects/put-object/" + - "/riak/cs/latest/references/apis/storage/s3/put-object/" - "/riakcs/latest/references/apis/storage/s3/put-object/" --- diff --git a/content/riak/cs/latest/cookbooks/access-control-lists.md b/content/riak/cs/latest/developing/apis/s3/other-clients.md similarity index 88% rename from content/riak/cs/latest/cookbooks/access-control-lists.md rename to content/riak/cs/latest/developing/apis/s3/other-clients.md index 25218a1657..4586b8cb92 100644 --- a/content/riak/cs/latest/cookbooks/access-control-lists.md +++ b/content/riak/cs/latest/developing/apis/s3/other-clients.md @@ -4,7 +4,7 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/access-control-lists/" + - "/riakcs/latest/development/apis/s3/other-clients/" --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/configuration/dragondisk.md b/content/riak/cs/latest/developing/apis/s3/other-clients/dragondisk.md similarity index 78% rename from content/riak/cs/latest/cookbooks/configuration/dragondisk.md rename to content/riak/cs/latest/developing/apis/s3/other-clients/dragondisk.md index 64578cda4a..b0c8e093b8 100644 --- a/content/riak/cs/latest/cookbooks/configuration/dragondisk.md +++ b/content/riak/cs/latest/developing/apis/s3/other-clients/dragondisk.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/development/apis/s3/other-clients/dragondisk/" + - "/riak/cs/latest/cookbooks/configuration/dragondisk/" - "/riakcs/latest/cookbooks/configuration/dragondisk/" --- diff --git a/content/riak/cs/latest/developing/apis/s3/other-clients/fog.md b/content/riak/cs/latest/developing/apis/s3/other-clients/fog.md new file mode 100644 index 0000000000..50472f6884 --- /dev/null +++ b/content/riak/cs/latest/developing/apis/s3/other-clients/fog.md @@ -0,0 +1,19 @@ +--- +layout: latest_redirect +project: riak_cs +replace_text: latest +latest_text: "{latest}" +aliases: + - "/riakcs/latest/developing/apis/s3/other-clients/fog/" + - "/riak/cs/latest/cookbooks/fog/" + - "/riakcs/latest/cookbooks/fog/" +--- + +# Redirect page + +Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` +where `{latest}` is the `project_descriptions.{project}.latest` value +and `{project}` is the metadata value of `project` above. + +This page exists solely to redirect from the generated URL to the latest version of +that url. diff --git a/content/riak/cs/latest/cookbooks/configuration/transmit.md b/content/riak/cs/latest/developing/apis/s3/other-clients/transmit.md similarity index 79% rename from content/riak/cs/latest/cookbooks/configuration/transmit.md rename to content/riak/cs/latest/developing/apis/s3/other-clients/transmit.md index 5af1934a6b..de5b1bd09b 100644 --- a/content/riak/cs/latest/cookbooks/configuration/transmit.md +++ b/content/riak/cs/latest/developing/apis/s3/other-clients/transmit.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/apis/s3/other-clients/transmit/" + - "/riak/cs/latest/cookbooks/configuration/transmit/" - "/riakcs/latest/cookbooks/configuration/transmit/" --- diff --git a/content/riak/cs/latest/cookbooks/configuration/s3-client.md b/content/riak/cs/latest/developing/apis/s3/s3-client.md similarity index 81% rename from content/riak/cs/latest/cookbooks/configuration/s3-client.md rename to content/riak/cs/latest/developing/apis/s3/s3-client.md index 0465499090..efe3c2cbdc 100644 --- a/content/riak/cs/latest/cookbooks/configuration/s3-client.md +++ b/content/riak/cs/latest/developing/apis/s3/s3-client.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/development/apis/s3/s3-client/" + - "/riak/cs/latest/cookbooks/configuration/s3-client/" - "/riakcs/latest/cookbooks/configuration/s3-client/" --- diff --git a/content/riak/cs/latest/references/apis/storage.md b/content/riak/cs/latest/developing/apis/storage.md similarity index 82% rename from content/riak/cs/latest/references/apis/storage.md rename to content/riak/cs/latest/developing/apis/storage.md index d2fb7cfd40..2226a17bc3 100644 --- a/content/riak/cs/latest/references/apis/storage.md +++ b/content/riak/cs/latest/developing/apis/storage.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/apis/cs-storage/" + - "/riak/cs/latest/references/apis/storage/" - "/riakcs/latest/references/apis/storage/" --- diff --git a/content/riak/cs/latest/cookbooks/usage-and-billing-data.md b/content/riak/cs/latest/developing/usage-and-billing-data.md similarity index 80% rename from content/riak/cs/latest/cookbooks/usage-and-billing-data.md rename to content/riak/cs/latest/developing/usage-and-billing-data.md index 04519fb2f6..c178d30216 100644 --- a/content/riak/cs/latest/cookbooks/usage-and-billing-data.md +++ b/content/riak/cs/latest/developing/usage-and-billing-data.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/usage-and-billing-data/" + - "/riak/cs/latest/cookbooks/usage-and-billing-data/" - "/riakcs/latest/cookbooks/usage-and-billing-data/" --- diff --git a/content/riak/cs/latest/cookbooks/querying-access-statistics.md b/content/riak/cs/latest/developing/usage-and-billing-data/access-statistics.md similarity index 77% rename from content/riak/cs/latest/cookbooks/querying-access-statistics.md rename to content/riak/cs/latest/developing/usage-and-billing-data/access-statistics.md index eb09618e7a..38cdbbccf6 100644 --- a/content/riak/cs/latest/cookbooks/querying-access-statistics.md +++ b/content/riak/cs/latest/developing/usage-and-billing-data/access-statistics.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/usage-and-billing-data/access-statistics/" + - "/riak/cs/latest/cookbooks/querying-access-statistics/" - "/riakcs/latest/cookbooks/querying-access-statistics/" --- diff --git a/content/riak/cs/latest/cookbooks/querying-storage-statistics.md b/content/riak/cs/latest/developing/usage-and-billing-data/storage-statistics.md similarity index 77% rename from content/riak/cs/latest/cookbooks/querying-storage-statistics.md rename to content/riak/cs/latest/developing/usage-and-billing-data/storage-statistics.md index 2a62b6ce23..e417ab6091 100644 --- a/content/riak/cs/latest/cookbooks/querying-storage-statistics.md +++ b/content/riak/cs/latest/developing/usage-and-billing-data/storage-statistics.md @@ -4,6 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/latest/developing/usage-and-billing-data/storage-statistics/" + - "/riak/cs/latest/cookbooks/querying-storage-statistics/" - "/riakcs/latest/cookbooks/querying-storage-statistics/" --- diff --git a/content/riak/cs/latest/downloads.md b/content/riak/cs/latest/downloads.md index 49ea0a25a7..89134f9836 100644 --- a/content/riak/cs/latest/downloads.md +++ b/content/riak/cs/latest/downloads.md @@ -4,7 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/downloads/" + - /riakcs/latest/downloads/ + - /riak/cs/latest/downloads/ --- # Redirect page diff --git a/content/riak/cs/latest/index.md b/content/riak/cs/latest/index.md index 5e036255ab..bd27b132ac 100644 --- a/content/riak/cs/latest/index.md +++ b/content/riak/cs/latest/index.md @@ -4,7 +4,11 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riakcs/" + - "/riak/cs/" - "/riakcs/latest/" + - "/riak/cs/latest/cookbooks/system-features/" + - "/riakcs/latest/cookbooks/system-features/" --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/account-management.md b/content/riak/cs/latest/learning.md similarity index 83% rename from content/riak/cs/latest/cookbooks/account-management.md rename to content/riak/cs/latest/learning.md index a0a0f2cacd..3c728074cc 100644 --- a/content/riak/cs/latest/cookbooks/account-management.md +++ b/content/riak/cs/latest/learning.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/account-management/" + - /riak/cs/latest/theory/ + - /riakcs/latest/theory/ + - /riakcs/latest/learning/ --- # Redirect page diff --git a/content/riak/cs/latest/theory/comparisons.md b/content/riak/cs/latest/learning/comparisons.md similarity index 77% rename from content/riak/cs/latest/theory/comparisons.md rename to content/riak/cs/latest/learning/comparisons.md index 573f2c6b65..14a41b7b0c 100644 --- a/content/riak/cs/latest/theory/comparisons.md +++ b/content/riak/cs/latest/learning/comparisons.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/theory/comparisons/" + - /riak/cs/latest/theory/comparisons/ + - /riakcs/latest/theory/comparisons/ + - /riakcs/latest/learning/comparisons/ --- # Redirect page diff --git a/content/riak/cs/latest/references/appendices/comparisons/atmos.md b/content/riak/cs/latest/learning/comparisons/atmos.md similarity index 71% rename from content/riak/cs/latest/references/appendices/comparisons/atmos.md rename to content/riak/cs/latest/learning/comparisons/atmos.md index 99514478c8..e5966d4109 100644 --- a/content/riak/cs/latest/references/appendices/comparisons/atmos.md +++ b/content/riak/cs/latest/learning/comparisons/atmos.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/references/appendices/comparisons/atmos/" + - /riak/cs/latest/references/appendices/comparisons/atmos/ + - /riakcs/latest/references/appendices/comparisons/atmos/ + - /riakcs/latest/learning/comparisons/atmos/ --- # Redirect page diff --git a/content/riak/cs/latest/references/appendices/comparisons/swift.md b/content/riak/cs/latest/learning/comparisons/swift.md similarity index 71% rename from content/riak/cs/latest/references/appendices/comparisons/swift.md rename to content/riak/cs/latest/learning/comparisons/swift.md index 3f238e2144..3c6c7fe44c 100644 --- a/content/riak/cs/latest/references/appendices/comparisons/swift.md +++ b/content/riak/cs/latest/learning/comparisons/swift.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/references/appendices/comparisons/swift/" + - /riak/cs/latest/references/appendices/comparisons/swift/ + - /riakcs/latest/references/appendices/comparisons/swift/ + - /riakcs/latest/learning/comparisons/swift/ --- # Redirect page diff --git a/content/riak/cs/latest/learning/faqs.md b/content/riak/cs/latest/learning/faqs.md new file mode 100644 index 0000000000..afe28bf541 --- /dev/null +++ b/content/riak/cs/latest/learning/faqs.md @@ -0,0 +1,19 @@ +--- +layout: latest_redirect +project: riak_cs +replace_text: latest +latest_text: "{latest}" +aliases: + - /riak/cs/latest/cookbooks/faqs/riak-cs/ + - /riakcs/latest/cookbooks/faqs/riak-cs/ + - /riakcs/latest/learning/faqs +--- + +# Redirect page + +Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` +where `{latest}` is the `project_descriptions.{project}.latest` value +and `{project}` is the metadata value of `project` above. + +This page exists solely to redirect from the generated URL to the latest version of +that url. diff --git a/content/riak/cs/latest/cookbooks/garbage-collection.md b/content/riak/cs/latest/learning/garbage-collection.md similarity index 73% rename from content/riak/cs/latest/cookbooks/garbage-collection.md rename to content/riak/cs/latest/learning/garbage-collection.md index e5316d68dd..2333625ab7 100644 --- a/content/riak/cs/latest/cookbooks/garbage-collection.md +++ b/content/riak/cs/latest/learning/garbage-collection.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/garbage-collection/" + - /riak/cs/latest/cookbooks/garbage-collection/ + - /riakcs/latest/cookbooks/garbage-collection/ + - /riakcs/latest/learning/garbage-collection/ --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/multi-datacenter-overview.md b/content/riak/cs/latest/learning/multi-datacenter-overview.md similarity index 66% rename from content/riak/cs/latest/cookbooks/multi-datacenter-overview.md rename to content/riak/cs/latest/learning/multi-datacenter-overview.md index 3de36444fb..edcffb0c38 100644 --- a/content/riak/cs/latest/cookbooks/multi-datacenter-overview.md +++ b/content/riak/cs/latest/learning/multi-datacenter-overview.md @@ -4,7 +4,10 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/multi-datacenter-overview/" + - /riakcs/latest/cookbooks/multi-datacenter-overview/ + - /riak/cs/latest/cookbooks/mdc-overview/ + - /riak/cs/latest/cookbooks/multi-datacenter-overview/ + - /riakcs/latest/learning/multi-datacenter-overview/ --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/configuration/stanchion.md b/content/riak/cs/latest/learning/stanchion.md similarity index 78% rename from content/riak/cs/latest/cookbooks/configuration/stanchion.md rename to content/riak/cs/latest/learning/stanchion.md index e64d92ac08..3ab5a66507 100644 --- a/content/riak/cs/latest/cookbooks/configuration/stanchion.md +++ b/content/riak/cs/latest/learning/stanchion.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/configuration/stanchion/" + - /riak/cs/latest/theory/stanchion/ + - /riakcs/latest/theory/stanchion/ + - /riakcs/latest/learning/stanchion/ --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/version-compatibility.md b/content/riak/cs/latest/learning/version-compatibility.md similarity index 72% rename from content/riak/cs/latest/cookbooks/version-compatibility.md rename to content/riak/cs/latest/learning/version-compatibility.md index a3444fff8a..94c0c0e788 100644 --- a/content/riak/cs/latest/cookbooks/version-compatibility.md +++ b/content/riak/cs/latest/learning/version-compatibility.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/version-compatibility/" + - /riak/cs/latest/cookbooks/version-compatibility/ + - /riakcs/latest/cookbooks/version-compatibility/ + - /riakcs/latest/learning/version-compatibility/ --- # Redirect page diff --git a/content/riak/cs/latest/operating/advanced.md b/content/riak/cs/latest/operating/advanced.md deleted file mode 100644 index 2f9bdca93f..0000000000 --- a/content/riak/cs/latest/operating/advanced.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: latest_redirect -project: riak_cs -replace_text: latest -latest_text: "{latest}" -aliases: - - "/riakcs/latest/operating/advanced/" ---- - -# Redirect page - -Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` -where `{latest}` is the `project_descriptions.{project}.latest` value -and `{project}` is the metadata value of `project` above. - -This page exists solely to redirect from the generated URL to the latest version of -that url. diff --git a/content/riak/cs/latest/operating/running.md b/content/riak/cs/latest/operating/running.md deleted file mode 100644 index cbcd930f8d..0000000000 --- a/content/riak/cs/latest/operating/running.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: latest_redirect -project: riak_cs -replace_text: latest -latest_text: "{latest}" -aliases: - - "/riakcs/latest/operating/running/" ---- - -# Redirect page - -Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` -where `{latest}` is the `project_descriptions.{project}.latest` value -and `{project}` is the metadata value of `project` above. - -This page exists solely to redirect from the generated URL to the latest version of -that url. diff --git a/content/riak/cs/latest/quick-guide.md b/content/riak/cs/latest/quick-guide.md new file mode 100644 index 0000000000..4dea80b26b --- /dev/null +++ b/content/riak/cs/latest/quick-guide.md @@ -0,0 +1,19 @@ +--- +layout: latest_redirect +project: riak_cs +replace_text: latest +latest_text: "{latest}" +aliases: + - /riak/cs/latest/tutorials/fast-track/ + - /riakcs/latest/tutorials/fast-track/ + - /riakcs/latest/quick-guide +--- + +# Redirect page + +Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` +where `{latest}` is the `project_descriptions.{project}.latest` value +and `{project}` is the metadata value of `project` above. + +This page exists solely to redirect from the generated URL to the latest version of +that url. diff --git a/content/riak/cs/latest/tutorials/fast-track/local-testing-environment.md b/content/riak/cs/latest/quick-guide/local-testing-environment.md similarity index 57% rename from content/riak/cs/latest/tutorials/fast-track/local-testing-environment.md rename to content/riak/cs/latest/quick-guide/local-testing-environment.md index 6f971d9c39..3cd31bb7eb 100644 --- a/content/riak/cs/latest/tutorials/fast-track/local-testing-environment.md +++ b/content/riak/cs/latest/quick-guide/local-testing-environment.md @@ -4,7 +4,10 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/tutorials/fast-track/local-testing-environment/" + - /riak/cs/latest/tutorials/fast-track/local-testing-environment/ + - /riak/cs/latest/cookbooks/tutorials/fast-track/Building-a-Local-Test-Environment/ + - /riakcs/latest/tutorials/fast-track/local-testing-environment/ + - /riakcs/latest/cookbooks/tutorials/fast-track/Building-a-Local-Test-Environment/ --- # Redirect page diff --git a/content/riak/cs/latest/tutorials/fast-track/test-installation.md b/content/riak/cs/latest/quick-guide/test-installation.md similarity index 61% rename from content/riak/cs/latest/tutorials/fast-track/test-installation.md rename to content/riak/cs/latest/quick-guide/test-installation.md index ccaede9a08..d9d85ff2fa 100644 --- a/content/riak/cs/latest/tutorials/fast-track/test-installation.md +++ b/content/riak/cs/latest/quick-guide/test-installation.md @@ -4,7 +4,10 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/tutorials/fast-track/test-installation/" + - /riak/cs/latest/quick-guide/test-installation/ + - /riak/cs/latest/cookbooks/tutorials/fast-track/Testing-the-Installation/ + - /riakcs/latest/quick-guide/test-installation/ + - /riakcs/latest/cookbooks/tutorials/fast-track/Testing-the-Installation/ --- # Redirect page diff --git a/content/riak/cs/latest/tutorials/fast-track/virtual-test-environment.md b/content/riak/cs/latest/quick-guide/virtual-test-environment.md similarity index 56% rename from content/riak/cs/latest/tutorials/fast-track/virtual-test-environment.md rename to content/riak/cs/latest/quick-guide/virtual-test-environment.md index 146391ba9d..9198d43b43 100644 --- a/content/riak/cs/latest/tutorials/fast-track/virtual-test-environment.md +++ b/content/riak/cs/latest/quick-guide/virtual-test-environment.md @@ -4,7 +4,11 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/tutorials/fast-track/virtual-test-environment/" + - /riak/cs/latest/tutorials/quick-guide/virtual-test-environment/ + - /riak/cs/latest/cookbooks/tutorials/fast-track/Building-a-Virtual-Test-Environment/ + - /riakcs/latest/tutorials/quick-guide/virtual-test-environment/ + - /riakcs/latest/cookbooks/tutorials/fast-track/Building-a-Virtual-Test-Environment/ + --- # Redirect page diff --git a/content/riak/cs/latest/tutorials/fast-track/what-is-riak-cs.md b/content/riak/cs/latest/quick-guide/what-is-riak-cs.md similarity index 77% rename from content/riak/cs/latest/tutorials/fast-track/what-is-riak-cs.md rename to content/riak/cs/latest/quick-guide/what-is-riak-cs.md index 96a1f9b0d2..99a1bdd336 100644 --- a/content/riak/cs/latest/tutorials/fast-track/what-is-riak-cs.md +++ b/content/riak/cs/latest/quick-guide/what-is-riak-cs.md @@ -4,7 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/tutorials/fast-track/what-is-riak-cs/" + - /riak/cs/latest/tutorials/quick-guide/what-is-riak-cs/ + - /riakcs/latest/tutorials/quick-guide/what-is-riak-cs/ + --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/release-notes.md b/content/riak/cs/latest/release-notes.md similarity index 64% rename from content/riak/cs/latest/cookbooks/release-notes.md rename to content/riak/cs/latest/release-notes.md index 0a8c2fc9f1..51d51700b8 100644 --- a/content/riak/cs/latest/cookbooks/release-notes.md +++ b/content/riak/cs/latest/release-notes.md @@ -4,7 +4,11 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/release-notes/" + - /riakcs/latest/release-notes/ + - /riakcs/latest/cookbooks/release-notes/ + - /riakcs/latest/cookbooks/Riak-CS-Release-Notes/ + - /riak/cs/latest/cookbooks/Riak-CS-Release-Notes/ + - /riak/cs/latest/cookbooks/release-notes/ --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/installing/chef.md b/content/riak/cs/latest/setup.md similarity index 77% rename from content/riak/cs/latest/cookbooks/installing/chef.md rename to content/riak/cs/latest/setup.md index 459a842bd6..09d410c03b 100644 --- a/content/riak/cs/latest/cookbooks/installing/chef.md +++ b/content/riak/cs/latest/setup.md @@ -4,6 +4,9 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: + - "/riak/cs/latest/cookbooks/installing/" + - "/riakcs/latest/cookbooks/installing/" + - "/riak/cs/latest/cookbooks/installing/chef/" - "/riakcs/latest/cookbooks/installing/chef/" --- diff --git a/content/riak/cs/latest/cookbooks/installing.md b/content/riak/cs/latest/setup/installing.md similarity index 65% rename from content/riak/cs/latest/cookbooks/installing.md rename to content/riak/cs/latest/setup/installing.md index 80754c7bbb..1c0e1e178a 100644 --- a/content/riak/cs/latest/cookbooks/installing.md +++ b/content/riak/cs/latest/setup/installing.md @@ -4,7 +4,10 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/installing/" + - /riakcs/latest/cookbooks/installing/Riak-CS-Using-Chef/ + - /riak/cs/latest/cookbooks/installing/Riak-CS-Using-Chef/ + - /riak/cs/latest/cookbooks/installing/chef/ + - /riakcs/latest/cookbooks/installing/chef/ --- # Redirect page diff --git a/content/riak/cs/latest/operating.md b/content/riak/cs/latest/setup/installing/alpine-linux.md similarity index 92% rename from content/riak/cs/latest/operating.md rename to content/riak/cs/latest/setup/installing/alpine-linux.md index 32d73cca3d..75d956419c 100644 --- a/content/riak/cs/latest/operating.md +++ b/content/riak/cs/latest/setup/installing/alpine-linux.md @@ -4,7 +4,6 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/operating/" --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/fog.md b/content/riak/cs/latest/setup/installing/amazon-web-services.md similarity index 91% rename from content/riak/cs/latest/cookbooks/fog.md rename to content/riak/cs/latest/setup/installing/amazon-web-services.md index 9193b4c39a..75d956419c 100644 --- a/content/riak/cs/latest/cookbooks/fog.md +++ b/content/riak/cs/latest/setup/installing/amazon-web-services.md @@ -4,7 +4,6 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/fog/" --- # Redirect page diff --git a/content/riak/cs/latest/references/apis.md b/content/riak/cs/latest/setup/installing/debian-ubuntu.md similarity index 91% rename from content/riak/cs/latest/references/apis.md rename to content/riak/cs/latest/setup/installing/debian-ubuntu.md index 8f302ec403..75d956419c 100644 --- a/content/riak/cs/latest/references/apis.md +++ b/content/riak/cs/latest/setup/installing/debian-ubuntu.md @@ -4,7 +4,6 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/references/apis/" --- # Redirect page diff --git a/content/riak/cs/latest/setup/installing/freebsd.md b/content/riak/cs/latest/setup/installing/freebsd.md new file mode 100644 index 0000000000..75d956419c --- /dev/null +++ b/content/riak/cs/latest/setup/installing/freebsd.md @@ -0,0 +1,16 @@ +--- +layout: latest_redirect +project: riak_cs +replace_text: latest +latest_text: "{latest}" +aliases: +--- + +# Redirect page + +Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` +where `{latest}` is the `project_descriptions.{project}.latest` value +and `{project}` is the metadata value of `project` above. + +This page exists solely to redirect from the generated URL to the latest version of +that url. diff --git a/content/riak/cs/latest/setup/installing/installing.md b/content/riak/cs/latest/setup/installing/installing.md new file mode 100644 index 0000000000..75d956419c --- /dev/null +++ b/content/riak/cs/latest/setup/installing/installing.md @@ -0,0 +1,16 @@ +--- +layout: latest_redirect +project: riak_cs +replace_text: latest +latest_text: "{latest}" +aliases: +--- + +# Redirect page + +Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` +where `{latest}` is the `project_descriptions.{project}.latest` value +and `{project}` is the metadata value of `project` above. + +This page exists solely to redirect from the generated URL to the latest version of +that url. diff --git a/content/riak/cs/latest/setup/installing/rhel-centos.md b/content/riak/cs/latest/setup/installing/rhel-centos.md new file mode 100644 index 0000000000..75d956419c --- /dev/null +++ b/content/riak/cs/latest/setup/installing/rhel-centos.md @@ -0,0 +1,16 @@ +--- +layout: latest_redirect +project: riak_cs +replace_text: latest +latest_text: "{latest}" +aliases: +--- + +# Redirect page + +Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` +where `{latest}` is the `project_descriptions.{project}.latest` value +and `{project}` is the metadata value of `project` above. + +This page exists solely to redirect from the generated URL to the latest version of +that url. diff --git a/content/riak/cs/latest/setup/upgrading.md b/content/riak/cs/latest/setup/upgrading.md new file mode 100644 index 0000000000..5bc52f6acf --- /dev/null +++ b/content/riak/cs/latest/setup/upgrading.md @@ -0,0 +1,19 @@ +--- +layout: latest_redirect +project: riak_cs +replace_text: latest +latest_text: "{latest}" +aliases: + - /riak/cs/latest/cookbooks/rolling-upgrades/ + - /riakcs/latest/cookbooks/rolling-upgrades/ + - /riakcs/latest/setup/upgrading/ +--- + +# Redirect page + +Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` +where `{latest}` is the `project_descriptions.{project}.latest` value +and `{project}` is the metadata value of `project` above. + +This page exists solely to redirect from the generated URL to the latest version of +that url. diff --git a/content/riak/cs/latest/tutorials/fast-track.md b/content/riak/cs/latest/tutorials/fast-track.md deleted file mode 100644 index 95018e3b13..0000000000 --- a/content/riak/cs/latest/tutorials/fast-track.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: latest_redirect -project: riak_cs -replace_text: latest -latest_text: "{latest}" -aliases: - - "/riakcs/latest/tutorials/fast-track/" ---- - -# Redirect page - -Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` -where `{latest}` is the `project_descriptions.{project}.latest` value -and `{project}` is the metadata value of `project` above. - -This page exists solely to redirect from the generated URL to the latest version of -that url. diff --git a/content/riak/cs/latest/using.md b/content/riak/cs/latest/using.md new file mode 100644 index 0000000000..03e7796e0e --- /dev/null +++ b/content/riak/cs/latest/using.md @@ -0,0 +1,23 @@ +--- +layout: latest_redirect +project: riak_cs +replace_text: latest +latest_text: "{latest}" +aliases: + - /riakcs/latest/operating/ + - /riak/cs/latest/operating/ + - /riakcs/latest/using/ + - /riak/cs/latest/operating/advanced/ + - /riakcs/latest/operating/advanced/ + - /riak/cs/latest/operating/running/ + - /riakcs/latest/operating/running/ +--- + +# Redirect page + +Redirects `someroot/latest/somepath` to `someroot/{latest}/somepath` +where `{latest}` is the `project_descriptions.{project}.latest` value +and `{project}` is the metadata value of `project` above. + +This page exists solely to redirect from the generated URL to the latest version of +that url. diff --git a/content/riak/cs/latest/cookbooks/command-line-tools.md b/content/riak/cs/latest/using/command-line-tools.md similarity index 80% rename from content/riak/cs/latest/cookbooks/command-line-tools.md rename to content/riak/cs/latest/using/command-line-tools.md index 8bcbda7622..30367c753f 100644 --- a/content/riak/cs/latest/cookbooks/command-line-tools.md +++ b/content/riak/cs/latest/using/command-line-tools.md @@ -4,7 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/command-line-tools/" + - /riak/cs/latest/cookbooks/command-line-tools/ + - /riakcs/latest/cookbooks/command-line-tools/ --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/installing/launching-and-stopping.md b/content/riak/cs/latest/using/launching-and-stopping.md similarity index 76% rename from content/riak/cs/latest/cookbooks/installing/launching-and-stopping.md rename to content/riak/cs/latest/using/launching-and-stopping.md index da325c0ca9..ab6d6eb6aa 100644 --- a/content/riak/cs/latest/cookbooks/installing/launching-and-stopping.md +++ b/content/riak/cs/latest/using/launching-and-stopping.md @@ -4,7 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/installing/launching-and-stopping/" + - /riak/cs/latest/cookbooks/installing/launching-and-stopping/ + - /riakcs/latest/cookbooks/installing/launching-and-stopping/ --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/logging.md b/content/riak/cs/latest/using/logging.md similarity index 84% rename from content/riak/cs/latest/cookbooks/logging.md rename to content/riak/cs/latest/using/logging.md index d4e59d1a82..bc290a40d5 100644 --- a/content/riak/cs/latest/cookbooks/logging.md +++ b/content/riak/cs/latest/using/logging.md @@ -4,7 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/logging/" + - /riakcs/latest/cookbooks/logging/ + - /riak/cs/latest/cookbooks/logging/ --- # Redirect page diff --git a/content/riak/cs/latest/cookbooks/monitoring-and-metrics.md b/content/riak/cs/latest/using/monitoring-and-metrics.md similarity index 79% rename from content/riak/cs/latest/cookbooks/monitoring-and-metrics.md rename to content/riak/cs/latest/using/monitoring-and-metrics.md index 423a57c6f0..fa4d0fe075 100644 --- a/content/riak/cs/latest/cookbooks/monitoring-and-metrics.md +++ b/content/riak/cs/latest/using/monitoring-and-metrics.md @@ -4,7 +4,8 @@ project: riak_cs replace_text: latest latest_text: "{latest}" aliases: - - "/riakcs/latest/cookbooks/monitoring-and-metrics/" + - /riakcs/latest/cookbooks/monitoring-and-metrics/ + - /riak/cs/latest/cookbooks/monitoring-and-metrics/ --- # Redirect page diff --git a/content/riak/index.md b/content/riak/index.md index 9718f835f6..4c4e52472d 100644 --- a/content/riak/index.md +++ b/content/riak/index.md @@ -2,6 +2,8 @@ layout: redirect target: "riak/kv/latest/" aliases: + - "/riak/kv/" + - "/riakkv/" - "/riak/latest/" --- diff --git a/content/riak/kv/latest/index.md b/content/riak/kv/latest/index.md index 3e8fe54c52..56bbe94bf3 100644 --- a/content/riak/kv/latest/index.md +++ b/content/riak/kv/latest/index.md @@ -4,6 +4,7 @@ project: riak_kv replace_text: latest latest_text: "{latest}" aliases: + - "/riak/kv/latest/" - "/riak/latest/" - "/riakkv/latest/" --- diff --git a/content/riak/ts/latest/index.md b/content/riak/ts/latest/index.md index 649cf45d05..3ef308b5ce 100644 --- a/content/riak/ts/latest/index.md +++ b/content/riak/ts/latest/index.md @@ -4,7 +4,9 @@ project: riak_ts replace_text: latest latest_text: "{latest}" aliases: - - "/riakts/latest/index/" + - "/riakts/" + - "/riak/ts/" + - "/riakts/latest/" --- # Redirect page diff --git a/data/download_info.yaml b/data/download_info.yaml index 739de12f68..b38eaa239b 100644 --- a/data/download_info.yaml +++ b/data/download_info.yaml @@ -13630,6 +13630,239 @@ riak_cs: file_href: https://files.tiot.jp/riak/cs/3.1/3.1.0/ubuntu/jammy_64/riak-cs_3.1.0-OTP25_amd64.deb file_size: '21029838' chksum_href: https://files.tiot.jp/riak/cs/3.1/3.1.0/ubuntu/jammy_64/riak-cs_3.1.0-OTP25_amd64.deb.sha + 3.2.1: + - os: amazon + versions: + - version: 2(x86_64) + architectures: + - arch: x86_64 + file_info: + file_name: riak-cs-3.2.1.OTP24-1.amzn2.x86_64.rpm + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/amazon/2(x86_64)/riak-cs-3.2.1.OTP24-1.amzn2.x86_64.rpm + file_size: '23199464' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/amazon/2(x86_64)/riak-cs-3.2.1.OTP24-1.amzn2.x86_64.rpm.sha + - arch: x86_64 + file_info: + file_name: riak-cs-3.2.1.OTP25-1.amzn2.x86_64.rpm + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/amazon/2(x86_64)/riak-cs-3.2.1.OTP25-1.amzn2.x86_64.rpm + file_size: '23548384' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/amazon/2(x86_64)/riak-cs-3.2.1.OTP25-1.amzn2.x86_64.rpm.sha + - arch: x86_64 + file_info: + file_name: riak-cs-3.2.1.OTP26-1.amzn2.x86_64.rpm + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/amazon/2(x86_64)/riak-cs-3.2.1.OTP26-1.amzn2.x86_64.rpm + file_size: '23760792' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/amazon/2(x86_64)/riak-cs-3.2.1.OTP26-1.amzn2.x86_64.rpm.sha + - os: debian + versions: + - version: '10' + architectures: + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP24_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/10/riak-cs_3.2.1-OTP24_amd64.deb + file_size: '22036032' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/10/riak-cs_3.2.1-OTP24_amd64.deb.sha + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP25_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/10/riak-cs_3.2.1-OTP25_amd64.deb + file_size: '22359060' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/10/riak-cs_3.2.1-OTP25_amd64.deb.sha + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP26_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/10/riak-cs_3.2.1-OTP26_amd64.deb + file_size: '22694340' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/10/riak-cs_3.2.1-OTP26_amd64.deb.sha + - version: '11' + architectures: + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP24_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/11/riak-cs_3.2.1-OTP24_amd64.deb + file_size: '22053864' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/11/riak-cs_3.2.1-OTP24_amd64.deb.sha + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP25_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/11/riak-cs_3.2.1-OTP25_amd64.deb + file_size: '22358332' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/11/riak-cs_3.2.1-OTP25_amd64.deb.sha + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP26_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/11/riak-cs_3.2.1-OTP26_amd64.deb + file_size: '22725712' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/11/riak-cs_3.2.1-OTP26_amd64.deb.sha + - version: '12' + architectures: + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP24_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/12/riak-cs_3.2.1-OTP24_amd64.deb + file_size: '22082640' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/12/riak-cs_3.2.1-OTP24_amd64.deb.sha + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP25_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/12/riak-cs_3.2.1-OTP25_amd64.deb + file_size: '22380652' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/12/riak-cs_3.2.1-OTP25_amd64.deb.sha + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP26_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/12/riak-cs_3.2.1-OTP26_amd64.deb + file_size: '22741948' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/debian/12/riak-cs_3.2.1-OTP26_amd64.deb.sha + - os: freebsd + versions: + - version: '13' + architectures: + - arch: unknown + file_info: + file_name: riak_cs-3.2.1-OTP24.pkg + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/freebsd/13/riak_cs-3.2.1-OTP24.pkg + file_size: '26960576' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/freebsd/13/riak_cs-3.2.1-OTP24.pkg.sha + - arch: unknown + file_info: + file_name: riak_cs-3.2.1-OTP25.pkg + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/freebsd/13/riak_cs-3.2.1-OTP25.pkg + file_size: '27759324' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/freebsd/13/riak_cs-3.2.1-OTP25.pkg.sha + - arch: unknown + file_info: + file_name: riak_cs-3.2.1-OTP26.pkg + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/freebsd/13/riak_cs-3.2.1-OTP26.pkg + file_size: '28142412' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/freebsd/13/riak_cs-3.2.1-OTP26.pkg.sha + - os: oracle + versions: + - version: '8' + architectures: + - arch: x86_64 + file_info: + file_name: riak-cs-3.2.1.OTP24-1.el8.x86_64.rpm + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/oracle/8/riak-cs-3.2.1.OTP24-1.el8.x86_64.rpm + file_size: '23172476' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/oracle/8/riak-cs-3.2.1.OTP24-1.el8.x86_64.rpm.sha + - arch: x86_64 + file_info: + file_name: riak-cs-3.2.1.OTP25-1.el8.x86_64.rpm + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/oracle/8/riak-cs-3.2.1.OTP25-1.el8.x86_64.rpm + file_size: '23498216' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/oracle/8/riak-cs-3.2.1.OTP25-1.el8.x86_64.rpm.sha + - arch: x86_64 + file_info: + file_name: riak-cs-3.2.1.OTP26-1.el8.x86_64.rpm + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/oracle/8/riak-cs-3.2.1.OTP26-1.el8.x86_64.rpm + file_size: '23747312' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/oracle/8/riak-cs-3.2.1.OTP26-1.el8.x86_64.rpm.sha + - os: rhel + versions: + - version: '8' + architectures: + - arch: x86_64 + file_info: + file_name: riak-cs-3.2.1.OTP24-1.el8.x86_64.rpm + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/rhel/8/riak-cs-3.2.1.OTP24-1.el8.x86_64.rpm + file_size: '23147876' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/rhel/8/riak-cs-3.2.1.OTP24-1.el8.x86_64.rpm.sha + - arch: x86_64 + file_info: + file_name: riak-cs-3.2.1.OTP25-1.el8.x86_64.rpm + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/rhel/8/riak-cs-3.2.1.OTP25-1.el8.x86_64.rpm + file_size: '23497232' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/rhel/8/riak-cs-3.2.1.OTP25-1.el8.x86_64.rpm.sha + - arch: x86_64 + file_info: + file_name: riak-cs-3.2.1.OTP26-1.el8.x86_64.rpm + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/rhel/8/riak-cs-3.2.1.OTP26-1.el8.x86_64.rpm + file_size: '23732968' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/rhel/8/riak-cs-3.2.1.OTP26-1.el8.x86_64.rpm.sha + - version: '9' + architectures: + - arch: x86_64 + file_info: + file_name: riak-cs-3.2.1.OTP24-1.el9.x86_64.rpm + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/rhel/9/riak-cs-3.2.1.OTP24-1.el9.x86_64.rpm + file_size: '23332649' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/rhel/9/riak-cs-3.2.1.OTP24-1.el9.x86_64.rpm.sha + - arch: x86_64 + file_info: + file_name: riak-cs-3.2.1.OTP25-1.el9.x86_64.rpm + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/rhel/9/riak-cs-3.2.1.OTP25-1.el9.x86_64.rpm + file_size: '23656146' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/rhel/9/riak-cs-3.2.1.OTP25-1.el9.x86_64.rpm.sha + - arch: x86_64 + file_info: + file_name: riak-cs-3.2.1.OTP26-1.el9.x86_64.rpm + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/rhel/9/riak-cs-3.2.1.OTP26-1.el9.x86_64.rpm + file_size: '23913404' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/rhel/9/riak-cs-3.2.1.OTP26-1.el9.x86_64.rpm.sha + - os: ubuntu + versions: + - version: bionic_64 + architectures: + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP24_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/bionic_64/riak-cs_3.2.1-OTP24_amd64.deb + file_size: '22137092' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/bionic_64/riak-cs_3.2.1-OTP24_amd64.deb.sha + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP25_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/bionic_64/riak-cs_3.2.1-OTP25_amd64.deb + file_size: '22440976' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/bionic_64/riak-cs_3.2.1-OTP25_amd64.deb.sha + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP26_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/bionic_64/riak-cs_3.2.1-OTP26_amd64.deb + file_size: '22800024' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/bionic_64/riak-cs_3.2.1-OTP26_amd64.deb.sha + - version: focal_64 + architectures: + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP24_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/focal_64/riak-cs_3.2.1-OTP24_amd64.deb + file_size: '22094096' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/focal_64/riak-cs_3.2.1-OTP24_amd64.deb.sha + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP25_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/focal_64/riak-cs_3.2.1-OTP25_amd64.deb + file_size: '22383224' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/focal_64/riak-cs_3.2.1-OTP25_amd64.deb.sha + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP26_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/focal_64/riak-cs_3.2.1-OTP26_amd64.deb + file_size: '22743960' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/focal_64/riak-cs_3.2.1-OTP26_amd64.deb.sha + - version: jammy_64 + architectures: + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP24_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/jammy_64/riak-cs_3.2.1-OTP24_amd64.deb + file_size: '23174694' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/jammy_64/riak-cs_3.2.1-OTP24_amd64.deb.sha + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP25_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/jammy_64/riak-cs_3.2.1-OTP25_amd64.deb + file_size: '23487578' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/jammy_64/riak-cs_3.2.1-OTP25_amd64.deb.sha + - arch: amd64 + file_info: + file_name: riak-cs_3.2.1-OTP26_amd64.deb + file_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/jammy_64/riak-cs_3.2.1-OTP26_amd64.deb + file_size: '23887724' + chksum_href: https://files.tiot.jp/riak/cs/3.2/3.2.1/ubuntu/jammy_64/riak-cs_3.2.1-OTP26_amd64.deb.sha stanchion: 2.0.0: - os: source diff --git a/docker/docker-compose.generate-docs-riak-info.yaml b/docker/docker-compose.generate-docs-riak-info.yaml index ae61b3f8c5..7a965b034b 100644 --- a/docker/docker-compose.generate-docs-riak-info.yaml +++ b/docker/docker-compose.generate-docs-riak-info.yaml @@ -13,7 +13,7 @@ services: - RAKE_DEBUG=false - RAKE_GEN_DOWNS=false - RAKE_GEN_PROJECTS=false - - HUGO_BASEURL=/ + - HUGO_BASEURL=https://docs.riak.info/ - HUGO_PORT=80 volumes: - ..:/src diff --git a/docker/docker-compose.generate-riak-docs-beta.yaml b/docker/docker-compose.generate-riak-docs-beta.yaml index 5d65f92611..ca4b817198 100644 --- a/docker/docker-compose.generate-riak-docs-beta.yaml +++ b/docker/docker-compose.generate-riak-docs-beta.yaml @@ -13,7 +13,7 @@ services: - RAKE_DEBUG=false - RAKE_GEN_DOWNS=false - RAKE_GEN_PROJECTS=false - - HUGO_BASEURL=/riak-docs-beta/ + - HUGO_BASEURL=https://www.tiot.jp/riak-docs-beta/ - HUGO_PORT=80 volumes: - ..:/src diff --git a/docker/docker-compose.generate-riak-docs.yaml b/docker/docker-compose.generate-riak-docs.yaml index 83db7f3d3b..291bd7743f 100644 --- a/docker/docker-compose.generate-riak-docs.yaml +++ b/docker/docker-compose.generate-riak-docs.yaml @@ -13,7 +13,7 @@ services: - RAKE_DEBUG=false - RAKE_GEN_DOWNS=false - RAKE_GEN_PROJECTS=false - - HUGO_BASEURL=/riak-docs/ + - HUGO_BASEURL=https://www.tiot.jp/riak-docs/ - HUGO_PORT=80 volumes: - ..:/src diff --git a/dynamic/css/base/_base.scss b/dynamic/css/base/_base.scss index 811f7939f0..c54af81fa6 100644 --- a/dynamic/css/base/_base.scss +++ b/dynamic/css/base/_base.scss @@ -297,6 +297,7 @@ ul, dt { margin-bottom : 1rem; padding-left : 2.5rem; + list-style-position: outside; } ol ol, @@ -306,7 +307,60 @@ ul ol { /* Currently no overrides for inner-list elements. */ } +/* Reset counters on header */ +main, h1, h2, h3, h4, h5, h6 { + counter-reset: ol1counter ol2counter ol3counter ol4counter; +} + +/* Hide auto counters */ +ol>li { + list-style-type: none; +} + +/* Reset counters at end of nested lists */ +ol:first-of-type { + counter-reset: ol1counter; +} +ol ol:first-of-type { + counter-reset: ol2counter; +} +ol ol ol:first-of-type { + counter-reset: ol3counter; +} +ol ol ol ol:first-of-type { + counter-reset: ol4counter; +} +/* Show counter for level */ +ol>li:before { + content: counter(ol1counter) ". "; + counter-increment: ol1counter; + margin-left: -30px; + display: inline-block; + width: 30px; +} +ol ol>li:before { + content: counter(ol2counter) ". "; + counter-increment: ol2counter; +} +ol ol ol>li:before { + content: counter(ol3counter) ". "; + counter-increment: ol3counter; +} +ol ol ol ol>li:before { + content: counter(ol4counter) ". "; + counter-increment: ol4counter; +} + +li>p:first-child { + display: inline; + margin-bottom: 0; +} + +li>p:first-child+p, +li>p:first-child+div { + margin-top: 1rem; +} /** * Tables diff --git a/dynamic/js/basho/table-of-contents.coffee b/dynamic/js/basho/table-of-contents.coffee index b61faa91ec..7b1fcc2418 100644 --- a/dynamic/js/basho/table-of-contents.coffee +++ b/dynamic/js/basho/table-of-contents.coffee @@ -39,7 +39,8 @@ h2s.each -> # from the text of the header before using it as a local link. toc_items.append($("
  • ", { class : "table-of-contents__item", - html : "#{$that.text()}" + # html : "#{$that.text()}" + html : "#{$that.text()}" })) diff --git a/layouts/_default/downloads.html b/layouts/_default/downloads.html index add1d55968..9d4c06e9a1 100644 --- a/layouts/_default/downloads.html +++ b/layouts/_default/downloads.html @@ -84,14 +84,16 @@

    All files (except Alpine Linux) are available on our the file store.

    + + + {{/*

    */}} {{ (printf "### ![](%s) %s for %s{#%s}" $alpine_image_source $target_title $alpine_os_title (replace (lower $alpine_os_title) " " "-" )) | markdownify }} @@ -106,6 +108,7 @@
    +

    All files are available on our the file store.

    diff --git a/layouts/_default/sitemap.xml b/layouts/_default/sitemap.xml new file mode 100644 index 0000000000..3ab065e3b5 --- /dev/null +++ b/layouts/_default/sitemap.xml @@ -0,0 +1,10 @@ + + {{ range where (where (where (where .Site.RegularPages ".Params.project" "!=" nil) ".Params.project_version" "!=" nil) ".Params.exclude_from_search" "!=" true) ".Params.exclude_from_sitemap" "!=" true }} + {{- if .Permalink -}} + + {{ .Permalink }} + + {{- end -}} + {{ end }} + diff --git a/layouts/partials/head.html b/layouts/partials/head.html index 724e0a80e0..6383b7e4f0 100644 --- a/layouts/partials/head.html +++ b/layouts/partials/head.html @@ -24,6 +24,8 @@ + + {{- if $canonical_link }} {{end}} diff --git a/static/css/main.css b/static/css/main.css index 52e81bec8a..9cdc3fa914 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -3,4 +3,4 @@ * Copyright 2011-2016 The Bootstrap Authors * Copyright 2011-2016 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v4.0.0 | MIT License | github.com/necolas/normalize.css */@import url("https://fonts.googleapis.com/css?family=Oswald:400");@import url("https://fonts.googleapis.com/css?family=Muli:400,700");@import url("https://fonts.googleapis.com/css?family=Source+Code+Pro:400,700");html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}template,[hidden]{display:none}a{background-color:transparent}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}button,input,select,textarea{font:inherit}optgroup{font-weight:bold}button,input,select{overflow:visible}button,input,select,textarea{margin:0}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{cursor:pointer}[disabled]{cursor:default}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button:-moz-focusring,input:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type="checkbox"],[type="radio"]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}html{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:inherit;box-sizing:inherit}@-ms-viewport{width:device-width}html{font-size:16px;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:1rem;line-height:1.5;color:red;background-color:#fff}[tabindex="-1"]:focus{outline:none !important}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted red}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:bold}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}a{color:#f99d53;text-decoration:none}a:focus,a:hover{color:#f67309;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:none}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle}[role="button"]{cursor:pointer}a,area,button,[role="button"],input,label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse;background-color:transparent}caption{padding-top:.75rem;padding-bottom:.75rem;color:red;text-align:left;caption-side:bottom}th{text-align:left}label{display:inline-block;margin-bottom:.5rem}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,textarea{margin:0;line-height:inherit;border-radius:0}input[type="radio"]:disabled,input[type="checkbox"]:disabled{cursor:not-allowed}input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{-webkit-appearance:listbox}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit}input[type="search"]{-webkit-appearance:none}output{display:inline-block}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1,.h1{font-size:2.5rem}h2,.h2{font-size:2rem}h3,.h3{font-size:1.75rem}h4,.h4{font-size:1.5rem}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300}.display-2{font-size:5.5rem;font-weight:300}.display-3{font-size:4.5rem;font-weight:300}.display-4{font-size:3.5rem;font-weight:300}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:80%;font-weight:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:5px}.initialism{font-size:90%;text-transform:uppercase}.blockquote{padding:.5rem 1rem;margin-bottom:1rem;font-size:1.25rem;border-left:.25rem solid red}.blockquote-footer{display:block;font-size:80%;color:red}.blockquote-footer::before{content:"\2014 \00A0"}.blockquote-reverse{padding-right:1rem;padding-left:0;text-align:right;border-right:.25rem solid red;border-left:0}.blockquote-reverse .blockquote-footer::before{content:""}.blockquote-reverse .blockquote-footer::after{content:"\00A0 \2014"}dl.row>dd+dt{clear:left}.img-fluid,.carousel-inner>.carousel-item>img,.carousel-inner>.carousel-item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:.3rem}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #ddd;border-radius:.25rem;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075);display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:red}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}code{padding:.2rem .4rem;font-size:90%;color:#bd4147;background-color:#f7f7f9;border-radius:.25rem}kbd{padding:.2rem .4rem;font-size:90%;color:#fff;background-color:#333;border-radius:.2rem;-webkit-box-shadow:inset 0 -0.1rem 0 rgba(0,0,0,0.25);box-shadow:inset 0 -0.1rem 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;margin-top:0;margin-bottom:1rem;font-size:90%;color:red}pre code{padding:0;font-size:inherit;color:inherit;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}.container::after{content:"";display:table;clear:both}@media (min-width: 30rem){.container{max-width:32rem}}@media (min-width: 48rem){.container{max-width:45rem}}@media (min-width: 66.5rem){.container{max-width:58.75rem}}@media (min-width: 86rem){.container{max-width:71.25rem}}.container-fluid{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}.container-fluid::after{content:"";display:table;clear:both}.row{margin-left:-15px;margin-right:-15px}.row::after{content:"";display:table;clear:both}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width: 20rem){.col-xs-1{float:left;width:8.33333%}.col-xs-2{float:left;width:16.66667%}.col-xs-3{float:left;width:25%}.col-xs-4{float:left;width:33.33333%}.col-xs-5{float:left;width:41.66667%}.col-xs-6{float:left;width:50%}.col-xs-7{float:left;width:58.33333%}.col-xs-8{float:left;width:66.66667%}.col-xs-9{float:left;width:75%}.col-xs-10{float:left;width:83.33333%}.col-xs-11{float:left;width:91.66667%}.col-xs-12{float:left;width:100%}.pull-xs-0{right:auto}.pull-xs-1{right:8.33333%}.pull-xs-2{right:16.66667%}.pull-xs-3{right:25%}.pull-xs-4{right:33.33333%}.pull-xs-5{right:41.66667%}.pull-xs-6{right:50%}.pull-xs-7{right:58.33333%}.pull-xs-8{right:66.66667%}.pull-xs-9{right:75%}.pull-xs-10{right:83.33333%}.pull-xs-11{right:91.66667%}.pull-xs-12{right:100%}.push-xs-0{left:auto}.push-xs-1{left:8.33333%}.push-xs-2{left:16.66667%}.push-xs-3{left:25%}.push-xs-4{left:33.33333%}.push-xs-5{left:41.66667%}.push-xs-6{left:50%}.push-xs-7{left:58.33333%}.push-xs-8{left:66.66667%}.push-xs-9{left:75%}.push-xs-10{left:83.33333%}.push-xs-11{left:91.66667%}.push-xs-12{left:100%}.offset-xs-1{margin-left:8.33333%}.offset-xs-2{margin-left:16.66667%}.offset-xs-3{margin-left:25%}.offset-xs-4{margin-left:33.33333%}.offset-xs-5{margin-left:41.66667%}.offset-xs-6{margin-left:50%}.offset-xs-7{margin-left:58.33333%}.offset-xs-8{margin-left:66.66667%}.offset-xs-9{margin-left:75%}.offset-xs-10{margin-left:83.33333%}.offset-xs-11{margin-left:91.66667%}}@media (min-width: 30rem){.col-sm-1{float:left;width:8.33333%}.col-sm-2{float:left;width:16.66667%}.col-sm-3{float:left;width:25%}.col-sm-4{float:left;width:33.33333%}.col-sm-5{float:left;width:41.66667%}.col-sm-6{float:left;width:50%}.col-sm-7{float:left;width:58.33333%}.col-sm-8{float:left;width:66.66667%}.col-sm-9{float:left;width:75%}.col-sm-10{float:left;width:83.33333%}.col-sm-11{float:left;width:91.66667%}.col-sm-12{float:left;width:100%}.pull-sm-0{right:auto}.pull-sm-1{right:8.33333%}.pull-sm-2{right:16.66667%}.pull-sm-3{right:25%}.pull-sm-4{right:33.33333%}.pull-sm-5{right:41.66667%}.pull-sm-6{right:50%}.pull-sm-7{right:58.33333%}.pull-sm-8{right:66.66667%}.pull-sm-9{right:75%}.pull-sm-10{right:83.33333%}.pull-sm-11{right:91.66667%}.pull-sm-12{right:100%}.push-sm-0{left:auto}.push-sm-1{left:8.33333%}.push-sm-2{left:16.66667%}.push-sm-3{left:25%}.push-sm-4{left:33.33333%}.push-sm-5{left:41.66667%}.push-sm-6{left:50%}.push-sm-7{left:58.33333%}.push-sm-8{left:66.66667%}.push-sm-9{left:75%}.push-sm-10{left:83.33333%}.push-sm-11{left:91.66667%}.push-sm-12{left:100%}.offset-sm-0{margin-left:0%}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width: 48rem){.col-md-1{float:left;width:8.33333%}.col-md-2{float:left;width:16.66667%}.col-md-3{float:left;width:25%}.col-md-4{float:left;width:33.33333%}.col-md-5{float:left;width:41.66667%}.col-md-6{float:left;width:50%}.col-md-7{float:left;width:58.33333%}.col-md-8{float:left;width:66.66667%}.col-md-9{float:left;width:75%}.col-md-10{float:left;width:83.33333%}.col-md-11{float:left;width:91.66667%}.col-md-12{float:left;width:100%}.pull-md-0{right:auto}.pull-md-1{right:8.33333%}.pull-md-2{right:16.66667%}.pull-md-3{right:25%}.pull-md-4{right:33.33333%}.pull-md-5{right:41.66667%}.pull-md-6{right:50%}.pull-md-7{right:58.33333%}.pull-md-8{right:66.66667%}.pull-md-9{right:75%}.pull-md-10{right:83.33333%}.pull-md-11{right:91.66667%}.pull-md-12{right:100%}.push-md-0{left:auto}.push-md-1{left:8.33333%}.push-md-2{left:16.66667%}.push-md-3{left:25%}.push-md-4{left:33.33333%}.push-md-5{left:41.66667%}.push-md-6{left:50%}.push-md-7{left:58.33333%}.push-md-8{left:66.66667%}.push-md-9{left:75%}.push-md-10{left:83.33333%}.push-md-11{left:91.66667%}.push-md-12{left:100%}.offset-md-0{margin-left:0%}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width: 66.5rem){.col-lg-1{float:left;width:8.33333%}.col-lg-2{float:left;width:16.66667%}.col-lg-3{float:left;width:25%}.col-lg-4{float:left;width:33.33333%}.col-lg-5{float:left;width:41.66667%}.col-lg-6{float:left;width:50%}.col-lg-7{float:left;width:58.33333%}.col-lg-8{float:left;width:66.66667%}.col-lg-9{float:left;width:75%}.col-lg-10{float:left;width:83.33333%}.col-lg-11{float:left;width:91.66667%}.col-lg-12{float:left;width:100%}.pull-lg-0{right:auto}.pull-lg-1{right:8.33333%}.pull-lg-2{right:16.66667%}.pull-lg-3{right:25%}.pull-lg-4{right:33.33333%}.pull-lg-5{right:41.66667%}.pull-lg-6{right:50%}.pull-lg-7{right:58.33333%}.pull-lg-8{right:66.66667%}.pull-lg-9{right:75%}.pull-lg-10{right:83.33333%}.pull-lg-11{right:91.66667%}.pull-lg-12{right:100%}.push-lg-0{left:auto}.push-lg-1{left:8.33333%}.push-lg-2{left:16.66667%}.push-lg-3{left:25%}.push-lg-4{left:33.33333%}.push-lg-5{left:41.66667%}.push-lg-6{left:50%}.push-lg-7{left:58.33333%}.push-lg-8{left:66.66667%}.push-lg-9{left:75%}.push-lg-10{left:83.33333%}.push-lg-11{left:91.66667%}.push-lg-12{left:100%}.offset-lg-0{margin-left:0%}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width: 86rem){.col-xl-1{float:left;width:8.33333%}.col-xl-2{float:left;width:16.66667%}.col-xl-3{float:left;width:25%}.col-xl-4{float:left;width:33.33333%}.col-xl-5{float:left;width:41.66667%}.col-xl-6{float:left;width:50%}.col-xl-7{float:left;width:58.33333%}.col-xl-8{float:left;width:66.66667%}.col-xl-9{float:left;width:75%}.col-xl-10{float:left;width:83.33333%}.col-xl-11{float:left;width:91.66667%}.col-xl-12{float:left;width:100%}.pull-xl-0{right:auto}.pull-xl-1{right:8.33333%}.pull-xl-2{right:16.66667%}.pull-xl-3{right:25%}.pull-xl-4{right:33.33333%}.pull-xl-5{right:41.66667%}.pull-xl-6{right:50%}.pull-xl-7{right:58.33333%}.pull-xl-8{right:66.66667%}.pull-xl-9{right:75%}.pull-xl-10{right:83.33333%}.pull-xl-11{right:91.66667%}.pull-xl-12{right:100%}.push-xl-0{left:auto}.push-xl-1{left:8.33333%}.push-xl-2{left:16.66667%}.push-xl-3{left:25%}.push-xl-4{left:33.33333%}.push-xl-5{left:41.66667%}.push-xl-6{left:50%}.push-xl-7{left:58.33333%}.push-xl-8{left:66.66667%}.push-xl-9{left:75%}.push-xl-10{left:83.33333%}.push-xl-11{left:91.66667%}.push-xl-12{left:100%}.offset-xl-0{margin-left:0%}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;max-width:100%;margin-bottom:1rem}.table th,.table td{padding:.75rem;vertical-align:top;border-top:1px solid red}.table thead th{vertical-align:bottom;border-bottom:2px solid red}.table tbody+tbody{border-top:2px solid red}.table .table{background-color:#fff}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid red}.table-bordered th,.table-bordered td{border:1px solid red}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,0.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,0.075)}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.075)}.table-success,.table-success>th,.table-success>td{background-color:#dff0d8}.table-hover .table-success:hover{background-color:#d0e9c6}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#d0e9c6}.table-info,.table-info>th,.table-info>td{background-color:#d9edf7}.table-hover .table-info:hover{background-color:#c4e3f3}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#c4e3f3}.table-warning,.table-warning>th,.table-warning>td{background-color:#fcf8e3}.table-hover .table-warning:hover{background-color:#faf2cc}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#faf2cc}.table-danger,.table-danger>th,.table-danger>td{background-color:#f2dede}.table-hover .table-danger:hover{background-color:#ebcccc}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#ebcccc}.thead-inverse th{color:#fff;background-color:red}.thead-default th{color:red;background-color:red}.table-inverse{color:red;background-color:red}.table-inverse th,.table-inverse td,.table-inverse thead th{border-color:red}.table-inverse.table-bordered{border:0}.table-responsive{display:block;width:100%;min-height:.01%;overflow-x:auto}.table-reflow thead{float:left}.table-reflow tbody{display:block;white-space:nowrap}.table-reflow th,.table-reflow td{border-top:1px solid red;border-left:1px solid red}.table-reflow th:last-child,.table-reflow td:last-child{border-right:1px solid red}.table-reflow thead:last-child tr:last-child th,.table-reflow thead:last-child tr:last-child td,.table-reflow tbody:last-child tr:last-child th,.table-reflow tbody:last-child tr:last-child td,.table-reflow tfoot:last-child tr:last-child th,.table-reflow tfoot:last-child tr:last-child td{border-bottom:1px solid red}.table-reflow tr{float:left}.table-reflow tr th,.table-reflow tr td{display:block !important;border:1px solid red}.form-control{display:block;width:100%;padding:.5rem .75rem;font-size:1rem;line-height:1.25;color:red;background-color:#fff;background-image:none;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,0.15);border-radius:.25rem;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,-webkit-box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,-webkit-box-shadow ease-in-out 0.15s;-o-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s,-webkit-box-shadow ease-in-out 0.15s}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:red;background-color:#fff;border-color:#66afe9;outline:none;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-webkit-input-placeholder{color:#999;opacity:1}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999;opacity:1}.form-control::placeholder{color:#999;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:red;opacity:1}.form-control:disabled{cursor:not-allowed}select.form-control:not([size]):not([multiple]){height:2.5rem}select.form-control:focus::-ms-value{color:red;background-color:#fff}.form-control-file,.form-control-range{display:block}.col-form-label{padding-top:.5rem;padding-bottom:.5rem;margin-bottom:0}.col-form-label-lg{padding-top:.75rem;padding-bottom:.75rem;font-size:1.25rem}.col-form-label-sm{padding-top:.25rem;padding-bottom:.25rem;font-size:.875rem}.col-form-legend{padding-top:.5rem;padding-bottom:.5rem;margin-bottom:0;font-size:1rem}.form-control-static{min-height:2.5rem;padding-top:.5rem;padding-bottom:.5rem;margin-bottom:0}.form-control-static.form-control-sm,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn,.form-control-static.form-control-lg,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}select.form-control-sm:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),.input-group-sm>select.input-group-addon:not([size]):not([multiple]),.input-group-sm>.input-group-btn>select.btn:not([size]):not([multiple]){height:1.8125rem}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{padding:.75rem 1.5rem;font-size:1.25rem;border-radius:.3rem}select.form-control-lg:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),.input-group-lg>select.input-group-addon:not([size]):not([multiple]),.input-group-lg>.input-group-btn>select.btn:not([size]):not([multiple]){height:3.16667rem}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-check{position:relative;display:block;margin-bottom:.75rem}.form-check+.form-check{margin-top:-.25rem}.form-check.disabled .form-check-label{color:red;cursor:not-allowed}.form-check-label{padding-left:1.25rem;margin-bottom:0;cursor:pointer}.form-check-input{position:absolute;margin-top:.25rem;margin-left:-1.25rem}.form-check-input:only-child{position:static}.form-check-inline{position:relative;display:inline-block;padding-left:1.25rem;margin-bottom:0;vertical-align:middle;cursor:pointer}.form-check-inline+.form-check-inline{margin-left:.75rem}.form-check-inline.disabled{cursor:not-allowed}.form-control-feedback{margin-top:.25rem}.form-control-success,.form-control-warning,.form-control-danger{padding-right:2.25rem;background-repeat:no-repeat;background-position:center right .625rem;-webkit-background-size:1.25rem 1.25rem;background-size:1.25rem 1.25rem}.has-success .form-control-feedback,.has-success .form-control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label,.has-success .custom-control{color:red}.has-success .form-control{border-color:red}.has-success .input-group-addon{color:red;border-color:red;background-color:#fcc}.has-success .form-control-feedback{color:red}.has-success .form-control-success{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%235cb85c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E")}.has-warning .form-control-feedback,.has-warning .form-control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label,.has-warning .custom-control{color:red}.has-warning .form-control{border-color:red}.has-warning .input-group-addon{color:red;border-color:red;background-color:#fcc}.has-warning .form-control-feedback{color:red}.has-warning .form-control-warning{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23f0ad4e' d='M4.4 5.324h-.8v-2.46h.8zm0 1.42h-.8V5.89h.8zM3.76.63L.04 7.075c-.115.2.016.425.26.426h7.397c.242 0 .372-.226.258-.426C6.726 4.924 5.47 2.79 4.253.63c-.113-.174-.39-.174-.494 0z'/%3E%3C/svg%3E")}.has-danger .form-control-feedback,.has-danger .form-control-label,.has-danger .radio,.has-danger .checkbox,.has-danger .radio-inline,.has-danger .checkbox-inline,.has-danger.radio label,.has-danger.checkbox label,.has-danger.radio-inline label,.has-danger.checkbox-inline label,.has-danger .custom-control{color:red}.has-danger .form-control{border-color:red}.has-danger .input-group-addon{color:red;border-color:red;background-color:#fcc}.has-danger .form-control-feedback{color:red}.has-danger .form-control-danger{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23d9534f' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E")}@media (min-width: 30rem){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .form-control-label{margin-bottom:0;vertical-align:middle}.form-inline .form-check{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .form-check-label{padding-left:0}.form-inline .form-check-input{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.btn{display:inline-block;font-weight:normal;line-height:1.25;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.5rem 1rem;font-size:1rem;border-radius:.25rem;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,.btn:hover{text-decoration:none}.btn.focus{text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn:disabled{cursor:not-allowed;opacity:.65;-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#f99d53;border-color:#f99d53;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-primary:hover{color:#fff;background-color:#f78122;border-color:#f77b18}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#f78122;border-color:#f77b18}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#f78122;border-color:#f77b18;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-primary:active:hover,.btn-primary:active:focus,.btn-primary:active.focus,.btn-primary.active:hover,.btn-primary.active:focus,.btn-primary.active.focus,.open>.btn-primary.dropdown-toggle:hover,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle.focus{color:#fff;background-color:#ed6e08;border-color:#c65c07}.btn-primary.disabled:focus,.btn-primary.disabled.focus,.btn-primary:disabled:focus,.btn-primary:disabled.focus{background-color:#f99d53;border-color:#f99d53}.btn-primary.disabled:hover,.btn-primary:disabled:hover{background-color:#f99d53;border-color:#f99d53}.btn-secondary{color:red;background-color:#fff;border-color:#ccc;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-secondary:hover{color:red;background-color:#e6e6e6;border-color:#adadad}.btn-secondary:focus,.btn-secondary.focus{color:red;background-color:#e6e6e6;border-color:#adadad}.btn-secondary:active,.btn-secondary.active,.open>.btn-secondary.dropdown-toggle{color:red;background-color:#e6e6e6;border-color:#adadad;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-secondary:active:hover,.btn-secondary:active:focus,.btn-secondary:active.focus,.btn-secondary.active:hover,.btn-secondary.active:focus,.btn-secondary.active.focus,.open>.btn-secondary.dropdown-toggle:hover,.open>.btn-secondary.dropdown-toggle:focus,.open>.btn-secondary.dropdown-toggle.focus{color:red;background-color:#d4d4d4;border-color:#8c8c8c}.btn-secondary.disabled:focus,.btn-secondary.disabled.focus,.btn-secondary:disabled:focus,.btn-secondary:disabled.focus{background-color:#fff;border-color:#ccc}.btn-secondary.disabled:hover,.btn-secondary:disabled:hover{background-color:#fff;border-color:#ccc}.btn-info{color:#fff;background-color:red;border-color:red;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-info:hover{color:#fff;background-color:#c00;border-color:#c20000}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#c00;border-color:#c20000}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#c00;border-color:#c20000;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-info:active:hover,.btn-info:active:focus,.btn-info:active.focus,.btn-info.active:hover,.btn-info.active:focus,.btn-info.active.focus,.open>.btn-info.dropdown-toggle:hover,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle.focus{color:#fff;background-color:#a80000;border-color:maroon}.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info:disabled:focus,.btn-info:disabled.focus{background-color:red;border-color:red}.btn-info.disabled:hover,.btn-info:disabled:hover{background-color:red;border-color:red}.btn-success{color:#fff;background-color:red;border-color:red;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-success:hover{color:#fff;background-color:#c00;border-color:#c20000}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#c00;border-color:#c20000}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#c00;border-color:#c20000;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-success:active:hover,.btn-success:active:focus,.btn-success:active.focus,.btn-success.active:hover,.btn-success.active:focus,.btn-success.active.focus,.open>.btn-success.dropdown-toggle:hover,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle.focus{color:#fff;background-color:#a80000;border-color:maroon}.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success:disabled:focus,.btn-success:disabled.focus{background-color:red;border-color:red}.btn-success.disabled:hover,.btn-success:disabled:hover{background-color:red;border-color:red}.btn-warning{color:#fff;background-color:red;border-color:red;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-warning:hover{color:#fff;background-color:#c00;border-color:#c20000}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#c00;border-color:#c20000}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#c00;border-color:#c20000;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-warning:active:hover,.btn-warning:active:focus,.btn-warning:active.focus,.btn-warning.active:hover,.btn-warning.active:focus,.btn-warning.active.focus,.open>.btn-warning.dropdown-toggle:hover,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle.focus{color:#fff;background-color:#a80000;border-color:maroon}.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning:disabled:focus,.btn-warning:disabled.focus{background-color:red;border-color:red}.btn-warning.disabled:hover,.btn-warning:disabled:hover{background-color:red;border-color:red}.btn-danger{color:#fff;background-color:red;border-color:red;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-danger:hover{color:#fff;background-color:#c00;border-color:#c20000}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c00;border-color:#c20000}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c00;border-color:#c20000;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-danger:active:hover,.btn-danger:active:focus,.btn-danger:active.focus,.btn-danger.active:hover,.btn-danger.active:focus,.btn-danger.active.focus,.open>.btn-danger.dropdown-toggle:hover,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle.focus{color:#fff;background-color:#a80000;border-color:maroon}.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger:disabled:focus,.btn-danger:disabled.focus{background-color:red;border-color:red}.btn-danger.disabled:hover,.btn-danger:disabled:hover{background-color:red;border-color:red}.btn-outline-primary{color:#f99d53;background-image:none;background-color:transparent;border-color:#f99d53}.btn-outline-primary:hover{color:#fff;background-color:#f99d53;border-color:#f99d53}.btn-outline-primary:focus,.btn-outline-primary.focus{color:#fff;background-color:#f99d53;border-color:#f99d53}.btn-outline-primary:active,.btn-outline-primary.active,.open>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#f99d53;border-color:#f99d53}.btn-outline-primary:active:hover,.btn-outline-primary:active:focus,.btn-outline-primary:active.focus,.btn-outline-primary.active:hover,.btn-outline-primary.active:focus,.btn-outline-primary.active.focus,.open>.btn-outline-primary.dropdown-toggle:hover,.open>.btn-outline-primary.dropdown-toggle:focus,.open>.btn-outline-primary.dropdown-toggle.focus{color:#fff;background-color:#ed6e08;border-color:#c65c07}.btn-outline-primary.disabled:focus,.btn-outline-primary.disabled.focus,.btn-outline-primary:disabled:focus,.btn-outline-primary:disabled.focus{border-color:#fcd5b6}.btn-outline-primary.disabled:hover,.btn-outline-primary:disabled:hover{border-color:#fcd5b6}.btn-outline-secondary{color:#ccc;background-image:none;background-color:transparent;border-color:#ccc}.btn-outline-secondary:hover{color:#fff;background-color:#ccc;border-color:#ccc}.btn-outline-secondary:focus,.btn-outline-secondary.focus{color:#fff;background-color:#ccc;border-color:#ccc}.btn-outline-secondary:active,.btn-outline-secondary.active,.open>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#ccc;border-color:#ccc}.btn-outline-secondary:active:hover,.btn-outline-secondary:active:focus,.btn-outline-secondary:active.focus,.btn-outline-secondary.active:hover,.btn-outline-secondary.active:focus,.btn-outline-secondary.active.focus,.open>.btn-outline-secondary.dropdown-toggle:hover,.open>.btn-outline-secondary.dropdown-toggle:focus,.open>.btn-outline-secondary.dropdown-toggle.focus{color:#fff;background-color:#a1a1a1;border-color:#8c8c8c}.btn-outline-secondary.disabled:focus,.btn-outline-secondary.disabled.focus,.btn-outline-secondary:disabled:focus,.btn-outline-secondary:disabled.focus{border-color:#fff}.btn-outline-secondary.disabled:hover,.btn-outline-secondary:disabled:hover{border-color:#fff}.btn-outline-info{color:red;background-image:none;background-color:transparent;border-color:red}.btn-outline-info:hover{color:#fff;background-color:red;border-color:red}.btn-outline-info:focus,.btn-outline-info.focus{color:#fff;background-color:red;border-color:red}.btn-outline-info:active,.btn-outline-info.active,.open>.btn-outline-info.dropdown-toggle{color:#fff;background-color:red;border-color:red}.btn-outline-info:active:hover,.btn-outline-info:active:focus,.btn-outline-info:active.focus,.btn-outline-info.active:hover,.btn-outline-info.active:focus,.btn-outline-info.active.focus,.open>.btn-outline-info.dropdown-toggle:hover,.open>.btn-outline-info.dropdown-toggle:focus,.open>.btn-outline-info.dropdown-toggle.focus{color:#fff;background-color:#a80000;border-color:maroon}.btn-outline-info.disabled:focus,.btn-outline-info.disabled.focus,.btn-outline-info:disabled:focus,.btn-outline-info:disabled.focus{border-color:#f66}.btn-outline-info.disabled:hover,.btn-outline-info:disabled:hover{border-color:#f66}.btn-outline-success{color:red;background-image:none;background-color:transparent;border-color:red}.btn-outline-success:hover{color:#fff;background-color:red;border-color:red}.btn-outline-success:focus,.btn-outline-success.focus{color:#fff;background-color:red;border-color:red}.btn-outline-success:active,.btn-outline-success.active,.open>.btn-outline-success.dropdown-toggle{color:#fff;background-color:red;border-color:red}.btn-outline-success:active:hover,.btn-outline-success:active:focus,.btn-outline-success:active.focus,.btn-outline-success.active:hover,.btn-outline-success.active:focus,.btn-outline-success.active.focus,.open>.btn-outline-success.dropdown-toggle:hover,.open>.btn-outline-success.dropdown-toggle:focus,.open>.btn-outline-success.dropdown-toggle.focus{color:#fff;background-color:#a80000;border-color:maroon}.btn-outline-success.disabled:focus,.btn-outline-success.disabled.focus,.btn-outline-success:disabled:focus,.btn-outline-success:disabled.focus{border-color:#f66}.btn-outline-success.disabled:hover,.btn-outline-success:disabled:hover{border-color:#f66}.btn-outline-warning{color:red;background-image:none;background-color:transparent;border-color:red}.btn-outline-warning:hover{color:#fff;background-color:red;border-color:red}.btn-outline-warning:focus,.btn-outline-warning.focus{color:#fff;background-color:red;border-color:red}.btn-outline-warning:active,.btn-outline-warning.active,.open>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:red;border-color:red}.btn-outline-warning:active:hover,.btn-outline-warning:active:focus,.btn-outline-warning:active.focus,.btn-outline-warning.active:hover,.btn-outline-warning.active:focus,.btn-outline-warning.active.focus,.open>.btn-outline-warning.dropdown-toggle:hover,.open>.btn-outline-warning.dropdown-toggle:focus,.open>.btn-outline-warning.dropdown-toggle.focus{color:#fff;background-color:#a80000;border-color:maroon}.btn-outline-warning.disabled:focus,.btn-outline-warning.disabled.focus,.btn-outline-warning:disabled:focus,.btn-outline-warning:disabled.focus{border-color:#f66}.btn-outline-warning.disabled:hover,.btn-outline-warning:disabled:hover{border-color:#f66}.btn-outline-danger{color:red;background-image:none;background-color:transparent;border-color:red}.btn-outline-danger:hover{color:#fff;background-color:red;border-color:red}.btn-outline-danger:focus,.btn-outline-danger.focus{color:#fff;background-color:red;border-color:red}.btn-outline-danger:active,.btn-outline-danger.active,.open>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:red;border-color:red}.btn-outline-danger:active:hover,.btn-outline-danger:active:focus,.btn-outline-danger:active.focus,.btn-outline-danger.active:hover,.btn-outline-danger.active:focus,.btn-outline-danger.active.focus,.open>.btn-outline-danger.dropdown-toggle:hover,.open>.btn-outline-danger.dropdown-toggle:focus,.open>.btn-outline-danger.dropdown-toggle.focus{color:#fff;background-color:#a80000;border-color:maroon}.btn-outline-danger.disabled:focus,.btn-outline-danger.disabled.focus,.btn-outline-danger:disabled:focus,.btn-outline-danger:disabled.focus{border-color:#f66}.btn-outline-danger.disabled:hover,.btn-outline-danger:disabled:hover{border-color:#f66}.btn-link{font-weight:normal;color:#f99d53;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link:disabled{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#f67309;text-decoration:underline;background-color:transparent}.btn-link:disabled:focus,.btn-link:disabled:hover{color:red;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:.75rem 1.5rem;font-size:1.25rem;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height;-o-transition-property:height;transition-property:height}.dropup,.dropdown{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.3em;vertical-align:middle;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-left:.3em solid transparent}.dropdown-toggle:focus{outline:0}.dropup .dropdown-toggle::after{border-top:0;border-bottom:.3em solid}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:1rem;color:red;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,0.15);border-radius:.25rem;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175)}.dropdown-divider{height:1px;margin:.5rem 0;overflow:hidden;background-color:#e5e5e5}.dropdown-item{display:block;width:100%;padding:3px 20px;clear:both;font-weight:normal;color:red;text-align:inherit;white-space:nowrap;background:none;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#e60000;text-decoration:none;background-color:#f5f5f5}.dropdown-item.active,.dropdown-item.active:focus,.dropdown-item.active:hover{color:#fff;text-decoration:none;background-color:#f99d53;outline:0}.dropdown-item.disabled,.dropdown-item.disabled:focus,.dropdown-item.disabled:hover{color:red}.dropdown-item.disabled:focus,.dropdown-item.disabled:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:"progid:DXImageTransform.Microsoft.gradient(enabled = false)"}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:5px 20px;font-size:.875rem;color:red;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:.3em solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-0.5rem}.btn-toolbar::after{content:"";display:table;clear:both}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:.5rem}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn+.dropdown-toggle-split::after{margin-left:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:1.125rem;padding-left:1.125rem}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret{border-width:.3em .3em 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret{border-width:0 .3em .3em}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group::after{content:"";display:table;clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;width:100%;display:table;border-collapse:separate}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus,.input-group .form-control:active,.input-group .form-control:hover{z-index:3}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;font-weight:normal;line-height:1.25;color:red;text-align:center;background-color:red;border:1px solid rgba(0,0,0,0.15);border-radius:.25rem}.input-group-addon.form-control-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-addon.form-control-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:.75rem 1.5rem;font-size:1.25rem;border-radius:.3rem}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:not(:last-child),.input-group-addon:not(:last-child),.input-group-btn:not(:last-child)>.btn,.input-group-btn:not(:last-child)>.btn-group>.btn,.input-group-btn:not(:last-child)>.dropdown-toggle,.input-group-btn:not(:first-child)>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:not(:first-child)>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:not(:last-child){border-right:0}.input-group .form-control:not(:first-child),.input-group-addon:not(:first-child),.input-group-btn:not(:first-child)>.btn,.input-group-btn:not(:first-child)>.btn-group>.btn,.input-group-btn:not(:first-child)>.dropdown-toggle,.input-group-btn:not(:last-child)>.btn:not(:first-child),.input-group-btn:not(:last-child)>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.form-control+.input-group-addon:not(:first-child){border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:focus,.input-group-btn>.btn:active,.input-group-btn>.btn:hover{z-index:3}.input-group-btn:not(:last-child)>.btn,.input-group-btn:not(:last-child)>.btn-group{margin-right:-1px}.input-group-btn:not(:first-child)>.btn,.input-group-btn:not(:first-child)>.btn-group{z-index:2;margin-left:-1px}.input-group-btn:not(:first-child)>.btn:focus,.input-group-btn:not(:first-child)>.btn:active,.input-group-btn:not(:first-child)>.btn:hover,.input-group-btn:not(:first-child)>.btn-group:focus,.input-group-btn:not(:first-child)>.btn-group:active,.input-group-btn:not(:first-child)>.btn-group:hover{z-index:3}.custom-control{position:relative;display:inline;padding-left:1.5rem;cursor:pointer}.custom-control+.custom-control{margin-left:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked ~ .custom-control-indicator{color:#fff;background-color:#0074d9;-webkit-box-shadow:none;box-shadow:none}.custom-control-input:focus ~ .custom-control-indicator{-webkit-box-shadow:0 0 0 0.075rem #fff,0 0 0 0.2rem #0074d9;box-shadow:0 0 0 0.075rem #fff,0 0 0 0.2rem #0074d9}.custom-control-input:active ~ .custom-control-indicator{color:#fff;background-color:#84c6ff;-webkit-box-shadow:none;box-shadow:none}.custom-control-input:disabled ~ .custom-control-indicator{cursor:not-allowed;background-color:#eee}.custom-control-input:disabled ~ .custom-control-description{color:#767676;cursor:not-allowed}.custom-control-indicator{position:absolute;top:.0625rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#ddd;background-repeat:no-repeat;background-position:center center;-webkit-background-size:50% 50%;background-size:50% 50%;-webkit-box-shadow:inset 0 0.25rem 0.25rem rgba(0,0,0,0.1);box-shadow:inset 0 0.25rem 0.25rem rgba(0,0,0,0.1)}.custom-checkbox .custom-control-indicator{border-radius:.25rem}.custom-checkbox .custom-control-input:checked ~ .custom-control-indicator{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-indicator{background-color:#0074d9;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E");-webkit-box-shadow:none;box-shadow:none}.custom-radio .custom-control-indicator{border-radius:50%}.custom-radio .custom-control-input:checked ~ .custom-control-indicator{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-controls-stacked .custom-control{display:inline}.custom-controls-stacked .custom-control::after{display:block;margin-bottom:.25rem;content:""}.custom-controls-stacked .custom-control+.custom-control{margin-left:0}.custom-select{display:inline-block;max-width:100%;padding:.375rem 1.75rem .375rem .75rem;padding-right:.75rem \9;color:red;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-image:none \9;-webkit-background-size:8px 10px;background-size:8px 10px;border:1px solid rgba(0,0,0,0.15);border-radius:.25rem;-moz-appearance:none;-webkit-appearance:none}.custom-select:focus{border-color:#51a7e8;outline:none;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.075),0 0 5px rgba(81,167,232,0.5);box-shadow:inset 0 1px 2px rgba(0,0,0,0.075),0 0 5px rgba(81,167,232,0.5)}.custom-select:focus::-ms-value{color:red;background-color:#fff}.custom-select:disabled{color:red;cursor:not-allowed;background-color:red}.custom-select::-ms-expand{opacity:0}.custom-select-sm{padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-file{position:relative;display:inline-block;max-width:100%;height:2.5rem;cursor:pointer}.custom-file-input{min-width:14rem;max-width:100%;margin:0;filter:alpha(opacity=0);opacity:0}.custom-file-input:focus ~ .custom-file-control{-webkit-box-shadow:0 0 0 0.075rem #fff,0 0 0 0.2rem #0074d9;box-shadow:0 0 0 0.075rem #fff,0 0 0 0.2rem #0074d9}.custom-file-control{position:absolute;top:0;right:0;left:0;z-index:5;height:2.5rem;padding:.5rem 1rem;line-height:1.5;color:#555;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;border:1px solid #ddd;border-radius:.25rem;-webkit-box-shadow:inset 0 0.2rem 0.4rem rgba(0,0,0,0.05);box-shadow:inset 0 0.2rem 0.4rem rgba(0,0,0,0.05)}.custom-file-control:lang(en)::after{content:"Choose file..."}.custom-file-control::before{position:absolute;top:-1px;right:-1px;bottom:-1px;z-index:6;display:block;height:2.5rem;padding:.5rem 1rem;line-height:1.5;color:#555;background-color:#eee;border:1px solid #ddd;border-radius:0 .25rem .25rem 0}.custom-file-control:lang(en)::before{content:"Browse"}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:inline-block}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:red}.nav-link.disabled,.nav-link.disabled:focus,.nav-link.disabled:hover{color:red;cursor:not-allowed;background-color:transparent}.nav-inline .nav-item{display:inline-block}.nav-inline .nav-item+.nav-item,.nav-inline .nav-link+.nav-link{margin-left:1rem}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs::after{content:"";display:table;clear:both}.nav-tabs .nav-item{float:left;margin-bottom:-1px}.nav-tabs .nav-item+.nav-item{margin-left:.2rem}.nav-tabs .nav-link{display:block;padding:0.5em 1em;border:1px solid transparent;border-top-right-radius:.25rem;border-top-left-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:red red #ddd}.nav-tabs .nav-link.disabled,.nav-tabs .nav-link.disabled:focus,.nav-tabs .nav-link.disabled:hover{color:red;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-link.active:focus,.nav-tabs .nav-link.active:hover,.nav-tabs .nav-item.open .nav-link,.nav-tabs .nav-item.open .nav-link:focus,.nav-tabs .nav-item.open .nav-link:hover{color:red;background-color:#fff;border-color:#ddd #ddd transparent}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.nav-pills::after{content:"";display:table;clear:both}.nav-pills .nav-item{float:left}.nav-pills .nav-item+.nav-item{margin-left:.2rem}.nav-pills .nav-link{display:block;padding:0.5em 1em;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .nav-link.active:focus,.nav-pills .nav-link.active:hover,.nav-pills .nav-item.open .nav-link,.nav-pills .nav-item.open .nav-link:focus,.nav-pills .nav-item.open .nav-link:hover{color:#fff;cursor:default;background-color:#f99d53}.nav-stacked .nav-item{display:block;float:none}.nav-stacked .nav-item+.nav-item{margin-top:.2rem;margin-left:0}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar::after{content:"";display:table;clear:both}@media (min-width: 30rem){.navbar{border-radius:.25rem}}.navbar-full{z-index:1000}@media (min-width: 30rem){.navbar-full{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width: 30rem){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0}.navbar-fixed-bottom{bottom:0}.navbar-sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1030;width:100%}@media (min-width: 30rem){.navbar-sticky-top{border-radius:0}}.navbar-brand{float:left;padding-top:.25rem;padding-bottom:.25rem;margin-right:1rem;font-size:1.25rem}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}.navbar-divider{float:left;width:1px;padding-top:.425rem;padding-bottom:.425rem;margin-right:1rem;margin-left:1rem;overflow:hidden}.navbar-divider::before{content:"\00a0"}.navbar-toggler{padding:.5rem .75rem;font-size:1.25rem;line-height:1;background:none;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-nav .nav-item{float:left}.navbar-nav .nav-link{display:block;padding-top:.425rem;padding-bottom:.425rem}.navbar-nav .nav-link+.nav-link{margin-left:1rem}.navbar-nav .nav-item+.nav-item{margin-left:1rem}.navbar-light .navbar-brand{color:rgba(0,0,0,0.8)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,0.8)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,0.6)}.navbar-light .navbar-nav .open>.nav-link,.navbar-light .navbar-nav .open>.nav-link:focus,.navbar-light .navbar-nav .open>.nav-link:hover,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .active>.nav-link:focus,.navbar-light .navbar-nav .active>.nav-link:hover,.navbar-light .navbar-nav .nav-link.open,.navbar-light .navbar-nav .nav-link.open:focus,.navbar-light .navbar-nav .nav-link.open:hover,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.active:focus,.navbar-light .navbar-nav .nav-link.active:hover{color:rgba(0,0,0,0.8)}.navbar-light .navbar-divider{background-color:rgba(0,0,0,0.075)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,0.75)}.navbar-dark .navbar-nav .open>.nav-link,.navbar-dark .navbar-nav .open>.nav-link:focus,.navbar-dark .navbar-nav .open>.nav-link:hover,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .active>.nav-link:focus,.navbar-dark .navbar-nav .active>.nav-link:hover,.navbar-dark .navbar-nav .nav-link.open,.navbar-dark .navbar-nav .nav-link.open:focus,.navbar-dark .navbar-nav .nav-link.open:hover,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.active:focus,.navbar-dark .navbar-nav .nav-link.active:hover{color:#fff}.navbar-dark .navbar-divider{background-color:rgba(255,255,255,0.075)}.navbar-toggleable-xs::after{content:"";display:table;clear:both}@media (max-width: 29.99rem){.navbar-toggleable-xs .navbar-nav .nav-item{float:none;margin-left:0}}@media (min-width: 30rem){.navbar-toggleable-xs{display:block !important}}.navbar-toggleable-sm::after{content:"";display:table;clear:both}@media (max-width: 47.99rem){.navbar-toggleable-sm .navbar-nav .nav-item{float:none;margin-left:0}}@media (min-width: 48rem){.navbar-toggleable-sm{display:block !important}}.navbar-toggleable-md::after{content:"";display:table;clear:both}@media (max-width: 66.49rem){.navbar-toggleable-md .navbar-nav .nav-item{float:none;margin-left:0}}@media (min-width: 66.5rem){.navbar-toggleable-md{display:block !important}}.card{position:relative;display:block;margin-bottom:.75rem;background-color:#fff;border-radius:.25rem;border:1px solid rgba(0,0,0,0.125)}.card-block{padding:1.25rem}.card-block::after{content:"";display:table;clear:both}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-0.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card>.list-group:first-child .list-group-item:first-child{border-top-right-radius:.25rem;border-top-left-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-header{padding:.75rem 1.25rem;background-color:#f5f5f5;border-bottom:1px solid rgba(0,0,0,0.125)}.card-header::after{content:"";display:table;clear:both}.card-header:first-child{border-radius:.25rem .25rem 0 0}.card-footer{padding:.75rem 1.25rem;background-color:#f5f5f5;border-top:1px solid rgba(0,0,0,0.125)}.card-footer::after{content:"";display:table;clear:both}.card-footer:last-child{border-radius:0 0 .25rem .25rem}.card-header-tabs{margin-right:-0.625rem;margin-bottom:-0.75rem;margin-left:-0.625rem;border-bottom:0}.card-header-pills{margin-right:-0.625rem;margin-left:-0.625rem}.card-primary{background-color:#f99d53;border-color:#f99d53}.card-primary .card-header,.card-primary .card-footer{background-color:transparent}.card-success{background-color:red;border-color:red}.card-success .card-header,.card-success .card-footer{background-color:transparent}.card-info{background-color:red;border-color:red}.card-info .card-header,.card-info .card-footer{background-color:transparent}.card-warning{background-color:red;border-color:red}.card-warning .card-header,.card-warning .card-footer{background-color:transparent}.card-danger{background-color:red;border-color:red}.card-danger .card-header,.card-danger .card-footer{background-color:transparent}.card-outline-primary{background-color:transparent;border-color:#f99d53}.card-outline-secondary{background-color:transparent;border-color:#ccc}.card-outline-info{background-color:transparent;border-color:red}.card-outline-success{background-color:transparent;border-color:red}.card-outline-warning{background-color:transparent;border-color:red}.card-outline-danger{background-color:transparent;border-color:red}.card-inverse .card-header,.card-inverse .card-footer{border-color:rgba(255,255,255,0.2)}.card-inverse .card-header,.card-inverse .card-footer,.card-inverse .card-title,.card-inverse .card-blockquote{color:#fff}.card-inverse .card-link,.card-inverse .card-text,.card-inverse .card-subtitle,.card-inverse .card-blockquote .blockquote-footer{color:rgba(255,255,255,0.65)}.card-inverse .card-link:focus,.card-inverse .card-link:hover{color:#fff}.card-blockquote{padding:0;margin-bottom:0;border-left:0}.card-img{border-radius:.25rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img-top{border-top-right-radius:.25rem;border-top-left-radius:.25rem}.card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}@media (min-width: 30rem){.card-deck{display:table;width:100%;margin-bottom:.75rem;table-layout:fixed;border-spacing:1.25rem 0}.card-deck .card{display:table-cell;margin-bottom:0;vertical-align:top}.card-deck-wrapper{margin-right:-1.25rem;margin-left:-1.25rem}}@media (min-width: 30rem){.card-group{display:table;width:100%;table-layout:fixed}.card-group .card{display:table-cell;vertical-align:top}.card-group .card+.card{margin-left:0;border-left:0}.card-group .card:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.card-group .card:first-child .card-img-top{border-top-right-radius:0}.card-group .card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group .card:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.card-group .card:last-child .card-img-top{border-top-left-radius:0}.card-group .card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group .card:not(:first-child):not(:last-child){border-radius:0}.card-group .card:not(:first-child):not(:last-child) .card-img-top,.card-group .card:not(:first-child):not(:last-child) .card-img-bottom{border-radius:0}}@media (min-width: 30rem){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:red;border-radius:.25rem}.breadcrumb::after{content:"";display:table;clear:both}.breadcrumb-item{float:left}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:red;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:red}.pagination{display:inline-block;padding-left:0;margin-top:1rem;margin-bottom:1rem;border-radius:.25rem}.page-item{display:inline}.page-item:first-child .page-link{margin-left:0;border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.page-item:last-child .page-link{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.page-item.active .page-link,.page-item.active .page-link:focus,.page-item.active .page-link:hover{z-index:2;color:#fff;cursor:default;background-color:#f99d53;border-color:#f99d53}.page-item.disabled .page-link,.page-item.disabled .page-link:focus,.page-item.disabled .page-link:hover{color:red;pointer-events:none;cursor:not-allowed;background-color:#fff;border-color:#ddd}.page-link{position:relative;float:left;padding:.5rem .75rem;margin-left:-1px;color:#f99d53;text-decoration:none;background-color:#fff;border:1px solid #ddd}.page-link:focus,.page-link:hover{color:#f67309;background-color:red;border-color:#ddd}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-bottom-left-radius:.3rem;border-top-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-bottom-right-radius:.3rem;border-top-right-radius:.3rem}.pagination-sm .page-link{padding:.275rem .75rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-bottom-left-radius:.2rem;border-top-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-bottom-right-radius:.2rem;border-top-right-radius:.2rem}.tag{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.tag:empty{display:none}.btn .tag{position:relative;top:-1px}a.tag:focus,a.tag:hover{color:#fff;text-decoration:none;cursor:pointer}.tag-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.tag-default{background-color:red}.tag-default[href]:focus,.tag-default[href]:hover{background-color:#c00}.tag-primary{background-color:#f99d53}.tag-primary[href]:focus,.tag-primary[href]:hover{background-color:#f78122}.tag-success{background-color:red}.tag-success[href]:focus,.tag-success[href]:hover{background-color:#c00}.tag-info{background-color:red}.tag-info[href]:focus,.tag-info[href]:hover{background-color:#c00}.tag-warning{background-color:red}.tag-warning[href]:focus,.tag-warning[href]:hover{background-color:#c00}.tag-danger{background-color:red}.tag-danger[href]:focus,.tag-danger[href]:hover{background-color:#c00}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:red;border-radius:.3rem}@media (min-width: 30rem){.jumbotron{padding:4rem 2rem}}.jumbotron-hr{border-top-color:#c00}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{padding:15px;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:bold}.alert-dismissible{padding-right:35px}.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d0e9c6;color:#3c763d}.alert-success hr{border-top-color:#c1e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bcdff1;color:#31708f}.alert-info hr{border-top-color:#a6d5ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faf2cc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7ecb5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebcccc;color:#a94442}.alert-danger hr{border-top-color:#e4b9b9}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:block;width:100%;height:1rem;margin-bottom:1rem}.progress[value]{background-color:#eee;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem}.progress[value]::-ms-fill{background-color:#0074d9;border:0}.progress[value]::-moz-progress-bar{background-color:#0074d9;border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.progress[value]::-webkit-progress-value{background-color:#0074d9;border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.progress[value="100"]::-moz-progress-bar{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.progress[value="100"]::-webkit-progress-value{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.progress[value]::-webkit-progress-bar{background-color:#eee;border-radius:.25rem;-webkit-box-shadow:inset 0 0.1rem 0.1rem rgba(0,0,0,0.1);box-shadow:inset 0 0.1rem 0.1rem rgba(0,0,0,0.1)}base::-moz-progress-bar,.progress[value]{background-color:#eee;border-radius:.25rem;box-shadow:inset 0 0.1rem 0.1rem rgba(0,0,0,0.1)}@media screen and (min-width: 0\0){.progress{background-color:#eee;border-radius:.25rem;-webkit-box-shadow:inset 0 0.1rem 0.1rem rgba(0,0,0,0.1);box-shadow:inset 0 0.1rem 0.1rem rgba(0,0,0,0.1)}.progress-bar{display:inline-block;height:1rem;text-indent:-999rem;background-color:#0074d9;border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.progress[width="100%"]{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}}.progress-striped[value]::-webkit-progress-value{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:1rem 1rem;background-size:1rem 1rem}.progress-striped[value]::-moz-progress-bar{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-striped[value]::-ms-fill{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}@media screen and (min-width: 0\0){.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:1rem 1rem;background-size:1rem 1rem}}.progress-animated[value]::-webkit-progress-value{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-animated[value]::-moz-progress-bar{animation:progress-bar-stripes 2s linear infinite}@media screen and (min-width: 0\0){.progress-animated .progress-bar-striped{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}}.progress-success[value]::-webkit-progress-value{background-color:red}.progress-success[value]::-moz-progress-bar{background-color:red}.progress-success[value]::-ms-fill{background-color:red}@media screen and (min-width: 0\0){.progress-success .progress-bar{background-color:red}}.progress-info[value]::-webkit-progress-value{background-color:red}.progress-info[value]::-moz-progress-bar{background-color:red}.progress-info[value]::-ms-fill{background-color:red}@media screen and (min-width: 0\0){.progress-info .progress-bar{background-color:red}}.progress-warning[value]::-webkit-progress-value{background-color:red}.progress-warning[value]::-moz-progress-bar{background-color:red}.progress-warning[value]::-ms-fill{background-color:red}@media screen and (min-width: 0\0){.progress-warning .progress-bar{background-color:red}}.progress-danger[value]::-webkit-progress-value{background-color:red}.progress-danger[value]::-moz-progress-bar{background-color:red}.progress-danger[value]::-ms-fill{background-color:red}@media screen and (min-width: 0\0){.progress-danger .progress-bar{background-color:red}}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden}.media-body{width:10000px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right{padding-left:10px}.media-left{padding-right:10px}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:0}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:.25rem;border-top-left-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:red;cursor:not-allowed;background-color:red}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:red}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;text-decoration:none;background-color:#f99d53;border-color:#f99d53}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#fff}.list-group-flush .list-group-item{border-radius:0}.list-group-item-action{width:100%;color:#555;text-align:inherit}.list-group-item-action .list-group-item-heading{color:#333}.list-group-item-action:focus,.list-group-item-action:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9{padding-bottom:42.85714%}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.embed-responsive-1by1{padding-bottom:100%}.close{float:right;font-size:1.5rem;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0;-webkit-overflow-scrolling:touch}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;-o-transition:transform .3s ease-out, -o-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out, -webkit-transform .3s ease-out, -o-transform .3s ease-out;-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%)}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.in{opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header::after{content:"";display:table;clear:both}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.5}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer::after{content:"";display:table;clear:both}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 30rem){.modal-dialog{max-width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{max-width:300px}}@media (min-width: 66.5rem){.modal-lg{max-width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.in{opacity:.9}.tooltip.tooltip-top,.tooltip.bs-tether-element-attached-bottom{padding:5px 0;margin-top:-3px}.tooltip.tooltip-top .tooltip-arrow,.tooltip.bs-tether-element-attached-bottom .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.tooltip-right,.tooltip.bs-tether-element-attached-left{padding:0 5px;margin-left:3px}.tooltip.tooltip-right .tooltip-arrow,.tooltip.bs-tether-element-attached-left .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.tooltip-bottom,.tooltip.bs-tether-element-attached-top{padding:5px 0;margin-top:3px}.tooltip.tooltip-bottom .tooltip-arrow,.tooltip.bs-tether-element-attached-top .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.tooltip-left,.tooltip.bs-tether-element-attached-right{padding:0 5px;margin-left:-3px}.tooltip.tooltip-left .tooltip-arrow,.tooltip.bs-tether-element-attached-right .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;padding:1px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;font-size:.875rem;word-wrap:break-word;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.popover-top,.popover.bs-tether-element-attached-bottom{margin-top:-10px}.popover.popover-top .popover-arrow,.popover.bs-tether-element-attached-bottom .popover-arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.popover-top .popover-arrow::after,.popover.bs-tether-element-attached-bottom .popover-arrow::after{bottom:1px;margin-left:-10px;content:"";border-top-color:#fff;border-bottom-width:0}.popover.popover-right,.popover.bs-tether-element-attached-left{margin-left:10px}.popover.popover-right .popover-arrow,.popover.bs-tether-element-attached-left .popover-arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.popover-right .popover-arrow::after,.popover.bs-tether-element-attached-left .popover-arrow::after{bottom:-10px;left:1px;content:"";border-right-color:#fff;border-left-width:0}.popover.popover-bottom,.popover.bs-tether-element-attached-top{margin-top:10px}.popover.popover-bottom .popover-arrow,.popover.bs-tether-element-attached-top .popover-arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.25)}.popover.popover-bottom .popover-arrow::after,.popover.bs-tether-element-attached-top .popover-arrow::after{top:1px;margin-left:-10px;content:"";border-top-width:0;border-bottom-color:#fff}.popover.popover-left,.popover.bs-tether-element-attached-right{margin-left:-10px}.popover.popover-left .popover-arrow,.popover.bs-tether-element-attached-right .popover-arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:rgba(0,0,0,0.25)}.popover.popover-left .popover-arrow::after,.popover.bs-tether-element-attached-right .popover-arrow::after{right:1px;bottom:-10px;content:"";border-right-width:0;border-left-color:#fff}.popover-title{padding:8px 14px;margin:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:.2375rem .2375rem 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover-arrow,.popover-arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover-arrow{border-width:11px}.popover-arrow::after{content:"";border-width:10px}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.carousel-item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.carousel-item>img,.carousel-inner>.carousel-item>a>img{line-height:1}@media all and (transform-3d), (-webkit-transform-3d){.carousel-inner>.carousel-item{-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;-o-transition:transform .6s ease-in-out, -o-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out, -webkit-transform .6s ease-in-out, -o-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.carousel-item.next,.carousel-inner>.carousel-item.active.right{left:0;-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0)}.carousel-inner>.carousel-item.prev,.carousel-inner>.carousel-item.active.left{left:0;-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0)}.carousel-inner>.carousel-item.next.left,.carousel-inner>.carousel-item.prev.right,.carousel-inner>.carousel-item.active{left:0;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);opacity:.5}.carousel-control.left{background-image:-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0.0001)));background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{right:0;left:auto;background-image:-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0.0001)), to(rgba(0,0,0,0.5)));background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next{position:absolute;top:50%;z-index:5;display:inline-block;width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-prev::before{content:"\2039"}.carousel-control .icon-next::before{content:"\203a"}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:transparent;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media (min-width: 30rem){.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .icon-prev{margin-left:-15px}.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.bg-inverse{background-color:red}.bg-faded{background-color:red}.bg-primary{color:#fff !important;background-color:#f99d53 !important}a.bg-primary:focus,a.bg-primary:hover{background-color:#f78122 !important}.bg-success{color:#fff !important;background-color:red !important}a.bg-success:focus,a.bg-success:hover{background-color:#c00 !important}.bg-info{color:#fff !important;background-color:red !important}a.bg-info:focus,a.bg-info:hover{background-color:#c00 !important}.bg-warning{color:#fff !important;background-color:red !important}a.bg-warning:focus,a.bg-warning:hover{background-color:#c00 !important}.bg-danger{color:#fff !important;background-color:red !important}a.bg-danger:focus,a.bg-danger:hover{background-color:#c00 !important}.clearfix::after{content:"";display:table;clear:both}.d-block{display:block !important}.d-inline-block{display:inline-block !important}.d-inline{display:inline !important}@media (min-width: 20rem){.pull-xs-left{float:left !important}.pull-xs-right{float:right !important}.pull-xs-none{float:none !important}}@media (min-width: 30rem){.pull-sm-left{float:left !important}.pull-sm-right{float:right !important}.pull-sm-none{float:none !important}}@media (min-width: 48rem){.pull-md-left{float:left !important}.pull-md-right{float:right !important}.pull-md-none{float:none !important}}@media (min-width: 66.5rem){.pull-lg-left{float:left !important}.pull-lg-right{float:right !important}.pull-lg-none{float:none !important}}@media (min-width: 86rem){.pull-xl-left{float:left !important}.pull-xl-right{float:right !important}.pull-xl-none{float:none !important}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.w-100{width:100% !important}.m-x-auto{margin-right:auto !important;margin-left:auto !important}.m-a-0{margin:0 0 !important}.m-t-0{margin-top:0 !important}.m-r-0{margin-right:0 !important}.m-b-0{margin-bottom:0 !important}.m-l-0{margin-left:0 !important}.m-x-0{margin-right:0 !important;margin-left:0 !important}.m-y-0{margin-top:0 !important;margin-bottom:0 !important}.m-a-1{margin:1rem 1rem !important}.m-t-1{margin-top:1rem !important}.m-r-1{margin-right:1rem !important}.m-b-1{margin-bottom:1rem !important}.m-l-1{margin-left:1rem !important}.m-x-1{margin-right:1rem !important;margin-left:1rem !important}.m-y-1{margin-top:1rem !important;margin-bottom:1rem !important}.m-a-2{margin:1.5rem 1.5rem !important}.m-t-2{margin-top:1.5rem !important}.m-r-2{margin-right:1.5rem !important}.m-b-2{margin-bottom:1.5rem !important}.m-l-2{margin-left:1.5rem !important}.m-x-2{margin-right:1.5rem !important;margin-left:1.5rem !important}.m-y-2{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-a-3{margin:3rem 3rem !important}.m-t-3{margin-top:3rem !important}.m-r-3{margin-right:3rem !important}.m-b-3{margin-bottom:3rem !important}.m-l-3{margin-left:3rem !important}.m-x-3{margin-right:3rem !important;margin-left:3rem !important}.m-y-3{margin-top:3rem !important;margin-bottom:3rem !important}.p-a-0{padding:0 0 !important}.p-t-0{padding-top:0 !important}.p-r-0{padding-right:0 !important}.p-b-0{padding-bottom:0 !important}.p-l-0{padding-left:0 !important}.p-x-0{padding-right:0 !important;padding-left:0 !important}.p-y-0{padding-top:0 !important;padding-bottom:0 !important}.p-a-1{padding:1rem 1rem !important}.p-t-1{padding-top:1rem !important}.p-r-1{padding-right:1rem !important}.p-b-1{padding-bottom:1rem !important}.p-l-1{padding-left:1rem !important}.p-x-1{padding-right:1rem !important;padding-left:1rem !important}.p-y-1{padding-top:1rem !important;padding-bottom:1rem !important}.p-a-2{padding:1.5rem 1.5rem !important}.p-t-2{padding-top:1.5rem !important}.p-r-2{padding-right:1.5rem !important}.p-b-2{padding-bottom:1.5rem !important}.p-l-2{padding-left:1.5rem !important}.p-x-2{padding-right:1.5rem !important;padding-left:1.5rem !important}.p-y-2{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-a-3{padding:3rem 3rem !important}.p-t-3{padding-top:3rem !important}.p-r-3{padding-right:3rem !important}.p-b-3{padding-bottom:3rem !important}.p-l-3{padding-left:3rem !important}.p-x-3{padding-right:3rem !important;padding-left:3rem !important}.p-y-3{padding-top:3rem !important;padding-bottom:3rem !important}.pos-f-t{position:fixed;top:0;right:0;left:0;z-index:1030}.text-justify{text-align:justify !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (min-width: 20rem){.text-xs-left{text-align:left !important}.text-xs-right{text-align:right !important}.text-xs-center{text-align:center !important}}@media (min-width: 30rem){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 48rem){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 66.5rem){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 86rem){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-normal{font-weight:normal}.font-weight-bold{font-weight:bold}.font-italic{font-style:italic}.text-muted{color:red !important}a.text-muted:focus,a.text-muted:hover{color:#c00}.text-primary{color:#f99d53 !important}a.text-primary:focus,a.text-primary:hover{color:#f78122}.text-success{color:red !important}a.text-success:focus,a.text-success:hover{color:#c00}.text-info{color:red !important}a.text-info:focus,a.text-info:hover{color:#c00}.text-warning{color:red !important}a.text-warning:focus,a.text-warning:hover{color:#c00}.text-danger{color:red !important}a.text-danger:focus,a.text-danger:hover{color:#c00}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.invisible{visibility:hidden !important}@media (min-width: 20rem){.hidden-xs-up{display:none !important}}@media (max-width: 29.99rem){.hidden-xs-down{display:none !important}}@media (min-width: 30rem){.hidden-sm-up{display:none !important}}@media (max-width: 47.99rem){.hidden-sm-down{display:none !important}}@media (min-width: 48rem){.hidden-md-up{display:none !important}}@media (max-width: 66.49rem){.hidden-md-down{display:none !important}}@media (min-width: 66.5rem){.hidden-lg-up{display:none !important}}@media (max-width: 85.99rem){.hidden-lg-down{display:none !important}}@media (min-width: 86rem){.hidden-xl-up{display:none !important}}.hidden-xl-down{display:none !important}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}code{font-family:"Source Code Pro", monospace}.version-picker .product__title,.search-results-title .product__title,.search-result-item-title .product__title,.index .product__card .product__title{font-family:"Muli", sans-serif}.banner__navigation-pane,.index .welcome h1,.index .highlight__container .highlight__title,.index .highlight__container .highlight__link{font-family:"Oswald", sans-serif}body,.index .welcome,.index .product__card{font-family:"GandhiSerif", serif;font-weight:400;font-style:normal}h3,h4,h5,h6,.blocknote .blocknote__title,.content-nav,.code-block__tab-set .code-block__tab a,.code-block__title,.selector__title,.table-of-contents__items{font-family:"OpenSans", verdana, arial, sans-serif;font-weight:400;font-style:normal}h1,h2,.front-matter__title{font-family:"OpenSans", verdana, arial, sans-serif;font-weight:300;font-style:normal}.selector__btn,.other__btn,.selector-list__element a{font-family:"OpenSans", verdana, arial, sans-serif;font-weight:700;font-style:normal}@font-face{font-family:"GandhiSerif";font-weight:400;font-style:normal;src:local("Gandhi Serif Regular"),local("GandhiSerif-Regular"),url("../fonts/gandhiserif-regular.woff") format("woff")}@font-face{font-family:"GandhiSerif";font-weight:400;font-style:italic;src:local("Gandhi Serif Italic"),local("GandhiSerif-Italic"),url("../fonts/gandhiserif-italic.woff") format("woff")}@font-face{font-family:"GandhiSerif";font-weight:700;font-style:normal;src:local("Gandhi Serif Bold"),local("GandhiSerif-Bold"),url("../fonts/gandhiserif-bold.woff") format("woff")}@font-face{font-family:"GandhiSerif";font-weight:700;font-style:italic;src:local("Gandhi Serif Bold Italic"),local("GandhiSerif-BoldItalic"),url("../fonts/gandhiserif-bolditalic.woff") format("woff")}@font-face{font-family:"OpenSans";font-weight:300;font-style:normal;src:local("Open Sans Light"),local("OpenSans-Light"),url("../fonts/opensans-light.woff") format("woff")}@font-face{font-family:"OpenSans";font-weight:400;font-style:normal;src:local("Open Sans Regular"),local("OpenSans"),url("../fonts/opensans-regular.woff") format("woff")}@font-face{font-family:"OpenSans";font-weight:400;font-style:italic;src:local("Open Sans Italic"),local("OpenSans-Italic"),url("../fonts/opensans-italic.woff") format("woff")}@font-face{font-family:"OpenSans";font-weight:700;font-style:normal;src:local("Open Sans Bold"),local("OpenSans-Bold"),url("../fonts/opensans-bold.woff") format("woff")}@font-face{font-family:"OpenSans";font-weight:700;font-style:italic;src:local("Open Sans Bold Italic"),local("OpenSans-BoldItalic"),url("../fonts/opensans-bolditalic.woff") format("woff")}@font-face{font-family:"DocsFontIcons";font-weight:normal;font-style:normal;src:local("DocsFontIcons Regular"),local("DocsFontIcons"),url("../fonts/docsfonticons.woff") format("woff")}.docs-icon--lambda:before,.docs-icon--lambda-bold:before,.docs-icon--beaker:before,.docs-icon--cog:before,.docs-icon--github-alt:before,.docs-icon--comments:before,.docs-icon--bolt:before,.docs-icon--question-sign:before,.docs-icon--tools:before,.docs-icon--search:before,.docs-icon--download-alt:before,.docs-icon--github:before,.docs-icon--reorder:before,.docs-icon--more:before,.docs-icon--riak:before,.docs-icon--database:before,.docs-icon--install:before,.docs-icon--cloud:before,.docs-icon--configure:before,.docs-icon--references:before,.docs-icon--time:before{font-family:'DocsFontIcons';font-style:normal;font-weight:normal;font-variant:normal;speak:none;text-transform:none;line-height:1}.docs-icon--lambda:before{content:"\e005"}.docs-icon--lambda-bold:before{content:"\e00b"}.docs-icon--beaker:before{content:"\f0c3"}.docs-icon--cog:before{content:"\f013"}.docs-icon--github-alt:before{content:"\e004"}.docs-icon--comments:before{content:"\e000"}.docs-icon--bolt:before{content:"\f0e7"}.docs-icon--question-sign:before{content:"\f059"}.docs-icon--tools:before{content:"\e001"}.docs-icon--search:before{content:"\f002"}.docs-icon--download-alt:before{content:"\f019"}.docs-icon--github:before{content:"\e009"}.docs-icon--reorder:before{content:"\f0c9"}.docs-icon--more:before{content:"\e002"}.docs-icon--riak:before{content:"\e003"}.docs-icon--database:before{content:"\e006"}.docs-icon--install:before{content:"\e007"}.docs-icon--cloud:before{content:"\e008"}.docs-icon--configure:before{content:"\e00a"}.docs-icon--references:before{content:"\f02d"}.docs-icon--time:before{content:"\f017"}.inline{display:inline !important}.block{display:block !important}.inline-block{display:inline-block !important}.table{display:table !important}.inline-table{display:inline-table !important}.table-row{display:table-row !important}.table-cell{display:table-cell !important}.hidden{display:none !important}.float-left{float:left}.float-right{float:right}.clear{clear:both}.clear-left{clear:left}.clear-right{clear:right}.overflow{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-scroll{overflow:scroll}.overflow-x{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-x-visible{overflow-x:visible}.overflow-x-scroll{overflow-x:scroll}.overflow-y{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.overflow-y-visible{overflow-y:visible}.overflow-y-scroll{overflow-y:scroll}.inline-only-xs{display:none !important}.block-only-xs{display:none !important}.inline-block-only-xs{display:none !important}@media (min-width: 20rem) and (max-width: 29.99rem){.inline-only-xs{display:inline !important}.block-only-xs{display:block !important}.inline-block-only-xs{display:inline-block !important}}.inline-only-sm{display:none !important}.block-only-sm{display:none !important}.inline-block-only-sm{display:none !important}@media (min-width: 30rem) and (max-width: 47.99rem){.inline-only-sm{display:inline !important}.block-only-sm{display:block !important}.inline-block-only-sm{display:inline-block !important}}.inline-only-md{display:none !important}.block-only-md{display:none !important}.inline-block-only-md{display:none !important}@media (min-width: 48rem) and (max-width: 66.49rem){.inline-only-md{display:inline !important}.block-only-md{display:block !important}.inline-block-only-md{display:inline-block !important}}.inline-only-lg{display:none !important}.block-only-lg{display:none !important}.inline-block-only-lg{display:none !important}@media (min-width: 66.5rem) and (max-width: 85.99rem){.inline-only-lg{display:inline !important}.block-only-lg{display:block !important}.inline-block-only-lg{display:inline-block !important}}.inline-only-xl{display:none !important}.block-only-xl{display:none !important}.inline-block-only-xl{display:none !important}@media (min-width: 86rem){.inline-only-xl{display:inline !important}.block-only-xl{display:block !important}.inline-block-only-xl{display:inline-block !important}}@media (min-width: 20rem){.float-left-xs-up{float:left}.float-right-xs-up{float:right}.float-none-xs-up{float:none}}@media (min-width: 30rem){.float-left-sm-up{float:left}.float-right-sm-up{float:right}.float-none-sm-up{float:none}}@media (min-width: 48rem){.float-left-md-up{float:left}.float-right-md-up{float:right}.float-none-md-up{float:none}}@media (min-width: 66.5rem){.float-left-lg-up{float:left}.float-right-lg-up{float:right}.float-none-lg-up{float:none}}@media (min-width: 86rem){.float-left-xl-up{float:left}.float-right-xl-up{float:right}.float-none-xl-up{float:none}}@media (max-width: 29.99rem){.float-left-xs-down{float:left}.float-right-xs-down{float:right}.float-none-xs-down{float:none}}@media (max-width: 47.99rem){.float-left-sm-down{float:left}.float-right-sm-down{float:right}.float-none-sm-down{float:none}}@media (max-width: 66.49rem){.float-left-md-down{float:left}.float-right-md-down{float:right}.float-none-md-down{float:none}}@media (max-width: 85.99rem){.float-left-lg-down{float:left}.float-right-lg-down{float:right}.float-none-lg-down{float:none}}.float-left-xl-down{float:left}.float-right-xl-down{float:right}.float-none-xl-down{float:none}.hide-text{overflow:hidden;padding:0;text-indent:101%;white-space:nowrap}.visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.hljs{background:#f7f7f7;color:#454d54}.hljs-comment,.hljs-quote{color:#9199a1;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-addition{color:#6c8997;font-weight:bold}.hljs-number,.hljs-string,.hljs-params,.hljs-meta .hljs-meta-string,.hljs-literal,.hljs-doctag,.hljs-regexp{color:#dc7d00}.hljs-title,.hljs-section,.hljs-name,.hljs-selector-id,.hljs-selector-class{color:#79aeb6}.hljs-attribute,.hljs-attr,.hljs-variable,.hljs-template-variable,.hljs-class .hljs-title,.hljs-type{color:#597471}.hljs-symbol,.hljs-bullet,.hljs-subst,.hljs-meta,.hljs-meta .hljs-keyword,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-link{color:#f99d53}.hljs-built_in,.hljs-deletion{color:#ee6201}.hljs-formula{background:#ebebeb}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}html{font-size:initial}body{color:#454d54}main{font-size:110%}code{color:#454d54;background:#e3e6e8;border-radius:.25rem;padding:0.1rem 0.25rem;-webkit-transition:color 150ms ease-in;-o-transition:color 150ms ease-in;transition:color 150ms ease-in}a{color:#337ab7;text-decoration:underline;cursor:pointer;-webkit-transition:color 150ms ease-in;-o-transition:color 150ms ease-in;transition:color 150ms ease-in}a:not([href]):hover,a:not([href]):active,a:not([href]):focus{cursor:default}a code{color:#337ab7}a:hover,a:active,a:focus{color:#e78505;text-decoration:underline}a:hover code,a:active code,a:focus code{color:#e78505}.main-article a[href^="http://"],.main-article a[href^="https://"]{display:inline-block}.main-article a[href^="http://"]::after,.main-article a[href^="https://"]::after{content:"";display:inline-block;text-align:left;width:.75rem;height:.625rem;margin-right:-.0625rem;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAUklEQVR42m3O0QkAMQgD0JvWNZzDndwpRz5SepcIQWof6APgk+5GiKOZwa8EHTMGqwp3ONzdDFUXYufbYES6WVCfHB7EuW5mF7R1goqgVYQhBl+awCunCZHg2gAAAABJRU5ErkJggg==") no-repeat right}.main-article a[href$=".pdf"],.main-article a[href$=".PDF"]{display:inline-block}.main-article a[href$=".pdf"]::after,.main-article a[href$=".PDF"]::after{content:"";display:inline-block;width:1rem;height:1rem;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAEJGlDQ1BJQ0MgUHJvZmlsZQAAOBGFVd9v21QUPolvUqQWPyBYR4eKxa9VU1u5GxqtxgZJk6XtShal6dgqJOQ6N4mpGwfb6baqT3uBNwb8AUDZAw9IPCENBmJ72fbAtElThyqqSUh76MQPISbtBVXhu3ZiJ1PEXPX6yznfOec7517bRD1fabWaGVWIlquunc8klZOnFpSeTYrSs9RLA9Sr6U4tkcvNEi7BFffO6+EdigjL7ZHu/k72I796i9zRiSJPwG4VHX0Z+AxRzNRrtksUvwf7+Gm3BtzzHPDTNgQCqwKXfZwSeNHHJz1OIT8JjtAq6xWtCLwGPLzYZi+3YV8DGMiT4VVuG7oiZpGzrZJhcs/hL49xtzH/Dy6bdfTsXYNY+5yluWO4D4neK/ZUvok/17X0HPBLsF+vuUlhfwX4j/rSfAJ4H1H0qZJ9dN7nR19frRTeBt4Fe9FwpwtN+2p1MXscGLHR9SXrmMgjONd1ZxKzpBeA71b4tNhj6JGoyFNp4GHgwUp9qplfmnFW5oTdy7NamcwCI49kv6fN5IAHgD+0rbyoBc3SOjczohbyS1drbq6pQdqumllRC/0ymTtej8gpbbuVwpQfyw66dqEZyxZKxtHpJn+tZnpnEdrYBbueF9qQn93S7HQGGHnYP7w6L+YGHNtd1FJitqPAR+hERCNOFi1i1alKO6RQnjKUxL1GNjwlMsiEhcPLYTEiT9ISbN15OY/jx4SMshe9LaJRpTvHr3C/ybFYP1PZAfwfYrPsMBtnE6SwN9ib7AhLwTrBDgUKcm06FSrTfSj187xPdVQWOk5Q8vxAfSiIUc7Z7xr6zY/+hpqwSyv0I0/QMTRb7RMgBxNodTfSPqdraz/sDjzKBrv4zu2+a2t0/HHzjd2Lbcc2sG7GtsL42K+xLfxtUgI7YHqKlqHK8HbCCXgjHT1cAdMlDetv4FnQ2lLasaOl6vmB0CMmwT/IPszSueHQqv6i/qluqF+oF9TfO2qEGTumJH0qfSv9KH0nfS/9TIp0Wboi/SRdlb6RLgU5u++9nyXYe69fYRPdil1o1WufNSdTTsp75BfllPy8/LI8G7AUuV8ek6fkvfDsCfbNDP0dvRh0CrNqTbV7LfEEGDQPJQadBtfGVMWEq3QWWdufk6ZSNsjG2PQjp3ZcnOWWing6noonSInvi0/Ex+IzAreevPhe+CawpgP1/pMTMDo64G0sTCXIM+KdOnFWRfQKdJvQzV1+Bt8OokmrdtY2yhVX2a+qrykJfMq4Ml3VR4cVzTQVz+UoNne4vcKLoyS+gyKO6EHe+75Fdt0Mbe5bRIf/wjvrVmhbqBN97RD1vxrahvBOfOYzoosH9bq94uejSOQGkVM6sN/7HelL4t10t9F4gPdVzydEOx83Gv+uNxo7XyL/FtFl8z9ZAHF4bBsrEwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAlVJREFUKBWNUUtrE1EU/uaRkIehWAilWtJUBdPiLi7EjUJdxIWLbnSThX9A/BGCVGs24k4qNNSdaDa6kqJ14cKQohAtahJJwce0eZFkkjuv6zk36kYEL5yZO3fO9zjfhfy/5f1qu0pvUJma63qyXq+h027DMAzYoxGEEOj1evB9X9VgMJDD4VDL5/NIJpPLALbAh++rVekIIR3H+auIRIk1Go2gUCjIZrPJ3yd1QkPXdfhBAAIrNWKHbduqeM8OqFnLZDIolUpotVq7CshgTdPgep6yxnuNyEaVHRzcvQfxw0IqnUYul0MikQA5g8lz8FwBK9KBxiw0K8ZjiO1tOLUGrEoFsWgEU5Ho5D+1/FFkoAqD3i5Zc0jRXszA+/gJAZELIg0CXzljbp2bKSB1wHsmcKnJpdjDqRT0E8chj85C0MxBIHkmxk0UJTUzgIuDUHsikaEwhg+LsB9swOt2MfZc9Dpd9V+nGFSiDGBFJnG5+n045TKmVm8hRA7kkxI0chYQWND8pk++OXperMRADkejhGWtDufCMvSFBXhXLuPL/U3MTifQrn6AqRD0oHtSQNowA4TrwrEs6Ku34dsjmNeuI76UgfF8C7FwGCYDTFIImaYC8v2pa3n0GOE3O9AvXcT4/DmI6cNIzs3hGxGeWVmZAJt7e8hms5gnS/16HdaNm/CquzhSXIdMz8MhxVg8ptI/2N+HQSJmNBpVB3fW1uAfiuPsq9cwyu/w+fQpfC1uwOp0oJH1306SMzOIRCJqNnJLiy6JV+vpM/n22KL8/uKl+v7X4yd/uu5KwdHdQAAAAABJRU5ErkJggg==") no-repeat right}h1{color:red;line-height:initial;font-size:initial;margin-top:initial;margin-bottom:initial}h2{color:#636567;line-height:1.2;font-size:2.30rem;margin-top:3.00rem;padding-bottom:1.00rem}h3{color:#636567;line-height:1.2;font-size:1.70rem;margin-top:1.75rem;padding-bottom:0.50rem}h4{color:#636567;line-height:1.2;font-size:1.50rem;margin-top:1.25rem;padding-bottom:0.50rem}h5{color:#636567;line-height:1.2;font-size:1.30rem;margin-top:0.00rem;padding-bottom:0.50rem}h6{color:#636567;line-height:1.2;font-size:1.25rem;margin-top:0.00rem;padding-bottom:0.50rem}h1,h2,h3,h4,h5,h6{margin-bottom:0}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:#636567;text-decoration:none}h1 a code,h2 a code,h3 a code,h4 a code,h5 a code,h6 a code{color:#636567}h1 a:hover,h1 a:active,h1 a:focus,h2 a:hover,h2 a:active,h2 a:focus,h3 a:hover,h3 a:active,h3 a:focus,h4 a:hover,h4 a:active,h4 a:focus,h5 a:hover,h5 a:active,h5 a:focus,h6 a:hover,h6 a:active,h6 a:focus{color:#636567;text-decoration:none}h1 a:hover code,h1 a:active code,h1 a:focus code,h2 a:hover code,h2 a:active code,h2 a:focus code,h3 a:hover code,h3 a:active code,h3 a:focus code,h4 a:hover code,h4 a:active code,h4 a:focus code,h5 a:hover code,h5 a:active code,h5 a:focus code,h6 a:hover code,h6 a:active code,h6 a:focus code{color:#636567}h1 a a:hover,h1 a a:active,h1 a a:focus,h2 a a:hover,h2 a a:active,h2 a a:focus,h3 a a:hover,h3 a a:active,h3 a a:focus,h4 a a:hover,h4 a a:active,h4 a a:focus,h5 a a:hover,h5 a a:active,h5 a a:focus,h6 a a:hover,h6 a a:active,h6 a a:focus{color:#e78505}hr{border-top:1px dashed #d4d9de}blockquote{font-size:90%;margin-left:2rem;border-left:0.25rem solid #b8bfc7;padding-left:1rem;margin-top:1.5rem;margin-right:1rem}.blocknote{font-size:90%;background:#e1eef4;border-radius:.5rem;border:1px solid #bcd6d0;padding:1rem 1rem 1rem 1rem;margin:1.5rem}.blocknote p:last-of-type{margin-bottom:0}.blocknote .blocknote__title{font-size:110%;padding-bottom:0.25rem}@media (min-width: 48rem){.blocknote{margin-right:1rem}}pre code{display:block;overflow-x:auto;border-radius:.3rem;font-size:90%;color:#454d54;background:#f7f7f7;border:1px solid #b8bfc7;padding:0.5rem 1rem}pre+pre{display:none}ol,ul,dt{margin-bottom:1rem;padding-left:2.5rem}table{margin-top:1rem;margin-bottom:1rem}table code{background:transparent;padding:0;font-size:95%}table caption{color:#454d54}thead{border-bottom:1px solid #454d54}th{padding:0.25rem 0.5rem}td{padding:0.5rem;vertical-align:top}.main-article img{max-width:100%}::-moz-selection{background:#feca87}::selection{background:#feca87}.content-nav{position:fixed;z-index:200;width:100%;top:3.5rem;bottom:0;left:-200%;-webkit-transition:left 200ms ease-in-out 50ms;-o-transition:left 200ms ease-in-out 50ms;transition:left 200ms ease-in-out 50ms}@media (max-width: 47.99rem){.content-nav.content-nav--fullscreen{left:0}}@media (min-width: 48rem){.content-nav{top:4.5rem;bottom:2rem;left:1rem;width:13rem}}@media (min-width: 66.5rem){.content-nav{width:15rem}}.banner{position:fixed;z-index:400;top:0;left:0;right:0;height:3.5rem}@media (min-width: 48rem){.banner{left:0;height:4.5rem}}.content-well{width:100%;padding-top:3.5rem}@media (min-width: 48rem){.content-well{padding-top:4.5rem;padding-right:0.5rem;margin-right:auto;padding-left:16rem;max-width:62.5rem}}@media (min-width: 66.5rem){.content-well{padding-left:19rem;max-width:65.5rem}}@media (min-width: 86rem){.content-well{padding-left:20.5rem;max-width:78rem}}@media (max-width: 47.99rem){.content-well.content-well--immobile{position:fixed;overflow:hidden}}.main-article{padding:.5rem 0.5rem 0 0.5rem}@media (min-width: 48rem){.main-article{padding-top:.5rem}}@media (max-width: 47.99rem){.ERROR404 .main-article{text-align:center}}.main-article main{position:relative;z-index:100}.main-article main h1,.main-article main h2,.main-article main h3,.main-article main h4,.main-article main h5,.main-article main h6{position:relative}.main-article main h1:before,.main-article main h2:before,.main-article main h3:before,.main-article main h4:before,.main-article main h5:before,.main-article main h6:before{display:block;visibility:hidden;content:" ";height:0;margin-top:-4rem;padding-top:4rem}@media (min-width: 48rem){.main-article main h1:before,.main-article main h2:before,.main-article main h3:before,.main-article main h4:before,.main-article main h5:before,.main-article main h6:before{margin-top:-5rem;padding-top:5rem}}.main-article main h1{z-index:-1}.main-article main h2{z-index:-2}.main-article main h3{z-index:-3}.main-article main h4{z-index:-4}.main-article main h5{z-index:-5}.main-article main h6{z-index:-6}.banner{padding:0 1rem 0 1.25rem;background:#f7f7f7;-webkit-box-shadow:0 0 1.5rem 0 rgba(0,0,0,0.4);box-shadow:0 0 1.5rem 0 rgba(0,0,0,0.4)}@media (min-width: 48rem){.banner{background:#ededf0;padding:0 0 0 1.5rem}}.banner__docs-logo{position:relative;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%)}.banner__docs-logo .docs-logo__image{width:9.375rem;height:auto}@media (min-width: 48rem){.banner__docs-logo{position:static;top:initial;-webkit-transform:none;-ms-transform:none;-o-transform:none;transform:none;padding-top:1.25rem}.banner__docs-logo .docs-logo__image{width:10.1875rem;height:auto}}.banner__menu-bars{height:100%}.banner__menu-bars .menu-bars{font-size:2.5rem;position:relative;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%)}.banner__navigation-pane{text-transform:uppercase;height:100%}.banner__navigation-pane a{text-decoration:none}.banner__intra-brand__width-wrapper{position:relative;width:100%;margin-bottom:.4rem;padding-left:7rem}@media (min-width: 66.5rem){.banner__intra-brand__width-wrapper{padding-left:11rem;max-width:53.8125rem}}@media (min-width: 86rem){.banner__intra-brand__width-wrapper{padding-left:13.5rem;max-width:66.3125rem}}.index .banner__intra-brand__width-wrapper{max-width:none}.banner__intra-brand__width-wrapper::after{display:block;content:"";position:absolute;left:100%;height:2rem;width:2000rem;background:#6b737a}.banner__intra-brand{background:#6b737a;width:100%;height:2rem}.banner__intra-brand::before{display:inline-block;content:"";border:0px solid transparent;border-bottom-width:2rem;border-right-width:1.5rem;border-bottom-color:#ededf0}.banner__intra-brand .banner__brand-link{font-size:90%;color:#e3e6e8;height:2rem;padding-top:0.35rem;padding-right:1rem;padding-left:1rem}.banner__intra-brand .banner__brand-link:first-of-type{margin-left:3rem}.banner__intra-brand .banner__brand-link:last-of-type{margin-right:1.25rem}.banner__intra-brand .banner__brand-link:hover,.banner__intra-brand .banner__brand-link:active,.banner__intra-brand .banner__brand-link:focus{color:#bcd6d0}.banner__intra-site__width-wrapper{width:100%}@media (min-width: 66.5rem){.banner__intra-site__width-wrapper{max-width:53.8125rem}}@media (min-width: 86rem){.banner__intra-site__width-wrapper{max-width:66.3125rem}}.banner__intra-site{height:2.1rem}.banner__intra-site .banner__brand-link{font-size:110%;color:#e78505;height:100%;padding-left:1.25rem;padding-right:1.25rem;margin-right:0.5rem;-webkit-transition:color 200ms ease-in, background 200ms ease-in;-o-transition:color 200ms ease-in, background 200ms ease-in;transition:color 200ms ease-in, background 200ms ease-in}.banner__intra-site .banner__brand-link:last-of-type{margin-right:1rem}.banner__intra-site .banner__brand-link:hover,.banner__intra-site .banner__brand-link:active,.banner__intra-site .banner__brand-link:focus{color:#636567;background:#e0e0e3}.banner__intra-site .banner__brand-link.banner__brand-link--current{color:#636567;background:#e0e0e3}.content-nav{color:#788087}@media (min-width: 20rem) and (max-width: 29.99rem){.content-nav{font-size:100%}}@media (min-width: 30rem) and (max-width: 47.99rem){.content-nav{font-size:100%}}@media (min-width: 48rem) and (max-width: 66.49rem){.content-nav{font-size:80%}}@media (min-width: 66.5rem) and (max-width: 85.99rem){.content-nav{font-size:90%}}@media (min-width: 86rem){.content-nav{font-size:90%}}.no-js .content-nav{display:none !important}.content-nav__fixed-top{position:fixed;width:inherit;padding-top:.5rem;background:#f7f7f7;-webkit-box-shadow:-0.125rem -0.125rem 2rem -0.25rem rgba(0,0,0,0.8);box-shadow:-0.125rem -0.125rem 2rem -0.25rem rgba(0,0,0,0.8);-webkit-transition:height 500ms ease;-o-transition:height 500ms ease;transition:height 500ms ease}.content-nav--top-size-full .content-nav__fixed-top{height:8rem}.content-nav--top-size-half .content-nav__fixed-top{height:4rem}@media (min-width: 48rem){.content-nav__fixed-top{z-index:1;width:12.75rem;padding-left:0.5rem;padding-right:0.5rem;padding-top:1rem;-webkit-box-shadow:-0.125rem -0.125rem 2rem -0.25rem rgba(0,0,0,0.2);box-shadow:-0.125rem -0.125rem 2rem -0.25rem rgba(0,0,0,0.2)}.content-nav--top-size-full .content-nav__fixed-top{height:7.5rem}.content-nav--top-size-half .content-nav__fixed-top{height:4.5rem}}@media (min-width: 66.5rem){.content-nav__fixed-top{width:14.75rem;padding-top:1rem}.content-nav--top-size-full .content-nav__fixed-top{height:7.75rem}.content-nav--top-size-half .content-nav__fixed-top{height:4.5rem}}.version-picker,.search-results-title,.search-result-item-title{margin:0.5rem 0.75rem 0.5rem 0.75rem}@media (min-width: 48rem){.version-picker,.search-results-title,.search-result-item-title{margin-left:0.25rem;margin-right:0.25rem}}.version-picker .product__title,.search-results-title .product__title,.search-result-item-title .product__title{font-size:2.20em;font-weight:700;line-height:1;margin-top:0.3em;color:#788087;text-transform:lowercase;text-decoration:none;-webkit-transition:color 500ms ease;-o-transition:color 500ms ease;transition:color 500ms ease}@media (min-width: 48rem){.version-picker .product__title,.search-results-title .product__title,.search-result-item-title .product__title{margin-top:0.35em}}@media (min-width: 66.5rem){.version-picker .product__title,.search-results-title .product__title,.search-result-item-title .product__title{font-size:2.40em;margin-top:0.25em}}.version-picker .product__title .product__logo,.search-results-title .product__title .product__logo,.search-result-item-title .product__title .product__logo{height:0.60em;width:0.60em;margin-bottom:0.10em}.version-picker .product__title .product__title-highlight,.search-results-title .product__title .product__title-highlight,.search-result-item-title .product__title .product__title-highlight{color:#fcc074;text-transform:uppercase;font-size:70.5%;font-weight:400;-webkit-transition:color 500ms ease;-o-transition:color 500ms ease;transition:color 500ms ease}.version-picker .product__title:hover,.version-picker .product__title:active,.version-picker .product__title:focus,.search-results-title .product__title:hover,.search-results-title .product__title:active,.search-results-title .product__title:focus,.search-result-item-title .product__title:hover,.search-result-item-title .product__title:active,.search-result-item-title .product__title:focus{color:#636567}.version-picker .product__title:hover .product__title-highlight,.version-picker .product__title:active .product__title-highlight,.version-picker .product__title:focus .product__title-highlight,.search-results-title .product__title:hover .product__title-highlight,.search-results-title .product__title:active .product__title-highlight,.search-results-title .product__title:focus .product__title-highlight,.search-result-item-title .product__title:hover .product__title-highlight,.search-result-item-title .product__title:active .product__title-highlight,.search-result-item-title .product__title:focus .product__title-highlight{color:#f99d53}.content-nav__primary__sizing-box{position:relative;height:100%;-webkit-transition:top 500ms ease, padding-bottom 500ms ease;-o-transition:top 500ms ease, padding-bottom 500ms ease;transition:top 500ms ease, padding-bottom 500ms ease}.content-nav--top-size-full .content-nav__primary__sizing-box{top:8.5rem;padding-bottom:8.5rem}.content-nav--top-size-half .content-nav__primary__sizing-box{top:4.5rem;padding-bottom:4.5rem}@media (min-width: 48rem){.content-nav--top-size-full .content-nav__primary__sizing-box{top:8.5rem;padding-bottom:8.5rem}.content-nav--top-size-half .content-nav__primary__sizing-box{top:5.5rem;padding-bottom:5.5rem}}@media (min-width: 66.5rem){.content-nav--top-size-full .content-nav__primary__sizing-box{top:8.75rem;padding-bottom:8.75rem}.content-nav--top-size-half .content-nav__primary__sizing-box{top:5.5rem;padding-bottom:5.5rem}}.content-nav__primary__shadow-box{-webkit-box-shadow:-0.25rem -0.25rem 4rem -0.5rem rgba(0,0,0,0.8);box-shadow:-0.25rem -0.25rem 4rem -0.5rem rgba(0,0,0,0.8);height:100%}@media (min-width: 48rem){.content-nav__primary__shadow-box{-webkit-box-shadow:-0.25rem -0.25rem 4rem -0.5rem rgba(0,0,0,0.2);box-shadow:-0.25rem -0.25rem 4rem -0.5rem rgba(0,0,0,0.2)}}.content-nav__primary{background:#f7f7f7;height:100%}.content-nav__menu-container{min-height:100%;padding-bottom:8.0625rem}.content-nav__fixed-bottom{height:8.0625rem;margin-top:-8.0625rem;font-size:90%;line-height:1.1rem;background:#9199a1}.footer{padding:1rem .25rem 0rem .25rem;margin-top:2rem;font-size:80%;line-height:1.2;text-align:center;color:#9199a1;border-top:1px solid #d4d9de}@media (min-width: 48rem){.footer{padding:2rem 1rem 1rem 1rem;margin-top:0}}.footer a{color:#9199a1}.footer a:hover,.footer a:active,.footer a:focus{color:#79aeb6}.index .footer{position:relative;padding-top:2rem;margin-top:0}@media (min-width: 66.5rem){.index .footer{text-align:center}}@media (min-width: 48rem){.footer__attributions{text-align:center}}.footer__social{margin:0 0.5rem 1.5rem 0.5rem}@media (min-width: 48rem){.footer__social{margin-bottom:0}}@media (min-width: 66.5rem){.footer__social{position:absolute;right:0;top:0;margin-top:2.2rem;margin-right:2.0rem}}@font-face{font-family:"anchorjs-icons";src:url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype")}.anchor-icon::after{-webkit-transition:opacity 100ms ease-in;-o-transition:opacity 100ms ease-in;transition:opacity 100ms ease-in;opacity:0;font-family:'anchorjs-icons';font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;content:"\e9cb";padding-left:0.2em;vertical-align:bottom;font-size:1.2em}.anchor-icon:hover::after,.anchor-icon:active::after,.anchor-icon:focus::after{opacity:1}.code-block__tab-set-wrapper{position:relative}.code-block__tab-set-wrapper .edge-fader{font-size:1rem;width:2rem;height:100%}.code-block__tab-set{white-space:nowrap;list-style:none;padding:0 2rem;margin:0 0 0.5rem 0}.code-block__tab-set .code-block__tab a{text-transform:uppercase;font-size:90%;color:#f99d53;text-decoration:none;border-radius:.25rem;padding:0.5rem 0.5rem;margin-right:0.25rem;-webkit-transition:background-color 200ms ease 50ms, color 200ms ease 50ms;-o-transition:background-color 200ms ease 50ms, color 200ms ease 50ms;transition:background-color 200ms ease 50ms, color 200ms ease 50ms}.code-block__tab-set .code-block__tab a:hover,.code-block__tab-set .code-block__tab a:active,.code-block__tab-set .code-block__tab a:focus{background:#f7f7f7;color:#6c8997;text-decoration:none}.code-block__tab-set .code-block__tab--active a{color:#636567;cursor:default;background:#f7f7f7}.code-block__tab-set .code-block__tab--active a:hover,.code-block__tab-set .code-block__tab--active a:active,.code-block__tab-set .code-block__tab--active a:focus{color:#636567}.code-block__title{text-transform:uppercase;font-size:90%;color:#636567;border-radius:.25rem;padding:0.5rem 0.75rem;margin:0 0 0.25rem 0.75rem;background:#f7f7f7}.content-menu{display:none;margin:0;padding-left:0;list-style:none;margin-top:-0.3rem;padding-top:0.3rem}.content-menu.content-menu--depth-0{margin-top:0;padding-top:0}.content-menu.content-menu--open{display:block}.content-menu.content-menu--depth-0>li{-webkit-box-shadow:0 -0.2rem 0.7rem -0.2rem rgba(0,0,0,0.1);box-shadow:0 -0.2rem 0.7rem -0.2rem rgba(0,0,0,0.1)}.content-menu__link--depth-1{padding-left:1.75rem}@media (min-width: 48rem){.content-menu__link--depth-1{padding-left:1.125rem}}.content-menu__link--depth-2{padding-left:2.50rem}@media (min-width: 48rem){.content-menu__link--depth-2{padding-left:1.625rem}}.content-menu__link--depth-3{padding-left:3.25rem}@media (min-width: 48rem){.content-menu__link--depth-3{padding-left:2.125rem}}.content-menu__link--depth-4{padding-left:4.00rem}@media (min-width: 48rem){.content-menu__link--depth-4{padding-left:2.625rem}}.content-menu__link--depth-5{padding-left:4.75rem}@media (min-width: 48rem){.content-menu__link--depth-5{padding-left:3.125rem}}.content-menu__download-entry{background:#ffd195;-webkit-transition:background 500ms ease;-o-transition:background 500ms ease;transition:background 500ms ease}.content-menu__download-entry:hover,.content-menu__download-entry:active,.content-menu__download-entry:focus{background:#fcc074}.content-menu__blank-entry{margin-top:0.25rem;height:1rem;margin-bottom:-1rem}.content-menu__item{margin-left:0;margin-right:0;color:#788087}.content-menu__item:hover,.content-menu__item:active,.content-menu__item:focus{color:#454d54}.content-menu__item a{padding-top:.6rem;padding-bottom:0.65rem;color:inherit;text-decoration:none}.content-menu__item>.content-menu__menu-toggle+a>.content-menu__item__right-border{width:100%;padding-right:0.5rem;border-right:1px solid #e3e6e8}.content-menu__item--selected{background:#79aeb6;color:#f0f2f5;-webkit-box-shadow:0 0 1rem -0.2rem rgba(0,0,0,0.4);box-shadow:0 0 1rem -0.2rem rgba(0,0,0,0.4)}.content-menu__item--selected:hover,.content-menu__item--selected:active,.content-menu__item--selected:focus{color:#f0f2f5}.content-menu__item--selected>.content-menu__menu-toggle+a{border-right-color:#f0f2f5}.content-menu__icon-container{text-align:right;margin-left:1rem;margin-right:0.25rem;padding-top:.6rem;padding-bottom:0.2rem;color:inherit;-webkit-transition:color 500ms ease;-o-transition:color 500ms ease;transition:color 500ms ease}.content-menu__icon-container:before{display:inline-block;width:1.25rem;padding-right:0.5rem}.content-menu__menu-toggle{width:3.0rem;padding-left:0.4rem;text-align:center;padding-top:.6rem;padding-bottom:0.2rem;cursor:pointer}@media (min-width: 48rem){.content-menu__menu-toggle{width:1.85rem;padding-left:0.20rem}}.content-menu__menu-toggle:after{display:inline-block;content:"";-webkit-transition:border-color 500ms ease;-o-transition:border-color 500ms ease;transition:border-color 500ms ease;width:.875rem;height:.875rem;border:.4375rem solid transparent;border-top:.4375rem solid #9199a1;border-bottom:0 none #1f262e;-webkit-transform:translate(0%, 25%);-ms-transform:translate(0%, 25%);-o-transform:translate(0%, 25%);transform:translate(0%, 25%)}.content-menu__item--selected .content-menu__menu-toggle:after{width:.875rem;height:.875rem;border:.4375rem solid transparent;border-top:.4375rem solid #f0f2f5;border-bottom:0 none #1f262e;-webkit-transform:translate(0%, 25%);-ms-transform:translate(0%, 25%);-o-transform:translate(0%, 25%);transform:translate(0%, 25%)}.content-menu__menu-toggle.content-menu__menu-toggle--open:after{width:.875rem;height:.875rem;border:.4375rem solid transparent;border-bottom:.4375rem solid #9199a1;border-top:0 none #1f262e;-webkit-transform:translate(0%, -25%);-ms-transform:translate(0%, -25%);-o-transform:translate(0%, -25%);transform:translate(0%, -25%)}.content-menu__item--selected .content-menu__menu-toggle.content-menu__menu-toggle--open:after{width:.875rem;height:.875rem;border:.4375rem solid transparent;border-bottom:.4375rem solid #f0f2f5;border-top:0 none #1f262e;-webkit-transform:translate(0%, -25%);-ms-transform:translate(0%, -25%);-o-transform:translate(0%, -25%);transform:translate(0%, -25%)}@media (min-width: 48rem){.content-menu__menu-toggle:after{width:.625rem;height:.625rem;border:.3125rem solid transparent;border-top:.3125rem solid #9199a1;border-bottom:0 none #1f262e;-webkit-transform:translate(0%, 25%);-ms-transform:translate(0%, 25%);-o-transform:translate(0%, 25%);transform:translate(0%, 25%)}.content-menu__item--selected .content-menu__menu-toggle:after{width:.625rem;height:.625rem;border:.3125rem solid transparent;border-top:.3125rem solid #f0f2f5;border-bottom:0 none #1f262e;-webkit-transform:translate(0%, 25%);-ms-transform:translate(0%, 25%);-o-transform:translate(0%, 25%);transform:translate(0%, 25%)}.content-menu__menu-toggle.content-menu__menu-toggle--open:after{width:.625rem;height:.625rem;border:.3125rem solid transparent;border-bottom:.3125rem solid #9199a1;border-top:0 none #1f262e;-webkit-transform:translate(0%, -25%);-ms-transform:translate(0%, -25%);-o-transform:translate(0%, -25%);transform:translate(0%, -25%)}.content-menu__item--selected .content-menu__menu-toggle.content-menu__menu-toggle--open:after{width:.625rem;height:.625rem;border:.3125rem solid transparent;border-bottom:.3125rem solid #f0f2f5;border-top:0 none #1f262e;-webkit-transform:translate(0%, -25%);-ms-transform:translate(0%, -25%);-o-transform:translate(0%, -25%);transform:translate(0%, -25%)}}.content-nav__fixed-bottom .content-menu{display:block;padding-top:0;margin-top:0}.content-nav__fixed-bottom .content-menu>li{-webkit-box-shadow:0 -0.2rem 0.7rem -0.2rem rgba(0,0,0,0.2);box-shadow:0 -0.2rem 0.7rem -0.2rem rgba(0,0,0,0.2)}.content-nav__fixed-bottom .content-menu__item{color:#e3e6e8}.content-nav__fixed-bottom .content-menu__item:hover,.content-nav__fixed-bottom .content-menu__item:active,.content-nav__fixed-bottom .content-menu__item:focus{color:#f0f2f5}.content-nav__fixed-bottom .content-menu__item a{padding-top:0;padding-bottom:0.5rem}.content-nav__fixed-bottom .content-menu__icon-container{margin-left:0.5rem}.edge-fader{width:0%;height:0%;font-size:1rem;position:absolute}.edge-fader--left{left:0;background:-webkit-gradient(linear, right top, left top, from(rgba(255,255,255,0.8)), color-stop(80%, #fff));background:-webkit-linear-gradient(right, rgba(255,255,255,0.8) 0%, #fff 80%);background:-o-linear-gradient(right, rgba(255,255,255,0.8) 0%, #fff 80%);background:linear-gradient(to left, rgba(255,255,255,0.8) 0%, #fff 80%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ccffffff', GradientType=1 )}.edge-fader--left .edge-fader__arrow{position:absolute;left:0;top:50%;width:1em;height:1em;border:.5em solid transparent;border-right:.5em solid #feca87;border-left:0 none transparent;-webkit-transform:translate(-25%, -50%);-ms-transform:translate(-25%, -50%);-o-transform:translate(-25%, -50%);transform:translate(-25%, -50%);cursor:pointer;-webkit-transition:border-color 500ms ease 20ms;-o-transition:border-color 500ms ease 20ms;transition:border-color 500ms ease 20ms}.edge-fader--left .edge-fader__arrow:hover,.edge-fader--left .edge-fader__arrow:active,.edge-fader--left .edge-fader__arrow:focus{width:1em;height:1em;border:.5em solid transparent;border-right:.5em solid #f99d53;border-left:0 none transparent;-webkit-transform:translate(-25%, -50%);-ms-transform:translate(-25%, -50%);-o-transform:translate(-25%, -50%);transform:translate(-25%, -50%)}.edge-fader--left .edge-fader__arrow.edge-fader__arrow--inactive{width:1em;height:1em;border:.5em solid transparent;border-right:.5em solid #e1eef4;border-left:0 none transparent;-webkit-transform:translate(-25%, -50%);-ms-transform:translate(-25%, -50%);-o-transform:translate(-25%, -50%);transform:translate(-25%, -50%);cursor:default}.edge-fader--left .edge-fader__arrow.edge-fader__arrow--invisible{width:1em;height:1em;border:.5em solid transparent;border-right:.5em solid transparent;border-left:0 none transparent;-webkit-transform:translate(-25%, -50%);-ms-transform:translate(-25%, -50%);-o-transform:translate(-25%, -50%);transform:translate(-25%, -50%);cursor:default}.edge-fader--right{right:0;background:-webkit-gradient(linear, left top, right top, from(rgba(255,255,255,0.8)), color-stop(80%, #fff));background:-webkit-linear-gradient(left, rgba(255,255,255,0.8) 0%, #fff 80%);background:-o-linear-gradient(left, rgba(255,255,255,0.8) 0%, #fff 80%);background:linear-gradient(to right, rgba(255,255,255,0.8) 0%, #fff 80%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#ccffffff', endColorstr='#ffffff', GradientType=1 )}.edge-fader--right .edge-fader__arrow{position:absolute;right:0;top:50%;width:1em;height:1em;border:.5em solid transparent;border-left:.5em solid #feca87;border-right:0 none transparent;-webkit-transform:translate(25%, -50%);-ms-transform:translate(25%, -50%);-o-transform:translate(25%, -50%);transform:translate(25%, -50%);cursor:pointer;-webkit-transition:border-color 500ms ease 20ms;-o-transition:border-color 500ms ease 20ms;transition:border-color 500ms ease 20ms}.edge-fader--right .edge-fader__arrow:hover,.edge-fader--right .edge-fader__arrow:active,.edge-fader--right .edge-fader__arrow:focus{width:1em;height:1em;border:.5em solid transparent;border-left:.5em solid #f99d53;border-right:0 none transparent;-webkit-transform:translate(25%, -50%);-ms-transform:translate(25%, -50%);-o-transform:translate(25%, -50%);transform:translate(25%, -50%)}.edge-fader--right .edge-fader__arrow.edge-fader__arrow--inactive{width:1em;height:1em;border:.5em solid transparent;border-left:.5em solid #e1eef4;border-right:0 none transparent;-webkit-transform:translate(25%, -50%);-ms-transform:translate(25%, -50%);-o-transform:translate(25%, -50%);transform:translate(25%, -50%);cursor:default}.edge-fader--right .edge-fader__arrow.edge-fader__arrow--invisible{width:1em;height:1em;border:.5em solid transparent;border-left:.5em solid transparent;border-right:0 none transparent;-webkit-transform:translate(25%, -50%);-ms-transform:translate(25%, -50%);-o-transform:translate(25%, -50%);transform:translate(25%, -50%);cursor:default}.edge-fader--top{top:0;background:-webkit-gradient(linear, left bottom, left top, from(rgba(255,255,255,0.8)), color-stop(80%, #fff));background:-webkit-linear-gradient(bottom, rgba(255,255,255,0.8) 0%, #fff 80%);background:-o-linear-gradient(bottom, rgba(255,255,255,0.8) 0%, #fff 80%);background:linear-gradient(to top, rgba(255,255,255,0.8) 0%, #fff 80%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ccffffff', GradientType=0 )}.edge-fader--top .edge-fader__arrow{position:absolute;top:0;left:50%;width:1em;height:1em;border:.5em solid transparent;border-bottom:.5em solid #feca87;border-top:0 none transparent;-webkit-transform:translate(-50%, -25%);-ms-transform:translate(-50%, -25%);-o-transform:translate(-50%, -25%);transform:translate(-50%, -25%);cursor:pointer;-webkit-transition:border-color 500ms ease 20ms;-o-transition:border-color 500ms ease 20ms;transition:border-color 500ms ease 20ms}.edge-fader--top .edge-fader__arrow:hover,.edge-fader--top .edge-fader__arrow:active,.edge-fader--top .edge-fader__arrow:focus{width:1em;height:1em;border:.5em solid transparent;border-bottom:.5em solid #f99d53;border-top:0 none transparent;-webkit-transform:translate(-50%, -25%);-ms-transform:translate(-50%, -25%);-o-transform:translate(-50%, -25%);transform:translate(-50%, -25%)}.edge-fader--top .edge-fader__arrow.edge-fader__arrow--inactive{width:1em;height:1em;border:.5em solid transparent;border-bottom:.5em solid #e1eef4;border-top:0 none transparent;-webkit-transform:translate(-50%, -25%);-ms-transform:translate(-50%, -25%);-o-transform:translate(-50%, -25%);transform:translate(-50%, -25%);cursor:default}.edge-fader--top .edge-fader__arrow.edge-fader__arrow--invisible{width:1em;height:1em;border:.5em solid transparent;border-bottom:.5em solid transparent;border-top:0 none transparent;-webkit-transform:translate(-50%, -25%);-ms-transform:translate(-50%, -25%);-o-transform:translate(-50%, -25%);transform:translate(-50%, -25%);cursor:default}.edge-fader--bottom{bottom:0;background:-webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0.8)), color-stop(80%, #fff));background:-webkit-linear-gradient(top, rgba(255,255,255,0.8) 0%, #fff 80%);background:-o-linear-gradient(top, rgba(255,255,255,0.8) 0%, #fff 80%);background:linear-gradient(to bottom, rgba(255,255,255,0.8) 0%, #fff 80%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#ccffffff', endColorstr='#ffffff', GradientType=0 )}.edge-fader--bottom .edge-fader__arrow{position:absolute;bottom:0;left:50%;width:1em;height:1em;border:.5em solid transparent;border-top:.5em solid #feca87;border-bottom:0 none transparent;-webkit-transform:translate(-50%, 25%);-ms-transform:translate(-50%, 25%);-o-transform:translate(-50%, 25%);transform:translate(-50%, 25%);cursor:pointer;-webkit-transition:border-color 500ms ease 20ms;-o-transition:border-color 500ms ease 20ms;transition:border-color 500ms ease 20ms}.edge-fader--bottom .edge-fader__arrow:hover,.edge-fader--bottom .edge-fader__arrow:active,.edge-fader--bottom .edge-fader__arrow:focus{width:1em;height:1em;border:.5em solid transparent;border-top:.5em solid #f99d53;border-bottom:0 none transparent;-webkit-transform:translate(-50%, 25%);-ms-transform:translate(-50%, 25%);-o-transform:translate(-50%, 25%);transform:translate(-50%, 25%)}.edge-fader--bottom .edge-fader__arrow.edge-fader__arrow--inactive{width:1em;height:1em;border:.5em solid transparent;border-top:.5em solid #e1eef4;border-bottom:0 none transparent;-webkit-transform:translate(-50%, 25%);-ms-transform:translate(-50%, 25%);-o-transform:translate(-50%, 25%);transform:translate(-50%, 25%);cursor:default}.edge-fader--bottom .edge-fader__arrow.edge-fader__arrow--invisible{width:1em;height:1em;border:.5em solid transparent;border-top:.5em solid transparent;border-bottom:0 none transparent;-webkit-transform:translate(-50%, 25%);-ms-transform:translate(-50%, 25%);-o-transform:translate(-50%, 25%);transform:translate(-50%, 25%);cursor:default}@media (min-width: 20rem){.front-matter{margin-bottom:3rem}}@media (min-width: 48rem){.front-matter{margin-bottom:5rem}}.front-matter__title{color:#636567;line-height:1.2;font-size:3rem;margin-top:0}@media (min-width: 20rem){.front-matter__title{margin-bottom:2rem}}@media (min-width: 48rem){.front-matter__title{margin-bottom:3rem}}.front-matter__title .front-matter__title--supertext{font-size:70%}.menu-bars{width:.8em;height:.625em;cursor:pointer}.menu-bars:before{content:"";width:inherit;height:.125em;position:absolute;background:#636567;-webkit-box-shadow:0 .25em 0 0 #636567,0 .5em 0 0 #636567;box-shadow:0 .25em 0 0 #636567,0 .5em 0 0 #636567}.index .menu-bars{display:none}.front-matter .search-results-title .product__title{font-size:1em}.front-matter .search-results-title .product__title .title-project-version{font-size:0.7em;padding-left:0.2em}.search-result-item-title{margin-left:0}.search-result-item-title .result-score{font-size:0.5em;padding-left:0.5em}.search-result-item-title .product__title{font-size:0.8em;float:right}.search-result-item-title .product__title .result-project-version{font-size:0.7em;padding-left:0.2em}.search{border-radius:.25rem;background:#9199a1;color:#f0f2f5;padding:0.25rem 0.25rem 0.25rem 0;margin:0.25rem}.search__icon-container{text-align:right;padding:0.25rem 0;margin-left:0.75rem}.search__icon-container:before{display:inline-block;width:1.25rem;padding-right:0.5rem}.search__input{border:none;background:transparent;width:100%;border-radius:.25rem;padding:0.25rem 0 0.25rem 0.25rem;-webkit-transition:background 200ms ease-in, color 200ms ease-in;-o-transition:background 200ms ease-in, color 200ms ease-in;transition:background 200ms ease-in, color 200ms ease-in}.search__input:focus{background:#636567;color:#f0f2f5}.search__input::-webkit-input-placeholder{color:#d4d9de}.search__input::-moz-placeholder{color:#d4d9de}.search__input:-ms-input-placeholder{color:#d4d9de}.search__input::placeholder{color:#d4d9de}.selector__title{font-size:60%;letter-spacing:.125rem;text-transform:uppercase;text-align:center;line-height:1;margin-bottom:0.3em;padding-left:.0625rem}.selector__btn{border:none;border-radius:.25em;width:100%;line-height:1;padding:0.5em 0.9em;font-size:120%;color:#788087;background:#ffd195;-webkit-transition:color 500ms ease, background 500ms ease;-o-transition:color 500ms ease, background 500ms ease;transition:color 500ms ease, background 500ms ease}.selector__btn:hover,.selector__btn:active,.selector__btn:focus{color:#454d54;background:#fcc074}.js .selector__btn{cursor:pointer}.other__btn{border:none;border-radius:.25em;width:100%;line-height:1;padding:0.5em 0.5em;font-size:100%;color:#fcc074;background:#636567;-webkit-transition:color 500ms ease, background 500ms ease;-o-transition:color 500ms ease, background 500ms ease;transition:color 500ms ease, background 500ms ease}.other__btn:hover,.other__btn:active,.other__btn:focus{color:#454d54;background:#ffd195}.js .other__btn{cursor:pointer}.selector__arrow{position:relative;margin:0 0.2em 0 auto;-webkit-transition:border-color 500ms ease;-o-transition:border-color 500ms ease;transition:border-color 500ms ease;width:.75em;height:.75em;border:.375em solid transparent;border-top:.375em solid #ffd195;border-bottom:0 none #6c8997;-webkit-transform:translate(0%, 25%);-ms-transform:translate(0%, 25%);-o-transform:translate(0%, 25%);transform:translate(0%, 25%)}.selector--open .selector__arrow{width:.75em;height:.75em;border:.375em solid transparent;border-bottom:.375em solid #ffd195;border-top:0 none #6c8997;-webkit-transform:translate(0%, -25%);-ms-transform:translate(0%, -25%);-o-transform:translate(0%, -25%);transform:translate(0%, -25%)}.selector-pane__sizing-box{position:absolute;top:7.75rem;height:0;max-height:0;width:100%;z-index:100;-webkit-transition:height 500ms ease, max-height 500ms ease;-o-transition:height 500ms ease, max-height 500ms ease;transition:height 500ms ease, max-height 500ms ease}@media (min-width: 48rem){.selector-pane__sizing-box{left:0.25rem;top:7.15rem;width:auto}}@media (min-width: 66.5rem){.selector-pane__sizing-box{left:0.45rem;top:7.4rem}}.selector-pane__shadow-box{height:1000px;max-height:1000px;-webkit-transition:height 500ms ease, max-height 500ms ease;-o-transition:height 500ms ease, max-height 500ms ease;transition:height 500ms ease, max-height 500ms ease;-webkit-box-shadow:-0.25rem -0.25rem 2rem -0.25rem rgba(0,0,0,0.2);box-shadow:-0.25rem -0.25rem 2rem -0.25rem rgba(0,0,0,0.2)}.selector-pane__primary{height:100%;background:#ebebeb;color:#f0f2f5;font-size:105%;padding-left:1rem;padding-right:1rem;white-space:nowrap;overflow-y:hidden}.selector-list__sizing-box{position:relative;height:100%;vertical-align:bottom;padding-left:0.75rem}.selector-list__sizing-box:first-of-type{padding-left:0}.release-is-archived-and-hidden{display:none !important}.selector-list__scroll-box{height:100%;padding-top:1rem;padding-bottom:1rem;padding-left:0.6rem;padding-right:0.4rem;margin-left:-0.6rem;margin-right:-0.4rem}.selector-list{margin:0;padding:0;list-style:none;-webkit-box-shadow:-0.125rem -0.125rem 1rem -0.2rem rgba(0,0,0,0.2);box-shadow:-0.125rem -0.125rem 1rem -0.2rem rgba(0,0,0,0.2)}.selector-list__element{background:rgba(255,0,0,0.7);color:#f0f2f5;text-align:center;min-width:3.5rem;border-top:.0625rem solid #d4d9de;-webkit-transition:background 400ms ease;-o-transition:background 400ms ease;transition:background 400ms ease}.selector-list__element a{padding:0.6rem 0.6rem;color:inherit;text-decoration:none}.selector-list__element:first-of-type{border-top-left-radius:.15rem;border-top-right-radius:.15rem;border-top:none}.selector-list__element:last-of-type{border-bottom-left-radius:.15rem;border-bottom-right-radius:.15rem}.selector-list__element:only-of-type{border-radius:.15rem;border-top:none}.selector-list__element--1{background:#f99d53}.selector-list__element--1.selector-list__element--current{background:#fbb984}.selector-list__element--1:hover,.selector-list__element--1:active,.selector-list__element--1:focus{background:#fbb984}.selector-list__element--1.selector-list__element--lts-flag:hover,.selector-list__element--1.selector-list__element--lts-flag:active,.selector-list__element--1.selector-list__element--lts-flag:focus{background:#f99d53}.selector-list__element--2{background:#79aeb6}.selector-list__element--2.selector-list__element--current{background:#9ac2c8}.selector-list__element--2:hover,.selector-list__element--2:active,.selector-list__element--2:focus{background:#9ac2c8}.selector-list__element--2.selector-list__element--lts-flag:hover,.selector-list__element--2.selector-list__element--lts-flag:active,.selector-list__element--2.selector-list__element--lts-flag:focus{background:#79aeb6}.selector-list__element--3{background:#88b3a8}.selector-list__element--3.selector-list__element--current{background:#a7c7bf}.selector-list__element--3:hover,.selector-list__element--3:active,.selector-list__element--3:focus{background:#a7c7bf}.selector-list__element--3.selector-list__element--lts-flag:hover,.selector-list__element--3.selector-list__element--lts-flag:active,.selector-list__element--3.selector-list__element--lts-flag:focus{background:#88b3a8}.selector-list__element--4{background:#6f8a86}.selector-list__element--4.selector-list__element--current{background:#8ba19e}.selector-list__element--4:hover,.selector-list__element--4:active,.selector-list__element--4:focus{background:#8ba19e}.selector-list__element--4.selector-list__element--lts-flag:hover,.selector-list__element--4.selector-list__element--lts-flag:active,.selector-list__element--4.selector-list__element--lts-flag:focus{background:#6f8a86}.selector-list__element--5{background:#6c8997}.selector-list__element--5.selector-list__element--current{background:#8aa1ac}.selector-list__element--5:hover,.selector-list__element--5:active,.selector-list__element--5:focus{background:#8aa1ac}.selector-list__element--5.selector-list__element--lts-flag:hover,.selector-list__element--5.selector-list__element--lts-flag:active,.selector-list__element--5.selector-list__element--lts-flag:focus{background:#6c8997}.selector-list__element--6{background:#3b4a5d}.selector-list__element--6.selector-list__element--current{background:#4f637c}.selector-list__element--6:hover,.selector-list__element--6:active,.selector-list__element--6:focus{background:#4f637c}.selector-list__element--6.selector-list__element--lts-flag:hover,.selector-list__element--6.selector-list__element--lts-flag:active,.selector-list__element--6.selector-list__element--lts-flag:focus{background:#3b4a5d}.selector-list__element--archived{color:#d4d9de;background:#f0f2f5}.selector-list__element--archived:hover,.selector-list__element--archived:active,.selector-list__element--archived:focus{color:#f0f2f5;background:#d4d9de}.selector-list__element--other{color:#d4d9de;background:#f0f2f5}.selector-list__element--other:hover,.selector-list__element--other:active,.selector-list__element--other:focus{color:#f0f2f5;background:#d4d9de}.selector-list__element--disabled{background:#f0f2f5;border-top:.0625rem solid #f7f8f9;color:#d4d9de}.selector-list__element--current a,.selector-list__element--disabled a{pointer-events:none;cursor:default}.selector-list__element--lts-flag{color:#fff}.selector-list__element--lts-flag:hover,.selector-list__element--lts-flag:active,.selector-list__element--lts-flag:focus{background:inherit}.selector-list__element--lts-flag a{padding-top:0.4rem;padding-bottom:0.2rem;letter-spacing:.1875rem;font-size:80%}.selector-pane__shadow-box .edge-fader--left{font-size:0.8rem;width:0.75rem;margin-left:0.2rem;height:1.25rem;max-height:100%;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);z-index:1;background:transparent;-webkit-filter:none;filter:none}.selector-pane__shadow-box .edge-fader--left .edge-fader__arrow--inactive{width:1em;height:1em;border:.5em solid transparent;border-right:.5em solid transparent;border-left:0 none transparent;-webkit-transform:translate(-25%, -50%);-ms-transform:translate(-25%, -50%);-o-transform:translate(-25%, -50%);transform:translate(-25%, -50%)}.selector-pane__shadow-box .edge-fader--right{font-size:0.8rem;width:0.75rem;margin-right:0.2rem;height:1.25rem;max-height:100%;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);z-index:1;background:transparent;-webkit-filter:none;filter:none}.selector-pane__shadow-box .edge-fader--right .edge-fader__arrow--inactive{width:1em;height:1em;border:.5em solid transparent;border-left:.5em solid transparent;border-right:0 none transparent;-webkit-transform:translate(25%, -50%);-ms-transform:translate(25%, -50%);-o-transform:translate(25%, -50%);transform:translate(25%, -50%)}.selector-list__sizing-box .edge-fader--top{font-size:0.8rem;top:0;left:1.4rem;width:1.25rem;height:0.75rem;margin-top:0.1rem;max-height:100%;background:transparent;-webkit-filter:none;filter:none}.selector-list__sizing-box .edge-fader--top .edge-fader__arrow--inactive{width:1em;height:1em;border:.5em solid transparent;border-bottom:.5em solid transparent;border-top:0 none transparent;-webkit-transform:translate(-50%, -25%);-ms-transform:translate(-50%, -25%);-o-transform:translate(-50%, -25%);transform:translate(-50%, -25%)}.selector-list__sizing-box .edge-fader--bottom{font-size:0.8rem;top:0;left:0.6rem;width:1.25rem;height:0.75rem;margin-top:0.1rem;max-height:100%;background:transparent;-webkit-filter:none;filter:none}.selector-list__sizing-box .edge-fader--bottom .edge-fader__arrow--inactive{width:1em;height:1em;border:.5em solid transparent;border-top:.5em solid transparent;border-bottom:0 none transparent;-webkit-transform:translate(-50%, 25%);-ms-transform:translate(-50%, 25%);-o-transform:translate(-50%, 25%);transform:translate(-50%, 25%)}.social-button{position:relative;height:42px;width:42px;margin-right:8px}.social-button:last-of-type{margin-right:0}.social-button .social-button__primary{position:absolute;left:0;height:42px;width:42px;background-image:url("/images/index/social-sprite.png");background-repeat:no-repeat;background-position-y:0;opacity:1;-webkit-transition:opacity 200ms ease-in;-o-transition:opacity 200ms ease-in;transition:opacity 200ms ease-in}.social-button .social-button__inverted{position:absolute;left:0;height:42px;width:42px;background-image:url("/images/index/social-sprite.png");background-repeat:no-repeat;background-position-y:-42px;opacity:0;-webkit-transition:opacity 200ms ease-in;-o-transition:opacity 200ms ease-in;transition:opacity 200ms ease-in}.social-button:hover .social-button__primary,.social-button:active .social-button__primary,.social-button:focus .social-button__primary{opacity:0}.social-button:hover .social-button__inverted,.social-button:active .social-button__inverted,.social-button:focus .social-button__inverted{opacity:1}.social-button--facebook .social-button__primary{background-position-x:0}.social-button--facebook .social-button__inverted{background-position-x:0}.social-button--twitter .social-button__primary{background-position-x:-50px}.social-button--twitter .social-button__inverted{background-position-x:-50px}.social-button--youtube .social-button__primary{background-position-x:-100px}.social-button--youtube .social-button__inverted{background-position-x:-100px}.social-button--linkedin .social-button__primary{background-position-x:-150px}.social-button--linkedin .social-button__inverted{background-position-x:-150px}.social-button--github .social-button__primary{background-position-x:-200px}.social-button--github .social-button__inverted{background-position-x:-200px}.table-of-contents{margin-bottom:3rem}.table-of-contents__title{margin-top:0;margin-bottom:0.5rem}@media (min-width: 30rem){.table-of-contents__wrapper--multi{-webkit-column-count:2;-moz-column-count:2;column-count:2}}@media (min-width: 86rem){.table-of-contents__wrapper--multi{-webkit-column-count:3;-moz-column-count:3;column-count:3}}.table-of-contents__items{color:#9199a1;margin-bottom:0}.table-of-contents__items a{color:#636567;vertical-align:top}.table-of-contents__items a:hover,.table-of-contents__items a:active,.table-of-contents__items a:focus{color:#e78505}.table-of-contents__item{font-size:110%;padding-top:.25rem}@media (min-width: 48rem) and (max-width: 66.49rem){.table-of-contents__item{font-size:100%}}.index .welcome-content{padding-top:3.5rem}@media (min-width: 48rem){.index .welcome-content{padding-top:4.5rem}}.index .welcome{background-color:#fcc074;background:url("../images/index/home-banner.jpg") no-repeat bottom/cover;padding-top:3rem;padding-bottom:3rem;color:#636567;font-size:1.7rem;line-height:1;text-align:center;margin-bottom:0}@media (min-width: 48rem){.index .welcome{padding-bottom:5rem}}.index .welcome h1{letter-spacing:-1px;color:#636567;text-transform:uppercase;font-size:2.5rem;margin-bottom:1rem}@media (min-width: 66.5rem){.index .welcome h1{font-size:3rem}}.index .product-content{-webkit-box-shadow:0 0 1.5rem 0 rgba(0,0,0,0.2);box-shadow:0 0 1.5rem 0 rgba(0,0,0,0.2)}.index .product-content .product-callout{text-align:center;color:#788087;font-size:1.2rem;padding-top:1rem;margin-bottom:0}@media (min-width: 48rem){.index .product-content .product-callout{font-size:1.5rem}}.index .product-picker{padding-top:2rem;padding-bottom:5rem}@media (min-width: 66.5rem){.index .product-picker{max-width:71rem;padding-top:5rem;padding-bottom:6rem}}.index .product__wrapper{padding-bottom:2rem;padding-left:1rem;padding-right:1rem}.index .product__wrapper:last-of-type{padding-bottom:0}.index .product__card{border-radius:.3rem;padding:1.5rem 1rem;color:#636567;line-height:1.3;font-size:1.2rem;text-align:center;text-decoration:none;background:#f5f3f5;border:1px solid #ebebeb;-webkit-box-shadow:0 -0.25rem 4rem -0.5rem rgba(0,0,0,0.1);box-shadow:0 -0.25rem 4rem -0.5rem rgba(0,0,0,0.1);-webkit-transition:color 200ms ease-in, background 200ms ease-in;-o-transition:color 200ms ease-in, background 200ms ease-in;transition:color 200ms ease-in, background 200ms ease-in}.index .product__card .product__title{font-size:3.75rem;font-weight:700;line-height:1;margin-bottom:1.25rem;color:#636567;text-transform:lowercase;-webkit-transition:color 200ms ease-in;-o-transition:color 200ms ease-in;transition:color 200ms ease-in}.index .product__card .product__title .product__logo{vertical-align:middle;height:0.60em;width:0.60em;margin-bottom:0.10em}.index .product__card .product__title .product__logo .logo{height:100%;width:100%}.index .product__card .product__title .product__logo--invertible{position:relative}.index .product__card .product__title .product__logo--invertible .logo{position:absolute;left:0;-webkit-transition:opacity 200ms ease-in;-o-transition:opacity 200ms ease-in;transition:opacity 200ms ease-in}.index .product__card .product__title .product__logo--invertible .logo--primary{opacity:1}.index .product__card .product__title .product__logo--invertible .logo--inverted{opacity:0}.index .product__card .product__title .product__title-highlight{color:#f99d53;text-transform:uppercase;font-size:70.5%;font-weight:400;-webkit-transition:color 200ms ease-in;-o-transition:color 200ms ease-in;transition:color 200ms ease-in}@media (min-width: 66.5rem){.index .product__card .product__description{min-height:3.9em}}.index .product__card:hover,.index .product__card:active,.index .product__card:focus{text-decoration:none;color:#f0f2f5;background:#6c8997}.index .product__card:hover .product__title,.index .product__card:active .product__title,.index .product__card:focus .product__title{color:#f0f2f5}.index .product__card:hover .product__title .product__logo--invertible .logo--primary,.index .product__card:active .product__title .product__logo--invertible .logo--primary,.index .product__card:focus .product__title .product__logo--invertible .logo--primary{opacity:0}.index .product__card:hover .product__title .product__logo--invertible .logo--inverted,.index .product__card:active .product__title .product__logo--invertible .logo--inverted,.index .product__card:focus .product__title .product__logo--invertible .logo--inverted{opacity:1}.index .highlight__wrapper{-webkit-box-shadow:0 -0.15rem 3rem -0.5rem rgba(0,0,0,0.2);box-shadow:0 -0.15rem 3rem -0.5rem rgba(0,0,0,0.2);font-size:1.2rem}@media (min-width: 66.5rem){.index .highlight__wrapper{background:url("../images/index/highlights-bg-split.jpg") left/cover}}@media (max-width: 66.49rem){.index .highlight__container{padding:0;margin:0;max-width:none}.index .highlight__container .row{margin:0}}.index .highlight__container .highlight__title{letter-spacing:-1px;font-size:1.8rem;text-align:left;padding-bottom:0.25rem}.highlight__left .index .highlight__container .highlight__title{padding-bottom:0.5rem}.index .highlight__container .highlight__link-wrapper{text-align:center}.index .highlight__container .highlight__link{border-radius:.15rem;padding:0.8rem 2.5rem;font-size:85%;text-decoration:none;text-transform:uppercase;word-spacing:-1px;-webkit-transition:color 500ms ease, background 500ms ease;-o-transition:color 500ms ease, background 500ms ease;transition:color 500ms ease, background 500ms ease}.index .highlight__container .highlight__left{padding:3rem 1rem 2rem 1rem;color:#f7f7f7;background-color:#3b4a5d;background:url("../images/index/highlights-bg-dark.jpg")}@media (min-width: 66.5rem){.index .highlight__container .highlight__left{padding-top:2rem;min-height:16rem}.index .highlight__container .highlight__left p{min-height:5.4rem}}@media (min-width: 86rem){.index .highlight__container .highlight__left{padding-top:3rem}}.index .highlight__container .highlight__left .highlight__link{color:#f7f7f7;background:#f99d53}.index .highlight__container .highlight__left .highlight__link:hover,.index .highlight__container .highlight__left .highlight__link:active,.index .highlight__container .highlight__left .highlight__link:focus{color:#f7f7f7;background:#e78505}.index .highlight__container .highlight__right{padding:2rem 1rem 2rem 1rem;color:#3b4a5d;background-color:#f7f7f7;background:url("../images/index/highlights-bg-light.jpg") repeat}@media (min-width: 66.5rem){.index .highlight__container .highlight__right{padding-top:2rem;padding-left:3rem;min-height:16rem}.index .highlight__container .highlight__right p{min-height:5.4rem}}@media (min-width: 86rem){.index .highlight__container .highlight__right{padding-top:3rem}}.index .highlight__container .highlight__right .highlight__link{color:#3b4a5d;background:#ffd195}.index .highlight__container .highlight__right .highlight__link:hover,.index .highlight__container .highlight__right .highlight__link:active,.index .highlight__container .highlight__right .highlight__link:focus{color:#3b4a5d;background:#fcc074}.client-library-logos{list-style:none}.client-library-logo{border-radius:.25rem;margin:0.5rem;padding:0.4rem;-webkit-box-shadow:0 -0.25rem 2rem -0.5rem rgba(0,0,0,0.2);box-shadow:0 -0.25rem 2rem -0.5rem rgba(0,0,0,0.2);background:#f7f7f7;-webkit-transition:background 300ms ease-in, -webkit-box-shadow 300ms ease-in;transition:background 300ms ease-in, -webkit-box-shadow 300ms ease-in;-o-transition:background 300ms ease-in, box-shadow 300ms ease-in;transition:background 300ms ease-in, box-shadow 300ms ease-in;transition:background 300ms ease-in, box-shadow 300ms ease-in, -webkit-box-shadow 300ms ease-in}.client-library-logo:hover,.client-library-logo:active,.client-library-logo:focus{background:#e3e6e8;-webkit-box-shadow:0 -0.25rem 2rem -0.5rem rgba(0,0,0,0.4);box-shadow:0 -0.25rem 2rem -0.5rem rgba(0,0,0,0.4)}table.use-cases__image-links{width:100%}table.use-cases__image-links td:first-child{width:30%}table.use-cases__image-links td:first-child img{width:100%}table.use-cases__image-links td:last-child{width:70%}.main-article{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)} + *//*! normalize.css v4.0.0 | MIT License | github.com/necolas/normalize.css */@import url("https://fonts.googleapis.com/css?family=Oswald:400");@import url("https://fonts.googleapis.com/css?family=Muli:400,700");@import url("https://fonts.googleapis.com/css?family=Source+Code+Pro:400,700");html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}template,[hidden]{display:none}a{background-color:transparent}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}button,input,select,textarea{font:inherit}optgroup{font-weight:bold}button,input,select{overflow:visible}button,input,select,textarea{margin:0}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{cursor:pointer}[disabled]{cursor:default}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button:-moz-focusring,input:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type="checkbox"],[type="radio"]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}html{-webkit-box-sizing:border-box;box-sizing:border-box}*,*::before,*::after{-webkit-box-sizing:inherit;box-sizing:inherit}@-ms-viewport{width:device-width}html{font-size:16px;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:1rem;line-height:1.5;color:red;background-color:#fff}[tabindex="-1"]:focus{outline:none !important}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted red}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:bold}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}a{color:#f99d53;text-decoration:none}a:focus,a:hover{color:#f67309;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:none}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle}[role="button"]{cursor:pointer}a,area,button,[role="button"],input,label,select,summary,textarea{-ms-touch-action:manipulation;touch-action:manipulation}table{border-collapse:collapse;background-color:transparent}caption{padding-top:.75rem;padding-bottom:.75rem;color:red;text-align:left;caption-side:bottom}th{text-align:left}label{display:inline-block;margin-bottom:.5rem}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,textarea{margin:0;line-height:inherit;border-radius:0}input[type="radio"]:disabled,input[type="checkbox"]:disabled{cursor:not-allowed}input[type="date"],input[type="time"],input[type="datetime-local"],input[type="month"]{-webkit-appearance:listbox}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit}input[type="search"]{-webkit-appearance:none}output{display:inline-block}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1,.h1{font-size:2.5rem}h2,.h2{font-size:2rem}h3,.h3{font-size:1.75rem}h4,.h4{font-size:1.5rem}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300}.display-2{font-size:5.5rem;font-weight:300}.display-3{font-size:4.5rem;font-weight:300}.display-4{font-size:3.5rem;font-weight:300}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,0.1)}small,.small{font-size:80%;font-weight:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:5px}.initialism{font-size:90%;text-transform:uppercase}.blockquote{padding:.5rem 1rem;margin-bottom:1rem;font-size:1.25rem;border-left:.25rem solid red}.blockquote-footer{display:block;font-size:80%;color:red}.blockquote-footer::before{content:"\2014 \00A0"}.blockquote-reverse{padding-right:1rem;padding-left:0;text-align:right;border-right:.25rem solid red;border-left:0}.blockquote-reverse .blockquote-footer::before{content:""}.blockquote-reverse .blockquote-footer::after{content:"\00A0 \2014"}dl.row>dd+dt{clear:left}.img-fluid,.carousel-inner>.carousel-item>img,.carousel-inner>.carousel-item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:.3rem}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #ddd;border-radius:.25rem;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075);display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:red}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}code{padding:.2rem .4rem;font-size:90%;color:#bd4147;background-color:#f7f7f9;border-radius:.25rem}kbd{padding:.2rem .4rem;font-size:90%;color:#fff;background-color:#333;border-radius:.2rem;-webkit-box-shadow:inset 0 -0.1rem 0 rgba(0,0,0,0.25);box-shadow:inset 0 -0.1rem 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}pre{display:block;margin-top:0;margin-bottom:1rem;font-size:90%;color:red}pre code{padding:0;font-size:inherit;color:inherit;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}.container::after{content:"";display:table;clear:both}@media (min-width: 30rem){.container{max-width:32rem}}@media (min-width: 48rem){.container{max-width:45rem}}@media (min-width: 66.5rem){.container{max-width:58.75rem}}@media (min-width: 86rem){.container{max-width:71.25rem}}.container-fluid{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}.container-fluid::after{content:"";display:table;clear:both}.row{margin-left:-15px;margin-right:-15px}.row::after{content:"";display:table;clear:both}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}@media (min-width: 20rem){.col-xs-1{float:left;width:8.33333%}.col-xs-2{float:left;width:16.66667%}.col-xs-3{float:left;width:25%}.col-xs-4{float:left;width:33.33333%}.col-xs-5{float:left;width:41.66667%}.col-xs-6{float:left;width:50%}.col-xs-7{float:left;width:58.33333%}.col-xs-8{float:left;width:66.66667%}.col-xs-9{float:left;width:75%}.col-xs-10{float:left;width:83.33333%}.col-xs-11{float:left;width:91.66667%}.col-xs-12{float:left;width:100%}.pull-xs-0{right:auto}.pull-xs-1{right:8.33333%}.pull-xs-2{right:16.66667%}.pull-xs-3{right:25%}.pull-xs-4{right:33.33333%}.pull-xs-5{right:41.66667%}.pull-xs-6{right:50%}.pull-xs-7{right:58.33333%}.pull-xs-8{right:66.66667%}.pull-xs-9{right:75%}.pull-xs-10{right:83.33333%}.pull-xs-11{right:91.66667%}.pull-xs-12{right:100%}.push-xs-0{left:auto}.push-xs-1{left:8.33333%}.push-xs-2{left:16.66667%}.push-xs-3{left:25%}.push-xs-4{left:33.33333%}.push-xs-5{left:41.66667%}.push-xs-6{left:50%}.push-xs-7{left:58.33333%}.push-xs-8{left:66.66667%}.push-xs-9{left:75%}.push-xs-10{left:83.33333%}.push-xs-11{left:91.66667%}.push-xs-12{left:100%}.offset-xs-1{margin-left:8.33333%}.offset-xs-2{margin-left:16.66667%}.offset-xs-3{margin-left:25%}.offset-xs-4{margin-left:33.33333%}.offset-xs-5{margin-left:41.66667%}.offset-xs-6{margin-left:50%}.offset-xs-7{margin-left:58.33333%}.offset-xs-8{margin-left:66.66667%}.offset-xs-9{margin-left:75%}.offset-xs-10{margin-left:83.33333%}.offset-xs-11{margin-left:91.66667%}}@media (min-width: 30rem){.col-sm-1{float:left;width:8.33333%}.col-sm-2{float:left;width:16.66667%}.col-sm-3{float:left;width:25%}.col-sm-4{float:left;width:33.33333%}.col-sm-5{float:left;width:41.66667%}.col-sm-6{float:left;width:50%}.col-sm-7{float:left;width:58.33333%}.col-sm-8{float:left;width:66.66667%}.col-sm-9{float:left;width:75%}.col-sm-10{float:left;width:83.33333%}.col-sm-11{float:left;width:91.66667%}.col-sm-12{float:left;width:100%}.pull-sm-0{right:auto}.pull-sm-1{right:8.33333%}.pull-sm-2{right:16.66667%}.pull-sm-3{right:25%}.pull-sm-4{right:33.33333%}.pull-sm-5{right:41.66667%}.pull-sm-6{right:50%}.pull-sm-7{right:58.33333%}.pull-sm-8{right:66.66667%}.pull-sm-9{right:75%}.pull-sm-10{right:83.33333%}.pull-sm-11{right:91.66667%}.pull-sm-12{right:100%}.push-sm-0{left:auto}.push-sm-1{left:8.33333%}.push-sm-2{left:16.66667%}.push-sm-3{left:25%}.push-sm-4{left:33.33333%}.push-sm-5{left:41.66667%}.push-sm-6{left:50%}.push-sm-7{left:58.33333%}.push-sm-8{left:66.66667%}.push-sm-9{left:75%}.push-sm-10{left:83.33333%}.push-sm-11{left:91.66667%}.push-sm-12{left:100%}.offset-sm-0{margin-left:0%}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width: 48rem){.col-md-1{float:left;width:8.33333%}.col-md-2{float:left;width:16.66667%}.col-md-3{float:left;width:25%}.col-md-4{float:left;width:33.33333%}.col-md-5{float:left;width:41.66667%}.col-md-6{float:left;width:50%}.col-md-7{float:left;width:58.33333%}.col-md-8{float:left;width:66.66667%}.col-md-9{float:left;width:75%}.col-md-10{float:left;width:83.33333%}.col-md-11{float:left;width:91.66667%}.col-md-12{float:left;width:100%}.pull-md-0{right:auto}.pull-md-1{right:8.33333%}.pull-md-2{right:16.66667%}.pull-md-3{right:25%}.pull-md-4{right:33.33333%}.pull-md-5{right:41.66667%}.pull-md-6{right:50%}.pull-md-7{right:58.33333%}.pull-md-8{right:66.66667%}.pull-md-9{right:75%}.pull-md-10{right:83.33333%}.pull-md-11{right:91.66667%}.pull-md-12{right:100%}.push-md-0{left:auto}.push-md-1{left:8.33333%}.push-md-2{left:16.66667%}.push-md-3{left:25%}.push-md-4{left:33.33333%}.push-md-5{left:41.66667%}.push-md-6{left:50%}.push-md-7{left:58.33333%}.push-md-8{left:66.66667%}.push-md-9{left:75%}.push-md-10{left:83.33333%}.push-md-11{left:91.66667%}.push-md-12{left:100%}.offset-md-0{margin-left:0%}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width: 66.5rem){.col-lg-1{float:left;width:8.33333%}.col-lg-2{float:left;width:16.66667%}.col-lg-3{float:left;width:25%}.col-lg-4{float:left;width:33.33333%}.col-lg-5{float:left;width:41.66667%}.col-lg-6{float:left;width:50%}.col-lg-7{float:left;width:58.33333%}.col-lg-8{float:left;width:66.66667%}.col-lg-9{float:left;width:75%}.col-lg-10{float:left;width:83.33333%}.col-lg-11{float:left;width:91.66667%}.col-lg-12{float:left;width:100%}.pull-lg-0{right:auto}.pull-lg-1{right:8.33333%}.pull-lg-2{right:16.66667%}.pull-lg-3{right:25%}.pull-lg-4{right:33.33333%}.pull-lg-5{right:41.66667%}.pull-lg-6{right:50%}.pull-lg-7{right:58.33333%}.pull-lg-8{right:66.66667%}.pull-lg-9{right:75%}.pull-lg-10{right:83.33333%}.pull-lg-11{right:91.66667%}.pull-lg-12{right:100%}.push-lg-0{left:auto}.push-lg-1{left:8.33333%}.push-lg-2{left:16.66667%}.push-lg-3{left:25%}.push-lg-4{left:33.33333%}.push-lg-5{left:41.66667%}.push-lg-6{left:50%}.push-lg-7{left:58.33333%}.push-lg-8{left:66.66667%}.push-lg-9{left:75%}.push-lg-10{left:83.33333%}.push-lg-11{left:91.66667%}.push-lg-12{left:100%}.offset-lg-0{margin-left:0%}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width: 86rem){.col-xl-1{float:left;width:8.33333%}.col-xl-2{float:left;width:16.66667%}.col-xl-3{float:left;width:25%}.col-xl-4{float:left;width:33.33333%}.col-xl-5{float:left;width:41.66667%}.col-xl-6{float:left;width:50%}.col-xl-7{float:left;width:58.33333%}.col-xl-8{float:left;width:66.66667%}.col-xl-9{float:left;width:75%}.col-xl-10{float:left;width:83.33333%}.col-xl-11{float:left;width:91.66667%}.col-xl-12{float:left;width:100%}.pull-xl-0{right:auto}.pull-xl-1{right:8.33333%}.pull-xl-2{right:16.66667%}.pull-xl-3{right:25%}.pull-xl-4{right:33.33333%}.pull-xl-5{right:41.66667%}.pull-xl-6{right:50%}.pull-xl-7{right:58.33333%}.pull-xl-8{right:66.66667%}.pull-xl-9{right:75%}.pull-xl-10{right:83.33333%}.pull-xl-11{right:91.66667%}.pull-xl-12{right:100%}.push-xl-0{left:auto}.push-xl-1{left:8.33333%}.push-xl-2{left:16.66667%}.push-xl-3{left:25%}.push-xl-4{left:33.33333%}.push-xl-5{left:41.66667%}.push-xl-6{left:50%}.push-xl-7{left:58.33333%}.push-xl-8{left:66.66667%}.push-xl-9{left:75%}.push-xl-10{left:83.33333%}.push-xl-11{left:91.66667%}.push-xl-12{left:100%}.offset-xl-0{margin-left:0%}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;max-width:100%;margin-bottom:1rem}.table th,.table td{padding:.75rem;vertical-align:top;border-top:1px solid red}.table thead th{vertical-align:bottom;border-bottom:2px solid red}.table tbody+tbody{border-top:2px solid red}.table .table{background-color:#fff}.table-sm th,.table-sm td{padding:.3rem}.table-bordered{border:1px solid red}.table-bordered th,.table-bordered td{border:1px solid red}.table-bordered thead th,.table-bordered thead td{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,0.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,0.075)}.table-active,.table-active>th,.table-active>td{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,0.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,0.075)}.table-success,.table-success>th,.table-success>td{background-color:#dff0d8}.table-hover .table-success:hover{background-color:#d0e9c6}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#d0e9c6}.table-info,.table-info>th,.table-info>td{background-color:#d9edf7}.table-hover .table-info:hover{background-color:#c4e3f3}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#c4e3f3}.table-warning,.table-warning>th,.table-warning>td{background-color:#fcf8e3}.table-hover .table-warning:hover{background-color:#faf2cc}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#faf2cc}.table-danger,.table-danger>th,.table-danger>td{background-color:#f2dede}.table-hover .table-danger:hover{background-color:#ebcccc}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#ebcccc}.thead-inverse th{color:#fff;background-color:red}.thead-default th{color:red;background-color:red}.table-inverse{color:red;background-color:red}.table-inverse th,.table-inverse td,.table-inverse thead th{border-color:red}.table-inverse.table-bordered{border:0}.table-responsive{display:block;width:100%;min-height:.01%;overflow-x:auto}.table-reflow thead{float:left}.table-reflow tbody{display:block;white-space:nowrap}.table-reflow th,.table-reflow td{border-top:1px solid red;border-left:1px solid red}.table-reflow th:last-child,.table-reflow td:last-child{border-right:1px solid red}.table-reflow thead:last-child tr:last-child th,.table-reflow thead:last-child tr:last-child td,.table-reflow tbody:last-child tr:last-child th,.table-reflow tbody:last-child tr:last-child td,.table-reflow tfoot:last-child tr:last-child th,.table-reflow tfoot:last-child tr:last-child td{border-bottom:1px solid red}.table-reflow tr{float:left}.table-reflow tr th,.table-reflow tr td{display:block !important;border:1px solid red}.form-control{display:block;width:100%;padding:.5rem .75rem;font-size:1rem;line-height:1.25;color:red;background-color:#fff;background-image:none;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,0.15);border-radius:.25rem;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,-webkit-box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,-webkit-box-shadow ease-in-out 0.15s;-o-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s,-webkit-box-shadow ease-in-out 0.15s}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:red;background-color:#fff;border-color:#66afe9;outline:none;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-webkit-input-placeholder{color:#999;opacity:1}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999;opacity:1}.form-control::placeholder{color:#999;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:red;opacity:1}.form-control:disabled{cursor:not-allowed}select.form-control:not([size]):not([multiple]){height:2.5rem}select.form-control:focus::-ms-value{color:red;background-color:#fff}.form-control-file,.form-control-range{display:block}.col-form-label{padding-top:.5rem;padding-bottom:.5rem;margin-bottom:0}.col-form-label-lg{padding-top:.75rem;padding-bottom:.75rem;font-size:1.25rem}.col-form-label-sm{padding-top:.25rem;padding-bottom:.25rem;font-size:.875rem}.col-form-legend{padding-top:.5rem;padding-bottom:.5rem;margin-bottom:0;font-size:1rem}.form-control-static{min-height:2.5rem;padding-top:.5rem;padding-bottom:.5rem;margin-bottom:0}.form-control-static.form-control-sm,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn,.form-control-static.form-control-lg,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}select.form-control-sm:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),.input-group-sm>select.input-group-addon:not([size]):not([multiple]),.input-group-sm>.input-group-btn>select.btn:not([size]):not([multiple]){height:1.8125rem}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{padding:.75rem 1.5rem;font-size:1.25rem;border-radius:.3rem}select.form-control-lg:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),.input-group-lg>select.input-group-addon:not([size]):not([multiple]),.input-group-lg>.input-group-btn>select.btn:not([size]):not([multiple]){height:3.16667rem}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-check{position:relative;display:block;margin-bottom:.75rem}.form-check+.form-check{margin-top:-.25rem}.form-check.disabled .form-check-label{color:red;cursor:not-allowed}.form-check-label{padding-left:1.25rem;margin-bottom:0;cursor:pointer}.form-check-input{position:absolute;margin-top:.25rem;margin-left:-1.25rem}.form-check-input:only-child{position:static}.form-check-inline{position:relative;display:inline-block;padding-left:1.25rem;margin-bottom:0;vertical-align:middle;cursor:pointer}.form-check-inline+.form-check-inline{margin-left:.75rem}.form-check-inline.disabled{cursor:not-allowed}.form-control-feedback{margin-top:.25rem}.form-control-success,.form-control-warning,.form-control-danger{padding-right:2.25rem;background-repeat:no-repeat;background-position:center right .625rem;-webkit-background-size:1.25rem 1.25rem;background-size:1.25rem 1.25rem}.has-success .form-control-feedback,.has-success .form-control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label,.has-success .custom-control{color:red}.has-success .form-control{border-color:red}.has-success .input-group-addon{color:red;border-color:red;background-color:#fcc}.has-success .form-control-feedback{color:red}.has-success .form-control-success{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%235cb85c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E")}.has-warning .form-control-feedback,.has-warning .form-control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label,.has-warning .custom-control{color:red}.has-warning .form-control{border-color:red}.has-warning .input-group-addon{color:red;border-color:red;background-color:#fcc}.has-warning .form-control-feedback{color:red}.has-warning .form-control-warning{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23f0ad4e' d='M4.4 5.324h-.8v-2.46h.8zm0 1.42h-.8V5.89h.8zM3.76.63L.04 7.075c-.115.2.016.425.26.426h7.397c.242 0 .372-.226.258-.426C6.726 4.924 5.47 2.79 4.253.63c-.113-.174-.39-.174-.494 0z'/%3E%3C/svg%3E")}.has-danger .form-control-feedback,.has-danger .form-control-label,.has-danger .radio,.has-danger .checkbox,.has-danger .radio-inline,.has-danger .checkbox-inline,.has-danger.radio label,.has-danger.checkbox label,.has-danger.radio-inline label,.has-danger.checkbox-inline label,.has-danger .custom-control{color:red}.has-danger .form-control{border-color:red}.has-danger .input-group-addon{color:red;border-color:red;background-color:#fcc}.has-danger .form-control-feedback{color:red}.has-danger .form-control-danger{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23d9534f' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E")}@media (min-width: 30rem){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .form-control-label{margin-bottom:0;vertical-align:middle}.form-inline .form-check{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .form-check-label{padding-left:0}.form-inline .form-check-input{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.btn{display:inline-block;font-weight:normal;line-height:1.25;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.5rem 1rem;font-size:1rem;border-radius:.25rem;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,.btn:hover{text-decoration:none}.btn.focus{text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn:disabled{cursor:not-allowed;opacity:.65;-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#f99d53;border-color:#f99d53;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-primary:hover{color:#fff;background-color:#f78122;border-color:#f77b18}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#f78122;border-color:#f77b18}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#f78122;border-color:#f77b18;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-primary:active:hover,.btn-primary:active:focus,.btn-primary:active.focus,.btn-primary.active:hover,.btn-primary.active:focus,.btn-primary.active.focus,.open>.btn-primary.dropdown-toggle:hover,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle.focus{color:#fff;background-color:#ed6e08;border-color:#c65c07}.btn-primary.disabled:focus,.btn-primary.disabled.focus,.btn-primary:disabled:focus,.btn-primary:disabled.focus{background-color:#f99d53;border-color:#f99d53}.btn-primary.disabled:hover,.btn-primary:disabled:hover{background-color:#f99d53;border-color:#f99d53}.btn-secondary{color:red;background-color:#fff;border-color:#ccc;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-secondary:hover{color:red;background-color:#e6e6e6;border-color:#adadad}.btn-secondary:focus,.btn-secondary.focus{color:red;background-color:#e6e6e6;border-color:#adadad}.btn-secondary:active,.btn-secondary.active,.open>.btn-secondary.dropdown-toggle{color:red;background-color:#e6e6e6;border-color:#adadad;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-secondary:active:hover,.btn-secondary:active:focus,.btn-secondary:active.focus,.btn-secondary.active:hover,.btn-secondary.active:focus,.btn-secondary.active.focus,.open>.btn-secondary.dropdown-toggle:hover,.open>.btn-secondary.dropdown-toggle:focus,.open>.btn-secondary.dropdown-toggle.focus{color:red;background-color:#d4d4d4;border-color:#8c8c8c}.btn-secondary.disabled:focus,.btn-secondary.disabled.focus,.btn-secondary:disabled:focus,.btn-secondary:disabled.focus{background-color:#fff;border-color:#ccc}.btn-secondary.disabled:hover,.btn-secondary:disabled:hover{background-color:#fff;border-color:#ccc}.btn-info{color:#fff;background-color:red;border-color:red;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-info:hover{color:#fff;background-color:#c00;border-color:#c20000}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#c00;border-color:#c20000}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#c00;border-color:#c20000;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-info:active:hover,.btn-info:active:focus,.btn-info:active.focus,.btn-info.active:hover,.btn-info.active:focus,.btn-info.active.focus,.open>.btn-info.dropdown-toggle:hover,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle.focus{color:#fff;background-color:#a80000;border-color:maroon}.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info:disabled:focus,.btn-info:disabled.focus{background-color:red;border-color:red}.btn-info.disabled:hover,.btn-info:disabled:hover{background-color:red;border-color:red}.btn-success{color:#fff;background-color:red;border-color:red;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-success:hover{color:#fff;background-color:#c00;border-color:#c20000}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#c00;border-color:#c20000}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#c00;border-color:#c20000;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-success:active:hover,.btn-success:active:focus,.btn-success:active.focus,.btn-success.active:hover,.btn-success.active:focus,.btn-success.active.focus,.open>.btn-success.dropdown-toggle:hover,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle.focus{color:#fff;background-color:#a80000;border-color:maroon}.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success:disabled:focus,.btn-success:disabled.focus{background-color:red;border-color:red}.btn-success.disabled:hover,.btn-success:disabled:hover{background-color:red;border-color:red}.btn-warning{color:#fff;background-color:red;border-color:red;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-warning:hover{color:#fff;background-color:#c00;border-color:#c20000}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#c00;border-color:#c20000}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#c00;border-color:#c20000;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-warning:active:hover,.btn-warning:active:focus,.btn-warning:active.focus,.btn-warning.active:hover,.btn-warning.active:focus,.btn-warning.active.focus,.open>.btn-warning.dropdown-toggle:hover,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle.focus{color:#fff;background-color:#a80000;border-color:maroon}.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning:disabled:focus,.btn-warning:disabled.focus{background-color:red;border-color:red}.btn-warning.disabled:hover,.btn-warning:disabled:hover{background-color:red;border-color:red}.btn-danger{color:#fff;background-color:red;border-color:red;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-danger:hover{color:#fff;background-color:#c00;border-color:#c20000}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c00;border-color:#c20000}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c00;border-color:#c20000;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-danger:active:hover,.btn-danger:active:focus,.btn-danger:active.focus,.btn-danger.active:hover,.btn-danger.active:focus,.btn-danger.active.focus,.open>.btn-danger.dropdown-toggle:hover,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle.focus{color:#fff;background-color:#a80000;border-color:maroon}.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger:disabled:focus,.btn-danger:disabled.focus{background-color:red;border-color:red}.btn-danger.disabled:hover,.btn-danger:disabled:hover{background-color:red;border-color:red}.btn-outline-primary{color:#f99d53;background-image:none;background-color:transparent;border-color:#f99d53}.btn-outline-primary:hover{color:#fff;background-color:#f99d53;border-color:#f99d53}.btn-outline-primary:focus,.btn-outline-primary.focus{color:#fff;background-color:#f99d53;border-color:#f99d53}.btn-outline-primary:active,.btn-outline-primary.active,.open>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#f99d53;border-color:#f99d53}.btn-outline-primary:active:hover,.btn-outline-primary:active:focus,.btn-outline-primary:active.focus,.btn-outline-primary.active:hover,.btn-outline-primary.active:focus,.btn-outline-primary.active.focus,.open>.btn-outline-primary.dropdown-toggle:hover,.open>.btn-outline-primary.dropdown-toggle:focus,.open>.btn-outline-primary.dropdown-toggle.focus{color:#fff;background-color:#ed6e08;border-color:#c65c07}.btn-outline-primary.disabled:focus,.btn-outline-primary.disabled.focus,.btn-outline-primary:disabled:focus,.btn-outline-primary:disabled.focus{border-color:#fcd5b6}.btn-outline-primary.disabled:hover,.btn-outline-primary:disabled:hover{border-color:#fcd5b6}.btn-outline-secondary{color:#ccc;background-image:none;background-color:transparent;border-color:#ccc}.btn-outline-secondary:hover{color:#fff;background-color:#ccc;border-color:#ccc}.btn-outline-secondary:focus,.btn-outline-secondary.focus{color:#fff;background-color:#ccc;border-color:#ccc}.btn-outline-secondary:active,.btn-outline-secondary.active,.open>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#ccc;border-color:#ccc}.btn-outline-secondary:active:hover,.btn-outline-secondary:active:focus,.btn-outline-secondary:active.focus,.btn-outline-secondary.active:hover,.btn-outline-secondary.active:focus,.btn-outline-secondary.active.focus,.open>.btn-outline-secondary.dropdown-toggle:hover,.open>.btn-outline-secondary.dropdown-toggle:focus,.open>.btn-outline-secondary.dropdown-toggle.focus{color:#fff;background-color:#a1a1a1;border-color:#8c8c8c}.btn-outline-secondary.disabled:focus,.btn-outline-secondary.disabled.focus,.btn-outline-secondary:disabled:focus,.btn-outline-secondary:disabled.focus{border-color:#fff}.btn-outline-secondary.disabled:hover,.btn-outline-secondary:disabled:hover{border-color:#fff}.btn-outline-info{color:red;background-image:none;background-color:transparent;border-color:red}.btn-outline-info:hover{color:#fff;background-color:red;border-color:red}.btn-outline-info:focus,.btn-outline-info.focus{color:#fff;background-color:red;border-color:red}.btn-outline-info:active,.btn-outline-info.active,.open>.btn-outline-info.dropdown-toggle{color:#fff;background-color:red;border-color:red}.btn-outline-info:active:hover,.btn-outline-info:active:focus,.btn-outline-info:active.focus,.btn-outline-info.active:hover,.btn-outline-info.active:focus,.btn-outline-info.active.focus,.open>.btn-outline-info.dropdown-toggle:hover,.open>.btn-outline-info.dropdown-toggle:focus,.open>.btn-outline-info.dropdown-toggle.focus{color:#fff;background-color:#a80000;border-color:maroon}.btn-outline-info.disabled:focus,.btn-outline-info.disabled.focus,.btn-outline-info:disabled:focus,.btn-outline-info:disabled.focus{border-color:#f66}.btn-outline-info.disabled:hover,.btn-outline-info:disabled:hover{border-color:#f66}.btn-outline-success{color:red;background-image:none;background-color:transparent;border-color:red}.btn-outline-success:hover{color:#fff;background-color:red;border-color:red}.btn-outline-success:focus,.btn-outline-success.focus{color:#fff;background-color:red;border-color:red}.btn-outline-success:active,.btn-outline-success.active,.open>.btn-outline-success.dropdown-toggle{color:#fff;background-color:red;border-color:red}.btn-outline-success:active:hover,.btn-outline-success:active:focus,.btn-outline-success:active.focus,.btn-outline-success.active:hover,.btn-outline-success.active:focus,.btn-outline-success.active.focus,.open>.btn-outline-success.dropdown-toggle:hover,.open>.btn-outline-success.dropdown-toggle:focus,.open>.btn-outline-success.dropdown-toggle.focus{color:#fff;background-color:#a80000;border-color:maroon}.btn-outline-success.disabled:focus,.btn-outline-success.disabled.focus,.btn-outline-success:disabled:focus,.btn-outline-success:disabled.focus{border-color:#f66}.btn-outline-success.disabled:hover,.btn-outline-success:disabled:hover{border-color:#f66}.btn-outline-warning{color:red;background-image:none;background-color:transparent;border-color:red}.btn-outline-warning:hover{color:#fff;background-color:red;border-color:red}.btn-outline-warning:focus,.btn-outline-warning.focus{color:#fff;background-color:red;border-color:red}.btn-outline-warning:active,.btn-outline-warning.active,.open>.btn-outline-warning.dropdown-toggle{color:#fff;background-color:red;border-color:red}.btn-outline-warning:active:hover,.btn-outline-warning:active:focus,.btn-outline-warning:active.focus,.btn-outline-warning.active:hover,.btn-outline-warning.active:focus,.btn-outline-warning.active.focus,.open>.btn-outline-warning.dropdown-toggle:hover,.open>.btn-outline-warning.dropdown-toggle:focus,.open>.btn-outline-warning.dropdown-toggle.focus{color:#fff;background-color:#a80000;border-color:maroon}.btn-outline-warning.disabled:focus,.btn-outline-warning.disabled.focus,.btn-outline-warning:disabled:focus,.btn-outline-warning:disabled.focus{border-color:#f66}.btn-outline-warning.disabled:hover,.btn-outline-warning:disabled:hover{border-color:#f66}.btn-outline-danger{color:red;background-image:none;background-color:transparent;border-color:red}.btn-outline-danger:hover{color:#fff;background-color:red;border-color:red}.btn-outline-danger:focus,.btn-outline-danger.focus{color:#fff;background-color:red;border-color:red}.btn-outline-danger:active,.btn-outline-danger.active,.open>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:red;border-color:red}.btn-outline-danger:active:hover,.btn-outline-danger:active:focus,.btn-outline-danger:active.focus,.btn-outline-danger.active:hover,.btn-outline-danger.active:focus,.btn-outline-danger.active.focus,.open>.btn-outline-danger.dropdown-toggle:hover,.open>.btn-outline-danger.dropdown-toggle:focus,.open>.btn-outline-danger.dropdown-toggle.focus{color:#fff;background-color:#a80000;border-color:maroon}.btn-outline-danger.disabled:focus,.btn-outline-danger.disabled.focus,.btn-outline-danger:disabled:focus,.btn-outline-danger:disabled.focus{border-color:#f66}.btn-outline-danger.disabled:hover,.btn-outline-danger:disabled:hover{border-color:#f66}.btn-link{font-weight:normal;color:#f99d53;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link:disabled{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#f67309;text-decoration:underline;background-color:transparent}.btn-link:disabled:focus,.btn-link:disabled:hover{color:red;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:.75rem 1.5rem;font-size:1.25rem;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height;-o-transition-property:height;transition-property:height}.dropup,.dropdown{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.3em;vertical-align:middle;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-left:.3em solid transparent}.dropdown-toggle:focus{outline:0}.dropup .dropdown-toggle::after{border-top:0;border-bottom:.3em solid}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:1rem;color:red;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,0.15);border-radius:.25rem;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175)}.dropdown-divider{height:1px;margin:.5rem 0;overflow:hidden;background-color:#e5e5e5}.dropdown-item{display:block;width:100%;padding:3px 20px;clear:both;font-weight:normal;color:red;text-align:inherit;white-space:nowrap;background:none;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#e60000;text-decoration:none;background-color:#f5f5f5}.dropdown-item.active,.dropdown-item.active:focus,.dropdown-item.active:hover{color:#fff;text-decoration:none;background-color:#f99d53;outline:0}.dropdown-item.disabled,.dropdown-item.disabled:focus,.dropdown-item.disabled:hover{color:red}.dropdown-item.disabled:focus,.dropdown-item.disabled:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:"progid:DXImageTransform.Microsoft.gradient(enabled = false)"}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:5px 20px;font-size:.875rem;color:red;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:.3em solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-0.5rem}.btn-toolbar::after{content:"";display:table;clear:both}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:.5rem}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn+.dropdown-toggle-split::after{margin-left:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:1.125rem;padding-left:1.125rem}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret{border-width:.3em .3em 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret{border-width:0 .3em .3em}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group::after{content:"";display:table;clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;width:100%;display:table;border-collapse:separate}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus,.input-group .form-control:active,.input-group .form-control:hover{z-index:3}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;font-weight:normal;line-height:1.25;color:red;text-align:center;background-color:red;border:1px solid rgba(0,0,0,0.15);border-radius:.25rem}.input-group-addon.form-control-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.2rem}.input-group-addon.form-control-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:.75rem 1.5rem;font-size:1.25rem;border-radius:.3rem}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:not(:last-child),.input-group-addon:not(:last-child),.input-group-btn:not(:last-child)>.btn,.input-group-btn:not(:last-child)>.btn-group>.btn,.input-group-btn:not(:last-child)>.dropdown-toggle,.input-group-btn:not(:first-child)>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:not(:first-child)>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:not(:last-child){border-right:0}.input-group .form-control:not(:first-child),.input-group-addon:not(:first-child),.input-group-btn:not(:first-child)>.btn,.input-group-btn:not(:first-child)>.btn-group>.btn,.input-group-btn:not(:first-child)>.dropdown-toggle,.input-group-btn:not(:last-child)>.btn:not(:first-child),.input-group-btn:not(:last-child)>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.form-control+.input-group-addon:not(:first-child){border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:focus,.input-group-btn>.btn:active,.input-group-btn>.btn:hover{z-index:3}.input-group-btn:not(:last-child)>.btn,.input-group-btn:not(:last-child)>.btn-group{margin-right:-1px}.input-group-btn:not(:first-child)>.btn,.input-group-btn:not(:first-child)>.btn-group{z-index:2;margin-left:-1px}.input-group-btn:not(:first-child)>.btn:focus,.input-group-btn:not(:first-child)>.btn:active,.input-group-btn:not(:first-child)>.btn:hover,.input-group-btn:not(:first-child)>.btn-group:focus,.input-group-btn:not(:first-child)>.btn-group:active,.input-group-btn:not(:first-child)>.btn-group:hover{z-index:3}.custom-control{position:relative;display:inline;padding-left:1.5rem;cursor:pointer}.custom-control+.custom-control{margin-left:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked ~ .custom-control-indicator{color:#fff;background-color:#0074d9;-webkit-box-shadow:none;box-shadow:none}.custom-control-input:focus ~ .custom-control-indicator{-webkit-box-shadow:0 0 0 0.075rem #fff,0 0 0 0.2rem #0074d9;box-shadow:0 0 0 0.075rem #fff,0 0 0 0.2rem #0074d9}.custom-control-input:active ~ .custom-control-indicator{color:#fff;background-color:#84c6ff;-webkit-box-shadow:none;box-shadow:none}.custom-control-input:disabled ~ .custom-control-indicator{cursor:not-allowed;background-color:#eee}.custom-control-input:disabled ~ .custom-control-description{color:#767676;cursor:not-allowed}.custom-control-indicator{position:absolute;top:.0625rem;left:0;display:block;width:1rem;height:1rem;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#ddd;background-repeat:no-repeat;background-position:center center;-webkit-background-size:50% 50%;background-size:50% 50%;-webkit-box-shadow:inset 0 0.25rem 0.25rem rgba(0,0,0,0.1);box-shadow:inset 0 0.25rem 0.25rem rgba(0,0,0,0.1)}.custom-checkbox .custom-control-indicator{border-radius:.25rem}.custom-checkbox .custom-control-input:checked ~ .custom-control-indicator{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-indicator{background-color:#0074d9;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E");-webkit-box-shadow:none;box-shadow:none}.custom-radio .custom-control-indicator{border-radius:50%}.custom-radio .custom-control-input:checked ~ .custom-control-indicator{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-controls-stacked .custom-control{display:inline}.custom-controls-stacked .custom-control::after{display:block;margin-bottom:.25rem;content:""}.custom-controls-stacked .custom-control+.custom-control{margin-left:0}.custom-select{display:inline-block;max-width:100%;padding:.375rem 1.75rem .375rem .75rem;padding-right:.75rem \9;color:red;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-image:none \9;-webkit-background-size:8px 10px;background-size:8px 10px;border:1px solid rgba(0,0,0,0.15);border-radius:.25rem;-moz-appearance:none;-webkit-appearance:none}.custom-select:focus{border-color:#51a7e8;outline:none;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.075),0 0 5px rgba(81,167,232,0.5);box-shadow:inset 0 1px 2px rgba(0,0,0,0.075),0 0 5px rgba(81,167,232,0.5)}.custom-select:focus::-ms-value{color:red;background-color:#fff}.custom-select:disabled{color:red;cursor:not-allowed;background-color:red}.custom-select::-ms-expand{opacity:0}.custom-select-sm{padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-file{position:relative;display:inline-block;max-width:100%;height:2.5rem;cursor:pointer}.custom-file-input{min-width:14rem;max-width:100%;margin:0;filter:alpha(opacity=0);opacity:0}.custom-file-input:focus ~ .custom-file-control{-webkit-box-shadow:0 0 0 0.075rem #fff,0 0 0 0.2rem #0074d9;box-shadow:0 0 0 0.075rem #fff,0 0 0 0.2rem #0074d9}.custom-file-control{position:absolute;top:0;right:0;left:0;z-index:5;height:2.5rem;padding:.5rem 1rem;line-height:1.5;color:#555;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;border:1px solid #ddd;border-radius:.25rem;-webkit-box-shadow:inset 0 0.2rem 0.4rem rgba(0,0,0,0.05);box-shadow:inset 0 0.2rem 0.4rem rgba(0,0,0,0.05)}.custom-file-control:lang(en)::after{content:"Choose file..."}.custom-file-control::before{position:absolute;top:-1px;right:-1px;bottom:-1px;z-index:6;display:block;height:2.5rem;padding:.5rem 1rem;line-height:1.5;color:#555;background-color:#eee;border:1px solid #ddd;border-radius:0 .25rem .25rem 0}.custom-file-control:lang(en)::before{content:"Browse"}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:inline-block}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:red}.nav-link.disabled,.nav-link.disabled:focus,.nav-link.disabled:hover{color:red;cursor:not-allowed;background-color:transparent}.nav-inline .nav-item{display:inline-block}.nav-inline .nav-item+.nav-item,.nav-inline .nav-link+.nav-link{margin-left:1rem}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs::after{content:"";display:table;clear:both}.nav-tabs .nav-item{float:left;margin-bottom:-1px}.nav-tabs .nav-item+.nav-item{margin-left:.2rem}.nav-tabs .nav-link{display:block;padding:0.5em 1em;border:1px solid transparent;border-top-right-radius:.25rem;border-top-left-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:red red #ddd}.nav-tabs .nav-link.disabled,.nav-tabs .nav-link.disabled:focus,.nav-tabs .nav-link.disabled:hover{color:red;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-link.active:focus,.nav-tabs .nav-link.active:hover,.nav-tabs .nav-item.open .nav-link,.nav-tabs .nav-item.open .nav-link:focus,.nav-tabs .nav-item.open .nav-link:hover{color:red;background-color:#fff;border-color:#ddd #ddd transparent}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.nav-pills::after{content:"";display:table;clear:both}.nav-pills .nav-item{float:left}.nav-pills .nav-item+.nav-item{margin-left:.2rem}.nav-pills .nav-link{display:block;padding:0.5em 1em;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .nav-link.active:focus,.nav-pills .nav-link.active:hover,.nav-pills .nav-item.open .nav-link,.nav-pills .nav-item.open .nav-link:focus,.nav-pills .nav-item.open .nav-link:hover{color:#fff;cursor:default;background-color:#f99d53}.nav-stacked .nav-item{display:block;float:none}.nav-stacked .nav-item+.nav-item{margin-top:.2rem;margin-left:0}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar::after{content:"";display:table;clear:both}@media (min-width: 30rem){.navbar{border-radius:.25rem}}.navbar-full{z-index:1000}@media (min-width: 30rem){.navbar-full{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width: 30rem){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0}.navbar-fixed-bottom{bottom:0}.navbar-sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1030;width:100%}@media (min-width: 30rem){.navbar-sticky-top{border-radius:0}}.navbar-brand{float:left;padding-top:.25rem;padding-bottom:.25rem;margin-right:1rem;font-size:1.25rem}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}.navbar-divider{float:left;width:1px;padding-top:.425rem;padding-bottom:.425rem;margin-right:1rem;margin-left:1rem;overflow:hidden}.navbar-divider::before{content:"\00a0"}.navbar-toggler{padding:.5rem .75rem;font-size:1.25rem;line-height:1;background:none;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-nav .nav-item{float:left}.navbar-nav .nav-link{display:block;padding-top:.425rem;padding-bottom:.425rem}.navbar-nav .nav-link+.nav-link{margin-left:1rem}.navbar-nav .nav-item+.nav-item{margin-left:1rem}.navbar-light .navbar-brand{color:rgba(0,0,0,0.8)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,0.8)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,0.3)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,0.6)}.navbar-light .navbar-nav .open>.nav-link,.navbar-light .navbar-nav .open>.nav-link:focus,.navbar-light .navbar-nav .open>.nav-link:hover,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .active>.nav-link:focus,.navbar-light .navbar-nav .active>.nav-link:hover,.navbar-light .navbar-nav .nav-link.open,.navbar-light .navbar-nav .nav-link.open:focus,.navbar-light .navbar-nav .nav-link.open:hover,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.active:focus,.navbar-light .navbar-nav .nav-link.active:hover{color:rgba(0,0,0,0.8)}.navbar-light .navbar-divider{background-color:rgba(0,0,0,0.075)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,0.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,0.75)}.navbar-dark .navbar-nav .open>.nav-link,.navbar-dark .navbar-nav .open>.nav-link:focus,.navbar-dark .navbar-nav .open>.nav-link:hover,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .active>.nav-link:focus,.navbar-dark .navbar-nav .active>.nav-link:hover,.navbar-dark .navbar-nav .nav-link.open,.navbar-dark .navbar-nav .nav-link.open:focus,.navbar-dark .navbar-nav .nav-link.open:hover,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.active:focus,.navbar-dark .navbar-nav .nav-link.active:hover{color:#fff}.navbar-dark .navbar-divider{background-color:rgba(255,255,255,0.075)}.navbar-toggleable-xs::after{content:"";display:table;clear:both}@media (max-width: 29.99rem){.navbar-toggleable-xs .navbar-nav .nav-item{float:none;margin-left:0}}@media (min-width: 30rem){.navbar-toggleable-xs{display:block !important}}.navbar-toggleable-sm::after{content:"";display:table;clear:both}@media (max-width: 47.99rem){.navbar-toggleable-sm .navbar-nav .nav-item{float:none;margin-left:0}}@media (min-width: 48rem){.navbar-toggleable-sm{display:block !important}}.navbar-toggleable-md::after{content:"";display:table;clear:both}@media (max-width: 66.49rem){.navbar-toggleable-md .navbar-nav .nav-item{float:none;margin-left:0}}@media (min-width: 66.5rem){.navbar-toggleable-md{display:block !important}}.card{position:relative;display:block;margin-bottom:.75rem;background-color:#fff;border-radius:.25rem;border:1px solid rgba(0,0,0,0.125)}.card-block{padding:1.25rem}.card-block::after{content:"";display:table;clear:both}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-0.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card>.list-group:first-child .list-group-item:first-child{border-top-right-radius:.25rem;border-top-left-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-header{padding:.75rem 1.25rem;background-color:#f5f5f5;border-bottom:1px solid rgba(0,0,0,0.125)}.card-header::after{content:"";display:table;clear:both}.card-header:first-child{border-radius:.25rem .25rem 0 0}.card-footer{padding:.75rem 1.25rem;background-color:#f5f5f5;border-top:1px solid rgba(0,0,0,0.125)}.card-footer::after{content:"";display:table;clear:both}.card-footer:last-child{border-radius:0 0 .25rem .25rem}.card-header-tabs{margin-right:-0.625rem;margin-bottom:-0.75rem;margin-left:-0.625rem;border-bottom:0}.card-header-pills{margin-right:-0.625rem;margin-left:-0.625rem}.card-primary{background-color:#f99d53;border-color:#f99d53}.card-primary .card-header,.card-primary .card-footer{background-color:transparent}.card-success{background-color:red;border-color:red}.card-success .card-header,.card-success .card-footer{background-color:transparent}.card-info{background-color:red;border-color:red}.card-info .card-header,.card-info .card-footer{background-color:transparent}.card-warning{background-color:red;border-color:red}.card-warning .card-header,.card-warning .card-footer{background-color:transparent}.card-danger{background-color:red;border-color:red}.card-danger .card-header,.card-danger .card-footer{background-color:transparent}.card-outline-primary{background-color:transparent;border-color:#f99d53}.card-outline-secondary{background-color:transparent;border-color:#ccc}.card-outline-info{background-color:transparent;border-color:red}.card-outline-success{background-color:transparent;border-color:red}.card-outline-warning{background-color:transparent;border-color:red}.card-outline-danger{background-color:transparent;border-color:red}.card-inverse .card-header,.card-inverse .card-footer{border-color:rgba(255,255,255,0.2)}.card-inverse .card-header,.card-inverse .card-footer,.card-inverse .card-title,.card-inverse .card-blockquote{color:#fff}.card-inverse .card-link,.card-inverse .card-text,.card-inverse .card-subtitle,.card-inverse .card-blockquote .blockquote-footer{color:rgba(255,255,255,0.65)}.card-inverse .card-link:focus,.card-inverse .card-link:hover{color:#fff}.card-blockquote{padding:0;margin-bottom:0;border-left:0}.card-img{border-radius:.25rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img-top{border-top-right-radius:.25rem;border-top-left-radius:.25rem}.card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}@media (min-width: 30rem){.card-deck{display:table;width:100%;margin-bottom:.75rem;table-layout:fixed;border-spacing:1.25rem 0}.card-deck .card{display:table-cell;margin-bottom:0;vertical-align:top}.card-deck-wrapper{margin-right:-1.25rem;margin-left:-1.25rem}}@media (min-width: 30rem){.card-group{display:table;width:100%;table-layout:fixed}.card-group .card{display:table-cell;vertical-align:top}.card-group .card+.card{margin-left:0;border-left:0}.card-group .card:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.card-group .card:first-child .card-img-top{border-top-right-radius:0}.card-group .card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group .card:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.card-group .card:last-child .card-img-top{border-top-left-radius:0}.card-group .card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group .card:not(:first-child):not(:last-child){border-radius:0}.card-group .card:not(:first-child):not(:last-child) .card-img-top,.card-group .card:not(:first-child):not(:last-child) .card-img-bottom{border-radius:0}}@media (min-width: 30rem){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:red;border-radius:.25rem}.breadcrumb::after{content:"";display:table;clear:both}.breadcrumb-item{float:left}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:red;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:red}.pagination{display:inline-block;padding-left:0;margin-top:1rem;margin-bottom:1rem;border-radius:.25rem}.page-item{display:inline}.page-item:first-child .page-link{margin-left:0;border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.page-item:last-child .page-link{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.page-item.active .page-link,.page-item.active .page-link:focus,.page-item.active .page-link:hover{z-index:2;color:#fff;cursor:default;background-color:#f99d53;border-color:#f99d53}.page-item.disabled .page-link,.page-item.disabled .page-link:focus,.page-item.disabled .page-link:hover{color:red;pointer-events:none;cursor:not-allowed;background-color:#fff;border-color:#ddd}.page-link{position:relative;float:left;padding:.5rem .75rem;margin-left:-1px;color:#f99d53;text-decoration:none;background-color:#fff;border:1px solid #ddd}.page-link:focus,.page-link:hover{color:#f67309;background-color:red;border-color:#ddd}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-bottom-left-radius:.3rem;border-top-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-bottom-right-radius:.3rem;border-top-right-radius:.3rem}.pagination-sm .page-link{padding:.275rem .75rem;font-size:.875rem}.pagination-sm .page-item:first-child .page-link{border-bottom-left-radius:.2rem;border-top-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-bottom-right-radius:.2rem;border-top-right-radius:.2rem}.tag{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.tag:empty{display:none}.btn .tag{position:relative;top:-1px}a.tag:focus,a.tag:hover{color:#fff;text-decoration:none;cursor:pointer}.tag-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.tag-default{background-color:red}.tag-default[href]:focus,.tag-default[href]:hover{background-color:#c00}.tag-primary{background-color:#f99d53}.tag-primary[href]:focus,.tag-primary[href]:hover{background-color:#f78122}.tag-success{background-color:red}.tag-success[href]:focus,.tag-success[href]:hover{background-color:#c00}.tag-info{background-color:red}.tag-info[href]:focus,.tag-info[href]:hover{background-color:#c00}.tag-warning{background-color:red}.tag-warning[href]:focus,.tag-warning[href]:hover{background-color:#c00}.tag-danger{background-color:red}.tag-danger[href]:focus,.tag-danger[href]:hover{background-color:#c00}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:red;border-radius:.3rem}@media (min-width: 30rem){.jumbotron{padding:4rem 2rem}}.jumbotron-hr{border-top-color:#c00}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{padding:15px;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:bold}.alert-dismissible{padding-right:35px}.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d0e9c6;color:#3c763d}.alert-success hr{border-top-color:#c1e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bcdff1;color:#31708f}.alert-info hr{border-top-color:#a6d5ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faf2cc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7ecb5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebcccc;color:#a94442}.alert-danger hr{border-top-color:#e4b9b9}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:block;width:100%;height:1rem;margin-bottom:1rem}.progress[value]{background-color:#eee;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem}.progress[value]::-ms-fill{background-color:#0074d9;border:0}.progress[value]::-moz-progress-bar{background-color:#0074d9;border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.progress[value]::-webkit-progress-value{background-color:#0074d9;border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.progress[value="100"]::-moz-progress-bar{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.progress[value="100"]::-webkit-progress-value{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}.progress[value]::-webkit-progress-bar{background-color:#eee;border-radius:.25rem;-webkit-box-shadow:inset 0 0.1rem 0.1rem rgba(0,0,0,0.1);box-shadow:inset 0 0.1rem 0.1rem rgba(0,0,0,0.1)}base::-moz-progress-bar,.progress[value]{background-color:#eee;border-radius:.25rem;box-shadow:inset 0 0.1rem 0.1rem rgba(0,0,0,0.1)}@media screen and (min-width: 0\0){.progress{background-color:#eee;border-radius:.25rem;-webkit-box-shadow:inset 0 0.1rem 0.1rem rgba(0,0,0,0.1);box-shadow:inset 0 0.1rem 0.1rem rgba(0,0,0,0.1)}.progress-bar{display:inline-block;height:1rem;text-indent:-999rem;background-color:#0074d9;border-bottom-left-radius:.25rem;border-top-left-radius:.25rem}.progress[width="100%"]{border-bottom-right-radius:.25rem;border-top-right-radius:.25rem}}.progress-striped[value]::-webkit-progress-value{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:1rem 1rem;background-size:1rem 1rem}.progress-striped[value]::-moz-progress-bar{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}.progress-striped[value]::-ms-fill{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:1rem 1rem}@media screen and (min-width: 0\0){.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);-webkit-background-size:1rem 1rem;background-size:1rem 1rem}}.progress-animated[value]::-webkit-progress-value{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-animated[value]::-moz-progress-bar{animation:progress-bar-stripes 2s linear infinite}@media screen and (min-width: 0\0){.progress-animated .progress-bar-striped{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}}.progress-success[value]::-webkit-progress-value{background-color:red}.progress-success[value]::-moz-progress-bar{background-color:red}.progress-success[value]::-ms-fill{background-color:red}@media screen and (min-width: 0\0){.progress-success .progress-bar{background-color:red}}.progress-info[value]::-webkit-progress-value{background-color:red}.progress-info[value]::-moz-progress-bar{background-color:red}.progress-info[value]::-ms-fill{background-color:red}@media screen and (min-width: 0\0){.progress-info .progress-bar{background-color:red}}.progress-warning[value]::-webkit-progress-value{background-color:red}.progress-warning[value]::-moz-progress-bar{background-color:red}.progress-warning[value]::-ms-fill{background-color:red}@media screen and (min-width: 0\0){.progress-warning .progress-bar{background-color:red}}.progress-danger[value]::-webkit-progress-value{background-color:red}.progress-danger[value]::-moz-progress-bar{background-color:red}.progress-danger[value]::-ms-fill{background-color:red}@media screen and (min-width: 0\0){.progress-danger .progress-bar{background-color:red}}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden}.media-body{width:10000px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right{padding-left:10px}.media-left{padding-right:10px}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:0}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:.25rem;border-top-left-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:red;cursor:not-allowed;background-color:red}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:red}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;text-decoration:none;background-color:#f99d53;border-color:#f99d53}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#fff}.list-group-flush .list-group-item{border-radius:0}.list-group-item-action{width:100%;color:#555;text-align:inherit}.list-group-item-action .list-group-item-heading{color:#333}.list-group-item-action:focus,.list-group-item-action:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9{padding-bottom:42.85714%}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.embed-responsive-1by1{padding-bottom:100%}.close{float:right;font-size:1.5rem;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0;-webkit-overflow-scrolling:touch}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;-o-transition:transform .3s ease-out, -o-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out, -webkit-transform .3s ease-out, -o-transform .3s ease-out;-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%)}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.in{opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header::after{content:"";display:table;clear:both}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.5}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer::after{content:"";display:table;clear:both}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 30rem){.modal-dialog{max-width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{max-width:300px}}@media (min-width: 66.5rem){.modal-lg{max-width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.in{opacity:.9}.tooltip.tooltip-top,.tooltip.bs-tether-element-attached-bottom{padding:5px 0;margin-top:-3px}.tooltip.tooltip-top .tooltip-arrow,.tooltip.bs-tether-element-attached-bottom .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.tooltip-right,.tooltip.bs-tether-element-attached-left{padding:0 5px;margin-left:3px}.tooltip.tooltip-right .tooltip-arrow,.tooltip.bs-tether-element-attached-left .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.tooltip-bottom,.tooltip.bs-tether-element-attached-top{padding:5px 0;margin-top:3px}.tooltip.tooltip-bottom .tooltip-arrow,.tooltip.bs-tether-element-attached-top .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.tooltip-left,.tooltip.bs-tether-element-attached-right{padding:0 5px;margin-left:-3px}.tooltip.tooltip-left .tooltip-arrow,.tooltip.bs-tether-element-attached-right .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;padding:1px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;font-size:.875rem;word-wrap:break-word;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,0.2);border-radius:.3rem;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.popover-top,.popover.bs-tether-element-attached-bottom{margin-top:-10px}.popover.popover-top .popover-arrow,.popover.bs-tether-element-attached-bottom .popover-arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.popover-top .popover-arrow::after,.popover.bs-tether-element-attached-bottom .popover-arrow::after{bottom:1px;margin-left:-10px;content:"";border-top-color:#fff;border-bottom-width:0}.popover.popover-right,.popover.bs-tether-element-attached-left{margin-left:10px}.popover.popover-right .popover-arrow,.popover.bs-tether-element-attached-left .popover-arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.popover-right .popover-arrow::after,.popover.bs-tether-element-attached-left .popover-arrow::after{bottom:-10px;left:1px;content:"";border-right-color:#fff;border-left-width:0}.popover.popover-bottom,.popover.bs-tether-element-attached-top{margin-top:10px}.popover.popover-bottom .popover-arrow,.popover.bs-tether-element-attached-top .popover-arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.25)}.popover.popover-bottom .popover-arrow::after,.popover.bs-tether-element-attached-top .popover-arrow::after{top:1px;margin-left:-10px;content:"";border-top-width:0;border-bottom-color:#fff}.popover.popover-left,.popover.bs-tether-element-attached-right{margin-left:-10px}.popover.popover-left .popover-arrow,.popover.bs-tether-element-attached-right .popover-arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:rgba(0,0,0,0.25)}.popover.popover-left .popover-arrow::after,.popover.bs-tether-element-attached-right .popover-arrow::after{right:1px;bottom:-10px;content:"";border-right-width:0;border-left-color:#fff}.popover-title{padding:8px 14px;margin:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:.2375rem .2375rem 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover-arrow,.popover-arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover-arrow{border-width:11px}.popover-arrow::after{content:"";border-width:10px}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.carousel-item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.carousel-item>img,.carousel-inner>.carousel-item>a>img{line-height:1}@media all and (transform-3d), (-webkit-transform-3d){.carousel-inner>.carousel-item{-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;-o-transition:transform .6s ease-in-out, -o-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out, -webkit-transform .6s ease-in-out, -o-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.carousel-item.next,.carousel-inner>.carousel-item.active.right{left:0;-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0)}.carousel-inner>.carousel-item.prev,.carousel-inner>.carousel-item.active.left{left:0;-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0)}.carousel-inner>.carousel-item.next.left,.carousel-inner>.carousel-item.prev.right,.carousel-inner>.carousel-item.active{left:0;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);opacity:.5}.carousel-control.left{background-image:-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0.0001)));background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{right:0;left:auto;background-image:-webkit-gradient(linear, left top, right top, from(rgba(0,0,0,0.0001)), to(rgba(0,0,0,0.5)));background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next{position:absolute;top:50%;z-index:5;display:inline-block;width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-prev::before{content:"\2039"}.carousel-control .icon-next::before{content:"\203a"}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:transparent;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media (min-width: 30rem){.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .icon-prev{margin-left:-15px}.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.bg-inverse{background-color:red}.bg-faded{background-color:red}.bg-primary{color:#fff !important;background-color:#f99d53 !important}a.bg-primary:focus,a.bg-primary:hover{background-color:#f78122 !important}.bg-success{color:#fff !important;background-color:red !important}a.bg-success:focus,a.bg-success:hover{background-color:#c00 !important}.bg-info{color:#fff !important;background-color:red !important}a.bg-info:focus,a.bg-info:hover{background-color:#c00 !important}.bg-warning{color:#fff !important;background-color:red !important}a.bg-warning:focus,a.bg-warning:hover{background-color:#c00 !important}.bg-danger{color:#fff !important;background-color:red !important}a.bg-danger:focus,a.bg-danger:hover{background-color:#c00 !important}.clearfix::after{content:"";display:table;clear:both}.d-block{display:block !important}.d-inline-block{display:inline-block !important}.d-inline{display:inline !important}@media (min-width: 20rem){.pull-xs-left{float:left !important}.pull-xs-right{float:right !important}.pull-xs-none{float:none !important}}@media (min-width: 30rem){.pull-sm-left{float:left !important}.pull-sm-right{float:right !important}.pull-sm-none{float:none !important}}@media (min-width: 48rem){.pull-md-left{float:left !important}.pull-md-right{float:right !important}.pull-md-none{float:none !important}}@media (min-width: 66.5rem){.pull-lg-left{float:left !important}.pull-lg-right{float:right !important}.pull-lg-none{float:none !important}}@media (min-width: 86rem){.pull-xl-left{float:left !important}.pull-xl-right{float:right !important}.pull-xl-none{float:none !important}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.w-100{width:100% !important}.m-x-auto{margin-right:auto !important;margin-left:auto !important}.m-a-0{margin:0 0 !important}.m-t-0{margin-top:0 !important}.m-r-0{margin-right:0 !important}.m-b-0{margin-bottom:0 !important}.m-l-0{margin-left:0 !important}.m-x-0{margin-right:0 !important;margin-left:0 !important}.m-y-0{margin-top:0 !important;margin-bottom:0 !important}.m-a-1{margin:1rem 1rem !important}.m-t-1{margin-top:1rem !important}.m-r-1{margin-right:1rem !important}.m-b-1{margin-bottom:1rem !important}.m-l-1{margin-left:1rem !important}.m-x-1{margin-right:1rem !important;margin-left:1rem !important}.m-y-1{margin-top:1rem !important;margin-bottom:1rem !important}.m-a-2{margin:1.5rem 1.5rem !important}.m-t-2{margin-top:1.5rem !important}.m-r-2{margin-right:1.5rem !important}.m-b-2{margin-bottom:1.5rem !important}.m-l-2{margin-left:1.5rem !important}.m-x-2{margin-right:1.5rem !important;margin-left:1.5rem !important}.m-y-2{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-a-3{margin:3rem 3rem !important}.m-t-3{margin-top:3rem !important}.m-r-3{margin-right:3rem !important}.m-b-3{margin-bottom:3rem !important}.m-l-3{margin-left:3rem !important}.m-x-3{margin-right:3rem !important;margin-left:3rem !important}.m-y-3{margin-top:3rem !important;margin-bottom:3rem !important}.p-a-0{padding:0 0 !important}.p-t-0{padding-top:0 !important}.p-r-0{padding-right:0 !important}.p-b-0{padding-bottom:0 !important}.p-l-0{padding-left:0 !important}.p-x-0{padding-right:0 !important;padding-left:0 !important}.p-y-0{padding-top:0 !important;padding-bottom:0 !important}.p-a-1{padding:1rem 1rem !important}.p-t-1{padding-top:1rem !important}.p-r-1{padding-right:1rem !important}.p-b-1{padding-bottom:1rem !important}.p-l-1{padding-left:1rem !important}.p-x-1{padding-right:1rem !important;padding-left:1rem !important}.p-y-1{padding-top:1rem !important;padding-bottom:1rem !important}.p-a-2{padding:1.5rem 1.5rem !important}.p-t-2{padding-top:1.5rem !important}.p-r-2{padding-right:1.5rem !important}.p-b-2{padding-bottom:1.5rem !important}.p-l-2{padding-left:1.5rem !important}.p-x-2{padding-right:1.5rem !important;padding-left:1.5rem !important}.p-y-2{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-a-3{padding:3rem 3rem !important}.p-t-3{padding-top:3rem !important}.p-r-3{padding-right:3rem !important}.p-b-3{padding-bottom:3rem !important}.p-l-3{padding-left:3rem !important}.p-x-3{padding-right:3rem !important;padding-left:3rem !important}.p-y-3{padding-top:3rem !important;padding-bottom:3rem !important}.pos-f-t{position:fixed;top:0;right:0;left:0;z-index:1030}.text-justify{text-align:justify !important}.text-nowrap{white-space:nowrap !important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (min-width: 20rem){.text-xs-left{text-align:left !important}.text-xs-right{text-align:right !important}.text-xs-center{text-align:center !important}}@media (min-width: 30rem){.text-sm-left{text-align:left !important}.text-sm-right{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 48rem){.text-md-left{text-align:left !important}.text-md-right{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 66.5rem){.text-lg-left{text-align:left !important}.text-lg-right{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 86rem){.text-xl-left{text-align:left !important}.text-xl-right{text-align:right !important}.text-xl-center{text-align:center !important}}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.font-weight-normal{font-weight:normal}.font-weight-bold{font-weight:bold}.font-italic{font-style:italic}.text-muted{color:red !important}a.text-muted:focus,a.text-muted:hover{color:#c00}.text-primary{color:#f99d53 !important}a.text-primary:focus,a.text-primary:hover{color:#f78122}.text-success{color:red !important}a.text-success:focus,a.text-success:hover{color:#c00}.text-info{color:red !important}a.text-info:focus,a.text-info:hover{color:#c00}.text-warning{color:red !important}a.text-warning:focus,a.text-warning:hover{color:#c00}.text-danger{color:red !important}a.text-danger:focus,a.text-danger:hover{color:#c00}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.invisible{visibility:hidden !important}@media (min-width: 20rem){.hidden-xs-up{display:none !important}}@media (max-width: 29.99rem){.hidden-xs-down{display:none !important}}@media (min-width: 30rem){.hidden-sm-up{display:none !important}}@media (max-width: 47.99rem){.hidden-sm-down{display:none !important}}@media (min-width: 48rem){.hidden-md-up{display:none !important}}@media (max-width: 66.49rem){.hidden-md-down{display:none !important}}@media (min-width: 66.5rem){.hidden-lg-up{display:none !important}}@media (max-width: 85.99rem){.hidden-lg-down{display:none !important}}@media (min-width: 86rem){.hidden-xl-up{display:none !important}}.hidden-xl-down{display:none !important}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}code{font-family:"Source Code Pro", monospace}.version-picker .product__title,.search-results-title .product__title,.search-result-item-title .product__title,.index .product__card .product__title{font-family:"Muli", sans-serif}.banner__navigation-pane,.index .welcome h1,.index .highlight__container .highlight__title,.index .highlight__container .highlight__link{font-family:"Oswald", sans-serif}body,.index .welcome,.index .product__card{font-family:"GandhiSerif", serif;font-weight:400;font-style:normal}h3,h4,h5,h6,.blocknote .blocknote__title,.content-nav,.code-block__tab-set .code-block__tab a,.code-block__title,.selector__title,.table-of-contents__items{font-family:"OpenSans", verdana, arial, sans-serif;font-weight:400;font-style:normal}h1,h2,.front-matter__title{font-family:"OpenSans", verdana, arial, sans-serif;font-weight:300;font-style:normal}.selector__btn,.other__btn,.selector-list__element a{font-family:"OpenSans", verdana, arial, sans-serif;font-weight:700;font-style:normal}@font-face{font-family:"GandhiSerif";font-weight:400;font-style:normal;src:local("Gandhi Serif Regular"),local("GandhiSerif-Regular"),url("../fonts/gandhiserif-regular.woff") format("woff")}@font-face{font-family:"GandhiSerif";font-weight:400;font-style:italic;src:local("Gandhi Serif Italic"),local("GandhiSerif-Italic"),url("../fonts/gandhiserif-italic.woff") format("woff")}@font-face{font-family:"GandhiSerif";font-weight:700;font-style:normal;src:local("Gandhi Serif Bold"),local("GandhiSerif-Bold"),url("../fonts/gandhiserif-bold.woff") format("woff")}@font-face{font-family:"GandhiSerif";font-weight:700;font-style:italic;src:local("Gandhi Serif Bold Italic"),local("GandhiSerif-BoldItalic"),url("../fonts/gandhiserif-bolditalic.woff") format("woff")}@font-face{font-family:"OpenSans";font-weight:300;font-style:normal;src:local("Open Sans Light"),local("OpenSans-Light"),url("../fonts/opensans-light.woff") format("woff")}@font-face{font-family:"OpenSans";font-weight:400;font-style:normal;src:local("Open Sans Regular"),local("OpenSans"),url("../fonts/opensans-regular.woff") format("woff")}@font-face{font-family:"OpenSans";font-weight:400;font-style:italic;src:local("Open Sans Italic"),local("OpenSans-Italic"),url("../fonts/opensans-italic.woff") format("woff")}@font-face{font-family:"OpenSans";font-weight:700;font-style:normal;src:local("Open Sans Bold"),local("OpenSans-Bold"),url("../fonts/opensans-bold.woff") format("woff")}@font-face{font-family:"OpenSans";font-weight:700;font-style:italic;src:local("Open Sans Bold Italic"),local("OpenSans-BoldItalic"),url("../fonts/opensans-bolditalic.woff") format("woff")}@font-face{font-family:"DocsFontIcons";font-weight:normal;font-style:normal;src:local("DocsFontIcons Regular"),local("DocsFontIcons"),url("../fonts/docsfonticons.woff") format("woff")}.docs-icon--lambda:before,.docs-icon--lambda-bold:before,.docs-icon--beaker:before,.docs-icon--cog:before,.docs-icon--github-alt:before,.docs-icon--comments:before,.docs-icon--bolt:before,.docs-icon--question-sign:before,.docs-icon--tools:before,.docs-icon--search:before,.docs-icon--download-alt:before,.docs-icon--github:before,.docs-icon--reorder:before,.docs-icon--more:before,.docs-icon--riak:before,.docs-icon--database:before,.docs-icon--install:before,.docs-icon--cloud:before,.docs-icon--configure:before,.docs-icon--references:before,.docs-icon--time:before{font-family:'DocsFontIcons';font-style:normal;font-weight:normal;font-variant:normal;speak:none;text-transform:none;line-height:1}.docs-icon--lambda:before{content:"\e005"}.docs-icon--lambda-bold:before{content:"\e00b"}.docs-icon--beaker:before{content:"\f0c3"}.docs-icon--cog:before{content:"\f013"}.docs-icon--github-alt:before{content:"\e004"}.docs-icon--comments:before{content:"\e000"}.docs-icon--bolt:before{content:"\f0e7"}.docs-icon--question-sign:before{content:"\f059"}.docs-icon--tools:before{content:"\e001"}.docs-icon--search:before{content:"\f002"}.docs-icon--download-alt:before{content:"\f019"}.docs-icon--github:before{content:"\e009"}.docs-icon--reorder:before{content:"\f0c9"}.docs-icon--more:before{content:"\e002"}.docs-icon--riak:before{content:"\e003"}.docs-icon--database:before{content:"\e006"}.docs-icon--install:before{content:"\e007"}.docs-icon--cloud:before{content:"\e008"}.docs-icon--configure:before{content:"\e00a"}.docs-icon--references:before{content:"\f02d"}.docs-icon--time:before{content:"\f017"}.inline{display:inline !important}.block{display:block !important}.inline-block{display:inline-block !important}.table{display:table !important}.inline-table{display:inline-table !important}.table-row{display:table-row !important}.table-cell{display:table-cell !important}.hidden{display:none !important}.float-left{float:left}.float-right{float:right}.clear{clear:both}.clear-left{clear:left}.clear-right{clear:right}.overflow{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-scroll{overflow:scroll}.overflow-x{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-x-visible{overflow-x:visible}.overflow-x-scroll{overflow-x:scroll}.overflow-y{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.overflow-y-visible{overflow-y:visible}.overflow-y-scroll{overflow-y:scroll}.inline-only-xs{display:none !important}.block-only-xs{display:none !important}.inline-block-only-xs{display:none !important}@media (min-width: 20rem) and (max-width: 29.99rem){.inline-only-xs{display:inline !important}.block-only-xs{display:block !important}.inline-block-only-xs{display:inline-block !important}}.inline-only-sm{display:none !important}.block-only-sm{display:none !important}.inline-block-only-sm{display:none !important}@media (min-width: 30rem) and (max-width: 47.99rem){.inline-only-sm{display:inline !important}.block-only-sm{display:block !important}.inline-block-only-sm{display:inline-block !important}}.inline-only-md{display:none !important}.block-only-md{display:none !important}.inline-block-only-md{display:none !important}@media (min-width: 48rem) and (max-width: 66.49rem){.inline-only-md{display:inline !important}.block-only-md{display:block !important}.inline-block-only-md{display:inline-block !important}}.inline-only-lg{display:none !important}.block-only-lg{display:none !important}.inline-block-only-lg{display:none !important}@media (min-width: 66.5rem) and (max-width: 85.99rem){.inline-only-lg{display:inline !important}.block-only-lg{display:block !important}.inline-block-only-lg{display:inline-block !important}}.inline-only-xl{display:none !important}.block-only-xl{display:none !important}.inline-block-only-xl{display:none !important}@media (min-width: 86rem){.inline-only-xl{display:inline !important}.block-only-xl{display:block !important}.inline-block-only-xl{display:inline-block !important}}@media (min-width: 20rem){.float-left-xs-up{float:left}.float-right-xs-up{float:right}.float-none-xs-up{float:none}}@media (min-width: 30rem){.float-left-sm-up{float:left}.float-right-sm-up{float:right}.float-none-sm-up{float:none}}@media (min-width: 48rem){.float-left-md-up{float:left}.float-right-md-up{float:right}.float-none-md-up{float:none}}@media (min-width: 66.5rem){.float-left-lg-up{float:left}.float-right-lg-up{float:right}.float-none-lg-up{float:none}}@media (min-width: 86rem){.float-left-xl-up{float:left}.float-right-xl-up{float:right}.float-none-xl-up{float:none}}@media (max-width: 29.99rem){.float-left-xs-down{float:left}.float-right-xs-down{float:right}.float-none-xs-down{float:none}}@media (max-width: 47.99rem){.float-left-sm-down{float:left}.float-right-sm-down{float:right}.float-none-sm-down{float:none}}@media (max-width: 66.49rem){.float-left-md-down{float:left}.float-right-md-down{float:right}.float-none-md-down{float:none}}@media (max-width: 85.99rem){.float-left-lg-down{float:left}.float-right-lg-down{float:right}.float-none-lg-down{float:none}}.float-left-xl-down{float:left}.float-right-xl-down{float:right}.float-none-xl-down{float:none}.hide-text{overflow:hidden;padding:0;text-indent:101%;white-space:nowrap}.visually-hidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.hljs{background:#f7f7f7;color:#454d54}.hljs-comment,.hljs-quote{color:#9199a1;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-addition{color:#6c8997;font-weight:bold}.hljs-number,.hljs-string,.hljs-params,.hljs-meta .hljs-meta-string,.hljs-literal,.hljs-doctag,.hljs-regexp{color:#dc7d00}.hljs-title,.hljs-section,.hljs-name,.hljs-selector-id,.hljs-selector-class{color:#79aeb6}.hljs-attribute,.hljs-attr,.hljs-variable,.hljs-template-variable,.hljs-class .hljs-title,.hljs-type{color:#597471}.hljs-symbol,.hljs-bullet,.hljs-subst,.hljs-meta,.hljs-meta .hljs-keyword,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-link{color:#f99d53}.hljs-built_in,.hljs-deletion{color:#ee6201}.hljs-formula{background:#ebebeb}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}html{font-size:initial}body{color:#454d54}main{font-size:110%}code{color:#454d54;background:#e3e6e8;border-radius:.25rem;padding:0.1rem 0.25rem;-webkit-transition:color 150ms ease-in;-o-transition:color 150ms ease-in;transition:color 150ms ease-in}a{color:#337ab7;text-decoration:underline;cursor:pointer;-webkit-transition:color 150ms ease-in;-o-transition:color 150ms ease-in;transition:color 150ms ease-in}a:not([href]):hover,a:not([href]):active,a:not([href]):focus{cursor:default}a code{color:#337ab7}a:hover,a:active,a:focus{color:#e78505;text-decoration:underline}a:hover code,a:active code,a:focus code{color:#e78505}.main-article a[href^="http://"],.main-article a[href^="https://"]{display:inline-block}.main-article a[href^="http://"]::after,.main-article a[href^="https://"]::after{content:"";display:inline-block;text-align:left;width:.75rem;height:.625rem;margin-right:-.0625rem;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAUklEQVR42m3O0QkAMQgD0JvWNZzDndwpRz5SepcIQWof6APgk+5GiKOZwa8EHTMGqwp3ONzdDFUXYufbYES6WVCfHB7EuW5mF7R1goqgVYQhBl+awCunCZHg2gAAAABJRU5ErkJggg==") no-repeat right}.main-article a[href$=".pdf"],.main-article a[href$=".PDF"]{display:inline-block}.main-article a[href$=".pdf"]::after,.main-article a[href$=".PDF"]::after{content:"";display:inline-block;width:1rem;height:1rem;background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAYAAAAmlE46AAAEJGlDQ1BJQ0MgUHJvZmlsZQAAOBGFVd9v21QUPolvUqQWPyBYR4eKxa9VU1u5GxqtxgZJk6XtShal6dgqJOQ6N4mpGwfb6baqT3uBNwb8AUDZAw9IPCENBmJ72fbAtElThyqqSUh76MQPISbtBVXhu3ZiJ1PEXPX6yznfOec7517bRD1fabWaGVWIlquunc8klZOnFpSeTYrSs9RLA9Sr6U4tkcvNEi7BFffO6+EdigjL7ZHu/k72I796i9zRiSJPwG4VHX0Z+AxRzNRrtksUvwf7+Gm3BtzzHPDTNgQCqwKXfZwSeNHHJz1OIT8JjtAq6xWtCLwGPLzYZi+3YV8DGMiT4VVuG7oiZpGzrZJhcs/hL49xtzH/Dy6bdfTsXYNY+5yluWO4D4neK/ZUvok/17X0HPBLsF+vuUlhfwX4j/rSfAJ4H1H0qZJ9dN7nR19frRTeBt4Fe9FwpwtN+2p1MXscGLHR9SXrmMgjONd1ZxKzpBeA71b4tNhj6JGoyFNp4GHgwUp9qplfmnFW5oTdy7NamcwCI49kv6fN5IAHgD+0rbyoBc3SOjczohbyS1drbq6pQdqumllRC/0ymTtej8gpbbuVwpQfyw66dqEZyxZKxtHpJn+tZnpnEdrYBbueF9qQn93S7HQGGHnYP7w6L+YGHNtd1FJitqPAR+hERCNOFi1i1alKO6RQnjKUxL1GNjwlMsiEhcPLYTEiT9ISbN15OY/jx4SMshe9LaJRpTvHr3C/ybFYP1PZAfwfYrPsMBtnE6SwN9ib7AhLwTrBDgUKcm06FSrTfSj187xPdVQWOk5Q8vxAfSiIUc7Z7xr6zY/+hpqwSyv0I0/QMTRb7RMgBxNodTfSPqdraz/sDjzKBrv4zu2+a2t0/HHzjd2Lbcc2sG7GtsL42K+xLfxtUgI7YHqKlqHK8HbCCXgjHT1cAdMlDetv4FnQ2lLasaOl6vmB0CMmwT/IPszSueHQqv6i/qluqF+oF9TfO2qEGTumJH0qfSv9KH0nfS/9TIp0Wboi/SRdlb6RLgU5u++9nyXYe69fYRPdil1o1WufNSdTTsp75BfllPy8/LI8G7AUuV8ek6fkvfDsCfbNDP0dvRh0CrNqTbV7LfEEGDQPJQadBtfGVMWEq3QWWdufk6ZSNsjG2PQjp3ZcnOWWing6noonSInvi0/Ex+IzAreevPhe+CawpgP1/pMTMDo64G0sTCXIM+KdOnFWRfQKdJvQzV1+Bt8OokmrdtY2yhVX2a+qrykJfMq4Ml3VR4cVzTQVz+UoNne4vcKLoyS+gyKO6EHe+75Fdt0Mbe5bRIf/wjvrVmhbqBN97RD1vxrahvBOfOYzoosH9bq94uejSOQGkVM6sN/7HelL4t10t9F4gPdVzydEOx83Gv+uNxo7XyL/FtFl8z9ZAHF4bBsrEwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAlVJREFUKBWNUUtrE1EU/uaRkIehWAilWtJUBdPiLi7EjUJdxIWLbnSThX9A/BGCVGs24k4qNNSdaDa6kqJ14cKQohAtahJJwce0eZFkkjuv6zk36kYEL5yZO3fO9zjfhfy/5f1qu0pvUJma63qyXq+h027DMAzYoxGEEOj1evB9X9VgMJDD4VDL5/NIJpPLALbAh++rVekIIR3H+auIRIk1Go2gUCjIZrPJ3yd1QkPXdfhBAAIrNWKHbduqeM8OqFnLZDIolUpotVq7CshgTdPgep6yxnuNyEaVHRzcvQfxw0IqnUYul0MikQA5g8lz8FwBK9KBxiw0K8ZjiO1tOLUGrEoFsWgEU5Ho5D+1/FFkoAqD3i5Zc0jRXszA+/gJAZELIg0CXzljbp2bKSB1wHsmcKnJpdjDqRT0E8chj85C0MxBIHkmxk0UJTUzgIuDUHsikaEwhg+LsB9swOt2MfZc9Dpd9V+nGFSiDGBFJnG5+n045TKmVm8hRA7kkxI0chYQWND8pk++OXperMRADkejhGWtDufCMvSFBXhXLuPL/U3MTifQrn6AqRD0oHtSQNowA4TrwrEs6Ku34dsjmNeuI76UgfF8C7FwGCYDTFIImaYC8v2pa3n0GOE3O9AvXcT4/DmI6cNIzs3hGxGeWVmZAJt7e8hms5gnS/16HdaNm/CquzhSXIdMz8MhxVg8ptI/2N+HQSJmNBpVB3fW1uAfiuPsq9cwyu/w+fQpfC1uwOp0oJH1306SMzOIRCJqNnJLiy6JV+vpM/n22KL8/uKl+v7X4yd/uu5KwdHdQAAAAABJRU5ErkJggg==") no-repeat right}h1{color:red;line-height:initial;font-size:initial;margin-top:initial;margin-bottom:initial}h2{color:#636567;line-height:1.2;font-size:2.30rem;margin-top:3.00rem;padding-bottom:1.00rem}h3{color:#636567;line-height:1.2;font-size:1.70rem;margin-top:1.75rem;padding-bottom:0.50rem}h4{color:#636567;line-height:1.2;font-size:1.50rem;margin-top:1.25rem;padding-bottom:0.50rem}h5{color:#636567;line-height:1.2;font-size:1.30rem;margin-top:0.00rem;padding-bottom:0.50rem}h6{color:#636567;line-height:1.2;font-size:1.25rem;margin-top:0.00rem;padding-bottom:0.50rem}h1,h2,h3,h4,h5,h6{margin-bottom:0}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{color:#636567;text-decoration:none}h1 a code,h2 a code,h3 a code,h4 a code,h5 a code,h6 a code{color:#636567}h1 a:hover,h1 a:active,h1 a:focus,h2 a:hover,h2 a:active,h2 a:focus,h3 a:hover,h3 a:active,h3 a:focus,h4 a:hover,h4 a:active,h4 a:focus,h5 a:hover,h5 a:active,h5 a:focus,h6 a:hover,h6 a:active,h6 a:focus{color:#636567;text-decoration:none}h1 a:hover code,h1 a:active code,h1 a:focus code,h2 a:hover code,h2 a:active code,h2 a:focus code,h3 a:hover code,h3 a:active code,h3 a:focus code,h4 a:hover code,h4 a:active code,h4 a:focus code,h5 a:hover code,h5 a:active code,h5 a:focus code,h6 a:hover code,h6 a:active code,h6 a:focus code{color:#636567}h1 a a:hover,h1 a a:active,h1 a a:focus,h2 a a:hover,h2 a a:active,h2 a a:focus,h3 a a:hover,h3 a a:active,h3 a a:focus,h4 a a:hover,h4 a a:active,h4 a a:focus,h5 a a:hover,h5 a a:active,h5 a a:focus,h6 a a:hover,h6 a a:active,h6 a a:focus{color:#e78505}hr{border-top:1px dashed #d4d9de}blockquote{font-size:90%;margin-left:2rem;border-left:0.25rem solid #b8bfc7;padding-left:1rem;margin-top:1.5rem;margin-right:1rem}.blocknote{font-size:90%;background:#e1eef4;border-radius:.5rem;border:1px solid #bcd6d0;padding:1rem 1rem 1rem 1rem;margin:1.5rem}.blocknote p:last-of-type{margin-bottom:0}.blocknote .blocknote__title{font-size:110%;padding-bottom:0.25rem}@media (min-width: 48rem){.blocknote{margin-right:1rem}}pre code{display:block;overflow-x:auto;border-radius:.3rem;font-size:90%;color:#454d54;background:#f7f7f7;border:1px solid #b8bfc7;padding:0.5rem 1rem}pre+pre{display:none}ol,ul,dt{margin-bottom:1rem;padding-left:2.5rem;list-style-position:outside}main,h1,h2,h3,h4,h5,h6{counter-reset:ol1counter ol2counter ol3counter ol4counter}ol>li{list-style-type:none}ol:first-of-type{counter-reset:ol1counter}ol ol:first-of-type{counter-reset:ol2counter}ol ol ol:first-of-type{counter-reset:ol3counter}ol ol ol ol:first-of-type{counter-reset:ol4counter}ol>li:before{content:counter(ol1counter) ". ";counter-increment:ol1counter;margin-left:-30px;display:inline-block;width:30px}ol ol>li:before{content:counter(ol2counter) ". ";counter-increment:ol2counter}ol ol ol>li:before{content:counter(ol3counter) ". ";counter-increment:ol3counter}ol ol ol ol>li:before{content:counter(ol4counter) ". ";counter-increment:ol4counter}li>p:first-child{display:inline;margin-bottom:0}li>p:first-child+p,li>p:first-child+div{margin-top:1rem}table{margin-top:1rem;margin-bottom:1rem}table code{background:transparent;padding:0;font-size:95%}table caption{color:#454d54}thead{border-bottom:1px solid #454d54}th{padding:0.25rem 0.5rem}td{padding:0.5rem;vertical-align:top}.main-article img{max-width:100%}::-moz-selection{background:#feca87}::selection{background:#feca87}.content-nav{position:fixed;z-index:200;width:100%;top:3.5rem;bottom:0;left:-200%;-webkit-transition:left 200ms ease-in-out 50ms;-o-transition:left 200ms ease-in-out 50ms;transition:left 200ms ease-in-out 50ms}@media (max-width: 47.99rem){.content-nav.content-nav--fullscreen{left:0}}@media (min-width: 48rem){.content-nav{top:4.5rem;bottom:2rem;left:1rem;width:13rem}}@media (min-width: 66.5rem){.content-nav{width:15rem}}.banner{position:fixed;z-index:400;top:0;left:0;right:0;height:3.5rem}@media (min-width: 48rem){.banner{left:0;height:4.5rem}}.content-well{width:100%;padding-top:3.5rem}@media (min-width: 48rem){.content-well{padding-top:4.5rem;padding-right:0.5rem;margin-right:auto;padding-left:16rem;max-width:62.5rem}}@media (min-width: 66.5rem){.content-well{padding-left:19rem;max-width:65.5rem}}@media (min-width: 86rem){.content-well{padding-left:20.5rem;max-width:78rem}}@media (max-width: 47.99rem){.content-well.content-well--immobile{position:fixed;overflow:hidden}}.main-article{padding:.5rem 0.5rem 0 0.5rem}@media (min-width: 48rem){.main-article{padding-top:.5rem}}@media (max-width: 47.99rem){.ERROR404 .main-article{text-align:center}}.main-article main{position:relative;z-index:100}.main-article main h1,.main-article main h2,.main-article main h3,.main-article main h4,.main-article main h5,.main-article main h6{position:relative}.main-article main h1:before,.main-article main h2:before,.main-article main h3:before,.main-article main h4:before,.main-article main h5:before,.main-article main h6:before{display:block;visibility:hidden;content:" ";height:0;margin-top:-4rem;padding-top:4rem}@media (min-width: 48rem){.main-article main h1:before,.main-article main h2:before,.main-article main h3:before,.main-article main h4:before,.main-article main h5:before,.main-article main h6:before{margin-top:-5rem;padding-top:5rem}}.main-article main h1{z-index:-1}.main-article main h2{z-index:-2}.main-article main h3{z-index:-3}.main-article main h4{z-index:-4}.main-article main h5{z-index:-5}.main-article main h6{z-index:-6}.banner{padding:0 1rem 0 1.25rem;background:#f7f7f7;-webkit-box-shadow:0 0 1.5rem 0 rgba(0,0,0,0.4);box-shadow:0 0 1.5rem 0 rgba(0,0,0,0.4)}@media (min-width: 48rem){.banner{background:#ededf0;padding:0 0 0 1.5rem}}.banner__docs-logo{position:relative;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%)}.banner__docs-logo .docs-logo__image{width:9.375rem;height:auto}@media (min-width: 48rem){.banner__docs-logo{position:static;top:initial;-webkit-transform:none;-ms-transform:none;-o-transform:none;transform:none;padding-top:1.25rem}.banner__docs-logo .docs-logo__image{width:10.1875rem;height:auto}}.banner__menu-bars{height:100%}.banner__menu-bars .menu-bars{font-size:2.5rem;position:relative;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%)}.banner__navigation-pane{text-transform:uppercase;height:100%}.banner__navigation-pane a{text-decoration:none}.banner__intra-brand__width-wrapper{position:relative;width:100%;margin-bottom:.4rem;padding-left:7rem}@media (min-width: 66.5rem){.banner__intra-brand__width-wrapper{padding-left:11rem;max-width:53.8125rem}}@media (min-width: 86rem){.banner__intra-brand__width-wrapper{padding-left:13.5rem;max-width:66.3125rem}}.index .banner__intra-brand__width-wrapper{max-width:none}.banner__intra-brand__width-wrapper::after{display:block;content:"";position:absolute;left:100%;height:2rem;width:2000rem;background:#6b737a}.banner__intra-brand{background:#6b737a;width:100%;height:2rem}.banner__intra-brand::before{display:inline-block;content:"";border:0px solid transparent;border-bottom-width:2rem;border-right-width:1.5rem;border-bottom-color:#ededf0}.banner__intra-brand .banner__brand-link{font-size:90%;color:#e3e6e8;height:2rem;padding-top:0.35rem;padding-right:1rem;padding-left:1rem}.banner__intra-brand .banner__brand-link:first-of-type{margin-left:3rem}.banner__intra-brand .banner__brand-link:last-of-type{margin-right:1.25rem}.banner__intra-brand .banner__brand-link:hover,.banner__intra-brand .banner__brand-link:active,.banner__intra-brand .banner__brand-link:focus{color:#bcd6d0}.banner__intra-site__width-wrapper{width:100%}@media (min-width: 66.5rem){.banner__intra-site__width-wrapper{max-width:53.8125rem}}@media (min-width: 86rem){.banner__intra-site__width-wrapper{max-width:66.3125rem}}.banner__intra-site{height:2.1rem}.banner__intra-site .banner__brand-link{font-size:110%;color:#e78505;height:100%;padding-left:1.25rem;padding-right:1.25rem;margin-right:0.5rem;-webkit-transition:color 200ms ease-in, background 200ms ease-in;-o-transition:color 200ms ease-in, background 200ms ease-in;transition:color 200ms ease-in, background 200ms ease-in}.banner__intra-site .banner__brand-link:last-of-type{margin-right:1rem}.banner__intra-site .banner__brand-link:hover,.banner__intra-site .banner__brand-link:active,.banner__intra-site .banner__brand-link:focus{color:#636567;background:#e0e0e3}.banner__intra-site .banner__brand-link.banner__brand-link--current{color:#636567;background:#e0e0e3}.content-nav{color:#788087}@media (min-width: 20rem) and (max-width: 29.99rem){.content-nav{font-size:100%}}@media (min-width: 30rem) and (max-width: 47.99rem){.content-nav{font-size:100%}}@media (min-width: 48rem) and (max-width: 66.49rem){.content-nav{font-size:80%}}@media (min-width: 66.5rem) and (max-width: 85.99rem){.content-nav{font-size:90%}}@media (min-width: 86rem){.content-nav{font-size:90%}}.no-js .content-nav{display:none !important}.content-nav__fixed-top{position:fixed;width:inherit;padding-top:.5rem;background:#f7f7f7;-webkit-box-shadow:-0.125rem -0.125rem 2rem -0.25rem rgba(0,0,0,0.8);box-shadow:-0.125rem -0.125rem 2rem -0.25rem rgba(0,0,0,0.8);-webkit-transition:height 500ms ease;-o-transition:height 500ms ease;transition:height 500ms ease}.content-nav--top-size-full .content-nav__fixed-top{height:8rem}.content-nav--top-size-half .content-nav__fixed-top{height:4rem}@media (min-width: 48rem){.content-nav__fixed-top{z-index:1;width:12.75rem;padding-left:0.5rem;padding-right:0.5rem;padding-top:1rem;-webkit-box-shadow:-0.125rem -0.125rem 2rem -0.25rem rgba(0,0,0,0.2);box-shadow:-0.125rem -0.125rem 2rem -0.25rem rgba(0,0,0,0.2)}.content-nav--top-size-full .content-nav__fixed-top{height:7.5rem}.content-nav--top-size-half .content-nav__fixed-top{height:4.5rem}}@media (min-width: 66.5rem){.content-nav__fixed-top{width:14.75rem;padding-top:1rem}.content-nav--top-size-full .content-nav__fixed-top{height:7.75rem}.content-nav--top-size-half .content-nav__fixed-top{height:4.5rem}}.version-picker,.search-results-title,.search-result-item-title{margin:0.5rem 0.75rem 0.5rem 0.75rem}@media (min-width: 48rem){.version-picker,.search-results-title,.search-result-item-title{margin-left:0.25rem;margin-right:0.25rem}}.version-picker .product__title,.search-results-title .product__title,.search-result-item-title .product__title{font-size:2.20em;font-weight:700;line-height:1;margin-top:0.3em;color:#788087;text-transform:lowercase;text-decoration:none;-webkit-transition:color 500ms ease;-o-transition:color 500ms ease;transition:color 500ms ease}@media (min-width: 48rem){.version-picker .product__title,.search-results-title .product__title,.search-result-item-title .product__title{margin-top:0.35em}}@media (min-width: 66.5rem){.version-picker .product__title,.search-results-title .product__title,.search-result-item-title .product__title{font-size:2.40em;margin-top:0.25em}}.version-picker .product__title .product__logo,.search-results-title .product__title .product__logo,.search-result-item-title .product__title .product__logo{height:0.60em;width:0.60em;margin-bottom:0.10em}.version-picker .product__title .product__title-highlight,.search-results-title .product__title .product__title-highlight,.search-result-item-title .product__title .product__title-highlight{color:#fcc074;text-transform:uppercase;font-size:70.5%;font-weight:400;-webkit-transition:color 500ms ease;-o-transition:color 500ms ease;transition:color 500ms ease}.version-picker .product__title:hover,.version-picker .product__title:active,.version-picker .product__title:focus,.search-results-title .product__title:hover,.search-results-title .product__title:active,.search-results-title .product__title:focus,.search-result-item-title .product__title:hover,.search-result-item-title .product__title:active,.search-result-item-title .product__title:focus{color:#636567}.version-picker .product__title:hover .product__title-highlight,.version-picker .product__title:active .product__title-highlight,.version-picker .product__title:focus .product__title-highlight,.search-results-title .product__title:hover .product__title-highlight,.search-results-title .product__title:active .product__title-highlight,.search-results-title .product__title:focus .product__title-highlight,.search-result-item-title .product__title:hover .product__title-highlight,.search-result-item-title .product__title:active .product__title-highlight,.search-result-item-title .product__title:focus .product__title-highlight{color:#f99d53}.content-nav__primary__sizing-box{position:relative;height:100%;-webkit-transition:top 500ms ease, padding-bottom 500ms ease;-o-transition:top 500ms ease, padding-bottom 500ms ease;transition:top 500ms ease, padding-bottom 500ms ease}.content-nav--top-size-full .content-nav__primary__sizing-box{top:8.5rem;padding-bottom:8.5rem}.content-nav--top-size-half .content-nav__primary__sizing-box{top:4.5rem;padding-bottom:4.5rem}@media (min-width: 48rem){.content-nav--top-size-full .content-nav__primary__sizing-box{top:8.5rem;padding-bottom:8.5rem}.content-nav--top-size-half .content-nav__primary__sizing-box{top:5.5rem;padding-bottom:5.5rem}}@media (min-width: 66.5rem){.content-nav--top-size-full .content-nav__primary__sizing-box{top:8.75rem;padding-bottom:8.75rem}.content-nav--top-size-half .content-nav__primary__sizing-box{top:5.5rem;padding-bottom:5.5rem}}.content-nav__primary__shadow-box{-webkit-box-shadow:-0.25rem -0.25rem 4rem -0.5rem rgba(0,0,0,0.8);box-shadow:-0.25rem -0.25rem 4rem -0.5rem rgba(0,0,0,0.8);height:100%}@media (min-width: 48rem){.content-nav__primary__shadow-box{-webkit-box-shadow:-0.25rem -0.25rem 4rem -0.5rem rgba(0,0,0,0.2);box-shadow:-0.25rem -0.25rem 4rem -0.5rem rgba(0,0,0,0.2)}}.content-nav__primary{background:#f7f7f7;height:100%}.content-nav__menu-container{min-height:100%;padding-bottom:8.0625rem}.content-nav__fixed-bottom{height:8.0625rem;margin-top:-8.0625rem;font-size:90%;line-height:1.1rem;background:#9199a1}.footer{padding:1rem .25rem 0rem .25rem;margin-top:2rem;font-size:80%;line-height:1.2;text-align:center;color:#9199a1;border-top:1px solid #d4d9de}@media (min-width: 48rem){.footer{padding:2rem 1rem 1rem 1rem;margin-top:0}}.footer a{color:#9199a1}.footer a:hover,.footer a:active,.footer a:focus{color:#79aeb6}.index .footer{position:relative;padding-top:2rem;margin-top:0}@media (min-width: 66.5rem){.index .footer{text-align:center}}@media (min-width: 48rem){.footer__attributions{text-align:center}}.footer__social{margin:0 0.5rem 1.5rem 0.5rem}@media (min-width: 48rem){.footer__social{margin-bottom:0}}@media (min-width: 66.5rem){.footer__social{position:absolute;right:0;top:0;margin-top:2.2rem;margin-right:2.0rem}}@font-face{font-family:"anchorjs-icons";src:url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype")}.anchor-icon::after{-webkit-transition:opacity 100ms ease-in;-o-transition:opacity 100ms ease-in;transition:opacity 100ms ease-in;opacity:0;font-family:'anchorjs-icons';font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;content:"\e9cb";padding-left:0.2em;vertical-align:bottom;font-size:1.2em}.anchor-icon:hover::after,.anchor-icon:active::after,.anchor-icon:focus::after{opacity:1}.code-block__tab-set-wrapper{position:relative}.code-block__tab-set-wrapper .edge-fader{font-size:1rem;width:2rem;height:100%}.code-block__tab-set{white-space:nowrap;list-style:none;padding:0 2rem;margin:0 0 0.5rem 0}.code-block__tab-set .code-block__tab a{text-transform:uppercase;font-size:90%;color:#f99d53;text-decoration:none;border-radius:.25rem;padding:0.5rem 0.5rem;margin-right:0.25rem;-webkit-transition:background-color 200ms ease 50ms, color 200ms ease 50ms;-o-transition:background-color 200ms ease 50ms, color 200ms ease 50ms;transition:background-color 200ms ease 50ms, color 200ms ease 50ms}.code-block__tab-set .code-block__tab a:hover,.code-block__tab-set .code-block__tab a:active,.code-block__tab-set .code-block__tab a:focus{background:#f7f7f7;color:#6c8997;text-decoration:none}.code-block__tab-set .code-block__tab--active a{color:#636567;cursor:default;background:#f7f7f7}.code-block__tab-set .code-block__tab--active a:hover,.code-block__tab-set .code-block__tab--active a:active,.code-block__tab-set .code-block__tab--active a:focus{color:#636567}.code-block__title{text-transform:uppercase;font-size:90%;color:#636567;border-radius:.25rem;padding:0.5rem 0.75rem;margin:0 0 0.25rem 0.75rem;background:#f7f7f7}.content-menu{display:none;margin:0;padding-left:0;list-style:none;margin-top:-0.3rem;padding-top:0.3rem}.content-menu.content-menu--depth-0{margin-top:0;padding-top:0}.content-menu.content-menu--open{display:block}.content-menu.content-menu--depth-0>li{-webkit-box-shadow:0 -0.2rem 0.7rem -0.2rem rgba(0,0,0,0.1);box-shadow:0 -0.2rem 0.7rem -0.2rem rgba(0,0,0,0.1)}.content-menu__link--depth-1{padding-left:1.75rem}@media (min-width: 48rem){.content-menu__link--depth-1{padding-left:1.125rem}}.content-menu__link--depth-2{padding-left:2.50rem}@media (min-width: 48rem){.content-menu__link--depth-2{padding-left:1.625rem}}.content-menu__link--depth-3{padding-left:3.25rem}@media (min-width: 48rem){.content-menu__link--depth-3{padding-left:2.125rem}}.content-menu__link--depth-4{padding-left:4.00rem}@media (min-width: 48rem){.content-menu__link--depth-4{padding-left:2.625rem}}.content-menu__link--depth-5{padding-left:4.75rem}@media (min-width: 48rem){.content-menu__link--depth-5{padding-left:3.125rem}}.content-menu__download-entry{background:#ffd195;-webkit-transition:background 500ms ease;-o-transition:background 500ms ease;transition:background 500ms ease}.content-menu__download-entry:hover,.content-menu__download-entry:active,.content-menu__download-entry:focus{background:#fcc074}.content-menu__blank-entry{margin-top:0.25rem;height:1rem;margin-bottom:-1rem}.content-menu__item{margin-left:0;margin-right:0;color:#788087}.content-menu__item:hover,.content-menu__item:active,.content-menu__item:focus{color:#454d54}.content-menu__item a{padding-top:.6rem;padding-bottom:0.65rem;color:inherit;text-decoration:none}.content-menu__item>.content-menu__menu-toggle+a>.content-menu__item__right-border{width:100%;padding-right:0.5rem;border-right:1px solid #e3e6e8}.content-menu__item--selected{background:#79aeb6;color:#f0f2f5;-webkit-box-shadow:0 0 1rem -0.2rem rgba(0,0,0,0.4);box-shadow:0 0 1rem -0.2rem rgba(0,0,0,0.4)}.content-menu__item--selected:hover,.content-menu__item--selected:active,.content-menu__item--selected:focus{color:#f0f2f5}.content-menu__item--selected>.content-menu__menu-toggle+a{border-right-color:#f0f2f5}.content-menu__icon-container{text-align:right;margin-left:1rem;margin-right:0.25rem;padding-top:.6rem;padding-bottom:0.2rem;color:inherit;-webkit-transition:color 500ms ease;-o-transition:color 500ms ease;transition:color 500ms ease}.content-menu__icon-container:before{display:inline-block;width:1.25rem;padding-right:0.5rem}.content-menu__menu-toggle{width:3.0rem;padding-left:0.4rem;text-align:center;padding-top:.6rem;padding-bottom:0.2rem;cursor:pointer}@media (min-width: 48rem){.content-menu__menu-toggle{width:1.85rem;padding-left:0.20rem}}.content-menu__menu-toggle:after{display:inline-block;content:"";-webkit-transition:border-color 500ms ease;-o-transition:border-color 500ms ease;transition:border-color 500ms ease;width:.875rem;height:.875rem;border:.4375rem solid transparent;border-top:.4375rem solid #9199a1;border-bottom:0 none #1f262e;-webkit-transform:translate(0%, 25%);-ms-transform:translate(0%, 25%);-o-transform:translate(0%, 25%);transform:translate(0%, 25%)}.content-menu__item--selected .content-menu__menu-toggle:after{width:.875rem;height:.875rem;border:.4375rem solid transparent;border-top:.4375rem solid #f0f2f5;border-bottom:0 none #1f262e;-webkit-transform:translate(0%, 25%);-ms-transform:translate(0%, 25%);-o-transform:translate(0%, 25%);transform:translate(0%, 25%)}.content-menu__menu-toggle.content-menu__menu-toggle--open:after{width:.875rem;height:.875rem;border:.4375rem solid transparent;border-bottom:.4375rem solid #9199a1;border-top:0 none #1f262e;-webkit-transform:translate(0%, -25%);-ms-transform:translate(0%, -25%);-o-transform:translate(0%, -25%);transform:translate(0%, -25%)}.content-menu__item--selected .content-menu__menu-toggle.content-menu__menu-toggle--open:after{width:.875rem;height:.875rem;border:.4375rem solid transparent;border-bottom:.4375rem solid #f0f2f5;border-top:0 none #1f262e;-webkit-transform:translate(0%, -25%);-ms-transform:translate(0%, -25%);-o-transform:translate(0%, -25%);transform:translate(0%, -25%)}@media (min-width: 48rem){.content-menu__menu-toggle:after{width:.625rem;height:.625rem;border:.3125rem solid transparent;border-top:.3125rem solid #9199a1;border-bottom:0 none #1f262e;-webkit-transform:translate(0%, 25%);-ms-transform:translate(0%, 25%);-o-transform:translate(0%, 25%);transform:translate(0%, 25%)}.content-menu__item--selected .content-menu__menu-toggle:after{width:.625rem;height:.625rem;border:.3125rem solid transparent;border-top:.3125rem solid #f0f2f5;border-bottom:0 none #1f262e;-webkit-transform:translate(0%, 25%);-ms-transform:translate(0%, 25%);-o-transform:translate(0%, 25%);transform:translate(0%, 25%)}.content-menu__menu-toggle.content-menu__menu-toggle--open:after{width:.625rem;height:.625rem;border:.3125rem solid transparent;border-bottom:.3125rem solid #9199a1;border-top:0 none #1f262e;-webkit-transform:translate(0%, -25%);-ms-transform:translate(0%, -25%);-o-transform:translate(0%, -25%);transform:translate(0%, -25%)}.content-menu__item--selected .content-menu__menu-toggle.content-menu__menu-toggle--open:after{width:.625rem;height:.625rem;border:.3125rem solid transparent;border-bottom:.3125rem solid #f0f2f5;border-top:0 none #1f262e;-webkit-transform:translate(0%, -25%);-ms-transform:translate(0%, -25%);-o-transform:translate(0%, -25%);transform:translate(0%, -25%)}}.content-nav__fixed-bottom .content-menu{display:block;padding-top:0;margin-top:0}.content-nav__fixed-bottom .content-menu>li{-webkit-box-shadow:0 -0.2rem 0.7rem -0.2rem rgba(0,0,0,0.2);box-shadow:0 -0.2rem 0.7rem -0.2rem rgba(0,0,0,0.2)}.content-nav__fixed-bottom .content-menu__item{color:#e3e6e8}.content-nav__fixed-bottom .content-menu__item:hover,.content-nav__fixed-bottom .content-menu__item:active,.content-nav__fixed-bottom .content-menu__item:focus{color:#f0f2f5}.content-nav__fixed-bottom .content-menu__item a{padding-top:0;padding-bottom:0.5rem}.content-nav__fixed-bottom .content-menu__icon-container{margin-left:0.5rem}.edge-fader{width:0%;height:0%;font-size:1rem;position:absolute}.edge-fader--left{left:0;background:-webkit-gradient(linear, right top, left top, from(rgba(255,255,255,0.8)), color-stop(80%, #fff));background:-webkit-linear-gradient(right, rgba(255,255,255,0.8) 0%, #fff 80%);background:-o-linear-gradient(right, rgba(255,255,255,0.8) 0%, #fff 80%);background:linear-gradient(to left, rgba(255,255,255,0.8) 0%, #fff 80%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ccffffff', GradientType=1 )}.edge-fader--left .edge-fader__arrow{position:absolute;left:0;top:50%;width:1em;height:1em;border:.5em solid transparent;border-right:.5em solid #feca87;border-left:0 none transparent;-webkit-transform:translate(-25%, -50%);-ms-transform:translate(-25%, -50%);-o-transform:translate(-25%, -50%);transform:translate(-25%, -50%);cursor:pointer;-webkit-transition:border-color 500ms ease 20ms;-o-transition:border-color 500ms ease 20ms;transition:border-color 500ms ease 20ms}.edge-fader--left .edge-fader__arrow:hover,.edge-fader--left .edge-fader__arrow:active,.edge-fader--left .edge-fader__arrow:focus{width:1em;height:1em;border:.5em solid transparent;border-right:.5em solid #f99d53;border-left:0 none transparent;-webkit-transform:translate(-25%, -50%);-ms-transform:translate(-25%, -50%);-o-transform:translate(-25%, -50%);transform:translate(-25%, -50%)}.edge-fader--left .edge-fader__arrow.edge-fader__arrow--inactive{width:1em;height:1em;border:.5em solid transparent;border-right:.5em solid #e1eef4;border-left:0 none transparent;-webkit-transform:translate(-25%, -50%);-ms-transform:translate(-25%, -50%);-o-transform:translate(-25%, -50%);transform:translate(-25%, -50%);cursor:default}.edge-fader--left .edge-fader__arrow.edge-fader__arrow--invisible{width:1em;height:1em;border:.5em solid transparent;border-right:.5em solid transparent;border-left:0 none transparent;-webkit-transform:translate(-25%, -50%);-ms-transform:translate(-25%, -50%);-o-transform:translate(-25%, -50%);transform:translate(-25%, -50%);cursor:default}.edge-fader--right{right:0;background:-webkit-gradient(linear, left top, right top, from(rgba(255,255,255,0.8)), color-stop(80%, #fff));background:-webkit-linear-gradient(left, rgba(255,255,255,0.8) 0%, #fff 80%);background:-o-linear-gradient(left, rgba(255,255,255,0.8) 0%, #fff 80%);background:linear-gradient(to right, rgba(255,255,255,0.8) 0%, #fff 80%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#ccffffff', endColorstr='#ffffff', GradientType=1 )}.edge-fader--right .edge-fader__arrow{position:absolute;right:0;top:50%;width:1em;height:1em;border:.5em solid transparent;border-left:.5em solid #feca87;border-right:0 none transparent;-webkit-transform:translate(25%, -50%);-ms-transform:translate(25%, -50%);-o-transform:translate(25%, -50%);transform:translate(25%, -50%);cursor:pointer;-webkit-transition:border-color 500ms ease 20ms;-o-transition:border-color 500ms ease 20ms;transition:border-color 500ms ease 20ms}.edge-fader--right .edge-fader__arrow:hover,.edge-fader--right .edge-fader__arrow:active,.edge-fader--right .edge-fader__arrow:focus{width:1em;height:1em;border:.5em solid transparent;border-left:.5em solid #f99d53;border-right:0 none transparent;-webkit-transform:translate(25%, -50%);-ms-transform:translate(25%, -50%);-o-transform:translate(25%, -50%);transform:translate(25%, -50%)}.edge-fader--right .edge-fader__arrow.edge-fader__arrow--inactive{width:1em;height:1em;border:.5em solid transparent;border-left:.5em solid #e1eef4;border-right:0 none transparent;-webkit-transform:translate(25%, -50%);-ms-transform:translate(25%, -50%);-o-transform:translate(25%, -50%);transform:translate(25%, -50%);cursor:default}.edge-fader--right .edge-fader__arrow.edge-fader__arrow--invisible{width:1em;height:1em;border:.5em solid transparent;border-left:.5em solid transparent;border-right:0 none transparent;-webkit-transform:translate(25%, -50%);-ms-transform:translate(25%, -50%);-o-transform:translate(25%, -50%);transform:translate(25%, -50%);cursor:default}.edge-fader--top{top:0;background:-webkit-gradient(linear, left bottom, left top, from(rgba(255,255,255,0.8)), color-stop(80%, #fff));background:-webkit-linear-gradient(bottom, rgba(255,255,255,0.8) 0%, #fff 80%);background:-o-linear-gradient(bottom, rgba(255,255,255,0.8) 0%, #fff 80%);background:linear-gradient(to top, rgba(255,255,255,0.8) 0%, #fff 80%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ccffffff', GradientType=0 )}.edge-fader--top .edge-fader__arrow{position:absolute;top:0;left:50%;width:1em;height:1em;border:.5em solid transparent;border-bottom:.5em solid #feca87;border-top:0 none transparent;-webkit-transform:translate(-50%, -25%);-ms-transform:translate(-50%, -25%);-o-transform:translate(-50%, -25%);transform:translate(-50%, -25%);cursor:pointer;-webkit-transition:border-color 500ms ease 20ms;-o-transition:border-color 500ms ease 20ms;transition:border-color 500ms ease 20ms}.edge-fader--top .edge-fader__arrow:hover,.edge-fader--top .edge-fader__arrow:active,.edge-fader--top .edge-fader__arrow:focus{width:1em;height:1em;border:.5em solid transparent;border-bottom:.5em solid #f99d53;border-top:0 none transparent;-webkit-transform:translate(-50%, -25%);-ms-transform:translate(-50%, -25%);-o-transform:translate(-50%, -25%);transform:translate(-50%, -25%)}.edge-fader--top .edge-fader__arrow.edge-fader__arrow--inactive{width:1em;height:1em;border:.5em solid transparent;border-bottom:.5em solid #e1eef4;border-top:0 none transparent;-webkit-transform:translate(-50%, -25%);-ms-transform:translate(-50%, -25%);-o-transform:translate(-50%, -25%);transform:translate(-50%, -25%);cursor:default}.edge-fader--top .edge-fader__arrow.edge-fader__arrow--invisible{width:1em;height:1em;border:.5em solid transparent;border-bottom:.5em solid transparent;border-top:0 none transparent;-webkit-transform:translate(-50%, -25%);-ms-transform:translate(-50%, -25%);-o-transform:translate(-50%, -25%);transform:translate(-50%, -25%);cursor:default}.edge-fader--bottom{bottom:0;background:-webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0.8)), color-stop(80%, #fff));background:-webkit-linear-gradient(top, rgba(255,255,255,0.8) 0%, #fff 80%);background:-o-linear-gradient(top, rgba(255,255,255,0.8) 0%, #fff 80%);background:linear-gradient(to bottom, rgba(255,255,255,0.8) 0%, #fff 80%);filter:progid:DXImageTransform.Microsoft.gradient( startColorstr='#ccffffff', endColorstr='#ffffff', GradientType=0 )}.edge-fader--bottom .edge-fader__arrow{position:absolute;bottom:0;left:50%;width:1em;height:1em;border:.5em solid transparent;border-top:.5em solid #feca87;border-bottom:0 none transparent;-webkit-transform:translate(-50%, 25%);-ms-transform:translate(-50%, 25%);-o-transform:translate(-50%, 25%);transform:translate(-50%, 25%);cursor:pointer;-webkit-transition:border-color 500ms ease 20ms;-o-transition:border-color 500ms ease 20ms;transition:border-color 500ms ease 20ms}.edge-fader--bottom .edge-fader__arrow:hover,.edge-fader--bottom .edge-fader__arrow:active,.edge-fader--bottom .edge-fader__arrow:focus{width:1em;height:1em;border:.5em solid transparent;border-top:.5em solid #f99d53;border-bottom:0 none transparent;-webkit-transform:translate(-50%, 25%);-ms-transform:translate(-50%, 25%);-o-transform:translate(-50%, 25%);transform:translate(-50%, 25%)}.edge-fader--bottom .edge-fader__arrow.edge-fader__arrow--inactive{width:1em;height:1em;border:.5em solid transparent;border-top:.5em solid #e1eef4;border-bottom:0 none transparent;-webkit-transform:translate(-50%, 25%);-ms-transform:translate(-50%, 25%);-o-transform:translate(-50%, 25%);transform:translate(-50%, 25%);cursor:default}.edge-fader--bottom .edge-fader__arrow.edge-fader__arrow--invisible{width:1em;height:1em;border:.5em solid transparent;border-top:.5em solid transparent;border-bottom:0 none transparent;-webkit-transform:translate(-50%, 25%);-ms-transform:translate(-50%, 25%);-o-transform:translate(-50%, 25%);transform:translate(-50%, 25%);cursor:default}@media (min-width: 20rem){.front-matter{margin-bottom:3rem}}@media (min-width: 48rem){.front-matter{margin-bottom:5rem}}.front-matter__title{color:#636567;line-height:1.2;font-size:3rem;margin-top:0}@media (min-width: 20rem){.front-matter__title{margin-bottom:2rem}}@media (min-width: 48rem){.front-matter__title{margin-bottom:3rem}}.front-matter__title .front-matter__title--supertext{font-size:70%}.menu-bars{width:.8em;height:.625em;cursor:pointer}.menu-bars:before{content:"";width:inherit;height:.125em;position:absolute;background:#636567;-webkit-box-shadow:0 .25em 0 0 #636567,0 .5em 0 0 #636567;box-shadow:0 .25em 0 0 #636567,0 .5em 0 0 #636567}.index .menu-bars{display:none}.front-matter .search-results-title .product__title{font-size:1em}.front-matter .search-results-title .product__title .title-project-version{font-size:0.7em;padding-left:0.2em}.search-result-item-title{margin-left:0}.search-result-item-title .result-score{font-size:0.5em;padding-left:0.5em}.search-result-item-title .product__title{font-size:0.8em;float:right}.search-result-item-title .product__title .result-project-version{font-size:0.7em;padding-left:0.2em}.search{border-radius:.25rem;background:#9199a1;color:#f0f2f5;padding:0.25rem 0.25rem 0.25rem 0;margin:0.25rem}.search__icon-container{text-align:right;padding:0.25rem 0;margin-left:0.75rem}.search__icon-container:before{display:inline-block;width:1.25rem;padding-right:0.5rem}.search__input{border:none;background:transparent;width:100%;border-radius:.25rem;padding:0.25rem 0 0.25rem 0.25rem;-webkit-transition:background 200ms ease-in, color 200ms ease-in;-o-transition:background 200ms ease-in, color 200ms ease-in;transition:background 200ms ease-in, color 200ms ease-in}.search__input:focus{background:#636567;color:#f0f2f5}.search__input::-webkit-input-placeholder{color:#d4d9de}.search__input::-moz-placeholder{color:#d4d9de}.search__input:-ms-input-placeholder{color:#d4d9de}.search__input::placeholder{color:#d4d9de}.selector__title{font-size:60%;letter-spacing:.125rem;text-transform:uppercase;text-align:center;line-height:1;margin-bottom:0.3em;padding-left:.0625rem}.selector__btn{border:none;border-radius:.25em;width:100%;line-height:1;padding:0.5em 0.9em;font-size:120%;color:#788087;background:#ffd195;-webkit-transition:color 500ms ease, background 500ms ease;-o-transition:color 500ms ease, background 500ms ease;transition:color 500ms ease, background 500ms ease}.selector__btn:hover,.selector__btn:active,.selector__btn:focus{color:#454d54;background:#fcc074}.js .selector__btn{cursor:pointer}.other__btn{border:none;border-radius:.25em;width:100%;line-height:1;padding:0.5em 0.5em;font-size:100%;color:#fcc074;background:#636567;-webkit-transition:color 500ms ease, background 500ms ease;-o-transition:color 500ms ease, background 500ms ease;transition:color 500ms ease, background 500ms ease}.other__btn:hover,.other__btn:active,.other__btn:focus{color:#454d54;background:#ffd195}.js .other__btn{cursor:pointer}.selector__arrow{position:relative;margin:0 0.2em 0 auto;-webkit-transition:border-color 500ms ease;-o-transition:border-color 500ms ease;transition:border-color 500ms ease;width:.75em;height:.75em;border:.375em solid transparent;border-top:.375em solid #ffd195;border-bottom:0 none #6c8997;-webkit-transform:translate(0%, 25%);-ms-transform:translate(0%, 25%);-o-transform:translate(0%, 25%);transform:translate(0%, 25%)}.selector--open .selector__arrow{width:.75em;height:.75em;border:.375em solid transparent;border-bottom:.375em solid #ffd195;border-top:0 none #6c8997;-webkit-transform:translate(0%, -25%);-ms-transform:translate(0%, -25%);-o-transform:translate(0%, -25%);transform:translate(0%, -25%)}.selector-pane__sizing-box{position:absolute;top:7.75rem;height:0;max-height:0;width:100%;z-index:100;-webkit-transition:height 500ms ease, max-height 500ms ease;-o-transition:height 500ms ease, max-height 500ms ease;transition:height 500ms ease, max-height 500ms ease}@media (min-width: 48rem){.selector-pane__sizing-box{left:0.25rem;top:7.15rem;width:auto}}@media (min-width: 66.5rem){.selector-pane__sizing-box{left:0.45rem;top:7.4rem}}.selector-pane__shadow-box{height:1000px;max-height:1000px;-webkit-transition:height 500ms ease, max-height 500ms ease;-o-transition:height 500ms ease, max-height 500ms ease;transition:height 500ms ease, max-height 500ms ease;-webkit-box-shadow:-0.25rem -0.25rem 2rem -0.25rem rgba(0,0,0,0.2);box-shadow:-0.25rem -0.25rem 2rem -0.25rem rgba(0,0,0,0.2)}.selector-pane__primary{height:100%;background:#ebebeb;color:#f0f2f5;font-size:105%;padding-left:1rem;padding-right:1rem;white-space:nowrap;overflow-y:hidden}.selector-list__sizing-box{position:relative;height:100%;vertical-align:bottom;padding-left:0.75rem}.selector-list__sizing-box:first-of-type{padding-left:0}.release-is-archived-and-hidden{display:none !important}.selector-list__scroll-box{height:100%;padding-top:1rem;padding-bottom:1rem;padding-left:0.6rem;padding-right:0.4rem;margin-left:-0.6rem;margin-right:-0.4rem}.selector-list{margin:0;padding:0;list-style:none;-webkit-box-shadow:-0.125rem -0.125rem 1rem -0.2rem rgba(0,0,0,0.2);box-shadow:-0.125rem -0.125rem 1rem -0.2rem rgba(0,0,0,0.2)}.selector-list__element{background:rgba(255,0,0,0.7);color:#f0f2f5;text-align:center;min-width:3.5rem;border-top:.0625rem solid #d4d9de;-webkit-transition:background 400ms ease;-o-transition:background 400ms ease;transition:background 400ms ease}.selector-list__element a{padding:0.6rem 0.6rem;color:inherit;text-decoration:none}.selector-list__element:first-of-type{border-top-left-radius:.15rem;border-top-right-radius:.15rem;border-top:none}.selector-list__element:last-of-type{border-bottom-left-radius:.15rem;border-bottom-right-radius:.15rem}.selector-list__element:only-of-type{border-radius:.15rem;border-top:none}.selector-list__element--1{background:#f99d53}.selector-list__element--1.selector-list__element--current{background:#fbb984}.selector-list__element--1:hover,.selector-list__element--1:active,.selector-list__element--1:focus{background:#fbb984}.selector-list__element--1.selector-list__element--lts-flag:hover,.selector-list__element--1.selector-list__element--lts-flag:active,.selector-list__element--1.selector-list__element--lts-flag:focus{background:#f99d53}.selector-list__element--2{background:#79aeb6}.selector-list__element--2.selector-list__element--current{background:#9ac2c8}.selector-list__element--2:hover,.selector-list__element--2:active,.selector-list__element--2:focus{background:#9ac2c8}.selector-list__element--2.selector-list__element--lts-flag:hover,.selector-list__element--2.selector-list__element--lts-flag:active,.selector-list__element--2.selector-list__element--lts-flag:focus{background:#79aeb6}.selector-list__element--3{background:#88b3a8}.selector-list__element--3.selector-list__element--current{background:#a7c7bf}.selector-list__element--3:hover,.selector-list__element--3:active,.selector-list__element--3:focus{background:#a7c7bf}.selector-list__element--3.selector-list__element--lts-flag:hover,.selector-list__element--3.selector-list__element--lts-flag:active,.selector-list__element--3.selector-list__element--lts-flag:focus{background:#88b3a8}.selector-list__element--4{background:#6f8a86}.selector-list__element--4.selector-list__element--current{background:#8ba19e}.selector-list__element--4:hover,.selector-list__element--4:active,.selector-list__element--4:focus{background:#8ba19e}.selector-list__element--4.selector-list__element--lts-flag:hover,.selector-list__element--4.selector-list__element--lts-flag:active,.selector-list__element--4.selector-list__element--lts-flag:focus{background:#6f8a86}.selector-list__element--5{background:#6c8997}.selector-list__element--5.selector-list__element--current{background:#8aa1ac}.selector-list__element--5:hover,.selector-list__element--5:active,.selector-list__element--5:focus{background:#8aa1ac}.selector-list__element--5.selector-list__element--lts-flag:hover,.selector-list__element--5.selector-list__element--lts-flag:active,.selector-list__element--5.selector-list__element--lts-flag:focus{background:#6c8997}.selector-list__element--6{background:#3b4a5d}.selector-list__element--6.selector-list__element--current{background:#4f637c}.selector-list__element--6:hover,.selector-list__element--6:active,.selector-list__element--6:focus{background:#4f637c}.selector-list__element--6.selector-list__element--lts-flag:hover,.selector-list__element--6.selector-list__element--lts-flag:active,.selector-list__element--6.selector-list__element--lts-flag:focus{background:#3b4a5d}.selector-list__element--archived{color:#d4d9de;background:#f0f2f5}.selector-list__element--archived:hover,.selector-list__element--archived:active,.selector-list__element--archived:focus{color:#f0f2f5;background:#d4d9de}.selector-list__element--other{color:#d4d9de;background:#f0f2f5}.selector-list__element--other:hover,.selector-list__element--other:active,.selector-list__element--other:focus{color:#f0f2f5;background:#d4d9de}.selector-list__element--disabled{background:#f0f2f5;border-top:.0625rem solid #f7f8f9;color:#d4d9de}.selector-list__element--current a,.selector-list__element--disabled a{pointer-events:none;cursor:default}.selector-list__element--lts-flag{color:#fff}.selector-list__element--lts-flag:hover,.selector-list__element--lts-flag:active,.selector-list__element--lts-flag:focus{background:inherit}.selector-list__element--lts-flag a{padding-top:0.4rem;padding-bottom:0.2rem;letter-spacing:.1875rem;font-size:80%}.selector-pane__shadow-box .edge-fader--left{font-size:0.8rem;width:0.75rem;margin-left:0.2rem;height:1.25rem;max-height:100%;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);z-index:1;background:transparent;-webkit-filter:none;filter:none}.selector-pane__shadow-box .edge-fader--left .edge-fader__arrow--inactive{width:1em;height:1em;border:.5em solid transparent;border-right:.5em solid transparent;border-left:0 none transparent;-webkit-transform:translate(-25%, -50%);-ms-transform:translate(-25%, -50%);-o-transform:translate(-25%, -50%);transform:translate(-25%, -50%)}.selector-pane__shadow-box .edge-fader--right{font-size:0.8rem;width:0.75rem;margin-right:0.2rem;height:1.25rem;max-height:100%;top:50%;-webkit-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);z-index:1;background:transparent;-webkit-filter:none;filter:none}.selector-pane__shadow-box .edge-fader--right .edge-fader__arrow--inactive{width:1em;height:1em;border:.5em solid transparent;border-left:.5em solid transparent;border-right:0 none transparent;-webkit-transform:translate(25%, -50%);-ms-transform:translate(25%, -50%);-o-transform:translate(25%, -50%);transform:translate(25%, -50%)}.selector-list__sizing-box .edge-fader--top{font-size:0.8rem;top:0;left:1.4rem;width:1.25rem;height:0.75rem;margin-top:0.1rem;max-height:100%;background:transparent;-webkit-filter:none;filter:none}.selector-list__sizing-box .edge-fader--top .edge-fader__arrow--inactive{width:1em;height:1em;border:.5em solid transparent;border-bottom:.5em solid transparent;border-top:0 none transparent;-webkit-transform:translate(-50%, -25%);-ms-transform:translate(-50%, -25%);-o-transform:translate(-50%, -25%);transform:translate(-50%, -25%)}.selector-list__sizing-box .edge-fader--bottom{font-size:0.8rem;top:0;left:0.6rem;width:1.25rem;height:0.75rem;margin-top:0.1rem;max-height:100%;background:transparent;-webkit-filter:none;filter:none}.selector-list__sizing-box .edge-fader--bottom .edge-fader__arrow--inactive{width:1em;height:1em;border:.5em solid transparent;border-top:.5em solid transparent;border-bottom:0 none transparent;-webkit-transform:translate(-50%, 25%);-ms-transform:translate(-50%, 25%);-o-transform:translate(-50%, 25%);transform:translate(-50%, 25%)}.social-button{position:relative;height:42px;width:42px;margin-right:8px}.social-button:last-of-type{margin-right:0}.social-button .social-button__primary{position:absolute;left:0;height:42px;width:42px;background-image:url("/images/index/social-sprite.png");background-repeat:no-repeat;background-position-y:0;opacity:1;-webkit-transition:opacity 200ms ease-in;-o-transition:opacity 200ms ease-in;transition:opacity 200ms ease-in}.social-button .social-button__inverted{position:absolute;left:0;height:42px;width:42px;background-image:url("/images/index/social-sprite.png");background-repeat:no-repeat;background-position-y:-42px;opacity:0;-webkit-transition:opacity 200ms ease-in;-o-transition:opacity 200ms ease-in;transition:opacity 200ms ease-in}.social-button:hover .social-button__primary,.social-button:active .social-button__primary,.social-button:focus .social-button__primary{opacity:0}.social-button:hover .social-button__inverted,.social-button:active .social-button__inverted,.social-button:focus .social-button__inverted{opacity:1}.social-button--facebook .social-button__primary{background-position-x:0}.social-button--facebook .social-button__inverted{background-position-x:0}.social-button--twitter .social-button__primary{background-position-x:-50px}.social-button--twitter .social-button__inverted{background-position-x:-50px}.social-button--youtube .social-button__primary{background-position-x:-100px}.social-button--youtube .social-button__inverted{background-position-x:-100px}.social-button--linkedin .social-button__primary{background-position-x:-150px}.social-button--linkedin .social-button__inverted{background-position-x:-150px}.social-button--github .social-button__primary{background-position-x:-200px}.social-button--github .social-button__inverted{background-position-x:-200px}.table-of-contents{margin-bottom:3rem}.table-of-contents__title{margin-top:0;margin-bottom:0.5rem}@media (min-width: 30rem){.table-of-contents__wrapper--multi{-webkit-column-count:2;-moz-column-count:2;column-count:2}}@media (min-width: 86rem){.table-of-contents__wrapper--multi{-webkit-column-count:3;-moz-column-count:3;column-count:3}}.table-of-contents__items{color:#9199a1;margin-bottom:0}.table-of-contents__items a{color:#636567;vertical-align:top}.table-of-contents__items a:hover,.table-of-contents__items a:active,.table-of-contents__items a:focus{color:#e78505}.table-of-contents__item{font-size:110%;padding-top:.25rem}@media (min-width: 48rem) and (max-width: 66.49rem){.table-of-contents__item{font-size:100%}}.index .welcome-content{padding-top:3.5rem}@media (min-width: 48rem){.index .welcome-content{padding-top:4.5rem}}.index .welcome{background-color:#fcc074;background:url("../images/index/home-banner.jpg") no-repeat bottom/cover;padding-top:3rem;padding-bottom:3rem;color:#636567;font-size:1.7rem;line-height:1;text-align:center;margin-bottom:0}@media (min-width: 48rem){.index .welcome{padding-bottom:5rem}}.index .welcome h1{letter-spacing:-1px;color:#636567;text-transform:uppercase;font-size:2.5rem;margin-bottom:1rem}@media (min-width: 66.5rem){.index .welcome h1{font-size:3rem}}.index .product-content{-webkit-box-shadow:0 0 1.5rem 0 rgba(0,0,0,0.2);box-shadow:0 0 1.5rem 0 rgba(0,0,0,0.2)}.index .product-content .product-callout{text-align:center;color:#788087;font-size:1.2rem;padding-top:1rem;margin-bottom:0}@media (min-width: 48rem){.index .product-content .product-callout{font-size:1.5rem}}.index .product-picker{padding-top:2rem;padding-bottom:5rem}@media (min-width: 66.5rem){.index .product-picker{max-width:71rem;padding-top:5rem;padding-bottom:6rem}}.index .product__wrapper{padding-bottom:2rem;padding-left:1rem;padding-right:1rem}.index .product__wrapper:last-of-type{padding-bottom:0}.index .product__card{border-radius:.3rem;padding:1.5rem 1rem;color:#636567;line-height:1.3;font-size:1.2rem;text-align:center;text-decoration:none;background:#f5f3f5;border:1px solid #ebebeb;-webkit-box-shadow:0 -0.25rem 4rem -0.5rem rgba(0,0,0,0.1);box-shadow:0 -0.25rem 4rem -0.5rem rgba(0,0,0,0.1);-webkit-transition:color 200ms ease-in, background 200ms ease-in;-o-transition:color 200ms ease-in, background 200ms ease-in;transition:color 200ms ease-in, background 200ms ease-in}.index .product__card .product__title{font-size:3.75rem;font-weight:700;line-height:1;margin-bottom:1.25rem;color:#636567;text-transform:lowercase;-webkit-transition:color 200ms ease-in;-o-transition:color 200ms ease-in;transition:color 200ms ease-in}.index .product__card .product__title .product__logo{vertical-align:middle;height:0.60em;width:0.60em;margin-bottom:0.10em}.index .product__card .product__title .product__logo .logo{height:100%;width:100%}.index .product__card .product__title .product__logo--invertible{position:relative}.index .product__card .product__title .product__logo--invertible .logo{position:absolute;left:0;-webkit-transition:opacity 200ms ease-in;-o-transition:opacity 200ms ease-in;transition:opacity 200ms ease-in}.index .product__card .product__title .product__logo--invertible .logo--primary{opacity:1}.index .product__card .product__title .product__logo--invertible .logo--inverted{opacity:0}.index .product__card .product__title .product__title-highlight{color:#f99d53;text-transform:uppercase;font-size:70.5%;font-weight:400;-webkit-transition:color 200ms ease-in;-o-transition:color 200ms ease-in;transition:color 200ms ease-in}@media (min-width: 66.5rem){.index .product__card .product__description{min-height:3.9em}}.index .product__card:hover,.index .product__card:active,.index .product__card:focus{text-decoration:none;color:#f0f2f5;background:#6c8997}.index .product__card:hover .product__title,.index .product__card:active .product__title,.index .product__card:focus .product__title{color:#f0f2f5}.index .product__card:hover .product__title .product__logo--invertible .logo--primary,.index .product__card:active .product__title .product__logo--invertible .logo--primary,.index .product__card:focus .product__title .product__logo--invertible .logo--primary{opacity:0}.index .product__card:hover .product__title .product__logo--invertible .logo--inverted,.index .product__card:active .product__title .product__logo--invertible .logo--inverted,.index .product__card:focus .product__title .product__logo--invertible .logo--inverted{opacity:1}.index .highlight__wrapper{-webkit-box-shadow:0 -0.15rem 3rem -0.5rem rgba(0,0,0,0.2);box-shadow:0 -0.15rem 3rem -0.5rem rgba(0,0,0,0.2);font-size:1.2rem}@media (min-width: 66.5rem){.index .highlight__wrapper{background:url("../images/index/highlights-bg-split.jpg") left/cover}}@media (max-width: 66.49rem){.index .highlight__container{padding:0;margin:0;max-width:none}.index .highlight__container .row{margin:0}}.index .highlight__container .highlight__title{letter-spacing:-1px;font-size:1.8rem;text-align:left;padding-bottom:0.25rem}.highlight__left .index .highlight__container .highlight__title{padding-bottom:0.5rem}.index .highlight__container .highlight__link-wrapper{text-align:center}.index .highlight__container .highlight__link{border-radius:.15rem;padding:0.8rem 2.5rem;font-size:85%;text-decoration:none;text-transform:uppercase;word-spacing:-1px;-webkit-transition:color 500ms ease, background 500ms ease;-o-transition:color 500ms ease, background 500ms ease;transition:color 500ms ease, background 500ms ease}.index .highlight__container .highlight__left{padding:3rem 1rem 2rem 1rem;color:#f7f7f7;background-color:#3b4a5d;background:url("../images/index/highlights-bg-dark.jpg")}@media (min-width: 66.5rem){.index .highlight__container .highlight__left{padding-top:2rem;min-height:16rem}.index .highlight__container .highlight__left p{min-height:5.4rem}}@media (min-width: 86rem){.index .highlight__container .highlight__left{padding-top:3rem}}.index .highlight__container .highlight__left .highlight__link{color:#f7f7f7;background:#f99d53}.index .highlight__container .highlight__left .highlight__link:hover,.index .highlight__container .highlight__left .highlight__link:active,.index .highlight__container .highlight__left .highlight__link:focus{color:#f7f7f7;background:#e78505}.index .highlight__container .highlight__right{padding:2rem 1rem 2rem 1rem;color:#3b4a5d;background-color:#f7f7f7;background:url("../images/index/highlights-bg-light.jpg") repeat}@media (min-width: 66.5rem){.index .highlight__container .highlight__right{padding-top:2rem;padding-left:3rem;min-height:16rem}.index .highlight__container .highlight__right p{min-height:5.4rem}}@media (min-width: 86rem){.index .highlight__container .highlight__right{padding-top:3rem}}.index .highlight__container .highlight__right .highlight__link{color:#3b4a5d;background:#ffd195}.index .highlight__container .highlight__right .highlight__link:hover,.index .highlight__container .highlight__right .highlight__link:active,.index .highlight__container .highlight__right .highlight__link:focus{color:#3b4a5d;background:#fcc074}.client-library-logos{list-style:none}.client-library-logo{border-radius:.25rem;margin:0.5rem;padding:0.4rem;-webkit-box-shadow:0 -0.25rem 2rem -0.5rem rgba(0,0,0,0.2);box-shadow:0 -0.25rem 2rem -0.5rem rgba(0,0,0,0.2);background:#f7f7f7;-webkit-transition:background 300ms ease-in, -webkit-box-shadow 300ms ease-in;transition:background 300ms ease-in, -webkit-box-shadow 300ms ease-in;-o-transition:background 300ms ease-in, box-shadow 300ms ease-in;transition:background 300ms ease-in, box-shadow 300ms ease-in;transition:background 300ms ease-in, box-shadow 300ms ease-in, -webkit-box-shadow 300ms ease-in}.client-library-logo:hover,.client-library-logo:active,.client-library-logo:focus{background:#e3e6e8;-webkit-box-shadow:0 -0.25rem 2rem -0.5rem rgba(0,0,0,0.4);box-shadow:0 -0.25rem 2rem -0.5rem rgba(0,0,0,0.4)}table.use-cases__image-links{width:100%}table.use-cases__image-links td:first-child{width:30%}table.use-cases__image-links td:first-child img{width:100%}table.use-cases__image-links td:last-child{width:70%}.main-article{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0)} diff --git a/static/data/project_descriptions.json b/static/data/project_descriptions.json index 3a90431117..263f940cf8 100644 --- a/static/data/project_descriptions.json +++ b/static/data/project_descriptions.json @@ -1 +1 @@ -{"__comment":"This file was automatically generated using `rake generate_projects_metadata`. See the Project Descriptions entry in config.yaml for more information.","riak_kv":{"project_name":"Riak KV","project_name_html":"RiakKV","path":"/riak/kv","github_path":"https://github.com/TI-Tokyo/riak-docs-fork/tree/dev/content/","download_root":"https://files.tiot.jp/riak/kv/","archived_path":"/riak","releases":[["2.0.0","2.0.1","2.0.2","2.0.4","2.0.5","2.0.6","2.0.7","2.0.8","2.0.9"],["2.1.1","2.1.3","2.1.4"],["2.2.0","2.2.1","2.2.2","2.2.3","2.2.6"],["2.9.0p5","2.9.1","2.9.2","2.9.4","2.9.7","2.9.8","2.9.9","2.9.10"],["3.0.1","3.0.2","3.0.3","3.0.4","3.0.6","3.0.7","3.0.8","3.0.9","3.0.10","3.0.11","3.0.12","3.0.13","3.0.14","3.0.15","3.0.16"],["3.2.0"]],"latest":"3.2.0","lts":["2.9","3.0","3.2"],"archive_below":"2.9"},"riak_cs":{"project_name":"Riak CS","project_name_html":"RiakCS","path":"/riak/cs","github_path":"https://github.com/TI-Tokyo/riak-docs-fork/tree/dev/content/","download_root":"https://files.tiot.jp/riak/cs/","archived_path":"/riakcs","releases":[["2.0.0","2.0.1"],["2.1.0","2.1.1","2.1.2"],["3.0.0","3.0.1"]],"latest":"3.0.1","lts":["2.1","3.0"],"archive_below":"2.1"},"riak_ts":{"project_name":"Riak TS","project_name_html":"RiakTS","path":"/riak/ts","github_path":"https://github.com/TI-Tokyo/riak-docs-fork/tree/dev/content/","download_root":"https://files.tiot.jp/riak/ts/","archived_path":"/riakts","releases":[["1.0.0"],["1.1.0"],["1.2.0"],["1.3.0","1.3.1"],["1.4.0"],["1.5.0","1.5.1","1.5.2"],["3.0.0"]],"latest":"3.0.0","lts":["1.5","3.0"],"archive_below":"1.5"},"dataplatform":{"project_name":"DataPlatform","project_name_html":null,"path":"/dataplatform","github_path":null,"download_root":null,"archived_path":"/dataplatform","releases":[["1.0.0"]],"latest":"1.0.0"}} +{"__comment":"This file was automatically generated using `rake generate_projects_metadata`. See the Project Descriptions entry in config.yaml for more information.","riak_kv":{"project_name":"Riak KV","project_name_html":"RiakKV","path":"/riak/kv","github_path":"https://github.com/TI-Tokyo/riak-docs-fork/tree/dev/content/","download_root":"https://files.tiot.jp/riak/kv/","archived_path":"/riak","releases":[["2.0.0","2.0.1","2.0.2","2.0.4","2.0.5","2.0.6","2.0.7","2.0.8","2.0.9"],["2.1.1","2.1.3","2.1.4"],["2.2.0","2.2.1","2.2.2","2.2.3","2.2.6"],["2.9.0p5","2.9.1","2.9.2","2.9.4","2.9.7","2.9.8","2.9.9","2.9.10"],["3.0.1","3.0.2","3.0.3","3.0.4","3.0.6","3.0.7","3.0.8","3.0.9","3.0.10","3.0.11","3.0.12","3.0.13","3.0.14","3.0.15","3.0.16"],["3.2.0"]],"latest":"3.2.0","lts":["2.9","3.0","3.2"],"archive_below":"2.9"},"riak_cs":{"project_name":"Riak CS","project_name_html":"RiakCS","path":"/riak/cs","github_path":"https://github.com/TI-Tokyo/riak-docs-fork/tree/pjac-cs3.1.0/content/","download_root":"https://files.tiot.jp/riak/cs/","archived_path":"/riakcs","releases":[["2.0.0","2.0.1"],["2.1.0","2.1.1","2.1.2"],["3.0.0","3.0.1"],["3.1.0"]],"latest":"3.1.0","lts":["2.1","3.0","3.1"],"archive_below":"2.1"},"riak_ts":{"project_name":"Riak TS","project_name_html":"RiakTS","path":"/riak/ts","github_path":"https://github.com/TI-Tokyo/riak-docs-fork/tree/dev/content/","download_root":"https://files.tiot.jp/riak/ts/","archived_path":"/riakts","releases":[["1.0.0"],["1.1.0"],["1.2.0"],["1.3.0","1.3.1"],["1.4.0"],["1.5.0","1.5.1","1.5.2"],["3.0.0"]],"latest":"3.0.0","lts":["1.5","3.0"],"archive_below":"1.5"},"dataplatform":{"project_name":"DataPlatform","project_name_html":null,"path":"/dataplatform","github_path":null,"download_root":null,"archived_path":"/dataplatform","releases":[["1.0.0"]],"latest":"1.0.0"}} \ No newline at end of file diff --git a/static/js/main.js b/static/js/main.js index 4f7d7f2b3b..1e27d0f388 100644 --- a/static/js/main.js +++ b/static/js/main.js @@ -4,4 +4,4 @@ p=g=s[1],h=(s[2]||"").split(".").sort(),p){for(d=ae.event.special[p]||{},p=(n?d. }},s.onload=r(),n=s.onerror=r("error"),void 0!==s.onabort?s.onabort=n:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){r&&n()})},r=r("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(r)throw e}},abort:function(){r&&r()}}}),ae.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return ae.globalEval(e),e}}}),ae.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ae.ajaxTransport("script",function(e){if(e.crossDomain){var t,r;return{send:function(n,i){t=ae("",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"",c:[{cN:"name",b:/[^\/><\s]+/,r:0},r]}]}}),hljs.registerLanguage("markdown",function(){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}}),hljs.registerLanguage("python",function(e){var t={cN:"meta",b:/^(>>>|\.\.\.) /},r={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[t],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[t],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},e.ASM,e.QSM]},n={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},i={cN:"params",b:/\(/,e:/\)/,c:["self",t,n,r]};return{aliases:["py","gyp"],k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},i:/(<\/|->|\?)/,c:[t,n,r,e.HCM,{v:[{cN:"function",bK:"def",r:10},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,i,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}}),hljs.registerLanguage("makefile",function(e){var t={cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]};return{aliases:["mk","mak"],c:[e.HCM,{b:/^\w+\s*\W*=/,rB:!0,r:0,starts:{e:/\s*\W*=/,eE:!0,starts:{e:/$/,r:0,c:[t]}}},{cN:"section",b:/^[\w]+:\s*$/},{cN:"meta",b:/^\.PHONY:/,e:/$/,k:{"meta-keyword":".PHONY"},l:/[\.\w]+/},{b:/^\t+/,e:/$/,r:0,c:[e.QSM,t]}]}}),hljs.registerLanguage("css",function(e){var t="[a-zA-Z-][a-zA-Z0-9_-]*",r={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:t,r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,r]}]}}),hljs.registerLanguage("go",function(e){var t={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],k:t,i:"|<-"}]}}),hljs.registerLanguage("erlang",function(e){var t="[a-z'][a-zA-Z0-9_']*",r="("+t+":"+t+"|"+t+")",n={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},i=e.C("%","$"),a={cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",r:0},o={b:"fun\\s+"+t+"/\\d+"},s={b:r+"\\(",e:"\\)",rB:!0,r:0,c:[{b:r,r:0},{b:"\\(",e:"\\)",eW:!0,rE:!0,r:0}]},l={b:"{",e:"}",r:0},c={b:"\\b_([A-Z][A-Za-z0-9_]*)?",r:0},u={b:"[A-Z][a-zA-Z0-9_]*",r:0},d={b:"#"+e.UIR,r:0,rB:!0,c:[{b:"#"+e.UIR,r:0},{b:"{",e:"}",r:0}]},f={bK:"fun receive if try case",e:"end",k:n};f.c=[i,o,e.inherit(e.ASM,{cN:""}),f,s,e.QSM,a,l,c,u,d];var p=[i,o,f,s,e.QSM,a,l,c,u,d];s.c[1].c=p,l.c=p,d.c[1].c=p;var h={cN:"params",b:"\\(",e:"\\)",c:p};return{aliases:["erl"],k:n,i:"(",rB:!0,i:"\\(|#|//|/\\*|\\\\|:|;",c:[h,e.inherit(e.TM,{b:t})],starts:{e:";|\\.",k:n,c:p}},i,{b:"^-",e:"\\.",r:0,eE:!0,rB:!0,l:"-"+e.IR,k:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",c:[h]},a,e.QSM,d,c,u,l,{b:/\.$/}]}}),hljs.registerLanguage("ruby",function(e){var t="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},n={cN:"doctag",b:"@[A-Za-z]+"},i={b:"#<",e:">"},a=[e.C("#","$",{c:[n]}),e.C("^\\=begin","^\\=end",{c:[n],r:10}),e.C("^__END__","\\n$")],o={cN:"subst",b:"#\\{",e:"}",k:r},s={cN:"string",c:[e.BE,o],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<(-?)\w+$/,e:/^\s*\w+$/}]},l={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:r},c=[s,i,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(a)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:t}),l].concat(a)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":(?!\\s)",c:[s,{b:t}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:r},{b:"("+e.RSR+")\\s*",c:[i,{cN:"regexp",c:[e.BE,o],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(a),r:0}].concat(a);o.c=c,l.c=c;var u="[>?]>",d="[\\w#]+\\(\\w+\\):\\d+:\\d+>",f="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",p=[{b:/^\s*=>/,starts:{e:"$",c:c}},{cN:"meta",b:"^("+u+"|"+d+"|"+f+")",starts:{e:"$",c:c}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,i:/\/\*/,c:a.concat(p).concat(c)}}),hljs.registerLanguage("cpp",function(e){var t={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[{b:'(u8?|U)?L?"',e:'"',i:"\\n",c:[e.BE]},{b:'(u8?|U)?R"',e:'"',c:[e.BE]},{b:"'\\\\?.",e:"'",i:"."}]},n={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},i={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},e.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:"<",e:">",i:"\\n"},e.CLCM,e.CBCM]},a=e.IR+"\\s*\\(",o={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},s=[t,e.CLCM,e.CBCM,n,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:o,i:"",k:o,c:["self",t]},{b:e.IR+"::",k:o},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:o,c:s.concat([{b:/\(/,e:/\)/,k:o,c:s.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+e.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:o,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:o,r:0,c:[e.CLCM,e.CBCM,r,n,t]},e.CLCM,e.CBCM,i]}]),exports:{preprocessor:i,strings:r,k:o}}}),hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},r={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},n={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\._]+/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,r,n,t]}}),hljs.registerLanguage("json",function(e){var t={literal:"true false null"},r=[e.QSM,e.CNM],n={e:",",eW:!0,eE:!0,c:r,k:t},i={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(n,{b:/:/})],i:"\\S"},a={b:"\\[",e:"\\]",c:[e.inherit(n)],i:"\\S"};return r.splice(r.length,0,i,a),{c:r,k:t,i:"\\S"}}),hljs.registerLanguage("php",function(e){var t={b:"\\$+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*"},r={cN:"meta",b:/<\?(php)?|\?>/},n={cN:"string",c:[e.BE,r],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},i={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[r]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},r,{cN:"keyword",b:/\$this\b/},t,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",t,e.CBCM,n,i]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},n,i]}}),hljs.registerLanguage("dart",function(e){var t={cN:"subst",b:"\\$\\{",e:"}",k:"true false null this is new super"},r={cN:"string",v:[{b:"r'''",e:"'''"},{b:'r"""',e:'"""'},{b:"r'",e:"'",i:"\\n"},{b:'r"',e:'"',i:"\\n"},{b:"'''",e:"'''",c:[e.BE,t]},{b:'"""',e:'"""',c:[e.BE,t]},{b:"'",e:"'",i:"\\n",c:[e.BE,t]},{b:'"',e:'"',i:"\\n",c:[e.BE,t]}]};t.c=[e.CNM,r];var n={keyword:"assert async await break case catch class const continue default do else enum extends false final finally for if in is new null rethrow return super switch sync this throw true try var void while with yield abstract as dynamic export external factory get implements import library operator part set static typedef",built_in:"print Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set Stopwatch String StringBuffer StringSink Symbol Type Uri bool double int num document window querySelector querySelectorAll Element ElementList"};return{k:n,c:[r,e.C("/\\*\\*","\\*/",{sL:"markdown"}),e.C("///","$",{sL:"markdown"}),e.CLCM,e.CBCM,{cN:"class",bK:"class interface",e:"{",eE:!0,c:[{bK:"extends implements"},e.UTM]},e.CNM,{cN:"meta",b:"@[A-Za-z]+"},{b:"=>"}]}}),hljs.registerLanguage("ini",function(e){var t={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"section",b:/^\s*\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",rB:!0,c:[{cN:"attr",b:/[a-z0-9\[\]_-]+/},{b:/=/,eW:!0,r:0,c:[{cN:"literal",b:/\bon|off|true|false|yes|no\b/},{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},t,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM]}]}]}}),hljs.registerLanguage("java",function(e){var t=e.UIR+"(<"+e.UIR+"(\\s*,\\s*"+e.UIR+")*>)?",r="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports",n="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",i={cN:"number",b:n,r:0};return{aliases:["jsp"],k:r,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:r,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:r,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},i,{cN:"meta",b:"@[A-Za-z]+"}]}}),hljs.registerLanguage("matlab",function(e){var t=[e.CNM,{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]}],r={r:0,c:[{b:/'['\.]*/}]};return{k:{keyword:"break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while",built_in:"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson"},i:'(//|"|#|/\\*|\\s+/\\w+)',c:[{cN:"function",bK:"function",e:"$",c:[e.UTM,{cN:"params",v:[{b:"\\(",e:"\\)"},{b:"\\[",e:"\\]"}]}]},{b:/[a-zA-Z_][a-zA-Z_0-9]*'['\.]*/,rB:!0,r:0,c:[{b:/[a-zA-Z_][a-zA-Z_0-9]*/,r:0},r.c[0]]},{b:"\\[",e:"\\]",c:t,r:0,starts:r},{b:"\\{",e:/}/,c:t,r:0,starts:r},{b:/\)/,r:0,starts:r},e.C("^\\s*\\%\\{\\s*$","^\\s*\\%\\}\\s*$"),e.C("\\%","$")].concat(t)}}),hljs.registerLanguage("erlang-repl",function(e){ return{k:{built_in:"spawn spawn_link self",keyword:"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor"},c:[{cN:"meta",b:"^[0-9]+> ",r:10},e.C("%","$"),{cN:"number",b:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",r:0},e.ASM,e.QSM,{b:"\\?(::)?([A-Z]\\w*(::)?)+"},{b:"->"},{b:"ok"},{b:"!"},{b:"(\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\b[a-z'][a-zA-Z0-9_']*)",r:0},{b:"[A-Z][a-zA-Z0-9_']*",r:0}]}}),hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},n={b:"->{",e:"}"},i={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},a=[e.BE,r,i],o=[i,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),n,{cN:"string",c:a,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,r:5,c:[e.TM]},{b:"-\\w\\b",r:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=o,n.c=o,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:o}}),hljs.registerLanguage("elixir",function(e){var t="[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?",r="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",n="and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote",i={cN:"subst",b:"#\\{",e:"}",l:t,k:n},a={cN:"string",c:[e.BE,i],v:[{b:/'/,e:/'/},{b:/"/,e:/"/}]},o={cN:"function",bK:"def defp defmacro",e:/\B\b/,c:[e.inherit(e.TM,{b:t,endsParent:!0})]},s=e.inherit(o,{cN:"class",bK:"defimpl defmodule defprotocol defrecord",e:/\bdo\b|$|;/}),l=[a,e.HCM,s,o,{cN:"symbol",b:":(?!\\s)",c:[a,{b:r}],r:0},{cN:"symbol",b:t+":",r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"->"},{b:"("+e.RSR+")\\s*",c:[e.HCM,{cN:"regexp",i:"\\n",c:[e.BE,i],v:[{b:"/",e:"/[a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}],r:0}];return i.c=l,{l:t,k:n,c:l}}),hljs.registerLanguage("protobuf",function(e){return{k:{keyword:"package import option optional required repeated group",built_in:"double float int32 int64 uint32 uint64 sint32 sint64 fixed32 fixed64 sfixed32 sfixed64 bool string bytes",literal:"true false"},c:[e.QSM,e.NM,e.CLCM,{cN:"class",bK:"message enum service",e:/\{/,i:/\n/,c:[e.inherit(e.TM,{starts:{eW:!0,eE:!0}})]},{cN:"function",bK:"rpc",e:/;/,eE:!0,k:"rpc returns"},{b:/^\s*[A-Z_]+/,e:/\s*=/,eE:!0}]}}),hljs.registerLanguage("cs",function(e){var t={keyword:"abstract as base bool break byte case catch char checked const continue decimal default delegate do double else enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while nameof add alias ascending async await by descending dynamic equals from get global group into join let on orderby partial remove select set value var where yield",literal:"null false true"},r={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},n=e.inherit(r,{i:/\n/}),i={cN:"subst",b:"{",e:"}",k:t},a=e.inherit(i,{i:/\n/}),o={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,a]},s={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},i]},l=e.inherit(s,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},a]});i.c=[s,o,r,e.ASM,e.QSM,e.CNM,e.CBCM],a.c=[l,o,n,e.ASM,e.QSM,e.CNM,e.inherit(e.CBCM,{i:/\n/})];var c={v:[s,o,r,e.ASM,e.QSM]},u=e.IR+"(<"+e.IR+"(\\s*,\\s*"+e.IR+")*>)?(\\[\\])?";return{aliases:["csharp"],k:t,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",r:0},{b:""},{b:""}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},c,e.CNM,{bK:"class interface",e:/[{;=]/,i:/[^\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{bK:"new return throw await",r:0},{cN:"function",b:"("+u+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:t,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,r:0,c:[c,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}}),hljs.registerLanguage("apache",function(e){var t={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"section",b:""},{cN:"attribute",b:/\w+/,r:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",t]},t,e.QSM]}}],i:/\S/}}),hljs.registerLanguage("scala",function(e){var t={cN:"meta",b:"@[A-Za-z]+"},r={cN:"subst",v:[{b:"\\$[A-Za-z0-9_]+"},{b:"\\${",e:"}"}]},n={cN:"string",v:[{b:'"',e:'"',i:"\\n",c:[e.BE]},{b:'"""',e:'"""',r:10},{b:'[a-z]+"',e:'"',i:"\\n",c:[e.BE,r]},{cN:"string",b:'[a-z]+"""',e:'"""',c:[r],r:10}]},i={cN:"symbol",b:"'\\w[\\w\\d_]*(?!')"},a={cN:"type",b:"\\b[A-Z][A-Za-z0-9_]*",r:0},o={cN:"title",b:/[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,r:0},s={cN:"class",bK:"class object trait type",e:/[:={\[\n;]/,eE:!0,c:[{bK:"extends with",r:10},{b:/\[/,e:/\]/,eB:!0,eE:!0,r:0,c:[a]},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,r:0,c:[a]},o]},l={cN:"function",bK:"def",e:/[:={\[(\n;]/,eE:!0,c:[o]};return{k:{literal:"true false null",keyword:"type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit"},c:[e.CLCM,e.CBCM,n,i,a,l,s,e.CNM,t]}}),hljs.registerLanguage("nginx",function(e){var t={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},r={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,t],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[t]},{cN:"regexp",c:[e.BE,t],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},t]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],r:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:r}],r:0}],i:"[^\\s\\}]"}}),hljs.registerLanguage("coffeescript",function(e){var t={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},r="[A-Za-z$_][0-9A-Za-z$_]*",n={cN:"subst",b:/#\{/,e:/}/,k:t},i=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,n]},{b:/"/,e:/"/,c:[e.BE,n]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[n,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{b:"@"+r},{b:"`",e:"`",eB:!0,eE:!0,sL:"javascript"}];n.c=i;var a=e.inherit(e.TM,{b:r}),o="(\\(.*\\))?\\s*\\B[-=]>",s={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:t,c:["self"].concat(i)}]};return{aliases:["coffee","cson","iced"],k:t,i:/\/\*/,c:i.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+r+"\\s*=\\s*"+o,e:"[-=]>",rB:!0,c:[a,s]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:o,e:"[-=]>",rB:!0,c:[s]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[a]},a]},{b:r+":",e:":",rB:!0,rE:!0,r:0}])}}),hljs.registerLanguage("diff",function(){return{aliases:["patch"],c:[{cN:"meta",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}}),hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*#]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}}),hljs.registerLanguage("http",function(){var e="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+e,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+e+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:e},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}}),hljs.registerLanguage("dockerfile",function(e){return{aliases:["docker"],cI:!0,k:"from maintainer expose env user onbuild",c:[e.HCM,e.ASM,e.QSM,e.NM,{bK:"run cmd entrypoint volume add copy workdir label healthcheck",starts:{e:/[^\\]\n/,sL:"bash"}}],i:"",rB:!0,e:"=>",c:[{cN:"attr",b:e.IR}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},a]}],r:0}]}}),hljs.registerLanguage("javascript",function(e){var t="[A-Za-z$_][0-9A-Za-z$_]*",r={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},n={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},i={cN:"subst",b:"\\$\\{",e:"\\}",k:r,c:[]},a={cN:"string",b:"`",e:"`",c:[e.BE,i]};i.c=[e.ASM,e.QSM,a,n,e.RM];var o=i.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:r,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,a,e.CLCM,e.CBCM,n,{b:/[{,]\s*/,r:0,c:[{b:t+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:t,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+t+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:t},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,c:o}]}]},{b://,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:t}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:o}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}}),hljs.registerLanguage("scss",function(e){var t="[a-zA-Z-][a-zA-Z0-9_-]*",r={cN:"variable",b:"(\\$"+t+")\\b"},n={cN:"number",b:"#[0-9A-Fa-f]+"};return{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:!0,i:"[^\\s]",starts:{eW:!0,eE:!0,c:[n,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"meta",b:"!important"}]}},{cI:!0,i:"[=/|']",c:[e.CLCM,e.CBCM,{cN:"selector-id",b:"\\#[A-Za-z0-9_-]+",r:0},{cN:"selector-class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"selector-attr",b:"\\[",e:"\\]",i:"$"},{cN:"selector-tag",b:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",r:0},{b:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{b:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},r,{cN:"attribute",b:"\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b", i:"[^\\s]"},{b:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{b:":",e:";",c:[r,n,e.CSSNM,e.QSM,e.ASM,{cN:"meta",b:"!important"}]},{b:"@",e:"[{;]",k:"mixin include extend for if else each while charset import debug media page content font-face namespace warn",c:[r,e.QSM,e.ASM,n,e.CSSNM,{b:"\\s[A-Za-z0-9_.-]+",r:0}]}]}}),hljs.registerLanguage("objectivec",function(e){var t={cN:"built_in",b:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},r={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},n=/[a-zA-Z@][a-zA-Z0-9_]*/,i="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:r,l:n,i:""}]}]},{cN:"class",b:"("+i.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:i,l:n,c:[e.UTM]},{b:"\\."+e.UIR,r:0}]}}),function(){var e=function(t){var r=new e.Builder;return r.pipeline.add(e.trimmer,e.stopWordFilter,e.stemmer),r.searchPipeline.add(e.stemmer),t.call(r,r),r.build()};e.version="2.3.9",e.utils={},e.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),e.utils.asString=function(e){return void 0===e||null===e?"":e.toString()},e.utils.clone=function(e){if(null===e||void 0===e)return e;for(var t=Object.create(null),r=Object.keys(e),n=0;n0){var u=e.utils.clone(r)||{};u.position=[s,c],u.index=a.length,a.push(new e.Token(n.slice(s,o),u))}s=o+1}}return a},e.tokenizer.separator=/[\s\-]+/,e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions=Object.create(null),e.Pipeline.registerFunction=function(t,r){r in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+r),t.label=r,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var r=t.label&&t.label in this.registeredFunctions;r||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var r=new e.Pipeline;return t.forEach(function(t){var n=e.Pipeline.registeredFunctions[t];if(!n)throw new Error("Cannot load unregistered function: "+t);r.add(n)}),r},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(t);if(n==-1)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,r)},e.Pipeline.prototype.before=function(t,r){e.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(t);if(n==-1)throw new Error("Cannot find existingFn");this._stack.splice(n,0,r)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);t!=-1&&this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r1&&(ae&&(r=i),a!=e);)n=r-t,i=t+Math.floor(n/2),a=this.elements[2*i];return a==e?2*i:a>e?2*i:as?c+=2:o==s&&(t+=r[l+1]*n[c+1],l+=2,c+=2);return t},e.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},e.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t0){var o,s=a.str.charAt(0);s in a.node.edges?o=a.node.edges[s]:(o=new e.TokenSet,a.node.edges[s]=o),1==a.str.length&&(o["final"]=!0),i.push({node:o,editsRemaining:a.editsRemaining,str:a.str.slice(1)})}if(0!=a.editsRemaining){if("*"in a.node.edges)var l=a.node.edges["*"];else{var l=new e.TokenSet;a.node.edges["*"]=l}if(0==a.str.length&&(l["final"]=!0),i.push({node:l,editsRemaining:a.editsRemaining-1,str:a.str}),a.str.length>1&&i.push({node:a.node,editsRemaining:a.editsRemaining-1,str:a.str.slice(1)}),1==a.str.length&&(a.node["final"]=!0),a.str.length>=1){if("*"in a.node.edges)var c=a.node.edges["*"];else{var c=new e.TokenSet;a.node.edges["*"]=c}1==a.str.length&&(c["final"]=!0),i.push({node:c,editsRemaining:a.editsRemaining-1,str:a.str.slice(1)})}if(a.str.length>1){var u,d=a.str.charAt(0),f=a.str.charAt(1);f in a.node.edges?u=a.node.edges[f]:(u=new e.TokenSet,a.node.edges[f]=u),1==a.str.length&&(u["final"]=!0),i.push({node:u,editsRemaining:a.editsRemaining-1,str:d+a.str.slice(2)})}}}return n},e.TokenSet.fromString=function(t){for(var r=new e.TokenSet,n=r,i=0,a=t.length;i=e;t--){var r=this.uncheckedNodes[t],n=r.child.toString();n in this.minimizedNodes?r.parent.edges[r["char"]]=this.minimizedNodes[n]:(r.child._str=n,this.minimizedNodes[n]=r.child),this.uncheckedNodes.pop()}},e.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},e.Index.prototype.search=function(t){return this.query(function(r){var n=new e.QueryParser(t,r);n.parse()})},e.Index.prototype.query=function(t){for(var r=new e.Query(this.fields),n=Object.create(null),i=Object.create(null),a=Object.create(null),o=Object.create(null),s=Object.create(null),l=0;l1?this._b=1:this._b=e},e.Builder.prototype.k1=function(e){this._k1=e},e.Builder.prototype.add=function(t,r){var n=t[this._ref],i=Object.keys(this._fields);this._documents[n]=r||{},this.documentCount+=1;for(var a=0;a=this.length)return e.QueryLexer.EOS;var t=this.str.charAt(this.pos);return this.pos+=1,t},e.QueryLexer.prototype.width=function(){return this.pos-this.start},e.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},e.QueryLexer.prototype.backup=function(){this.pos-=1},e.QueryLexer.prototype.acceptDigitRun=function(){var t,r;do t=this.next(),r=t.charCodeAt(0);while(r>47&&r<58);t!=e.QueryLexer.EOS&&this.backup()},e.QueryLexer.prototype.more=function(){return this.pos1&&(t.backup(),t.emit(e.QueryLexer.TERM)),t.ignore(),t.more())return e.QueryLexer.lexText},e.QueryLexer.lexEditDistance=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.EDIT_DISTANCE),e.QueryLexer.lexText},e.QueryLexer.lexBoost=function(t){return t.ignore(),t.acceptDigitRun(),t.emit(e.QueryLexer.BOOST),e.QueryLexer.lexText},e.QueryLexer.lexEOS=function(t){t.width()>0&&t.emit(e.QueryLexer.TERM)},e.QueryLexer.termSeparator=e.tokenizer.separator,e.QueryLexer.lexText=function(t){for(;;){var r=t.next();if(r==e.QueryLexer.EOS)return e.QueryLexer.lexEOS;if(92!=r.charCodeAt(0)){if(":"==r)return e.QueryLexer.lexField;if("~"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexEditDistance;if("^"==r)return t.backup(),t.width()>0&&t.emit(e.QueryLexer.TERM),e.QueryLexer.lexBoost;if("+"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if("-"==r&&1===t.width())return t.emit(e.QueryLexer.PRESENCE),e.QueryLexer.lexText;if(r.match(e.QueryLexer.termSeparator))return e.QueryLexer.lexTerm}else t.escapeCharacter()}},e.QueryParser=function(t,r){this.lexer=new e.QueryLexer(t),this.query=r,this.currentClause={},this.lexemeIdx=0},e.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var t=e.QueryParser.parseClause;t;)t=t(this);return this.query},e.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},e.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},e.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},e.QueryParser.parseClause=function(t){var r=t.peekLexeme();if(void 0!=r)switch(r.type){case e.QueryLexer.PRESENCE:return e.QueryParser.parsePresence;case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(n+=" with value '"+r.str+"'"),new e.QueryParseError(n,r.start,r.end)}},e.QueryParser.parsePresence=function(t){var r=t.consumeLexeme();if(void 0!=r){switch(r.str){case"-":t.currentClause.presence=e.Query.presence.PROHIBITED;break;case"+":t.currentClause.presence=e.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+r.str+"'";throw new e.QueryParseError(n,r.start,r.end)}var i=t.peekLexeme();if(void 0==i){var n="expecting term or field, found nothing";throw new e.QueryParseError(n,r.start,r.end)}switch(i.type){case e.QueryLexer.FIELD:return e.QueryParser.parseField;case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var n="expecting term or field, found '"+i.type+"'";throw new e.QueryParseError(n,i.start,i.end)}}},e.QueryParser.parseField=function(t){var r=t.consumeLexeme();if(void 0!=r){if(t.query.allFields.indexOf(r.str)==-1){var n=t.query.allFields.map(function(e){return"'"+e+"'"}).join(", "),i="unrecognised field '"+r.str+"', possible fields: "+n;throw new e.QueryParseError(i,r.start,r.end)}t.currentClause.fields=[r.str];var a=t.peekLexeme();if(void 0==a){var i="expecting term, found nothing";throw new e.QueryParseError(i,r.start,r.end)}switch(a.type){case e.QueryLexer.TERM:return e.QueryParser.parseTerm;default:var i="expecting term, found '"+a.type+"'";throw new e.QueryParseError(i,a.start,a.end)}}},e.QueryParser.parseTerm=function(t){var r=t.consumeLexeme();if(void 0!=r){t.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(t.currentClause.usePipeline=!1);var n=t.peekLexeme();if(void 0==n)return void t.nextClause();switch(n.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+n.type+"'";throw new e.QueryParseError(i,n.start,n.end)}}},e.QueryParser.parseEditDistance=function(t){var r=t.consumeLexeme();if(void 0!=r){var n=parseInt(r.str,10);if(isNaN(n)){var i="edit distance must be numeric";throw new e.QueryParseError(i,r.start,r.end)}t.currentClause.editDistance=n;var a=t.peekLexeme();if(void 0==a)return void t.nextClause();switch(a.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+a.type+"'";throw new e.QueryParseError(i,a.start,a.end)}}},e.QueryParser.parseBoost=function(t){var r=t.consumeLexeme();if(void 0!=r){var n=parseInt(r.str,10);if(isNaN(n)){var i="boost must be numeric";throw new e.QueryParseError(i,r.start,r.end)}t.currentClause.boost=n;var a=t.peekLexeme();if(void 0==a)return void t.nextClause();switch(a.type){case e.QueryLexer.TERM:return t.nextClause(),e.QueryParser.parseTerm;case e.QueryLexer.FIELD:return t.nextClause(),e.QueryParser.parseField;case e.QueryLexer.EDIT_DISTANCE:return e.QueryParser.parseEditDistance;case e.QueryLexer.BOOST:return e.QueryParser.parseBoost;case e.QueryLexer.PRESENCE:return t.nextClause(),e.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+a.type+"'";throw new e.QueryParseError(i,a.start,a.end)}}},function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():e.lunr=t()}(this,function(){return e})}(),function(){ -"use strict";window.padNumber=function(e,t,r){var n,i,a;return null==r&&(r="0"),n=Math.abs(e),a=Math.max(0,t-n.toString().length),i=Math.pow(10,a).toString().substr(1),"0"!==r&&i.replace(/^0+/,function(e){return e.replace(/0/g,r)}),e<0&&(i="-"+i),i+n},window.rem=function(e){return null==e&&(e=1),e*parseInt($("html").css("font-size"))},Number.prototype.rem=function(){return this*parseInt($("html").css("font-size"))},String.prototype.toInt=function(){return parseInt(this)},$.fn.extend({maxScrollLeft:function(){return this[0].scrollWidth-this[0].clientWidth}}),$.fn.extend({maxScrollTop:function(){return this[0].scrollHeight-this.outerHeight()}}),window.delay=function(e,t){var r=Array.prototype.slice.call(arguments,2);return setTimeout(function(){return e.apply(null,r)},t)},window.throttle=function(e,t,r){var n,i,a,o=null,s=0;r||(r={});var l=function(){s=r.leading===!1?0:Date.now(),o=null,a=e.apply(n,i),o||(n=i=null)};return function(){var c=Date.now();s||r.leading!==!1||(s=c);var u=t-(c-s);return n=this,i=arguments,u<=0||u>t?(o&&(clearTimeout(o),o=null),s=c,a=e.apply(n,i),o||(n=i=null)):o||r.trailing===!1||(o=setTimeout(l,u)),a}},window.debounce=function(e,t,r){var n,i,a,o,s,l=function(){var c=Date.now()-o;c=0?n=setTimeout(l,t-c):(n=null,r||(s=e.apply(a,i),n||(a=i=null)))};return function(){a=this,i=arguments,o=Date.now();var c=r&&!n;return n||(n=setTimeout(l,t)),c&&(s=e.apply(a,i),a=i=null),s}}}.call(this),function(){"use strict";var e,t,r;e=window.SemVer={},r={major:0,minor:0,patch:0},t={major:Infinity,minor:Infinity,patch:Infinity},e.parse=function(e){var t;return t=/^[<>]?[=]?(\d+)\.?(\d+)?\.?(\d+)?/.exec(e),{major:parseInt(t[1])||0,minor:parseInt(t[2])||0,patch:parseInt(t[3])||0}},e.parseRange=function(n){var i,a;return n.match(/\+$/)||n.match(/^\>\=/)?[e.parse(n),t]:n.match(/^\>/)?(i=e.parse(n),i.patch++,[i,t]):n.match(/^\<\=/)?[r,e.parse(n)]:n.match(/\-$/)||n.match(/^\0||e.compare(t,n)<0)}}.call(this),function(){$("main").each(function(){var e,t;return t=$(this),e=t.find("h1").add(t.find("h2")).add(t.find("h3")).add(t.find("h4")).add(t.find("h5")).add(t.find("h6")),e.each(function(){var e,t,r,n;return n=$(this),r=n.attr("id"),t=n.html(),e="",n.wrapInner(e)})})}.call(this),function(){var e,t,r,n,i;t=$(".table-of-contents"),t.length&&(e=$("main > h2"),e.length<2||(n=$('

    Contents

    '),i=$('
    '),r=$('
      ').appendTo(i),e.length>=6&&i.addClass("table-of-contents__wrapper--multi"),e.each(function(){var e;return e=$(this),r.append($("
    1. ",{"class":"table-of-contents__item",html:""+e.text()+""}))}),n.appendTo(t),i.appendTo(t)))}.call(this),function(){$(function(){var e,t,r,n;n=$(".content-nav"),t=$(".content-well"),e=$(".js_toggle-content-nav"),r=$(".content-menu__item"),e.on("click",function(){var e,r;return r=$(window).scrollTop(),e=t.offset().top,n.toggleClass("content-nav--fullscreen"),t.toggleClass("content-well--immobile"),t.hasClass("content-well--immobile")?t.css("top",-1*r):($(window).scrollTop(-1*e),t.css("top",""))}),r.on("click",".content-menu__menu-toggle",function(){var e;return e=$(this.parentNode.nextElementSibling),e.hasClass("content-menu--open")?e.slideUp("fast"):e.slideDown("fast"),e.toggleClass("content-menu--open"),$(this).toggleClass("content-menu__menu-toggle--open")})})}.call(this),function(){"use strict";var e,t;e=function(e){return $("meta[name="+e+"]").attr("content")},t=function(){var t,r,n,i,a,o,s,l,c,u,d,f;if(s=e("project"),t=e("version"),c=e("project_relative_path"),c||(c=""),r=e("docs_root_url"),r||(r=""),l=r+"data/project_descriptions.json",i=e("version_history_in"),a=e("version_history_locations"),d=void 0,f=[],i&&(d=SemVer.parseRange(i)),a&&(n=JSON.parse(a),f=function(){var e,t,r,i;for(i=[],e=0,t=n.length;e',m='',V+='
      '+m+"
      ",V+='
      '+m+"
      ",V+='
      ',V+='
        ',M=Math.min(6,H+1),w=!1,R)for(k=0,T=R.length;kLTS'),q=F.reverse(),_=N=0,L=q.length;N',x&&Q!==t){for(O=c,C=0,A=f.length;C'}V+='
      • '+l+Q+"
      • "}V+="
    "}return g&&(b=["selector-list__element","selector-list__element--archived"],V+='
    ',V+='
    ',V+='
    "),v&&(b=["selector-list__element","selector-list__element--other"],V+='
    ',V+='
    ',V+='
      \n',V+='
    • ',V+="
    "),$(".selector-pane--versions").html(V),n=$(".selector-pane--versions"),i=n.parent(),a=i.parent(),W=Math.max.apply(Math,n.find(".selector-list").map(function(){return $(this).outerHeight()})),i.css("height",W+2..rem()),a.css("height",W+2..rem()),$(".selector-pane--versions").find(".js_edge-fader--target").on("scroll.selector-fader-target",throttle(function(){return EdgeFader.verifyArrowState($(this))},250)),$(".edge-fader__arrow").on("click.selector-fader-arrow",EdgeFader.onClickCallback),$(".selector-other-releases").on("click",function(){return $(".release-is-archived-and-hidden").toggleClass("release-is-archived-and-hidden"),$(".selector-other-releases").toggleClass("release-is-archived-and-hidden"),window.dispatchEvent(new Event("resize"))})})},$(function(){var e,r,n,i,a,o,s;return t(),e=$(".content-nav"),r=$(".content-nav__primary"),o=$(".selector--version"),n=$(".selector-pane--versions"),i=n.parent(),a=i.parent(),s=debounce(function(){if(0===n.closest(".selector-pane__sizing-box--hidden").length)return n.find(".selector-list__scroll-box").each(function(){return EdgeFader.showOrHideArrows($(this))})},500),o.on("click.toggle_selector",".selector__btn",function(){var e;return e=$(this).parent(),e.toggleClass("selector--open"),a.toggleClass("selector-pane__sizing-box--hidden"),e.hasClass("selector--open")?(i.css("max-height",r.outerHeight()+.75.rem()),a.css("max-height",r.outerHeight()+.75.rem()),EdgeFader.showOrHideArrows(n),s()):(a.css("max-height",""),EdgeFader.hideArrows(n),n.find(".selector-list__scroll-box").each(function(){return EdgeFader.hideArrows($(this))}))}),$(window).on("resize.toggled_selector_reize",debounce(function(){var e;return e=Math.max.apply(Math,n.find(".selector-list").map(function(){return $(this).outerHeight()})),i.css("height",e+2..rem()),a.css("height",e+2..rem()),o.hasClass("selector--open")&&(i.css("max-height",r.outerHeight()+.75.rem()),a.css("max-height",r.outerHeight()+.75.rem()),EdgeFader.showOrHideArrows(n),s()),!0},250)),$(document).on("click.selector_close",function(e){return $(e.target).closest(".selector-pane__sizing-box").length>0||(!!$(e.target).hasClass("selector__btn")||($(".selector--open").removeClass("selector--open"),a.addClass("selector-pane__sizing-box--hidden"),a.css("max-height",""),EdgeFader.hideArrows(n),n.find(".selector-list__scroll-box").each(function(){return EdgeFader.hideArrows($(this))})))})})}.call(this),function(){var e;e=window.EdgeFader={},e.verifyArrowState=function(e){var t,r,n,i,a,o,s,l,c;l=e.maxScrollLeft(),o=e.scrollLeft(),c=e.maxScrollTop(),s=e.scrollTop(),0===l&&0===c||(a=e.parent(),r=a.children(".edge-fader--left").children(".edge-fader__arrow"),n=a.children(".edge-fader--right").children(".edge-fader__arrow"),i=a.children(".edge-fader--top").children(".edge-fader__arrow"),t=a.children(".edge-fader--bottom").children(".edge-fader__arrow"),l>3&&(o>3?r.removeClass("edge-fader__arrow--inactive"):r.addClass("edge-fader__arrow--inactive"),o3&&(s>3?i.removeClass("edge-fader__arrow--inactive"):i.addClass("edge-fader__arrow--inactive"),s0?(n.removeClass("edge-fader__arrow--invisible"),i.removeClass("edge-fader__arrow--invisible")):(n.addClass("edge-fader__arrow--invisible"),i.addClass("edge-fader__arrow--invisible")),l>0?(a.removeClass("edge-fader__arrow--invisible"),r.removeClass("edge-fader__arrow--invisible")):(a.addClass("edge-fader__arrow--invisible"),r.addClass("edge-fader__arrow--invisible")),(s>0||l>0)&&e.verifyArrowState(t)},e.showArrows=function(e){var t,r,n,i,a;return a=e.parent(),r=a.children(".edge-fader--left").children(".edge-fader__arrow"),n=a.children(".edge-fader--right").children(".edge-fader__arrow"),i=a.children(".edge-fader--top").children(".edge-fader__arrow"),t=a.children(".edge-fader--bottom").children(".edge-fader__arrow"),r.removeClass("edge-fader__arrow--invisible"),n.removeClass("edge-fader__arrow--invisible"),i.removeClass("edge-fader__arrow--invisible"),t.removeClass("edge-fader__arrow--invisible")},e.hideArrows=function(e){var t,r,n,i,a;return a=e.parent(),r=a.children(".edge-fader--left").children(".edge-fader__arrow"),n=a.children(".edge-fader--right").children(".edge-fader__arrow"),i=a.children(".edge-fader--top").children(".edge-fader__arrow"),t=a.children(".edge-fader--bottom").children(".edge-fader__arrow"),r.addClass("edge-fader__arrow--invisible"),n.addClass("edge-fader__arrow--invisible"),i.addClass("edge-fader__arrow--invisible"),t.addClass("edge-fader__arrow--invisible")},e.onClickCallback=function(){var e,t,r,n,i;e=$(this),t=e.parent(),n=t.parent(),r=n.children(".js_edge-fader--target"),t.hasClass("edge-fader--left")?(i=-1*n.width()*.75+r.scrollLeft(),r.animate({scrollLeft:i},200)):t.hasClass("edge-fader--right")?(i=1*n.width()*.75+r.scrollLeft(),r.animate({scrollLeft:i},200)):t.hasClass("edge-fader--top")?(i=-1*n.height()*.75+r.scrollTop(),r.animate({scrollTop:i},200)):t.hasClass("edge-fader--bottom")&&(i=1*n.height()*.75+r.scrollTop(),r.animate({scrollTop:i},200))},$(function(){$(".js_edge-fader--target").on("scroll.edge-fader-target",throttle(function(){return e.verifyArrowState($(this))},250)),$(window).on("resize.edge-fader-target",throttle(function(){return $(".edge-fader").parent().children(".js_edge-fader--target").each(function(){return e.showOrHideArrows($(this))})},250)),$(".edge-fader__arrow").on("click.edge-fader-arrow",e.onClickCallback)})}.call(this),function(){"use strict";var e,t;t={"language-advancedconfig":{display_name:"advanced.config",highlight_as:"language-erlang"},"language-appconfig":{display_name:"app.config",highlight_as:"language-erlang"},"language-riakconf":{display_name:"riak.conf",highlight_as:"language-matlab"},"language-riakcsconf":{display_name:"riak-cs.conf",highlight_as:"language-matlab"},"language-stanchionconf":{display_name:"stanchion.conf",highlight_as:"language-matlab"},"language-vmargs":{display_name:"vm.args",highlight_as:"language-ini"},"language-bash":{display_name:"Shell",highlight_as:""},"language-curl":{display_name:"CURL",highlight_as:"language-bash"},"language-csharp":{display_name:"C#",highlight_as:""},"language-erlang":{display_name:"Erlang",highlight_as:""},"language-golang":{display_name:"Go",highlight_as:""},"language-java":{display_name:"Java",highlight_as:""},"language-javascript":{display_name:"JS",highlight_as:""},"language-coffeescript":{display_name:"Coffee",highlight_as:""},"language-json":{display_name:"JSON",highlight_as:""},"language-php":{display_name:"PHP",highlight_as:""},"language-protobuf":{display_name:"Protobuf",highlight_as:""},"language-python":{display_name:"Python",highlight_as:""},"language-ruby":{display_name:"Ruby",highlight_as:""},"language-scala":{display_name:"Scala",highlight_as:""},"language-sql":{display_name:"SQL",highlight_as:""},"language-xml":{display_name:"XML",highlight_as:""},"language-riakattach":{display_name:"riak attach",highlight_as:"language-erlang"},"language-plaintext ":{display_name:" ",highlight_as:""},"language-text":{display_name:" ",highlight_as:""},"language-log":{display_name:" ",highlight_as:""},"language-erlangsnippet":{display_name:" ",highlight_as:"language-erlang"}},e=function(e){var t,r;return null!=(t=e.attr("class"))&&null!=(r=t.match(/(?:^|\s)(language-.+?)(?:\s|$)/))?r[1]:void 0},$("pre > code").each(function(){var r,n,i,a,o,s,l,c;if(r=$(this),n=r.parent(),s=e(r),s&&(s.indexOf(".")!==-1&&(r.removeClass(s),s=s.replace(/\./g,""),r.addClass(s)),s in t&&(o=null!=(l=t[s])?l.highlight_as:void 0,o&&(r.removeClass(s),r.addClass(o)),hljs.highlightBlock(r[0]),o&&(r.removeClass(o),r.addClass(s)))),!n.parent().hasClass("code-block__code-set"))return i=n.nextUntil(":not(pre)"),a=null!=(c=t[s])?c.display_name.replace(/^\s+|\s+$/g,""):void 0,a&&0===i.length&&n.wrap('
    '),i.length?n.add(i).wrapAll('
    '):void 0}),$(".code-block--titled").each(function(){var r,n,i,a,o,s;return n=$(this),i=n.children("pre"),r=i.children("code"),o=e(r),i.addClass("code-block__code"),a=null!=(s=t[o])?s.display_name:void 0,a||(a=o.replace(/language-/,"")),$(''+a+"").prependTo(n)}),$(".code-block--tabbed").each(function(){var r,n,i,a,o;return a=$(this),r=a.children(".code-block__code-set"),o='',i=$('
    '+o+'
    '+o+"
    "),n=$('
      '),n.appendTo(i),r.children("pre").each(function(r){var i,a,o,s,l,c,u;return a=$(this),i=a.children(),c=e(i),l=null!=(u=t[c])?u.display_name:void 0,l||(l=null!=c?c.replace(/language-/,""):void 0),l||(l="////"+padNumber(r,2)),s=c,s||(s="unnamed-lang"+padNumber(r,2)),o="code-block__"+s+padNumber(r,3),a.addClass("code-block__code"),a.attr("id",o),n.append('
    • '+l+"
    • ")}),n.find(".code-block__tab").first().addClass("code-block__tab--active"),a.find(".code-block__code").first().addClass("code-block__code--active"),a.prepend(i),EdgeFader.showOrHideArrows(n)}),$(function(){var e;e=$(".code-block--tabbed"),$(".code-block__tab").on("click.code-block-tab","a",function(t){var r,n,i,a,o,s,l,c;if(t.preventDefault(),i=$(this),s=i.data("language"),!i.parent().hasClass("code-block__tab--active")){for(c=this.getBoundingClientRect().top,o=0,l=e.length;o"))}),$("td code").each(function(){$(this).html($(this).html().replace(/([^^])\//g,"$1/"))}); +"use strict";window.padNumber=function(e,t,r){var n,i,a;return null==r&&(r="0"),n=Math.abs(e),a=Math.max(0,t-n.toString().length),i=Math.pow(10,a).toString().substr(1),"0"!==r&&i.replace(/^0+/,function(e){return e.replace(/0/g,r)}),e<0&&(i="-"+i),i+n},window.rem=function(e){return null==e&&(e=1),e*parseInt($("html").css("font-size"))},Number.prototype.rem=function(){return this*parseInt($("html").css("font-size"))},String.prototype.toInt=function(){return parseInt(this)},$.fn.extend({maxScrollLeft:function(){return this[0].scrollWidth-this[0].clientWidth}}),$.fn.extend({maxScrollTop:function(){return this[0].scrollHeight-this.outerHeight()}}),window.delay=function(e,t){var r=Array.prototype.slice.call(arguments,2);return setTimeout(function(){return e.apply(null,r)},t)},window.throttle=function(e,t,r){var n,i,a,o=null,s=0;r||(r={});var l=function(){s=r.leading===!1?0:Date.now(),o=null,a=e.apply(n,i),o||(n=i=null)};return function(){var c=Date.now();s||r.leading!==!1||(s=c);var u=t-(c-s);return n=this,i=arguments,u<=0||u>t?(o&&(clearTimeout(o),o=null),s=c,a=e.apply(n,i),o||(n=i=null)):o||r.trailing===!1||(o=setTimeout(l,u)),a}},window.debounce=function(e,t,r){var n,i,a,o,s,l=function(){var c=Date.now()-o;c=0?n=setTimeout(l,t-c):(n=null,r||(s=e.apply(a,i),n||(a=i=null)))};return function(){a=this,i=arguments,o=Date.now();var c=r&&!n;return n||(n=setTimeout(l,t)),c&&(s=e.apply(a,i),a=i=null),s}}}.call(this),function(){"use strict";var e,t,r;e=window.SemVer={},r={major:0,minor:0,patch:0},t={major:Infinity,minor:Infinity,patch:Infinity},e.parse=function(e){var t;return t=/^[<>]?[=]?(\d+)\.?(\d+)?\.?(\d+)?/.exec(e),{major:parseInt(t[1])||0,minor:parseInt(t[2])||0,patch:parseInt(t[3])||0}},e.parseRange=function(n){var i,a;return n.match(/\+$/)||n.match(/^\>\=/)?[e.parse(n),t]:n.match(/^\>/)?(i=e.parse(n),i.patch++,[i,t]):n.match(/^\<\=/)?[r,e.parse(n)]:n.match(/\-$/)||n.match(/^\0||e.compare(t,n)<0)}}.call(this),function(){$("main").each(function(){var e,t;return t=$(this),e=t.find("h1").add(t.find("h2")).add(t.find("h3")).add(t.find("h4")).add(t.find("h5")).add(t.find("h6")),e.each(function(){var e,t,r,n;return n=$(this),r=n.attr("id"),t=n.html(),e="",n.wrapInner(e)})})}.call(this),function(){var e,t,r,n,i;t=$(".table-of-contents"),t.length&&(e=$("main > h2"),e.length<2||(n=$('

      Contents

      '),i=$('
      '),r=$('
        ').appendTo(i),e.length>=6&&i.addClass("table-of-contents__wrapper--multi"),e.each(function(){var e;return e=$(this),r.append($("
      1. ",{"class":"table-of-contents__item",html:""+e.text()+""}))}),n.appendTo(t),i.appendTo(t)))}.call(this),function(){$(function(){var e,t,r,n;n=$(".content-nav"),t=$(".content-well"),e=$(".js_toggle-content-nav"),r=$(".content-menu__item"),e.on("click",function(){var e,r;return r=$(window).scrollTop(),e=t.offset().top,n.toggleClass("content-nav--fullscreen"),t.toggleClass("content-well--immobile"),t.hasClass("content-well--immobile")?t.css("top",-1*r):($(window).scrollTop(-1*e),t.css("top",""))}),r.on("click",".content-menu__menu-toggle",function(){var e;return e=$(this.parentNode.nextElementSibling),e.hasClass("content-menu--open")?e.slideUp("fast"):e.slideDown("fast"),e.toggleClass("content-menu--open"),$(this).toggleClass("content-menu__menu-toggle--open")})})}.call(this),function(){"use strict";var e,t;e=function(e){return $("meta[name="+e+"]").attr("content")},t=function(){var t,r,n,i,a,o,s,l,c,u,d,f;if(s=e("project"),t=e("version"),c=e("project_relative_path"),c||(c=""),r=e("docs_root_url"),r||(r=""),l=r+"data/project_descriptions.json",i=e("version_history_in"),a=e("version_history_locations"),d=void 0,f=[],i&&(d=SemVer.parseRange(i)),a&&(n=JSON.parse(a),f=function(){var e,t,r,i;for(i=[],e=0,t=n.length;e',m='',V+='
        '+m+"
        ",V+='
        '+m+"
        ",V+='
        ',V+='
          ',M=Math.min(6,H+1),w=!1,R)for(k=0,T=R.length;kLTS'),q=F.reverse(),_=N=0,L=q.length;N',x&&Q!==t){for(O=c,C=0,A=f.length;C'}V+='
        • '+l+Q+"
        • "}V+="
      "}return g&&(b=["selector-list__element","selector-list__element--archived"],V+='
      ',V+='
      ',V+='
      "),v&&(b=["selector-list__element","selector-list__element--other"],V+='
      ',V+='
      ',V+='
        \n',V+='
      • ',V+="
      "),$(".selector-pane--versions").html(V),n=$(".selector-pane--versions"),i=n.parent(),a=i.parent(),W=Math.max.apply(Math,n.find(".selector-list").map(function(){return $(this).outerHeight()})),i.css("height",W+2..rem()),a.css("height",W+2..rem()),$(".selector-pane--versions").find(".js_edge-fader--target").on("scroll.selector-fader-target",throttle(function(){return EdgeFader.verifyArrowState($(this))},250)),$(".edge-fader__arrow").on("click.selector-fader-arrow",EdgeFader.onClickCallback),$(".selector-other-releases").on("click",function(){return $(".release-is-archived-and-hidden").toggleClass("release-is-archived-and-hidden"),$(".selector-other-releases").toggleClass("release-is-archived-and-hidden"),window.dispatchEvent(new Event("resize"))})})},$(function(){var e,r,n,i,a,o,s;return t(),e=$(".content-nav"),r=$(".content-nav__primary"),o=$(".selector--version"),n=$(".selector-pane--versions"),i=n.parent(),a=i.parent(),s=debounce(function(){if(0===n.closest(".selector-pane__sizing-box--hidden").length)return n.find(".selector-list__scroll-box").each(function(){return EdgeFader.showOrHideArrows($(this))})},500),o.on("click.toggle_selector",".selector__btn",function(){var e;return e=$(this).parent(),e.toggleClass("selector--open"),a.toggleClass("selector-pane__sizing-box--hidden"),e.hasClass("selector--open")?(i.css("max-height",r.outerHeight()+.75.rem()),a.css("max-height",r.outerHeight()+.75.rem()),EdgeFader.showOrHideArrows(n),s()):(a.css("max-height",""),EdgeFader.hideArrows(n),n.find(".selector-list__scroll-box").each(function(){return EdgeFader.hideArrows($(this))}))}),$(window).on("resize.toggled_selector_reize",debounce(function(){var e;return e=Math.max.apply(Math,n.find(".selector-list").map(function(){return $(this).outerHeight()})),i.css("height",e+2..rem()),a.css("height",e+2..rem()),o.hasClass("selector--open")&&(i.css("max-height",r.outerHeight()+.75.rem()),a.css("max-height",r.outerHeight()+.75.rem()),EdgeFader.showOrHideArrows(n),s()),!0},250)),$(document).on("click.selector_close",function(e){return $(e.target).closest(".selector-pane__sizing-box").length>0||(!!$(e.target).hasClass("selector__btn")||($(".selector--open").removeClass("selector--open"),a.addClass("selector-pane__sizing-box--hidden"),a.css("max-height",""),EdgeFader.hideArrows(n),n.find(".selector-list__scroll-box").each(function(){return EdgeFader.hideArrows($(this))})))})})}.call(this),function(){var e;e=window.EdgeFader={},e.verifyArrowState=function(e){var t,r,n,i,a,o,s,l,c;l=e.maxScrollLeft(),o=e.scrollLeft(),c=e.maxScrollTop(),s=e.scrollTop(),0===l&&0===c||(a=e.parent(),r=a.children(".edge-fader--left").children(".edge-fader__arrow"),n=a.children(".edge-fader--right").children(".edge-fader__arrow"),i=a.children(".edge-fader--top").children(".edge-fader__arrow"),t=a.children(".edge-fader--bottom").children(".edge-fader__arrow"),l>3&&(o>3?r.removeClass("edge-fader__arrow--inactive"):r.addClass("edge-fader__arrow--inactive"),o3&&(s>3?i.removeClass("edge-fader__arrow--inactive"):i.addClass("edge-fader__arrow--inactive"),s0?(n.removeClass("edge-fader__arrow--invisible"),i.removeClass("edge-fader__arrow--invisible")):(n.addClass("edge-fader__arrow--invisible"),i.addClass("edge-fader__arrow--invisible")),l>0?(a.removeClass("edge-fader__arrow--invisible"),r.removeClass("edge-fader__arrow--invisible")):(a.addClass("edge-fader__arrow--invisible"),r.addClass("edge-fader__arrow--invisible")),(s>0||l>0)&&e.verifyArrowState(t)},e.showArrows=function(e){var t,r,n,i,a;return a=e.parent(),r=a.children(".edge-fader--left").children(".edge-fader__arrow"),n=a.children(".edge-fader--right").children(".edge-fader__arrow"),i=a.children(".edge-fader--top").children(".edge-fader__arrow"),t=a.children(".edge-fader--bottom").children(".edge-fader__arrow"),r.removeClass("edge-fader__arrow--invisible"),n.removeClass("edge-fader__arrow--invisible"),i.removeClass("edge-fader__arrow--invisible"),t.removeClass("edge-fader__arrow--invisible")},e.hideArrows=function(e){var t,r,n,i,a;return a=e.parent(),r=a.children(".edge-fader--left").children(".edge-fader__arrow"),n=a.children(".edge-fader--right").children(".edge-fader__arrow"),i=a.children(".edge-fader--top").children(".edge-fader__arrow"),t=a.children(".edge-fader--bottom").children(".edge-fader__arrow"),r.addClass("edge-fader__arrow--invisible"),n.addClass("edge-fader__arrow--invisible"),i.addClass("edge-fader__arrow--invisible"),t.addClass("edge-fader__arrow--invisible")},e.onClickCallback=function(){var e,t,r,n,i;e=$(this),t=e.parent(),n=t.parent(),r=n.children(".js_edge-fader--target"),t.hasClass("edge-fader--left")?(i=-1*n.width()*.75+r.scrollLeft(),r.animate({scrollLeft:i},200)):t.hasClass("edge-fader--right")?(i=1*n.width()*.75+r.scrollLeft(),r.animate({scrollLeft:i},200)):t.hasClass("edge-fader--top")?(i=-1*n.height()*.75+r.scrollTop(),r.animate({scrollTop:i},200)):t.hasClass("edge-fader--bottom")&&(i=1*n.height()*.75+r.scrollTop(),r.animate({scrollTop:i},200))},$(function(){$(".js_edge-fader--target").on("scroll.edge-fader-target",throttle(function(){return e.verifyArrowState($(this))},250)),$(window).on("resize.edge-fader-target",throttle(function(){return $(".edge-fader").parent().children(".js_edge-fader--target").each(function(){return e.showOrHideArrows($(this))})},250)),$(".edge-fader__arrow").on("click.edge-fader-arrow",e.onClickCallback)})}.call(this),function(){"use strict";var e,t;t={"language-advancedconfig":{display_name:"advanced.config",highlight_as:"language-erlang"},"language-appconfig":{display_name:"app.config",highlight_as:"language-erlang"},"language-riakconf":{display_name:"riak.conf",highlight_as:"language-matlab"},"language-riakcsconf":{display_name:"riak-cs.conf",highlight_as:"language-matlab"},"language-stanchionconf":{display_name:"stanchion.conf",highlight_as:"language-matlab"},"language-vmargs":{display_name:"vm.args",highlight_as:"language-ini"},"language-bash":{display_name:"Shell",highlight_as:""},"language-curl":{display_name:"CURL",highlight_as:"language-bash"},"language-csharp":{display_name:"C#",highlight_as:""},"language-erlang":{display_name:"Erlang",highlight_as:""},"language-golang":{display_name:"Go",highlight_as:""},"language-java":{display_name:"Java",highlight_as:""},"language-javascript":{display_name:"JS",highlight_as:""},"language-coffeescript":{display_name:"Coffee",highlight_as:""},"language-json":{display_name:"JSON",highlight_as:""},"language-php":{display_name:"PHP",highlight_as:""},"language-protobuf":{display_name:"Protobuf",highlight_as:""},"language-python":{display_name:"Python",highlight_as:""},"language-ruby":{display_name:"Ruby",highlight_as:""},"language-scala":{display_name:"Scala",highlight_as:""},"language-sql":{display_name:"SQL",highlight_as:""},"language-xml":{display_name:"XML",highlight_as:""},"language-riakattach":{display_name:"riak attach",highlight_as:"language-erlang"},"language-plaintext ":{display_name:" ",highlight_as:""},"language-text":{display_name:" ",highlight_as:""},"language-log":{display_name:" ",highlight_as:""},"language-erlangsnippet":{display_name:" ",highlight_as:"language-erlang"}},e=function(e){var t,r;return null!=(t=e.attr("class"))&&null!=(r=t.match(/(?:^|\s)(language-.+?)(?:\s|$)/))?r[1]:void 0},$("pre > code").each(function(){var r,n,i,a,o,s,l,c;if(r=$(this),n=r.parent(),s=e(r),s&&(s.indexOf(".")!==-1&&(r.removeClass(s),s=s.replace(/\./g,""),r.addClass(s)),s in t&&(o=null!=(l=t[s])?l.highlight_as:void 0,o&&(r.removeClass(s),r.addClass(o)),hljs.highlightBlock(r[0]),o&&(r.removeClass(o),r.addClass(s)))),!n.parent().hasClass("code-block__code-set"))return i=n.nextUntil(":not(pre)"),a=null!=(c=t[s])?c.display_name.replace(/^\s+|\s+$/g,""):void 0,a&&0===i.length&&n.wrap('
      '),i.length?n.add(i).wrapAll('
      '):void 0}),$(".code-block--titled").each(function(){var r,n,i,a,o,s;return n=$(this),i=n.children("pre"),r=i.children("code"),o=e(r),i.addClass("code-block__code"),a=null!=(s=t[o])?s.display_name:void 0,a||(a=o.replace(/language-/,"")),$(''+a+"").prependTo(n)}),$(".code-block--tabbed").each(function(){var r,n,i,a,o;return a=$(this),r=a.children(".code-block__code-set"),o='',i=$('
      '+o+'
      '+o+"
      "),n=$('
        '),n.appendTo(i),r.children("pre").each(function(r){var i,a,o,s,l,c,u;return a=$(this),i=a.children(),c=e(i),l=null!=(u=t[c])?u.display_name:void 0,l||(l=null!=c?c.replace(/language-/,""):void 0),l||(l="////"+padNumber(r,2)),s=c,s||(s="unnamed-lang"+padNumber(r,2)),o="code-block__"+s+padNumber(r,3),a.addClass("code-block__code"),a.attr("id",o),n.append('
      • '+l+"
      • ")}),n.find(".code-block__tab").first().addClass("code-block__tab--active"),a.find(".code-block__code").first().addClass("code-block__code--active"),a.prepend(i),EdgeFader.showOrHideArrows(n)}),$(function(){var e;e=$(".code-block--tabbed"),$(".code-block__tab").on("click.code-block-tab","a",function(t){var r,n,i,a,o,s,l,c;if(t.preventDefault(),i=$(this),s=i.data("language"),!i.parent().hasClass("code-block__tab--active")){for(c=this.getBoundingClientRect().top,o=0,l=e.length;o"))}),$("td code").each(function(){$(this).html($(this).html().replace(/([^^])\//g,"$1/"))}); \ No newline at end of file diff --git a/static/riak/cs/index.html b/static/riak.remove/cs/index.html similarity index 100% rename from static/riak/cs/index.html rename to static/riak.remove/cs/index.html diff --git a/static/riak/kv/index.html b/static/riak.remove/kv/index.html similarity index 100% rename from static/riak/kv/index.html rename to static/riak.remove/kv/index.html diff --git a/static/riak/ts/index.html b/static/riak.remove/ts/index.html similarity index 100% rename from static/riak/ts/index.html rename to static/riak.remove/ts/index.html diff --git a/static/riakcs/index.html b/static/riakcs.remove/index.html similarity index 100% rename from static/riakcs/index.html rename to static/riakcs.remove/index.html diff --git a/static/riakts/index.html b/static/riakts.remove/index.html similarity index 100% rename from static/riakts/index.html rename to static/riakts.remove/index.html