What is OpenShift
OpenShift is a Platform as a Service solution according the the cloud systems taxonomy. It offers a solution, a software development platform that facilitates easy and rapid application development in the cloud.
It can provide a preintegrated software stack environment and can leverage IaaS providers for the virtual infrastructure management (How to Deploy OpenShift Enterprise on Red Hat OpenStack).
A comprehensive presentation that provide further details can be found here: http://rhsummit.files.wordpress.com/2013/06/noceda_t_0120_consumepaasinthecloudwithopenshift.pdf
Demo
- Sign in for free account on https://openshift.redhat.com
- Login and from "My App" tab create new application by selecting "Add Application ..." button.
- I've used as simple Python app based on CherryPy framework.
- Once your gear (a Openshift name for your app container) is created you can take a look at the hello world code
- To modify the source code clone the git repo. You will need to first register your public key.
- Generate a new ssh key pair.
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/rado/.ssh/id_rsa): /tmp/tmp.key $ ssh-agent | tee -a agent.sh SSH_AUTH_SOCK=/tmp/ssh-pMmGGPP15635/agent.15635; export SSH_AUTH_SOCK; SSH_AGENT_PID=15636; export SSH_AGENT_PID; echo Agent pid 15636; $source agent.sh $ssh-add tmp.key Identity added: tmp.key (tmp.key)
- Clone your source repo to modify your app source code.
$ git clone ssh://52c499a1e0b8cdda0f000016@rado-rado1stapp.rhcloud.com/~/git/rado.git/ Cloning into 'rado'... remote: Counting objects: 62, done. remote: Compressing objects: 100% (41/41), done. remote: Total 62 (delta 16), reused 62 (delta 16) Receiving objects: 100% (62/62), 18.93 KiB, done. Resolving deltas: 100% (16/16), done.
- Modify the code to personalize it.
$cd rado/ $ find | grep -v git ./.openshift ./.openshift/markers ./.openshift/action_hooks ./.openshift/action_hooks/README.md ./.openshift/cron ./.openshift/cron/minutely ./.openshift/cron/monthly ./.openshift/cron/weekly ./.openshift/cron/weekly/chrono.dat ./.openshift/cron/weekly/chronograph ./.openshift/cron/weekly/jobs.deny ./.openshift/cron/weekly/README ./.openshift/cron/weekly/jobs.allow ./.openshift/cron/README.cron ./.openshift/cron/daily ./.openshift/cron/hourly ./README.md ./LICENSE ./data ./libs ./wsgi ./wsgi/static ./wsgi/static/README ./wsgi/application ./app.py.disabled ./setup.py $vim ./wsgi/application $ cat wsgi/application import sys sys.stdout = sys.stderr import atexit import threading import cherrypy cherrypy.config.update({'environment': 'embedded'}) if cherrypy.__version__.startswith('3.0') and cherrypy.engine.state == 0: cherrypy.engine.start(blocking=False) atexit.register(cherrypy.engine.stop) class Root(object): def index(self): return 'Hello from rado 1st app on openshift ;)!' index.exposed = True application = cherrypy.Application(Root(), script_name=None, config=None)
- Once you are happy with t he code it is time to push changes back to git and redeploy it inside OpenShift.
$ git commit ./wsgi/application [master 0eccd4d] init 1 file changed, 1 insertion(+), 1 deletion(-) $ git push origin master Counting objects: 7, done. Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 393 bytes, done. Total 4 (delta 2), reused 0 (delta 0) remote: Stopping PYTHON cart remote: [Wed Jan 01 17:59:08 2014] [warn] PassEnv variable SHELL was undefined remote: [Wed Jan 01 17:59:08 2014] [warn] PassEnv variable USER was undefined remote: [Wed Jan 01 17:59:08 2014] [warn] PassEnv variable LOGNAME was undefined remote: Waiting for stop to finish remote: Building git ref 'master', commit 0eccd4d remote: running develop remote: running egg_info remote: creating Example_CherryPy.egg-info remote: writing requirements to Example_CherryPy.egg-info/requires.txt remote: writing Example_CherryPy.egg-info/PKG-INFO remote: writing top-level names to Example_CherryPy.egg-info/top_level.txt remote: writing dependency_links to Example_CherryPy.egg-info/dependency_links.txt remote: writing requirements to Example_CherryPy.egg-info/requires.txt remote: writing Example_CherryPy.egg-info/PKG-INFO remote: writing top-level names to Example_CherryPy.egg-info/top_level.txt remote: writing dependency_links to Example_CherryPy.egg-info/dependency_links.txt remote: writing manifest file 'Example_CherryPy.egg-info/SOURCES.txt' remote: reading manifest file 'Example_CherryPy.egg-info/SOURCES.txt' remote: writing manifest file 'Example_CherryPy.egg-info/SOURCES.txt' remote: running build_ext remote: Creating /var/lib/openshift/52c499a1e0b8cdda0f000016/app-root/runtime/dependencies/python/virtenv/lib/python2.7/site-packages/Example-CherryPy.egg-link (link to .) remote: Example-CherryPy 1.0 is already the active version in easy-install.pth remote: remote: Installed /var/lib/openshift/52c499a1e0b8cdda0f000016/app-root/runtime/repo remote: Processing dependencies for Example-CherryPy==1.0 remote: Searching for CherryPy==3.2.4 remote: Best match: CherryPy 3.2.4 remote: Processing CherryPy-3.2.4-py2.7.egg remote: CherryPy 3.2.4 is already the active version in easy-install.pth remote: Installing cherryd script to /var/lib/openshift/52c499a1e0b8cdda0f000016/python/virtenv/bin remote: remote: Using /var/lib/openshift/52c499a1e0b8cdda0f000016/app-root/runtime/dependencies/python/virtenv/lib/python2.7/site-packages/CherryPy-3.2.4-py2.7.egg remote: Finished processing dependencies for Example-CherryPy==1.0 remote: Script /var/lib/openshift/52c499a1e0b8cdda0f000016/python//virtenv/bin/activate.fish cannot be made relative (it's not a normal script that starts with #!/var/lib/openshift/52c499a1e0b8cdda0f000016/python/virtenv/bin/python) remote: Script /var/lib/openshift/52c499a1e0b8cdda0f000016/python//virtenv/bin/activate.csh cannot be made relative (it's not a normal script that starts with #!/var/lib/openshift/52c499a1e0b8cdda0f000016/python/virtenv/bin/python) remote: Preparing build for deployment remote: Deployment id is f17888e7 remote: Activating deployment remote: Script /var/lib/openshift/52c499a1e0b8cdda0f000016/python//virtenv/bin/activate.fish cannot be made relative (it's not a normal script that starts with #!/var/lib/openshift/52c499a1e0b8cdda0f000016/python/virtenv/bin/python) remote: Script /var/lib/openshift/52c499a1e0b8cdda0f000016/python//virtenv/bin/activate.csh cannot be made relative (it's not a normal script that starts with #!/var/lib/openshift/52c499a1e0b8cdda0f000016/python/virtenv/bin/python) remote: Starting PYTHON cart remote: Result: success remote: Activation status: success remote: Deployment completed with status: success
- Final test that all worked fine ;)
$ curl -v -s http://rado-rado1stapp.rhcloud.com ;echo * About to connect() to rado-rado1stapp.rhcloud.com port 80 (#0) * Trying 54.221.76.112... connected > GET / HTTP/1.1 > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 > Host: rado-rado1stapp.rhcloud.com > Accept: */* > < HTTP/1.1 200 OK < Date: Wed, 01 Jan 2014 23:33:20 GMT < Server: Apache/2.2.22 (Red Hat Enterprise Web Server) < Content-Length: 40 < Content-Type: text/html;charset=utf-8 < Vary: Accept-Encoding < * Connection #0 to host rado-rado1stapp.rhcloud.com left intact * Closing connection #0 Hello from rado 1st app on openshift ;)!
No comments:
Post a Comment