summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Gauld <ag1282@att.com>2017-08-23 13:28:36 -0400
committerAndrew Gauld <ag1282@att.com>2017-08-23 13:29:44 -0400
commitce44d14eb43e6da7cdfd189b8fc48d0c1dcf57ec (patch)
treec2e26604c24dbaeb1bd9115341b1fcc053c33715
parent4468e8b611f85290633fee8ee9256297976bd2d9 (diff)
Seed code for Cloudify sshkeyshare plugin
Change-Id: I2dbf80b45303c4383492f1336516b0746418429c Issue-Id: CCSDK-65 Signed-off-by: Andrew Gauld <ag1282@att.com>
-rw-r--r--sshkeyshare/LICENSE.txt17
-rw-r--r--sshkeyshare/README.md22
-rw-r--r--sshkeyshare/requirements.txt0
-rw-r--r--sshkeyshare/setup.py35
-rw-r--r--sshkeyshare/sshkey_types.yaml17
-rw-r--r--sshkeyshare/sshkeyshare/__init__.py28
-rw-r--r--sshkeyshare/sshkeyshare/keyshare_plugin.py39
-rw-r--r--sshkeyshare/tests/test_plugin.py14
-rw-r--r--sshkeyshare/tox.ini7
9 files changed, 179 insertions, 0 deletions
diff --git a/sshkeyshare/LICENSE.txt b/sshkeyshare/LICENSE.txt
new file mode 100644
index 0000000..f90f8f1
--- /dev/null
+++ b/sshkeyshare/LICENSE.txt
@@ -0,0 +1,17 @@
+============LICENSE_START=======================================================
+org.onap.ccsdk
+================================================================================
+Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+================================================================================
+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.
+============LICENSE_END=========================================================
diff --git a/sshkeyshare/README.md b/sshkeyshare/README.md
new file mode 100644
index 0000000..00ec8cd
--- /dev/null
+++ b/sshkeyshare/README.md
@@ -0,0 +1,22 @@
+<!--
+============LICENSE_START=======================================================
+org.onap.ccsdk
+================================================================================
+Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+================================================================================
+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.
+============LICENSE_END=========================================================
+-->
+
+# sshkeyshare
+Cloudify plugin for creating ssh keypairs on the fly
diff --git a/sshkeyshare/requirements.txt b/sshkeyshare/requirements.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/sshkeyshare/requirements.txt
diff --git a/sshkeyshare/setup.py b/sshkeyshare/setup.py
new file mode 100644
index 0000000..56371ff
--- /dev/null
+++ b/sshkeyshare/setup.py
@@ -0,0 +1,35 @@
+# ============LICENSE_START====================================================
+# org.onap.ccsdk
+# =============================================================================
+# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+# =============================================================================
+# 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.
+# ============LICENSE_END======================================================
+
+import os
+from setuptools import setup, find_packages
+
+setup(
+ name='sshkeyshare',
+ version='1.0.0',
+ packages=find_packages(),
+ author='AT&T',
+ description=('Cloudify plugin for creating ssh keypairs on the fly.'),
+ license='Apache 2.0',
+ keywords='',
+ url='https://wiki.onap.org',
+ zip_safe=False,
+ package_data={'':['LICENSE.txt']},
+ install_requires=[
+ ]
+)
diff --git a/sshkeyshare/sshkey_types.yaml b/sshkeyshare/sshkey_types.yaml
new file mode 100644
index 0000000..c8e8b06
--- /dev/null
+++ b/sshkeyshare/sshkey_types.yaml
@@ -0,0 +1,17 @@
+tosca_definitions_version: cloudify_dsl_1_3
+
+imports:
+ - http://www.getcloudify.org/spec/cloudify/3.4/types.yaml
+plugins:
+ ssh_keyshare:
+ executor: central_deployment_agent
+ package_name: sshkeyshare
+ package_version: 1.0.0
+node_types:
+ ccsdk.nodes.ssh.keypair:
+ derived_from: cloudify.nodes.Root
+ properties:
+ interfaces:
+ cloudify.interfaces.lifecycle:
+ create:
+ implementation: ssh_keyshare.sshkeyshare.keyshare_plugin.generate
diff --git a/sshkeyshare/sshkeyshare/__init__.py b/sshkeyshare/sshkeyshare/__init__.py
new file mode 100644
index 0000000..c629bea
--- /dev/null
+++ b/sshkeyshare/sshkeyshare/__init__.py
@@ -0,0 +1,28 @@
+# ============LICENSE_START====================================================
+# org.onap.ccsdk
+# =============================================================================
+# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+# =============================================================================
+# 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.
+# ============LICENSE_END======================================================
+
+import logging
+
+def get_module_logger(mod_name):
+ logger = logging.getLogger(mod_name)
+ handler=logging.StreamHandler()
+ formatter=logging.Formatter('%(asctime)s [%(name)-12s] %(levelname)-8s %(message)s')
+ handler.setFormatter(formatter)
+ logger.addHandler(handler)
+ logger.setLevel(logging.DEBUG)
+ return logger
diff --git a/sshkeyshare/sshkeyshare/keyshare_plugin.py b/sshkeyshare/sshkeyshare/keyshare_plugin.py
new file mode 100644
index 0000000..7358efd
--- /dev/null
+++ b/sshkeyshare/sshkeyshare/keyshare_plugin.py
@@ -0,0 +1,39 @@
+# ============LICENSE_START====================================================
+# org.onap.ccsdk
+# =============================================================================
+# Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
+# =============================================================================
+# 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.
+# ============LICENSE_END======================================================
+
+import uuid
+import os
+from cloudify import ctx
+from cloudify.decorators import operation
+
+@operation
+def generate(**kwargs):
+ """
+ Create SSH key pair
+ """
+ tmpdir = '/tmp/{0}'.format(uuid.uuid4().hex)
+ os.mkdir(tmpdir, 0700)
+ os.system('ssh-keygen -t rsa -b 2048 -C "hadoop@cdapcluster" -N "" -f {0}/id_rsa'.format(tmpdir))
+ os.system('base64 -w 0 <{0}/id_rsa >{0}/id64'.format(tmpdir))
+ with open('{0}/id64'.format(tmpdir), 'r') as f:
+ k64 = f.read()
+ with open('{0}/id_rsa.pub'.format(tmpdir), 'r') as f:
+ pub = f.read()
+ os.system('rm -rf {0}'.format(tmpdir))
+ ctx.instance.runtime_properties['public'] = pub.strip()
+ ctx.instance.runtime_properties['base64private'] = k64.strip()
diff --git a/sshkeyshare/tests/test_plugin.py b/sshkeyshare/tests/test_plugin.py
new file mode 100644
index 0000000..6c5fe93
--- /dev/null
+++ b/sshkeyshare/tests/test_plugin.py
@@ -0,0 +1,14 @@
+import sshkeyshare.keyshare_plugin
+from cloudify.mocks import MockCloudifyContext
+from cloudify.state import current_ctx
+from cloudify import ctx
+
+def test_generate():
+ mock_ctx = MockCloudifyContext(node_id='test_node_id', node_name='test_node_name', properties={})
+ try:
+ current_ctx.set(mock_ctx)
+ sshkeyshare.keyshare_plugin.generate()
+ pub = ctx.instance.runtime_properties['public']
+ pvt64 = ctx.instance.runtime_properties['base64private']
+ finally:
+ current_ctx.clear()
diff --git a/sshkeyshare/tox.ini b/sshkeyshare/tox.ini
new file mode 100644
index 0000000..3a6c714
--- /dev/null
+++ b/sshkeyshare/tox.ini
@@ -0,0 +1,7 @@
+[tox]
+envlist = py27
+[testenv]
+deps=
+ pytest
+ cloudify==3.4
+commands=pytest