diff --git a/VERSION b/VERSION index 5faa260f..0cd08554 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Version 2.00.0 (2012-07-05 22:09:10) dev +Version 2.00.0 (2012-07-05 22:21:15) dev diff --git a/applications/admin/controllers/openshift.py b/applications/admin/controllers/openshift.py new file mode 100644 index 00000000..a04934d0 --- /dev/null +++ b/applications/admin/controllers/openshift.py @@ -0,0 +1,53 @@ +import os +from distutils import dir_util +from git import * + +def deploy(): + apps = sorted(file for file in os.listdir(apath(r=request)))#if regex.match(file)) + form = SQLFORM.factory( + Field('osrepo',default='/tmp',label='Path to local openshift repo root.', + requires=EXISTS(error_message=T('directory not found'))), + Field('osname',default='web2py',label='WSGI reference name'), + Field('applications','list:string', + requires=IS_IN_SET(apps,multiple=True), + label=T('web2py apps to deploy'))) + + cmd = output = errors= "" + if form.accepts(request,session): + try: + kill() + except: + pass + + ignore_apps = [item for item in apps \ + if not item in form.vars.applications] + regex = re.compile('\(applications/\(.*') + w2p_origin = os.getcwd() + osrepo = form.vars.osrepo + osname = form.vars.osname + #Git code starts here + repo = Repo(form.vars.osrepo) + index = repo.index + assert repo.bare == False + + for i in form.vars.applications: + appsrc = os.path.join(os.getcwd(),'applications',i) + appdest = os.path.join(osrepo,'wsgi',osname,'applications',i) + dir_util.copy_tree(appsrc,appdest) + #shutil.copytree(appsrc,appdest) + index.add(['wsgi/'+osname+'/applications/'+i]) + new_commit = index.commit("Deploy from Web2py IDE") #<--- COMMIT WORKED.. Next.. on to actual push. + + origin = repo.remotes.origin + origin.push + origin.push() + #Git code ends here + return dict(form=form,command=cmd) + +class EXISTS(object): + def __init__(self, error_message='file not found'): + self.error_message = error_message + def __call__(self, value): + if os.path.exists(value): + return (value,None) + return (value,self.error_message) diff --git a/applications/admin/views/default/site.html b/applications/admin/views/default/site.html index de4d418e..184b3a93 100644 --- a/applications/admin/views/default/site.html +++ b/applications/admin/views/default/site.html @@ -14,10 +14,7 @@

{{else:}}

{{=A(a,_href=URL(a,'default','index'))}}

- {{if MULTI_USER_MODE and db.app(name=a):}}{{owner = db.auth_user[db.app(name=a).owner]}} - (created by {{="%(first_name)s %(last_name)s" % owner}} - <{{=A(owner.email, _href='mailto:%s' % owner.email)}}>) - {{pass}} + {{if MULTI_USER_MODE and db.app(name=a):}}(created by {{="%(first_name)s %(last_name)s" % db.auth_user[db.app(name=a).owner]}}){{pass}}

{{if not os.path.exists('applications/%s/compiled' % a):}} {{=sp_button(URL('design',args=a), T("Edit"))}} @@ -39,12 +36,8 @@ {{pass}} {{if a!=request.application:}} {{=button(URL('uninstall',args=a), T("Uninstall"))}} - {{=button_enable(URL('enable',args=a), a)}} + {{=button_enable(URL('enable',args=a), a)}} {{pass}} - {{if a=='admin' and MULTI_USER_MODE and is_manager():}} - {{=button(URL('default','manage_students'), T('Manage Students'))}} - {{=button(URL('default','bulk_register'), T('Bulk Register'))}} - {{pass}}

{{pass}} @@ -65,19 +58,18 @@ {{if is_manager():}}
-

{{=T("Version %s.%s.%s (%s) %s") % myversion}}

+

{{="Version %s.%s.%s (%s) %s" % myversion}}

{{if session.check_version:}}

{{=T('Checking for upgrades...')}} {{session.check_version=False}} -

{{else:}}

{{=button("javascript:ajax('"+URL('check_version')+"',[],'check_version')", T('Check for upgrades'))}} -

{{pass}} +

- Running on {{=request.env.server_software}} + Running on {{=request.env.server_software}}

{{=button(URL('default','reload_routes'), T('Reload routes'))}}

@@ -105,46 +97,46 @@

{{=T("Upload and install packed application")}}

- +
- - - - - - + + + + + + - + - - - - + {{=LABEL(T("Get from URL:"), _for='upload_url')}} + + + + + - - - - - -
- {{=LABEL(T("Application name:"), _form='upload_filename')}} - - -
- {{=LABEL(T("Upload a package:"), _for='upload_file')}} - - - OR - + {{=LABEL(T("Application name:"), _form='upload_filename')}} + + +
+ {{=LABEL(T("Upload a package:"), _for='upload_file')}} + + + OR +
- {{=LABEL(T("Get from URL:"), _for='upload_url')}} - - -
+ +
- - {{=LABEL(T("Overwrite installed app"), _for='upload_overwrite')}} -
- -
+ + {{=LABEL(T("Overwrite installed app"), _for='upload_overwrite')}} + + + + + + + + +
@@ -153,6 +145,11 @@

{{=T("Deploy on Google App Engine")}}

{{=button(URL('gae','deploy'), T('Deploy'))}}


+ +
+

{{=T("Deploy to OpenShift")}}

+

{{=button(URL('openshift','deploy'),T('Deploy'))}}

+

{{if TWITTER_HASH:}}

{{=T("%s Recent Tweets"%TWITTER_HASH)}}

@@ -164,4 +161,3 @@ {{pass}}
- diff --git a/applications/admin/views/openshift/deploy.html b/applications/admin/views/openshift/deploy.html new file mode 100644 index 00000000..44cd21fe --- /dev/null +++ b/applications/admin/views/openshift/deploy.html @@ -0,0 +1,32 @@ +{{extend 'layout.html'}} + + + + + +

OpenShift Deployment Interface

+ +

{{=T("This page can commit your changes to an openshift app repo and push them to your cloud instance. This assumes that you've already created the application instance using the web2py skeleton and have that repo somewhere on a filesystem that this web2py instance can access. This functionality requires GitPython installed and on the python path of the runtime that web2py is operating in.")}}

+ +

{{=T("Note: If you receive an error with github status code of 128, ensure the system and account you are deploying from has a cooresponding ssh key configured in the openshift account.")}}

+ +{{if command:}} +

Command

+ +{{=CODE(command)}} +

OpenShift Output

+

+{{else:}}
+

Deployment form

+
+{{=form}} +
+{{pass}}