Cassandra Database Module
New in version 2015.5.0.
This module works with Cassandra v2 and v3 and hence generates queries based on the internal schema of said version.
DataStax Python Driver for Apache Cassandra http://github.com/datastax/python-driver pip install cassandra-driver
Salt's cassandra_cql returner
The Cassandra cluster members and connection port can either be specified in the master or minion config, the minion's pillar or be passed to the module.
Example configuration in the config for a single node:
cassandra:
cluster: 192.168.50.10
port: 9000
Example configuration in the config for a cluster:
cassandra:
cluster:
- 192.168.50.10
- 192.168.50.11
- 192.168.50.12
port: 9000
username: cas_admin
Changed in version 2016.11.0.
Added support for ssl_options
and protocol_version
.
Example configuration with ssl options:
If ssl_options
are present in cassandra config the cassandra_cql returner
will use SSL. SSL isn't used if ssl_options
isn't specified.
cassandra:
cluster:
- 192.168.50.10
- 192.168.50.11
- 192.168.50.12
port: 9000
username: cas_admin
ssl_options:
ca_certs: /etc/ssl/certs/ca-bundle.trust.crt
# SSL version should be one from the ssl module
# This is an optional parameter
ssl_version: PROTOCOL_TLSv1
Additionally you can also specify the protocol_version
to
use.
cassandra:
cluster:
- 192.168.50.10
- 192.168.50.11
- 192.168.50.12
port: 9000
username: cas_admin
# defaults to 4, if not set
protocol_version: 3
Also all configuration could be passed directly to module as arguments.
salt minion1 cassandra_cql.info contact_points=delme-nextgen-01 port=9042 cql_user=cassandra cql_pass=cassandra protocol_version=4
salt minion1 cassandra_cql.info ssl_options='{"ca_certs": /path/to/-ca.crt}'
We can also provide the load balancing policy as arguments
salt minion1 cassandra_cql.cql_query "alter user cassandra with password 'cassandra2' ;" contact_points=scylladb cql_user=user1 cql_pass=password port=9142 protocol_version=4 ssl_options='{"ca_certs": path-to-client-ca.crt}' load_balancing_policy=DCAwareRoundRobinPolicy load_balancing_policy_args='{"local_dc": "datacenter1"}'
Run a query on a Cassandra cluster and return a dictionary.
query (str) -- The query to execute.
contact_points (str | list[str]) -- The Cassandra cluster addresses, can either be a string or a list of IPs.
cql_user (str) -- The Cassandra user if authentication is turned on.
cql_pass (str) -- The Cassandra user password if authentication is turned on.
port (int) -- The Cassandra cluster port, defaults to None.
params (str) -- The parameters for the query, optional.
protocol_version (int) -- Cassandra protocol version to use.
load_balancing_policy (str) -- cassandra.policy class name to use
load_balancing_policy_args (dict) -- cassandra.policy constructor args
ssl_options (dict) -- Cassandra protocol version to use.
A dictionary from the return values of the query
CLI Example:
salt 'cassandra-server' cassandra_cql.cql_query "SELECT * FROM users_by_name WHERE first_name = 'jane'"
Run a query on a Cassandra cluster and return a dictionary.
This function should not be used asynchronously for SELECTs -- it will not return anything and we don't currently have a mechanism for handling a future that will return results.
query (str) -- The query to execute.
statement_name (str) -- Name to assign the prepared statement in the __context__ dictionary
statement_arguments (list[str]) -- Bind parameters for the SQL statement
asynchronous (bool) -- Run this query in asynchronous mode
async (bool) -- Run this query in asynchronous mode (an alias to 'asynchronous') NOTE: currently it overrides 'asynchronous' and it will be dropped in version 3001!
callback_errors (Function callable) -- Function to call after query runs if there is an error
contact_points (str | list[str]) -- The Cassandra cluster addresses, can either be a string or a list of IPs.
cql_user (str) -- The Cassandra user if authentication is turned on.
cql_pass (str) -- The Cassandra user password if authentication is turned on.
port (int) -- The Cassandra cluster port, defaults to None.
params (str) -- The parameters for the query, optional.
protocol_version -- Cassandra protocol version to use.
load_balancing_policy (str) -- cassandra.policy class name to use
load_balancing_policy_args (dict) -- cassandra.policy constructor args
ssl_options (dict) -- Cassandra protocol version to use.
A dictionary from the return values of the query
CLI Example:
# Insert data asynchronously
salt this-node cassandra_cql.cql_query_with_prepare "name_insert" "INSERT INTO USERS (first_name, last_name) VALUES (?, ?)" statement_arguments=['John','Doe'], asynchronous=True
# Select data, should not be asynchronous because there is not currently a facility to return data from a future
salt this-node cassandra_cql.cql_query_with_prepare "name_select" "SELECT * FROM USERS WHERE first_name=?" statement_arguments=['John']
Create a new keyspace in Cassandra.
keyspace (str) -- The keyspace name
replication_strategy (str) -- either SimpleStrategy or NetworkTopologyStrategy
replication_factor (int) -- number of replicas of data on multiple nodes. not used if using NetworkTopologyStrategy
replication_datacenters (str | dict[str, int]) -- string or dict of datacenter names to replication factors, required if using NetworkTopologyStrategy (will be a dict if coming from state file).
contact_points (str | list[str]) -- The Cassandra cluster addresses, can either be a string or a list of IPs.
cql_user (str) -- The Cassandra user if authentication is turned on.
cql_pass (str) -- The Cassandra user password if authentication is turned on.
port (int) -- The Cassandra cluster port, defaults to None.
protocol_version (int) -- Cassandra protocol version to use.
load_balancing_policy (str) -- cassandra.policy class name to use
load_balancing_policy_args (dict) -- cassandra.policy constructor args
ssl_options (dict) -- Cassandra protocol version to use.
The info for the keyspace or False if it does not exist.
CLI Example:
# CLI Example:
salt 'minion1' cassandra_cql.create_keyspace keyspace=newkeyspace
salt 'minion1' cassandra_cql.create_keyspace keyspace=newkeyspace replication_strategy=NetworkTopologyStrategy replication_datacenters='{"datacenter_1": 3, "datacenter_2": 2}'
Create a new cassandra user with credentials and superuser status.
username (str) -- The name of the new user.
password (str) -- The password of the new user.
superuser (bool) -- Is the new user going to be a superuser? default: False
contact_points (str | list[str]) -- The Cassandra cluster addresses, can either be a string or a list of IPs.
cql_user (str) -- The Cassandra user if authentication is turned on.
cql_pass (str) -- The Cassandra user password if authentication is turned on.
port (int) -- The Cassandra cluster port, defaults to None.
protocol_version (int) -- Cassandra protocol version to use.
load_balancing_policy (str) -- cassandra.policy class name to use
load_balancing_policy_args (dict) -- cassandra.policy constructor args
ssl_options (dict) -- Cassandra protocol version to use.
CLI Example:
salt 'minion1' cassandra_cql.create_user username=joe password=secret
salt 'minion1' cassandra_cql.create_user username=joe password=secret superuser=True
salt 'minion1' cassandra_cql.create_user username=joe password=secret superuser=True contact_points=minion1