<div dir="ltr">Hi Simon,<div><br></div><div>Answers inline.<br><div class="gmail_extra"><br clear="all"><div><div class="gmail-m_-201018260698371438gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div dir="ltr">Best Regards,<div>Dmitrii Shcherbakov</div><div><br></div><div><div style="color:rgb(136,136,136);font-size:12.8px"><span style="color:rgb(68,68,68);font-size:12.8px">Field Software Engineer</span><br style="color:rgb(68,68,68);font-size:12.8px"><span style="font-size:12.8px">IRC (freenode): Dmitrii-Sh</span><br></div></div></div></div></div></div></div></div></div></div>
<br><div class="gmail_quote">On Mon, Jul 17, 2017 at 4:44 AM, Simon Lafrenière <span dir="ltr"><<a href="mailto:simon.lafreniere09@gmail.com" target="_blank">simon.lafreniere09@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hey,<br>
<br>
This seems like a good initiative. I want to know more.<br></blockquote><div><br></div><div>Good stuff.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
If someone could explain to me for what reason I could get paid using juju charms that would help me understand what I could do with this for clients.<br></blockquote><div><br></div><div>The idea might be that you would sell Juju models: could be an entire architecture comprised of multiple related applications on multiple machines instead of just having images with templates.</div><div><br></div><div>It used to be the same with software on a single machine: at first we had flat assembly language code, then high-level languages, static libraries, loadable dynamic libraries (which could be used by multiple processes on the same host). But now we need to model connections and data exchange on different hosts - cannot just ship a single package with libraries anymore for it to be enough.</div><div><br></div><div>---</div><div><br></div><div>JAAS is getting there in a certain way for providing hosted Juju controllers for you to be able to use models on different public clouds without having your own infrastructure.</div><div><a href="https://jujucharms.com/jaas">https://jujucharms.com/jaas</a><br></div><div><br></div><div>In terms of providing models and services related to them, I think Spicule is a good example to look at.</div><div><a href="http://spicule.co.uk/2017/07/07/data-processing-with-spicule-data-engine/">http://spicule.co.uk/2017/07/07/data-processing-with-spicule-data-engine/</a><br></div><div><a href="https://youtu.be/WNs5vA3Pljg?t=1251">https://youtu.be/WNs5vA3Pljg?t=1251</a><br></div><div><a href="https://www.youtube.com/watch?v=akpiHie0QEs">https://www.youtube.com/watch?v=akpiHie0QEs</a><br></div><div><br></div><div><a href="https://lists.ubuntu.com/archives/juju/2017-April/008887.html">https://lists.ubuntu.com/archives/juju/2017-April/008887.html</a><br></div><div><br></div><div>You could also do charm maintenance services: e.g. if a customer wants to have a certain functionality in charms and wants continuous support with new versions released, tests etc. you could easily qualify this as an engineering effort which should be paid for.</div><div><br></div><div>---</div><div><br></div><div>In essence, Juju itself is a client-server type of software to remotely execute arbitrary code based upon certain events and send data across different agents on used machines.</div><div><br></div><div><a href="https://github.com/juju/juju/blob/develop/doc/architectural-overview.md#juju-components" target="_blank">https://github.com/juju/juju/<wbr>blob/develop/doc/<wbr>architectural-overview.md#<wbr>juju-components</a><br></div><div><br></div><div>The other part is charms which is that arbitrary code that gets executed and acquires certain context from Juju about a particular event that triggered the execution.</div><div><br></div><div>This is what is called the 'operational' code that does everything you would do manually in an alternative situation. The difference between one-shot deployment tools is that charms are executed based on different lifecycle events and are applications in a certain sense: they can get quite complex in handling config changes, relation events, upgrade events, periodic update status events, storage events and leadership events.</div><div><br></div><div><a href="https://jujucharms.com/docs/2.2/developer-event-cycle#hook-event-cycle">https://jujucharms.com/docs/2.2/developer-event-cycle#hook-event-cycle</a></div><div><br></div><div>This is where, as a developer or a company you can bring in your expertise in providing the right application-specific operational code to manage applications or models that customers need. Juju will not do that for you on its own - it is a system that allows you to do it via the primitives it provides but all of the application-specific work is coded in a charm.</div><div><br></div><div>From a charm developer's point of view you see this: Juju agent -> executes a file with an event name (can be anything really in terms of a programming language) -> control gets to your own code.</div><div><br></div><div>What is used a lot now:</div><div><br></div><div>classic charms: Juju agent -> *hooks.py file -> a decorated function gets executed + charm-helpers library + your own library code calls<br></div><div><div>reactive charms: Juju agent -> charms.reactive main function -> hooks and reactive handlers + charm-helpers library + your own library code calls<br></div></div><div><br></div><div><br></div><div>I am oversimplifying because there are other features out there but this is the most basic thing to realize.</div><div><br></div><div>If you need an analogy, Juju would be similar to a complex responsive GUI application:<br></div><div><br></div><div>- you have a main loop that decides which operation to do next (e.g. a user clicked a button, or pressed something on a keyboard so you need to handle that)</div><div>- events have custom handlers that act upon them in a custom way</div><div><br></div><div>You could also compare Juju to an MVC type of application but more distributed as there are many machines involved.</div><div><br></div><div>For a single unit, it could be something like that:</div><div><br></div><div>Model - a context you get from Juju and relation data;</div><div>View - a set of actions to perform on a target machine or configs to render;</div><div>Controller - a charm code that operates on the model's data to present a view.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
I usually develop sites based on container images but I want to know for what else I could use this for. </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Are there lists of use cases and problems solved ?<br></blockquote><div><br></div><div>If you have a single image with a template, you cannot model relations between services easily. You just have a one-shot template rendering code which prepares your container image but oftentimes this is not enough.</div><div><br></div><div>A simple example would be a desire to scale a model like this:</div><div><br></div><div>load-balancer -> web servers -> database backend</div><div><br></div><div>You could also add something like a charm that automatically gets a TLS certificate from Let's Encrypt.</div><div><br></div><div>Things get more complicated if you want to deploy something like OpenStack or Kubernetes.</div><div><br></div><div>This is a simple model of OpenStack (non-HA): <a href="https://jujucharms.com/openstack-base/">https://jujucharms.com/openstack-base/</a></div><div>k8s: <a href="https://jujucharms.com/canonical-kubernetes/">https://jujucharms.com/canonical-kubernetes/</a><br></div><div><br></div><div><a href="https://jujucharms.com/big-data">https://jujucharms.com/big-data</a><br></div><div><a href="https://jujucharms.com/u/prometheus-charmers/prometheus/">https://jujucharms.com/u/prometheus-charmers/prometheus/</a><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Can I power devices and do iot type of projects ?<br></blockquote><div><br></div><div>I can't see why not. Juju is written in golang and is easy to run on any operating system. Like I said before, Juju unit agents do remote code execution and connect to a controller via TCP so no hard requirements in terms of running code on IoT devices. The question is how small is the target IoT device and how to provision those devices because Juju allocates machines via a cloud API and with bare-metal servers we do it with MAAS which in turn provisions via PXE boot over a network.</div><div><br></div><div>For IoT devices the provisioning scenario needs to be figured out if you want to deploy charms onto IoT devices via Juju.</div><div><br></div><div>Although, if you only care about providing infrastructure for your IoT devices and not using them as a management target for Juju you do not care as much - just deploy your infra and point your devices at it. <br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Is it about serving programs to user and teams of programmers ?<br></blockquote><div><br></div><div>Not 'serving' in terms of just deployment - more like modeling and operating which includes deployment.</div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
can I connect maker type electronic projects and charms so that my arduino or raspberry py get to execute code and produce outcomes ?<br></blockquote><div><br></div><div>If you put a Juju agent there - yes.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Who could I work with to experiment doing fun stuff with juju charms  ?<br></blockquote><div><br></div><div><a href="https://jujucharms.com/community">https://jujucharms.com/community</a></div><div><br></div><div><div>IRC channels at <a href="http://freenode.net">freenode.net</a></div><div><br></div><div>#juju</div><div>#juju-gui</div><div>#juju-dev</div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Is there a list of videos of people showcasing their realizations with juju charms ?<br></blockquote><div><br></div><div>You can have a look here:</div><div><a href="https://www.youtube.com/channel/UCSsoSZBAZ3Ivlbt_fxyjIkw">https://www.youtube.com/channel/UCSsoSZBAZ3Ivlbt_fxyjIkw</a> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Thank you for reading and good day !<br>
<span class="gmail-m_-201018260698371438gmail-HOEnZb"><font color="#888888"><br>
<br>
<br>
<br>
--<br>
Juju mailing list<br>
<a href="mailto:Juju@lists.ubuntu.com" target="_blank">Juju@lists.ubuntu.com</a><br>
Modify settings or unsubscribe at: <a href="https://lists.ubuntu.com/mailman/listinfo/juju" rel="noreferrer" target="_blank">https://lists.ubuntu.com/mailm<wbr>an/listinfo/juju</a><br>
</font></span></blockquote></div><br></div></div></div>