Asta Data API
The Astra Data API allows Astra users to take database level actions against tables, rows, and columns. In order to use the Data API you will need some info from the DevOps API or the Astra UI. You will need [cluster_id], [cluster_region], and the username and password for your database.
Data Auth Post
Add your [cluster_id], [cluster_region], username and password then run the playbook and grab the authToken from the response. You will use this token for [token from data_auth_post] in all playbook demos below.
---
- hosts: localhost
connection: local
gather_facts: no
vars:
astra_rest_api_url: "https://[cluster_id]-[cluster_region].apps.astra.datastax.com/api/rest"
astra_auth_request_body:
username: "username"
password: "password"
tasks:
- name: create auth
uri:
url: "{{ astra_rest_api_url }}/v1/auth"
method: POST
headers:
Content-Type: "application/json"
body: "{{ astra_auth_request_body | to_json }}"
status_code: 201
register: request_auth
- name: debug
debug:
var: request_auth
Data Get Keyspaces
---
- hosts: localhost
connection: local
gather_facts: no
vars:
astra_rest_api_url: "https://[cluster_id]-[cluster_region].apps.astra.datastax.com/api/rest"
astra_auth_token: "[token from data_auth_post]"
tasks:
- name: get keyspaces
uri:
url: "{{ astra_rest_api_url }}/v1/keyspaces"
method: GET
headers:
Accept: "application/json"
X-Cassandra-Token: "{{ astra_auth_token }}"
status_code: 200
register: response_keyspaces
- name: debug
debug:
var: response_keyspaces
Data Create Table
Creating a table requires the [keyspace for table] as well as the schema level information required for the table structure columns, key, and partition. In the demo below I create a basic table just to show functionality. Please refer to documentation for complete capability for complicated data models.
---
- hosts: localhost
connection: local
gather_facts: no
vars:
astra_rest_api_url: "https://[cluster_id]-[cluster_region].apps.astra.datastax.com/api/rest"
astra_auth_token: "[token from data_auth_post]"
astra_keyspace: "[keyspace for table]"
astra_create_table:
name: "table_name"
columnDefinitions:
-
name: "id"
typeDefinition: "text"
-
name: "value"
typeDefinition: "text"
primaryKey:
partitionKey:
- id
tasks:
- name: create table
uri:
url: "{{ astra_rest_api_url }}/v1/keyspaces/{{ astra_keyspace }}/tables"
method: POST
headers:
Content-Type: "application/json"
Accept: "application/json"
X-Cassandra-Token: "{{ astra_auth_token }}"
body: "{{ astra_create_table | to_json }}"
status_code: 201
register: response_table
- name: debug
debug:
var: response_table
Data Get Tables
---
- hosts: localhost
connection: local
gather_facts: no
vars:
astra_rest_api_url: "https://[cluster_id]-[cluster_region].apps.astra.datastax.com/api/rest"
astra_auth_token: "[token from data_auth_post]"
astra_keyspace: "[keyspace for table]"
tasks:
- name: get tables
uri:
url: "{{ astra_rest_api_url }}/v1/keyspaces/{{ astra_keyspace }}/tables"
method: GET
headers:
Accept: "application/json"
X-Cassandra-Token: "{{ astra_auth_token }}"
status_code: 200
register: response_tables
- name: debug
debug:
var: response_tables
Data Get Table
---
- hosts: localhost
connection: local
gather_facts: no
vars:
astra_rest_api_url: "https://[cluster_id]-[cluster_region].apps.astra.datastax.com/api/rest"
astra_auth_token: "[token from data_auth_post]"
astra_keyspace: "[keyspace for table]"
astra_table: "[table]"
tasks:
- name: get table
uri:
url: "{{ astra_rest_api_url }}/v1/keyspaces//{{ astra_keyspace }}/tables/{{ astra_table }}"
method: GET
headers:
Accept: "application/json"
X-Cassandra-Token: "{{ astra_auth_token }}"
status_code: 200
register: response_table
- name: debug
debug:
var: response_table
Data Delete Table
---
- hosts: localhost
connection: local
gather_facts: no
vars:
astra_rest_api_url: "https://[cluster_id]-[cluster_region].apps.astra.datastax.com/api/rest"
astra_auth_token: "[token from data_auth_post]"
astra_keyspace: "[keyspace for table]"
astra_table: "[table]"
tasks:
- name: delete table
uri:
url: "{{ astra_rest_api_url }}/v1/keyspaces//{{ astra_keyspace }}/tables/{{ astra_table }}"
method: DELETE
headers:
Accept: "application/json"
X-Cassandra-Token: "{{ astra_auth_token }}"
status_code: 204
register: response_delete
- name: debug
debug:
var: response_delete
Data Add Rows
---
- hosts: localhost
connection: local
gather_facts: no
vars:
astra_rest_api_url: "https://[cluster_id]-[cluster_region].apps.astra.datastax.com/api/rest"
astra_auth_token: "[token from data_auth_post]"
astra_keyspace: "[keyspace for table]"
astra_table: "[table]"
astra_add_row:
columns:
- name: "id"
value: 1
- name: "value"
value: "some text"
tasks:
- name: add rows
uri:
url: "{{ astra_rest_api_url }}/v1/keyspaces/{{ astra_keyspace }}/tables/{{ astra_table }}/rows"
method: POST
headers:
Content-Type: "application/json"
Accept: "application/json"
X-Cassandra-Token: "{{ astra_auth_token }}"
body: "{{ astra_add_row | to_json }}"
status_code: 201
register: response_rows
- name: debug
debug:
var: response_rows
Data Submit Queries
---
- hosts: localhost
connection: local
gather_facts: no
vars:
astra_rest_api_url: "https://[cluster_id]-[cluster_region].apps.astra.datastax.com/api/rest"
astra_auth_token: "[token from data_auth_post]"
astra_keyspace: "[keyspace for table]"
astra_table: "[table]"
astra_query:
columnNames:
- "id"
- "value"
filters:
-
value:
- "1"
columnName: "id"
operator: "eq"
tasks:
- name: submit query
uri:
url: "{{ astra_rest_api_url }}/v1/keyspaces/{{ astra_keyspace }}/tables/{{ astra_table }}/rows/query"
method: POST
headers:
Content-Type: "application/json"
Accept: "application/json"
X-Cassandra-Token: "{{ astra_auth_token }}"
body: "{{ astra_query | to_json }}"
status_code: 200
register: response_query
- name: debug
debug:
var: response_query
Data Get Rows
---
- hosts: localhost
connection: local
gather_facts: no
vars:
astra_rest_api_url: "https://[cluster_id]-[cluster_region].apps.astra.datastax.com/api/rest"
astra_auth_token: "[token from data_auth_post]"
astra_keyspace: "[keyspace for table]"
astra_table: "[table]"
tasks:
- name: get rows
uri:
url: "{{ astra_rest_api_url }}/v1/keyspaces/{{ astra_keyspace }}/tables/{{ astra_table }}/rows"
method: GET
headers:
Accept: "application/json"
X-Cassandra-Token: "{{ astra_auth_token }}"
status_code: 200
register: response_rows
- name: debug
debug:
var: response_rows
Data Get Row
---
- hosts: localhost
connection: local
gather_facts: no
vars:
astra_rest_api_url: "https://[cluster_id]-[cluster_region].apps.astra.datastax.com/api/rest"
astra_auth_token: "[token from data_auth_post]"
astra_keyspace: "[keyspace for table]"
astra_table: "[table]"
astra_row: "[primary Key for row]"
tasks:
- name: get row
uri:
url: "{{ astra_rest_api_url }}/v1/keyspaces/{{ astra_keyspace }}/tables/{{ astra_table }}/rows/{{ astra_row }}"
method: GET
headers:
Accept: "application/json"
X-Cassandra-Token: "{{ astra_auth_token }}"
status_code: 200
register: response_row
- name: debug
debug:
var: response_row
Data Update Rows
A quick warning here: you cannot update the Primary Key.
---
- hosts: localhost
connection: local
gather_facts: no
vars:
astra_rest_api_url: "https://[cluster_id]-[cluster_region].apps.astra.datastax.com/api/rest"
astra_auth_token: "[token from data_auth_post]"
astra_keyspace: "[keyspace for table]"
astra_table: "[table]"
astra_row: 1
astra_update_row:
changeset:
- column: "value"
value: "some updated text"
tasks:
- name: update rows
uri:
url: "{{ astra_rest_api_url }}/v1/keyspaces/{{ astra_keyspace }}/tables/{{ astra_table }}/rows/{{ astra_row }}"
method: PUT
headers:
Content-Type: "application/json"
Accept: "application/json"
X-Cassandra-Token: "{{ astra_auth_token }}"
body: "{{ astra_update_row | to_json }}"
status_code: 200
register: response_update
- name: debug
debug:
var: response_update
Data Delete Rows
---
- hosts: localhost
connection: local
gather_facts: no
vars:
astra_rest_api_url: "https://[cluster_id]-[cluster_region].apps.astra.datastax.com/api/rest"
astra_auth_token: "[token from data_auth_post]"
astra_keyspace: "[keyspace for table]"
astra_table: "[table]"
astra_row: 1
tasks:
- name: delete rows
uri:
url: "{{ astra_rest_api_url }}/v1/keyspaces/{{ astra_keyspace }}/tables/{{ astra_table }}/rows/{{ astra_row }}"
method: DELETE
headers:
Accept: "application/json"
X-Cassandra-Token: "{{ astra_auth_token }}"
status_code: 204
register: response_delete
- name: debug
debug:
var: response_delete
Data Get Columns
---
- hosts: localhost
connection: local
gather_facts: no
vars:
astra_rest_api_url: "https://[cluster_id]-[cluster_region].apps.astra.datastax.com/api/rest"
astra_auth_token: "[token from data_auth_post]"
astra_keyspace: "[keyspace for table]"
astra_table: "[table]"
tasks:
- name: get columns
uri:
url: "{{ astra_rest_api_url }}/v1/keyspaces/{{ astra_keyspace }}/tables/{{ astra_table }}/columns"
method: GET
headers:
Accept: "application/json"
X-Cassandra-Token: "{{ astra_auth_token }}"
status_code: 200
register: response_columns
- name: debug
debug:
var: response_columns
Data Get Column
---
- hosts: localhost
connection: local
gather_facts: no
vars:
astra_rest_api_url: "https://[cluster_id]-[cluster_region].apps.astra.datastax.com/api/rest"
astra_auth_token: "[token from data_auth_post]"
astra_keyspace: "[keyspace for table]"
astra_table: "[table]"
astra_column: "value"
tasks:
- name: get column
uri:
url: "{{ astra_rest_api_url }}/v1/keyspaces/{{ astra_keyspace }}/tables/{{ astra_table }}/columns/{{ astra_column }}"
method: GET
headers:
Accept: "application/json"
X-Cassandra-Token: "{{ astra_auth_token }}"
status_code: 200
register: response_column
- name: debug
debug:
var: response_column
Data Add Column
---
- hosts: localhost
connection: local
gather_facts: no
vars:
astra_rest_api_url: "https://[cluster_id]-[cluster_region].apps.astra.datastax.com/api/rest"
astra_auth_token: "[token from data_auth_post]"
astra_keyspace: "[keyspace for table]"
astra_table: "[table]"
astra_add_column:
static: false
name: "newColumn"
typeDefinition: "text"
tasks:
- name: add column
uri:
url: "{{ astra_rest_api_url }}/v1/keyspaces/{{ astra_keyspace }}/tables/{{ astra_table }}/columns"
method: POST
headers:
Content-Type: "application/json"
Accept: "application/json"
X-Cassandra-Token: "{{ astra_auth_token }}"
body: "{{ astra_add_column | to_json }}"
status_code: 201
register: response_column
- name: debug
debug:
var: response_column
Data Update Column
A quick warning here: you can only update the Primary Key.
---
- hosts: localhost
connection: local
gather_facts: no
vars:
astra_rest_api_url: "https://[cluster_id]-[cluster_region].apps.astra.datastax.com/api/rest"
astra_auth_token: "[token from data_auth_post]"
astra_keyspace: "[keyspace for table]"
astra_table: "[table]"
astra_column: "id"
astra_update_column:
newName: "updatedid"
tasks:
- name: update column
uri:
url: "{{ astra_rest_api_url }}/v1/keyspaces/{{ astra_keyspace }}/tables/{{ astra_table }}/columns/{{ astra_column }}"
method: PUT
headers:
Content-Type: "application/json"
Accept: "application/json"
X-Cassandra-Token: "{{ astra_auth_token }}"
body: "{{ astra_update_column | to_json }}"
status_code: 200
register: response_column
- name: debug
debug:
var: response_column
Data Delete Column
---
- hosts: localhost
connection: local
gather_facts: no
vars:
astra_rest_api_url: "https://[cluster_id]-[cluster_region].apps.astra.datastax.com/api/rest"
astra_auth_token: "[token from data_auth_post]"
astra_keyspace: "[keyspace for table]"
astra_table: "[table]"
astra_column: "newColumn"
tasks:
- name: delete column
uri:
url: "{{ astra_rest_api_url }}/v1/keyspaces/{{ astra_keyspace }}/tables/{{ astra_table }}/columns/{{ astra_column }}"
method: DELETE
headers:
Accept: "application/json"
X-Cassandra-Token: "{{ astra_auth_token }}"
status_code: 204
register: response_column
- name: debug
debug:
var: response_column
How can I help you with Astra?
Find me over on the Astra Slack to ask me any questions about Astra. Also let’s chat if you have something kewl you did with Astra and you want me to feature it in my blog. Look below or to the right for more ways to find me.