21:00:20 #startmeeting Solum Team Meeting 21:00:21 Meeting started Tue Feb 17 21:00:20 2015 UTC and is due to finish in 60 minutes. The chair is devkulkarni. Information about MeetBot at http://wiki.debian.org/MeetBot. 21:00:22 Useful Commands: #action #agreed #help #info #idea #link #topic #startvote. 21:00:25 The meeting name has been set to 'solum_team_meeting' 21:00:38 #link https://wiki.openstack.org/wiki/Meetings/Solum#Agenda_for_2015-02-17_2100_UTC 21:00:48 #topic Roll Call 21:00:50 ed cranford 21:00:56 devdatta kulkarni 21:00:58 murali allada 21:01:00 philip cheong 21:01:08 hi ed, murali, philip 21:01:23 please take a moment to look through our agenda for today 21:01:30 #link https://wiki.openstack.org/wiki/Meetings/Solum#Agenda_for_2015-02-17_2100_UTC 21:02:07 if only it were so simple on hotel wifi :( 21:02:31 oh cant you access it? 21:02:32 :( .. don't worry.. I will paste each item here 21:03:02 lets wait for another minute to see if anyone else joins us 21:03:31 ok, lets proceed 21:03:35 yay it loaded finally 21:03:37 just slow 21:03:41 #topic Announcements 21:04:11 so recently several new features got added/merged 21:04:23 I wanted to give an update on those today 21:04:31 (muralia): Creation and usage of custom language packs 21:04:41 muralia: floor is yours 21:04:53 dev, should we wait until next week when we have more people here? 21:05:01 or should we continue? 21:05:06 muralia: good point 21:05:11 we can do this again too 21:05:19 we do have few folks today 21:05:20 sure. i'll give a brief intro 21:05:27 it's going on the record either way 21:05:27 so not a bad idea to give brief updates 21:05:40 datsun180b: right 21:05:48 muralia: cool. 21:06:01 so, one new feature i've worked on this month is the custom languagepack feature. 21:06:35 basically, this deals with the definition of the run time environment for solums users apps 21:07:15 as an example, if i want to create a python web app which talks to a mysql instance 21:07:45 a "stack" as heroku calls them 21:07:48 what i require is the python stack and a lysql ibrary to talk to mysql 21:07:53 *mysql 21:08:03 this requires us to create a custom language pack. 21:08:16 gpilz: our notion of a stack is basically a docker image that has required dependencies 21:08:20 all of the code for this feature has been merged as of today, so you can start using it 21:08:46 so muralia, in nutshell, how does it work? 21:08:57 do we create a Docker image and then use it in the plan file? 21:09:06 so you need to use the cli to create a languagepack first. 21:09:07 to build the application DU? 21:09:16 the command for this is 21:09:32 solum languagepack build 21:09:42 don't think we can deploy a DU directly 21:10:06 james_li: yes, we create the languagepack first 21:10:26 then include it in the planfile, just a uuid ref, when we create the app 21:10:41 solum languagepack build 21:11:06 I see. so instead of "auto" that we currently specify, we will specify the uuid of the built language pack? 21:11:08 so the gitrepo we provide needs to have a Dockerfile. which defines what we need in the run time 21:11:22 devkulkarni: or name i thiknk 21:11:34 let me paste a sample planfile here for us to look at. yes, james or name 21:11:53 https://github.com/murali44/python-mysql/blob/master/planfile.yaml 21:12:47 see the languagepack field in the planfile. this is the uuid of a LP i've created in my own environment. this is how we define a LP to be used, during app creation 21:13:02 cool 21:13:10 now lets see what an LP really is 21:13:12 https://github.com/murali44/solum-languagepack-python 21:13:35 is a sample python languagepack that i created. it has a dockerfile 21:13:55 if you look in the dockerfile, it just include the libraries i'll need for my app 21:14:20 notice the existence of a build.sh file which is included in the docker file. 21:14:42 that script will be called by Solum during the build phase of the CI workflow 21:15:07 for python the build phase just installs pip libraries. 21:15:11 you mean, the build-app script will call this build.sh? 21:15:27 yes 21:15:40 muralia: one question 21:15:45 yes 21:15:53 in the plan file, you have unittest_cmd attribute 21:15:57 what is the purpose of that? 21:16:08 similary, I see there is run_cmd as well 21:16:27 i was going to get to it after finishing this topic, otherwise we'll be all over the place. 21:16:28 could you talk about those? are they related to custom language packs? 21:16:33 oh okay 21:16:35 let me finish this and come to that 21:16:38 sorry, continue :) 21:17:11 so basically, i;ve introduced the build.sh file in the languagepack because different things need to happen for different types of apps 21:17:49 got python it is just installing pip libraries, but we can imagine a java app requiring a 'maven build' command being called to create a war file 21:18:05 of a c++ app needs to be built to create an exe 21:18:05 sure 21:18:26 so language specific build steps will go into the build.sh file. 21:18:30 just to be clear - the users app will run in the docker container created from the custom language pack? 21:18:41 exactly 21:19:12 the solum CI workflow will look for the build.sh file and invoke it 21:19:32 so muralia, you are saying that build.sh needs to be provided by custom language pack author 21:19:39 yes 21:19:43 i guess makes sense 21:20:07 do you have another example of a custom language pack? 21:20:26 james_li might have a java sample. 21:20:49 https://github.com/jamesyli/solum-lp-java 21:20:50 https://github.com/jamesyli/solum-lp-java 21:20:52 found it :) 21:21:19 james_li: ping 21:21:47 in build.sh for the java lang pack, you have a comment to copy the war file 21:21:59 is that step missing, or is it not needed? 21:22:25 thanks mkam, muralia for the link 21:22:52 muralia: please continue, while we wait to hear from james_l 21:23:21 so the command solum languagepack build talks the repo url 21:23:29 takes 21:23:36 and gives us a uuid for the LP 21:23:56 where do you store the built LP? 21:24:08 next thing to talk about it the test_cmd and the run_cmd in the planfile. 21:24:15 ok 21:24:53 the test_cmd executes unit tests and this is specified by the user 21:25:15 because we dont want to bind users to a particular tool, for example. 21:25:32 tox, for example 21:25:45 so the exact command to run should be specified in unittest_cmd? 21:25:55 in the CI flow, solum checks for a test-requirements.txt file in the app repo and install those for the user. 21:26:13 yes, once the requirements are installed, the cmd is executed. 21:26:35 whose responsibility is it to ensure that the required tools (pep8, tox) etc. are available for the app? 21:26:56 is it user's responsibility to install them as part of custom language pack creation? 21:27:08 like i mentioned, solum looks for a test-requirement.txt file in the app repo 21:27:39 hi 21:27:44 right, but there need to be available 'tox' on the runtime environment 21:27:47 hi akshayc 21:28:08 muralia is getting us up to speed on the custom language pack feature 21:28:17 ok…. cool…. 21:28:17 yes, all OS level dependencies are defined in the LP 21:28:26 muralia: got it 21:28:41 so if you want to use TOX, it needs to be installed on the LP 21:28:49 note that before this happens. solum first downloads the docker image for the LP defined in the planfile. 21:28:57 ok, makes sense 21:29:07 builds a new on top of the LP 21:29:15 seems like we could build a common, base docker image 21:29:21 and runs unit tests in it 21:29:27 that had stuff like tox, etc. already installed 21:29:35 gpilz: yes, that makes sense 21:29:59 we could have custom solum images that have common packages/libraries on them 21:30:08 yes, gpliz, the next step is to figure out a stratergy to create vendor created lp for common usage and make it easy for users to reuse them 21:30:09 we could publish them to docker hub 21:31:01 muralia: quick question.. 21:31:07 yes 21:31:12 where are the custom LPs and DUs stored? 21:31:38 once the unit tests pass, we start from the LP again 21:31:48 this time we check for a requirements.txt file 21:32:12 ok 21:32:15 install those libraries, inject the user code 21:32:31 and include the run_cmd provided in the planfile as our entry point 21:32:39 this now become our DU 21:32:44 which can be deployed. 21:32:59 entry point, as in the entry point on the docker image (DU)? 21:33:04 yes 21:33:07 ok 21:33:23 so when we deploy the DU, we do "docker run image" 21:33:42 the DU is now stored. 21:33:55 Dev, to answer your question 21:34:11 i've included multiple options for storing LP's and DU's 21:34:25 Docker_registry, glance and swift 21:34:47 oh cool 21:34:48 this is to address different requirements for different vendors 21:35:01 the openstack way is to use glance to store images 21:35:06 right 21:35:21 however, to make use of dockers layering feature 21:35:27 we need to use the docker registry 21:35:35 which is why i've include that too 21:36:03 note that this requires a vendor to now run and operate a docker registry 21:36:14 or use the public docker hub 21:36:22 so, LPs and DUs that get stored on docker_registry, are they tenant specific? 21:36:42 I am guessing that for glance and swift, you are storing them per tenant 21:36:45 is that correct? 21:36:53 no they are not, if vendors need that feature, they need to use swift or glance as the backend 21:37:09 ok 21:37:12 docker registry is not a multi tenant backend yet 21:37:44 theres a new flag called image_storage in solum.conf 21:37:57 you can set that to one of the 3 options ive mentioned 21:38:12 you mean, docker_registry, glance, swift ? 21:38:16 yes 21:38:20 cool 21:38:49 if you choose glance or swift, solum will talk to keystone, impersonate the tenant and store LPs and DUs in the tenants account 21:39:21 so the users code and DU is kept private at all times 21:39:42 muralia: impersonation will be only required for theusecase when there is a webhook trigger sent to solum? 21:39:43 right? 21:40:04 thats right 21:40:14 for regular flow (where users are directly interacting as them) there is no impersonation 21:40:15 cool 21:40:34 im going to update the wiki with instructions and links to sample LPs and sample apps soon 21:40:44 muralia: that would be really helpful 21:40:50 cool 21:40:57 muralia: thanks a lot for the update!! 21:41:06 we will look forward to the updated instructions 21:41:15 sure. if anyone has any questions, ping me on irc 21:41:15 nice 21:41:33 we are still in the Announcement topic today :) 21:41:46 is all the code for building is stored under contrib right? 21:41:51 we could continue with the rest of the announcements, or we could keep them for next week 21:42:01 akshayc: that is correct 21:42:09 yes 21:42:10 contrib/lp-cedarish/build-* 21:42:30 what do you all prefer? we could go directly to Task review or to open discussion 21:42:32 ok…. and we currently support 21:42:49 no just wondering the correct location 21:43:01 akshayc: yes, that is the correct location 21:43:10 i vote proceeed to tasks 21:43:19 datsun180b: ok, lets do that then 21:43:28 because i am trying to rework the building scripts 21:43:47 akshayc: yes, i believe you are continuing from where ravips left off 21:43:51 is that correct? 21:43:54 ya…. 21:44:03 cool 21:44:12 lets circle back on that in the open discussion 21:44:23 lets quickly go through some of the tasks that we have for today 21:44:24 ok 21:44:34 #topic Task Review 21:44:43 (muralia): Remove Image creation API. Move image creation functionality as a resource under rest of the solum API tree 21:44:54 muralia: mind getting us up to speed on this one? 21:44:59 yes 21:45:25 while working on the LP feature, i realized we have two api endpoint in solum 21:45:42 one is the solum-api which is the endpoint we talk to for creating and deploy apps 21:45:47 the other is a builder-api 21:45:56 which deals with image creation. 21:46:11 right 21:46:34 when we started working on this project, we thought we would need a separate api for creating images and a different one for deploying these images 21:46:57 we've changed our approach since then and are using the solum-api for creating and deploying apps. 21:47:35 the LP creation however happens by talkign to the builder-api 21:48:11 i chose to do that because of the way the LP resource was designed in the main solum-api 21:48:44 the LP resource was just a metadata store, which doesnt even write to the solum db. it just stores metadata in glance 21:49:37 okay.. 21:49:43 this doesnt make sense for solum anymore. so I'm propose consolidating our two api's into just one. basically, i'll change the LP resource to support all the LP features i described earlier 21:50:11 there is just no need to two separate apis, 1 dealing with apps and 1 dealing with LPs. 21:50:24 so these will be: CRUD on LPs 21:50:31 yes 21:50:57 +1 for a single api 21:50:58 where is the LP related metadata being stored currently? 21:51:01 this change will not affect an end user. 21:51:24 its just moving where the functionality lives. and consolidating 2 endpoints into 1 21:51:44 seems fine to me 21:52:27 datsun180b, gpilz, phiche1, akshayc: any thoughts? 21:52:28 in my LP feature work, im storing the metadata in the solum db now. this will make it easy for me to implement features to discover and search for LPs 21:52:29 makes sense 21:52:41 more simpler is more betterer 21:52:51 muralia: I see 21:53:00 thanks datsun180b, gpilz 21:53:08 should we take a agreed on this? 21:53:18 yes 21:53:20 yes 21:53:21 yes 21:53:25 thanks! 21:53:57 cool. thanks. i'll get started on that 21:54:16 #agreed We will consolidate our endpoints under a single API endpoint. Specifically, we will get rid of solum-builder-api endpoint and move language pack creation functionality under solum-api 21:54:36 we have only few minutes remaining today. 21:54:57 so I am going to skip the rest of the task reviews, and open up discussion 21:55:03 #topic open discussion 21:55:26 akshayc: floor is yours 21:55:31 ok 21:55:41 i have trying to move from bash to python 21:55:52 i was looking for some libraries 21:56:01 i know there is docker-py 21:56:06 for docker functions 21:56:18 is docker-py in global-requirements? 21:56:20 do we have any specific version to use 21:56:32 if not, our gates won't pass 21:56:37 not sure…. it is in the newer version 21:56:51 i will not shift the current working 21:57:00 i will work in parallel 21:57:05 got it. 21:57:16 when the work is stable, we can switch 21:57:31 but we should go docker-py route in your parallel stream only if eventually we would be able to use that in upstream solum 21:57:54 and that is why I was asking if we know whether docker-py has been included in global-requirements yet? 21:58:04 if we don't know, we should find that out 21:58:09 nope 21:58:17 https://github.com/openstack/requirements/blob/master/global-requirements.txt 21:58:49 ya…. its not there…. 21:58:52 keyworded bookmarks C: 21:59:00 datsun180b: but, wasn't there an issue in our vagrant around nova where it was using dockery-py? so it must have been available, no? 21:59:08 the other option is to write shell commands in python 21:59:19 nova-docker 21:59:21 fabric 21:59:31 https://github.com/stackforge/nova-docker/blob/master/requirements.txt 21:59:36 sorry, nova-docker 21:59:49 yep… nova-docker is using it…. 22:00:15 okay, so if nova-docker is using it, we could use it as well 22:00:24 but https://github.com/ed-/nova-docker/tree/solum-pin is not 22:00:39 hmm.. 22:00:44 okay, we are out of time 22:00:47 compatibility issues mainly 22:00:52 yep 22:00:56 akshayc: lets continue in solum 22:01:05 thanks muralia for the updates today 22:01:09 ok 22:01:10 sure 22:01:15 we will continue with more updates in the next meeting 22:01:20 #endmeeting