From e45e769d08e01eb570bf5e32e80a61c242918f1d Mon Sep 17 00:00:00 2001 From: Vyacheslav Vakhlyuev Date: Wed, 2 Dec 2015 14:45:36 +0300 Subject: [PATCH] Added Apache Cassandra application The application allows to create clusters of Apache Cassandra. Cassandra is a highly scalable, eventually consistent, distributed, structured key-value store. This application is written to be compatible with Kilo version. Change-Id: Ia3bd4dc1bdf53cd29dd0b5973c9150cb72c3bd8b --- .../package/Classes/CassandraCluster.yaml | 77 ++++++++++ Cassandra/package/Classes/CassandraNode.yaml | 119 ++++++++++++++++ .../Resources/DeployCassandra.template | 31 ++++ .../Resources/RestartCassandra.template | 32 +++++ .../Resources/UpdateCassandraYaml.template | 34 +++++ .../Resources/scripts/deployCassandra.sh | 28 ++++ .../Resources/scripts/restartCassandra.sh | 8 ++ .../Resources/scripts/updateCassandraYaml.sh | 20 +++ Cassandra/package/UI/ui.yaml | 134 ++++++++++++++++++ Cassandra/package/logo.png | Bin 0 -> 9179 bytes Cassandra/package/manifest.yaml | 24 ++++ 11 files changed, 507 insertions(+) create mode 100644 Cassandra/package/Classes/CassandraCluster.yaml create mode 100644 Cassandra/package/Classes/CassandraNode.yaml create mode 100644 Cassandra/package/Resources/DeployCassandra.template create mode 100644 Cassandra/package/Resources/RestartCassandra.template create mode 100644 Cassandra/package/Resources/UpdateCassandraYaml.template create mode 100644 Cassandra/package/Resources/scripts/deployCassandra.sh create mode 100644 Cassandra/package/Resources/scripts/restartCassandra.sh create mode 100644 Cassandra/package/Resources/scripts/updateCassandraYaml.sh create mode 100644 Cassandra/package/UI/ui.yaml create mode 100644 Cassandra/package/logo.png create mode 100644 Cassandra/package/manifest.yaml diff --git a/Cassandra/package/Classes/CassandraCluster.yaml b/Cassandra/package/Classes/CassandraCluster.yaml new file mode 100644 index 00000000..1673891a --- /dev/null +++ b/Cassandra/package/Classes/CassandraCluster.yaml @@ -0,0 +1,77 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +Namespaces: + =: io.murano.apps.apache + std: io.murano + res: io.murano.resources + sys: io.murano.system + + +Name: CassandraCluster + +Extends: std:Application + +Properties: + name: + Contract: $.string().notNull() + + seedNodes: + Contract: [$.class(CassandraNode).notNull()] + + regularNodes: + Contract: [$.class(CassandraNode).notNull()] + +Methods: + initialize: + Body: + - $._environment: $.find(std:Environment).require() + + deploy: + Body: + - If: not $.getAttr(deployed, false) + Then: + - $._environment.reporter.report($this, 'Creating VMs for Cassandra cluster') + + # Spawn VMs in parallel + - Parallel: + - $.seedNodes.pselect($.spawnInstance()) + - $.regularNodes.pselect($.spawnInstance()) + + # Collect internal IPs of seed nodes + - $seedNodesAsString: join(',', $.seedNodes.select($.getInternalIp())) + + # Deploy Cassandra with default conf + - Parallel: + - $.seedNodes.pselect($.deployInstance()) + - $.regularNodes.pselect($.deployInstance()) + + - $msg: format('Deployed {0} seed nodes and {1} usual nodes', len($.seedNodes), len($.regularNodes)) + - $._environment.reporter.report($this, $msg) + + # Update configuration (identical on all nodes) + - Parallel: + - $.seedNodes.pselect($.updateConfiguration($this.name, $seedNodesAsString)) + - $.regularNodes.pselect($.updateConfiguration($this.name, $seedNodesAsString)) + + # Restart nodes for changes to take an effect + - $msg: format('Restarting all nodes in the cluster') + - $._environment.reporter.report($this, $msg) + - $.seedNodes.pselect($.restartCassandra(delay => 1)) + + # No parallel there because usual nodes have to be started one by one + # Uses delay of restart for usual nodes to give seed nodes time on slow envs + - $.regularNodes.select($.restartCassandra(delay => 120)) + + - $._environment.reporter.report($this, 'Cassandra cluster is deployed') + - $._environment.reporter.report($this, 'Log in to any instance and use "nodetool status" to check') + - $.setAttr(deployed, true) diff --git a/Cassandra/package/Classes/CassandraNode.yaml b/Cassandra/package/Classes/CassandraNode.yaml new file mode 100644 index 00000000..1f08d0ea --- /dev/null +++ b/Cassandra/package/Classes/CassandraNode.yaml @@ -0,0 +1,119 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +Namespaces: + =: io.murano.apps.apache + std: io.murano + res: io.murano.resources + sys: io.murano.system + + +Name: CassandraNode + +Extends: std:Application + +Properties: + instance: + Contract: $.class(res:Instance).notNull() + +Methods: + initialize: + Body: + - $._environment: $.find(std:Environment).require() + - $.resources: new(sys:Resources) + + updateConfiguration: + Arguments: + - clusterName: + Contract: $.string().notNull() + - seedNodes: + Contract: $.string().notNull() + + Body: + # Listen address is internal (so it gets resolved by node itself correctly) + - $listenAddress: $.instance.ipAddresses[0] + - $template: $.resources.yaml('UpdateCassandraYaml.template').bind(dict( + clusterName => $clusterName, + seedNodes => $seedNodes, + listenAddress => $listenAddress + )) + - $msg: format('Updating Cassandra configuration at node "{0}"', $listenAddress) + - $._environment.reporter.report($this, $msg) + - $.instance.agent.call($template, $.resources) + + + configureSecurityGroups: + Body: + # Based on Cassandra 2.1 defaults + - $securityGroupIngress: + # Cassandra JMX monitoring port + - ToPort: 7199 + FromPort: 7199 + IpProtocol: tcp + External: true + # Cassandra inter-node cluster communication + - ToPort: 7000 + FromPort: 7000 + IpProtocol: tcp + External: true + # Cassandra SSL inter-node cluster communication + - ToPort: 7001 + FromPort: 7001 + IpProtocol: tcp + External: true + # Cassandra client port (Thrift) + - ToPort: 9160 + FromPort: 9160 + IpProtocol: tcp + External: true + # Cassandra client port + - ToPort: 9042 + FromPort: 9042 + IpProtocol: tcp + External: true + - $._environment.securityGroupManager.addGroupIngress($securityGroupIngress) + + spawnInstance: + Body: + - $msg: format('Creating a VM for Cassandra node "{0}"', $.instance.name) + - $._environment.reporter.report($this, $msg) + - $.configureSecurityGroups() + - $.instance.deploy() + - $address: $.instance.ipAddresses[0] + - $._environment.reporter.report($this, 'Instance "{0}" is created'.format($address)) + + deployInstance: + Body: + - If: not $.getAttr(deployed, false) + Then: + - $address: $.instance.ipAddresses[0] + - $._environment.reporter.report($this, 'Deploying Cassandra node "{0}"'.format($address)) + - $template: $.resources.yaml('DeployCassandra.template') + - $.instance.agent.call($template, $.resources) + - $.setAttr(deployed, true) + + getInternalIp: + Body: + - Return: $.instance.ipAddresses[0] + + ## Restarts an existing Cassandra after given delay (in seconds) + restartCassandra: + Arguments: + - delay: + Contract: $.int().notNull() + Body: + - $msg: format('Restarting Cassandra node "{0}"', $.instance.name) + - $._environment.reporter.report($this, $msg) + - $template: $.resources.yaml('RestartCassandra.template').bind(dict( + delay => $delay + )) + - $.instance.agent.call($template, $.resources) diff --git a/Cassandra/package/Resources/DeployCassandra.template b/Cassandra/package/Resources/DeployCassandra.template new file mode 100644 index 00000000..62fb94bf --- /dev/null +++ b/Cassandra/package/Resources/DeployCassandra.template @@ -0,0 +1,31 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +FormatVersion: 2.0.0 +Version: 1.0.0 +Name: Deploy Cassandra + +Parameters: + appName: $appName + +Body: | + return deploy(args.appName).stdout + +Scripts: + deploy: + Type: Application + Version: 1.0.0 + EntryPoint: deployCassandra.sh + Files: [] + Options: + captureStdout: false + captureStderr: true diff --git a/Cassandra/package/Resources/RestartCassandra.template b/Cassandra/package/Resources/RestartCassandra.template new file mode 100644 index 00000000..c3768c84 --- /dev/null +++ b/Cassandra/package/Resources/RestartCassandra.template @@ -0,0 +1,32 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +FormatVersion: 2.0.0 +Version: 1.0.0 +Name: Restart Cassandra + +Parameters: + delay: $delay + +Body: | + restart('{0}'.format(args.delay)) + +Scripts: + restart: + Type: Application + Version: 1.0.0 + EntryPoint: restartCassandra.sh + Files: [] + Options: + captureStdout: true + captureStderr: false + verifyExitcode: false diff --git a/Cassandra/package/Resources/UpdateCassandraYaml.template b/Cassandra/package/Resources/UpdateCassandraYaml.template new file mode 100644 index 00000000..cb9f24d7 --- /dev/null +++ b/Cassandra/package/Resources/UpdateCassandraYaml.template @@ -0,0 +1,34 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +FormatVersion: 2.0.0 +Version: 1.0.0 +Name: Update Cassandra Yaml + +Parameters: + clusterName: $clusterName + seedNodes: $seedNodes + listenAddress: $listenAddress + +Body: | + configure('{0} {1} {2}'.format(args.clusterName, args.seedNodes, args.listenAddress)) + +Scripts: + configure: + Type: Application + Version: 1.0.0 + EntryPoint: updateCassandraYaml.sh + Files: [] + Options: + captureStdout: true + captureStderr: true + diff --git a/Cassandra/package/Resources/scripts/deployCassandra.sh b/Cassandra/package/Resources/scripts/deployCassandra.sh new file mode 100644 index 00000000..95ae475b --- /dev/null +++ b/Cassandra/package/Resources/scripts/deployCassandra.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +## Add public keys and signatures +gpg --keyserver pgp.mit.edu --recv-keys F758CE318D77295D +gpg --export --armor F758CE318D77295D | sudo apt-key add - + +# Starting from Debian 0.7.5, more keys +gpg --keyserver pgp.mit.edu --recv-keys 2B5C1B00 +gpg --export --armor 2B5C1B00 | sudo apt-key add - + +gpg --keyserver pgp.mit.edu --recv-keys 0353B12C +gpg --export --armor 0353B12C | sudo apt-key add - + +## Add Apache Software Foundation repositories +sudo sh -c 'echo "deb http://www.apache.org/dist/cassandra/debian 21x main" > /etc/apt/sources.list.d/apache-cassandra.sources.list' +sudo sh -c 'echo "deb-src http://www.apache.org/dist/cassandra/debian 21x main" >> /etc/apt/sources.list.d/apache-cassandra.sources.list' + +sudo apt-get update + +## Install from package +sudo apt-get -y install cassandra cassandra-tools + +## Stop Cassandra and delete initial tables (to change name from Test Cluster) +sudo service cassandra stop +sudo rm -rf /var/lib/cassandra/data/* +sudo rm -rf /var/lib/cassandra/commitlog/* +sudo rm -rf /var/lib/cassandra/saved_caches/* + diff --git a/Cassandra/package/Resources/scripts/restartCassandra.sh b/Cassandra/package/Resources/scripts/restartCassandra.sh new file mode 100644 index 00000000..b4e32d85 --- /dev/null +++ b/Cassandra/package/Resources/scripts/restartCassandra.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +## Restart service for any changes to take the effect +# Sleep for some time added as a helper +TIME="$1" + +sleep $TIME +sudo service cassandra restart diff --git a/Cassandra/package/Resources/scripts/updateCassandraYaml.sh b/Cassandra/package/Resources/scripts/updateCassandraYaml.sh new file mode 100644 index 00000000..78a5a73c --- /dev/null +++ b/Cassandra/package/Resources/scripts/updateCassandraYaml.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +CLUSTER_NAME="$1" +SEED_NODES="$2" +LISTEN_ADDRESS="$3" + +## Configure Cassandra to use seed nodes +# Set cluster name +sed -e "s/cluster_name:.*/cluster_name: \'$CLUSTER_NAME\'/g" -i /etc/cassandra/cassandra.yaml +# Seed provider class name +sed -e "s/- class_name:.*/- class_name: org.apache.cassandra.locator.SimpleSeedProvider/g" -i /etc/cassandra/cassandra.yaml +# Set seed nodes - nodes used to bootstrap other nodes +sed -e "s/seeds:.*/seeds: \"$SEED_NODES\"/g" -i /etc/cassandra/cassandra.yaml +# Set listen address and endpoint snitch class +sed -e "s/listen_address:.*/listen_address: $LISTEN_ADDRESS/g" -i /etc/cassandra/cassandra.yaml +sed -e "s/endpoint_snitch:.*/endpoint_snitch: GossipingPropertyFileSnitch/g" -i /etc/cassandra/cassandra.yaml +# Set RPC address +sed -e "s/^rpc_address:.*/rpc_address: 0.0.0.0/g" -i /etc/cassandra/cassandra.yaml +sed -e "s/#\s*broadcast_rpc_address:.*/broadcast_rpc_address: $LISTEN_ADDRESS/g" -i /etc/cassandra/cassandra.yaml + diff --git a/Cassandra/package/UI/ui.yaml b/Cassandra/package/UI/ui.yaml new file mode 100644 index 00000000..4c05f222 --- /dev/null +++ b/Cassandra/package/UI/ui.yaml @@ -0,0 +1,134 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +Version: 2 + +Templates: + seedNode: + ?: + type: io.murano.apps.apache.CassandraNode + instance: + ?: + type: io.murano.resources.LinuxMuranoInstance + name: generateHostname($.appConfiguration.unitNamingPattern, $index) + flavor: $.instanceConfiguration.flavor + image: $.instanceConfiguration.osImage + assignFloatingIp: $.appConfiguration.assignFloatingIP + keyname: $.instanceConfiguration.keyPair + availabilityZone: $.instanceConfiguration.availabilityZone + + regularNode: + ?: + type: io.murano.apps.apache.CassandraNode + instance: + ?: + type: io.murano.resources.LinuxMuranoInstance + name: generateHostname($.appConfiguration.unitNamingPattern, $index + $.appConfiguration.countOfSeedNodes) + flavor: $.instanceConfiguration.flavor + image: $.instanceConfiguration.osImage + assignFloatingIp: $.appConfiguration.assignFloatingIP + keyname: $.instanceConfiguration.keyPair + availabilityZone: $.instanceConfiguration.availabilityZone + +Application: + ?: + type: io.murano.apps.apache.CassandraCluster + name: $.appConfiguration.name + seedNodes: repeat($seedNode, $.appConfiguration.countOfSeedNodes) + regularNodes: repeat($regularNode, $.appConfiguration.countOfRegularNodes) + +Forms: + - appConfiguration: + fields: + - name: license + type: string + description: Apache License, Version 2.0 + hidden: true + required: false + - name: name + type: string + label: Cluster Name + initial: CassandraCluster + description: >- + Enter a desired name for the application. Just A-Z, a-z, 0-9, dash and + underline are allowed + - name: countOfSeedNodes + type: integer + label: Count of seed nodes + initial: 1 + minValue: 0 + required: true + description: >- + Select the number of seed nodes. Seed nodes are used to bootstrap + other nodes(which is the process of a new node joining an existing + cluster) and setup the communication + - name: countOfRegularNodes + type: integer + label: Count of regular nodes + initial: 1 + required: true + minValue: 0 + description: >- + Select the number of Cassandra nodes (except seed nodes) + - name: assignFloatingIP + type: boolean + initial: true + label: Assign floating IP to nodes + description: >- + Check to assign floating IP to nodes + required: false + - name: unitNamingPattern + type: string + initial: cassandra-# + helpText: "# expands to machine sequence number" + required: false + description: >- + For your convenience instance hostname can be specified. + Enter a name or leave blank for random name generation. + regexpValidator: '^[a-zA-z][-_\w#]*$' + maxLength: 64 + errorMessages: + invalid: Just letters, numbers, underscores, sharps and hyphens are allowed. + label: Cassandra node hostname pattern + + - instanceConfiguration: + fields: + - name: title + type: string + required: false + hidden: true + description: Specify some instance parameters on which application would be created. + - name: flavor + type: flavor + label: Instance flavor + description: >- + Select one of the existing flavors. Consider that application performance + depends on this parameter. + - name: osImage + type: image + imageType: linux + label: Instance image + description: >- + Select a valid image for the application. Image should already be prepared and + registered in glance. + - name: keyPair + type: keypair + label: Key Pair + description: >- + Select the Key Pair to control access to instances. You can login to + instances using this KeyPair after the deployment. + required: false + - name: availabilityZone + type: azone + label: Availability zone + description: Select an availability zone where the application would be installed. + required: false diff --git a/Cassandra/package/logo.png b/Cassandra/package/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..445a2eb171a669c665bcc0ad05338974a00a9adc GIT binary patch literal 9179 zcmV<1BP863P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8x00(qQO+^Ra3k(W1D-obH(*OV>-$_J4RCwCOoOzsGMVa@% zPn~m@zP%=$?kt^z>(PWR1%;ydWn=W{=G&$(x*`qfiUJWjT&{_@wCa4PkG&wt5&gO(IOB5K*IT~)>9njj6tjgV*vQg%9Q|2ojMg0&c$(z za}I!w8#kWxUg1wz&OGzXp_fKkM@4YzyQiucV`Qkm;TmfUk+s>anzcR7=hY4jpmA&z z5LHJMLFjN+w5Fp*6&3N%4)1+()vA-)YW|eK#KsUCLu8C^Sm?MBK|~~uB19xI#^j7| zxDgH?64fz^&D?J zZ!Q39bFq2%tFJVBHb2MYc?+GYo(D{JX?k?x?0LKPZ`*WJU1RghY?90x=;@v%#%u-( zz|R3)x8?bpMT9g-Zja*l3RQQ55wld`tH3U2%m(A!s31*m09J&ioDa+d_5vRV-VeMA zsKj0;M^@DVBC3MOkji;USEXOzeg-Z-2*O`InQu7pks#bun02_h-3*=CBs%rmRz?`*s@vyZeV(J>2WbEYWwywT@(xJV( zKikvQdClOlF43f_CReap*I;a^*&H!-jG8csSB`IB{knB*uqD#Ai6pr?Fajn}gGdR1{#Z_l7VR!ccd$w*e8`nR>f$f{=J9;EO)_G{o{0lDa zx#+qZ^9$z9eWX~bZ&lT{(D5GxAl?U@8Jb+iE9ox-H=vrVIC6xgt*z$>tnm}}51l$o zm)4rxA|jEA;#8fRjqvSirF^ylSKmBB_q5N9O0A|}qvq1m(!z)l zBiNc2S=uc8?M3q_JNU%LDs#rPfUUAr2r(LjHnE!NfL(j@stwNieoiDSF;lFRKS zS6m&pkDthQ?plFKbM#e?a(bMC6WW>@NxKfRch5oc26_f7oH?$Qwo-xfPHSVz$a*F= zmss2}lKVFwpsl_@pLNV=%CW1nn{9C`+ji|``kZDO8X6c|YG!2nSQLNx;LTg=#o6eoX+dlgh z9_|+Y`YmtdYmaYWPJ0t0OL@+n*h=D*H=Hq%H3zyG*Hp*Cu`Nt(ZQ`FVn$88cJx2f0 zgwBd(wgFLxO&rBiJss0$(>QVz^-ayRjX#Z*_us{#-8;w^idIzxXboMlKm_yyi|{Mf zS*rRf5!o1ivo4B$zr-wEym%NCh@vR6&e|#J^k>!bz|5&*TPhqf^XT~pKXPsr&p`(1}(lhAnuW?q?Qu* zZrsQ1S1sY)_pIWQ7RBU?%x|mbvF$<{=Ry7AB}Q=0q6*Ee?bJ0kQEX_Wal|NA{QSp* z+n-&V%jNTts@fna62NJ}TfyB5SBfzYpc-jDZ>3T}jQQQZ($e5ig%ShSS$n!V_h_{; zICK7mf0kbJfltI!=Pw2k)W=K!Z*QwAr9z$+M-r}Sb3D5D7`Z}$@4t2d5AE!vxscsuY-5qSIO6M9oXPWtj)fU zah#)L+H9RPXFg|Le)T@k+jUqg2?48)raF!eR(W{)A%6B(mouhsKNtMR9?Xn|6p|`+#i9r1 zg!YOEs)|cfTE|TwUsoD8W!{;;+_HA%rb1omdR3i(U#7R9`hdcnqPi6ymT;Lktq4J@ zQv!3=k|n_^9|FY!lf{@{RLg_orp#OT%PZb_%Z2%39ci_S7&BzkI8_?*Ir6c=I>lN` zTT2ryjSXBiet=)knamw)wlkr*#D~wDg;gDj=9y6EjNvPyZN7P-SYNDC<@s=%~U*5g82l4n0lH@B}&~ zFg2i<07@Hhk02BJjvo2sP5=0{v2i{h+cdFahL?N=tW%ncc^V5jj`UZsKzl*xN#Wmq zcsKXG^9JHE%b-%m)qql4>T-qw3{OAvEIZ>7v>8M1V3qcUA}w_VY_OwhLzbs1J2yNt zuBo-{Q>r>QDA#uaYsE{6cU1uuL5yL=iWNimo}^=H^olrRoOqw&2f$pLCf~g1`ZsM2EiZOStT)q08*WdE#vCi7*;z#0wy!yf&z^J zD?U1QBXD2qn2vYfxq7=B>>HRUA`yOW4s}bwoA5!z7mRBK@p|LfK$%LCa_DF`D+Y^P z{qP=c{l(*6;hxYS5lEdVFSQf1bJv0Oa+G+r^KoqM0!OcBS03+ItocTxka zQ(_~0Z{02$KJ^nm_OQ85LxE=w9A#VQG5+(~b7*U*WB%9{4pki&Pig0|ork$}+UQ{wIFvRJ zb{!kw)icNP*nt7=I-FzqnzelB>}gD#Jc%T+q$>2MCo5icj$(a*ozJc3?pwcL^Mzuz zkO*K^3V1r)S z8zjn{C^f23w!^2cm@|ncNokAygz2cyVUsHFy>AT{Pa4JH-8)IF!>L1nYHAUb2e%&N zO?N%ThnG!b`shYBkDAR^(?TJ`qBKpdO;ZhOd0Y6LG@V4CZ2gzMO3DRO+LI7QCRlozWqTEVNqdFBvxr1a)k+jm?(0!yNdG(#?mtd<3XnP&^zFx4<^7kR z$LAm4%zOXxU2N;ELgNVDJZCg_tlEfcpU98a?cnj;&aNZdg>|O_%|QT zrcMOx1IFV+g-I;L#XN0O#E}hZA zQ~Qr`)r>Z7U$cW1T~!YEmuV^H+1oQn)hVj*)V`yX)0FELOy$Ebe;Jk3AtF>A9IFmX zi?fz|F^|)f+duKQ`t+msQ{OxiXHx_0K=nTmnGY&qopkw|Oq9#@M^W^cbM9Jo zu7u!3j#r6Q=a+8*A|ouEI0h>Q;v9Fb+eOtW-Q_CXg9%3ls&o!iXe|}^;05!zdFf2b zsh_z{p{uIiqEy8?M}1R)o+DlS+ehBVv&$cn`sR`1Y6-QH?b!BqVv(wK&TTz>So^D0T%|&1XXmg=2+Q?pc*ej3z#c#_Mpvv@!F-^wcrhVC zW;BW#)Y`(xaUIdm@45TH2AJDDz>h0~Os|%!3OeLhDi8~dEC^9%r-)F9;Ni{tcx>k( z4)zXW1lk+wSUh1A=T9C>Q!&S}N=ht(Rp_cHRj1$_aXzM4idg@|Dt_?KAER^6PD+i< zN32a-fgb@!fVbfzbgLcIg#b(?C*mrq7;ABH%(32Hdb+!PEJ>C9`}Yq6vt-dCpLr9x z5_m5@?6)br0AOU$Cll~7)0Qyxs!N|l55!5+jM3QW9oGQ*aB4ZGszfxh{x^=_A zEMB;fIF}QvsyKIsh}?+J;C0}0zS&Zqgj(>4sYU=3MO4d!3JlIY=c2;mSH32izHliG zEk)72U{WA>>B?%~%zy2Ett z-6f^QW)Ml$$F0979+YnYKSp&QB0mL|0tW>oUnXjqPIqIAcgfNDMg8N?&64Y}%k}AGu%G{rW+3WZ!Pd z*Og4JP;k!L{{+qmpA9+ZPOplL5|P*8vycB22J@pp9E+sc>X32repivDix$Va#;$cdd5te#^kvR zIBm|$7<1ZGnntx#C^Zo0VxkBH)G3lwtR3v{)$YRw_27;zZs&7r*|u)A9^APtmsHD9 zp{_)nFQCpjRW-nsPIZm(k})sSDZmUw4r!VWNECe&&we-%;MX{xr@OnG_3PLFZeZrj znM0|rj(Xs^BwqVdf+}){d_5(Upbg04+58nG2e;e+;7ur z^}3{5J~ypatca0feZ8q~9;pp2Bcxd0K%C1bAf!n(9_Z<=^mTVd{l~hcS{{g0kzAob zE?;nBj8W$ftLpdhX8k3=mw@-F>H-m24SW*#Sdi!}cXSb+ZS^f6!WgU8vht~?e!s-j z9$a?WWpo}m06?72`#@6A1zEHU)hq^lD=^+U_g;bR5=8}6pGEa92mf;9si*e0Em<;4 zM1CzIZ7AxTSIW+&IBzQrxzVWJolMVKh^BuuBjRdr+VO8*|4rq_!x^~RVl0*g!( z&34u*p7QZ#fzwq)G+671D5}>2kKox@f~v0gLxFjra`Eih%-*qsRdeTNM4K~!x2Wn@ zbFd{9QT%fM4(HrE)!I(u9B#x2qJe=;cz0tBaK4DFL}UsuN<5ZN*wsh@yvpe*k`k*NYC1dRqYYX+RWo z^#h39 z2V4t$64gskb-D(rE>LXpDIlZdKb{7~>qVwZzsErD)io`LfuEKMD1rb+C zQ*t7RbCmn~DEIeM9T<4&fVp(W42%d7kaKP*0erN-AMt5X6%kh*o<=2LlY^(v{nod# z&e&GzbIf{6bEXV6!gZN+Wz3XDG(7=Xu5$kYKeHZ~r2Jbn6fZxpJ!$e09G zC=^Jm)o9K3?H0eXtP*2(BO>aCIBN&-q#f|eeQz?%oLGwwxuVd6bC@`muxFqX&mQ+T z_VzMRUta;bL&x+~Dd3kBm{XPB-rnPm3voQecmOn?%TYc)3O`#_ez9B6k|k(Ie@(kuTpwo^k@o6!pOe9WY+H8lyf=y>gxXVz?@jhNs>9F zIOiBBmnr7+;8Pbx^|r+Fuo|g2m+c>_VvGyoUk_{!kBr2J3VIM}!gK0iSi$$#fT&IV z{Wxpsiy~G}o*crg3Mb@@{^Y={S+nN2k|jPK}>y)VM-|6S#ex?joEZ0}R(79R@m+uGuouOB$T*AE=Gj3t5sk3aFm&~F*h zP`r}fpZ4|9K5=3#F#AyL4q*>ny?XV~hO1B}gnBU|OfLer#?qDUP4}2z=_BhM5ac=G&WIH70;5Kgz79*>i}ig;vG$(y8+V~b|6FO9L4i^ zMge2PZ`nS`mUv*G8E*od2ISR8?<_tcH%noXQ56Z%z7;2|W<$WJ2%5`zQ4?{9dQp-HbQFwpi7V>(J|DvO4!r`0ZI> zC-6$52>f2iCr~Y_F}HA`j(0VV^jW(XcsX8KUyR7>LwjBxB=)sg zyMfJ4WVwp8s-G=#5->}bF3q%jwg>TDz(3;W?;*T_1wIh{vmix};Db-o@OH*|_}J@K ze6p?|zs=>=aNWV0_qG7{;CFp2$9v6fHIjKD(2L0b#;-U4uf&HR6d&BaD(hfqcV~kK z_4IK49DE7|yz{vP_#x1Y4}WI;v7Dm#w2pJApVv0r`1kna+GT3YXnbx4{NA4y;4SzF z{APf%F?;Y~NPyRbd+x>W0g8e5st-_oAzbsW(D2XTcb`2J&Tq%N1mL4{uf>xi4*{*Y zB&mi0crCC_RL{Wkd0;qmnt8Ub3EzJjp8KV6{_-GI$ABZwn-Ql5CipJdw7LjCXKw>m ziF3Ii5fgyxfu~jVyLd}<5^$vGBmT|d{@03g*(hY^t~TD1?ZwAkZo=CoUktxb3-uv< zXflV7_}vEF5hP+T@$AZL!?j;jkrb~(V0fu+3-#Op&J}n*%-Q%b>SN)aR^UKbNlv28 zc`%OW?4A?qM?;+%OJ{{^?hmAfX?O*hHE3<9KNchceBKG*wJP$JFaUG$IjLU-Ae!;w zU&brXF`-?9!0q_y*b3|lmTt!I$qb=0LcKTC*{1VHMda7vdv?!#q0XjTW*(m;G_?j^ zhS-!7ZpyBicS2_`IN`cG7~Tl}sW2+P2L3&q`%644d)x`nS%R06L-^^NtuU+c%!_O( z-VxZ5Q}D|5KsbMCsIviT5A`ol$F{PdLu*$r_xINNx=E z;ZXMjufr?45dj2%w*$Wn-_K=uQ&qOKX4KeBM`XZdW^)G2&PcU@U$)EQb;KF?|AL?f zs1SNS&Z*AM9aO(uzxIT_oK$Lo$pFY!plnKg0lzgji-ok~r^?do;bGUvLj3CTU*UWL zOjYmv{cAWkSo6Nt(5Y*}aZji-^FHHbbcA|;F!U0jRlO8^mSH3HaF}Xi!!=uK-jxmV zY2r!U**mhqz?tK{BU5u%2Fx>|{$S|nJMdaPd&t)VSYOK;+DB@De-A$0@m>5B%0hjaGR-Kn+0;0SHy`%niG^zeXg|z=6=RCw`n{@pNQMVK zvxt9z|9gXPhvT6TWT|h+M;!(xqqT)|w*^3&1G1kBqqjW#UIcEbk&JTa!~wkhk;iYV z+Zez(Gj#ToVHAHGKrZ3`wBqw&)H8{kh8OV-S(~$thx#X>?g!q4*FylksyaG!=V1{^ zby%A233Y@|>#jQCnLKg=`$53_NCQzsDf3nQoLmBIR_C6V;lD>Z8$TV^hHFm8>w0rinUK@6gA;>)MkR=7XDDjs9!Ahgx{tB;{={mFRdrJ1VhTWmO3A54HOWAh$A?K z;zN<%!5nrjhwiD7#EfX9{k}J~=dx>!f*KJO5yHO;o$7ffwmBnXi8027e=MSg8+oD= zFBs$fFp;RKTD3>>d5r1{QbPV8d}8ELwo4C|0000bbVXQnWMOn=I%9HWVRU5xGB7bU zEio}IF)~y!Fgi6eIy5saFf}?bFwi*+P5=M^C3HntbYx+4WjbwdWNBu305UK!H7zkQ lEip1wF)%tcGdeUgEig4YFfgHHwDJG|002ovPDHLkV1l)ztttQj literal 0 HcmV?d00001 diff --git a/Cassandra/package/manifest.yaml b/Cassandra/package/manifest.yaml new file mode 100644 index 00000000..1f071ff1 --- /dev/null +++ b/Cassandra/package/manifest.yaml @@ -0,0 +1,24 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +Format: 1.0 +Type: Application +FullName: io.murano.apps.apache.Cassandra +Name: Apache Cassandra +Description: | + Cassandra is a highly scalable, eventually consistent, distributed, + structured key-value store. +Author: 'Mirantis, Inc' +Tags: [NoSQL, Database, CQL, Apache, Java] +Classes: + io.murano.apps.apache.CassandraNode: CassandraNode.yaml + io.murano.apps.apache.CassandraCluster: CassandraCluster.yaml