Git Product home page Git Product logo

plugins's Introduction

Juju logo next to the text Canonical Juju

Juju is a model-driven Operator Lifecycle Manager (OLM). Juju greatly improves the experience of running Kubernetes operators, especially in projects that integrate many operators from different publishers.

Why Juju

A Kubernetes operator is a container that drives the config and operation of a workload. By encapsulating ops code as a reusable container, the operator pattern moves beyond traditional config management to allow much more agile operations for complex cloud workloads.

Shared, open source operators take infrastructure as code to the next level with community-driven ops and integration code. Reuse of ops code improves quality and encourages wider community engagement and contribution. Operators also improve security through consistent automation. Juju operators are a community-driven devsecops approach to open source operations.

Juju implements the Kubernetes operator pattern, but is also a universal OLM that extends the operator pattern to traditional applications (without Kubernetes) on Linux and Windows. Such machine operators can work on bare metal, virtual machines or cloud instances, enabling multi cloud and hybrid cloud operations. Juju allows you to embrace the operator pattern on both container and legacy estate. An operator for machine-based environments can share 95% of its code with a Kubernetes operator for the same app.

Juju excels at application integration. Instead of simply focusing on lifecycle management, the Juju OLM provides a rich application graph model that tells operators how to integrate with one another. This dramatically simplifies the operations of large deployments.

A key focus for Juju is to simplify operator design, development and usage. Instead of making very complex operators for specific scenarios, Juju encourages devops to make composable operators, each of which drives a single Docker image, and which can be reused in different settings. Composable operators enable very rich scenarios to be constructed out of simpler operators that do one thing and do it well.

The OLM provides a central mechanism for operator instantiation, configuration, upgrades, integration and administration. The OLM provides a range of operator lifecycle services including leader election and persistent state. Instead of manually deploying and configuring operators, the OLM manages all the operators in a model at the direction of the administrator.

Open Operator Collection

The world's largest collection of operators all use Juju as their OLM. The Charmhub community emphasizes quality, collaboration and consistency. Publish your own operator and share integration code for other operators to connect to your application.

The Open Operator Manifesto outlines the values of the community and describe the ideal behaviour of operators, to shape contributions and discussions.

Multi cloud and hybrid operations across ARM and x86 infrastructure

The Juju OLM supports AWS, Azure, Google, Oracle, OpenStack, VMware and bare metal machines, as well as any conformant Kubernetes cluster. Integrate operators across clouds, and across machines and containers, just as easily. A single scenario can include applications on Kubernetes, as well as applications on a range of clouds and bare metal instances, all integrated automatically.

Juju operators support multiple CPU architectures. Connect applications on ARM with applications on x86 and take advantage of silicon-specific optimisations. It is good practice for operators to adapt to their environment and accelerate workloads accordingly.

Pure Python operators

The Python Operator Framework makes it easy to write an operator. The framework handles all the details of communication between integrated operators, so you can focus on your own application lifecycle management.

Code sharing between operator publishers is simplified making it much faster to collaborate on distributed systems involving components from many different publishers and upstreams. Your operator is a Python event handler. Lifecycle management, configuration and integration are all events delivered to your charm by the framework.

Architecture

The Juju client, server and agent are all written in Golang. The standard Juju packaging includes an embedded database for centralised logging and persistence, but there is no need to manage that database separately.

Operators can be written in any language but we do encourage new authors to use the Python Operator Framework for ease of contribution, support and community participation.

Production grade

The Juju server has built-in support for high availability when scaled out to three instances. It can monitor itself and grow additional instances in the event of failure, within predetermined limits. Juju supports backup, restore, and rolling upgrade operations appropriate for large-scale centralised enterprise grade management and operations systems.

Get started

Our community hangs out at the Charmhub discourse which serves as a combination mailing list and web forum. Keep up with the news and get a feel for operator engineering and usage there. Get the Juju CLI on Windows, macOS or Linux with the install instructions and try the tutorials. All you need is a small K8s cluster, or an Ubuntu machine or VM to run MicroK8s.

Read the documentation for a comprehensive reference of commands and usage.

Contributing

Check the developer instructions to get started and follow our code and contribution guidelines to learn how to make code changes. File bugs in Launchpad or ask questions on our Freenode IRC channel, and Mattermost.

plugins's People

Contributors

adamisrael avatar bloodearnest avatar codersquid avatar johnsca avatar joshstrobl avatar ktsakalozos avatar lazypower avatar lutostag avatar marcoceppi avatar mbruzek avatar niedbalski avatar pengale avatar tvansteenburgh avatar tych0 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

plugins's Issues

Short Summary of each plugin in the Readme

These plugins are really cool - but for a few of them you have to read the code to fnd out what they're for. It would be nice if the Readme contained a short summary of what each plugin is for

juju dhx -s does not sync deletes

I was using:
juju dhx -r -s

To fix a hook error. The solution was to delete the hooks/config-changed symbolic link and no other edit was needed so I typed exit, and exit.

When dhx synched the files the link still existed in my charm directory.

DHX fails to pick a unit as of juju 2.0 alpha-2

Looks like DHX was just hit by some of the API nuance changes as of 2.0-alpha2 (verifiable in the latest charmbox:dev, bootstrap a model controller, create a new model, deploy something, then attempt to attach via juju dhx )

ubuntu@dev:~$ juju dhx -r redmine/0
Traceback (most recent call last):
  File "/home/ubuntu/.juju-plugins/juju-dhx", line 328, in <module>
    unit_name, unit = choose_unit(args, opts)
  File "/home/ubuntu/.juju-plugins/juju-dhx", line 296, in choose_unit
    status = get_env(opts).status()
  File "/home/ubuntu/.juju-plugins/juju-dhx", line 182, in get_env
    get_env._env = jujuclient.Environment.connect(opts.env)
  File "/usr/local/lib/python2.7/dist-packages/jujuclient.py", line 534, in connect
    return Connector().run(cls, env_name)
  File "/usr/local/lib/python2.7/dist-packages/jujuclient.py", line 132, in run
    jhome, data = self.parse_env(env_name)
  File "/usr/local/lib/python2.7/dist-packages/jujuclient.py", line 224, in parse_env
    raise EnvironmentNotBootstrapped(env_name)
jujuclient.EnvironmentNotBootstrapped: Environment  is not bootstrapped

Can juju dhx support -r and -s on join?

I started juju dhx on a system and realized that I didn't set the sync or retry flag. Not knowing how dhx works very well I disconnected and wanted to rejoin with the -r -s flags set. I was able to rejoin using the ip address only but it did not look like the sync and retry flags were honored.

I now realize an "exit" might have been the better way to disconnect and start a new session.

debug-hooks-ext object 'Environment' has no attribute 'connect'

When I run juju dhx I get the following error, environment was set-up created by juju-quickstart

juju dhx -r openam/0

Traceback (most recent call last):
  File "/home/user/juju/plugins/juju-dhx", line 289, in <module>
    unit_name, unit = choose_unit(args, opts)
  File "/home/user/juju/plugins/juju-dhx", line 255, in choose_unit
    status = get_env(opts).status()
  File "/home/user/juju/plugins/juju-dhx", line 156, in get_env
    get_env._env = jujuclient.Environment.connect(opts.env)
AttributeError: type object 'Environment' has no attribute 'connect'
ERROR subprocess encountered error code 1

juju dhx should support rejoin by unit name

I disconnected from a running dhx session and had trouble rejoining.

juju dhx -r -s -j kubernetes-master/0
ssh: Could not resolve hostname kubernetes-master/0: Name or service not known

A work around was to use the public ip address of the unit, which dhx could get if it needed.

Please consider making this improvement for the -j flag to lookup the unit ip address

juju list does not work with 2.0

I am unable to run the list plugin with 2.0-beta3-xenial-amd64

$ juju list
error: flag provided but not defined: -l

We should fix this if possible.

We need a `juju pastebinit`

When doing something a bit more complex that a simple deployment sometimes it can be difficult to get debugging information from the cloud to the charm developer.

We need a juju pastebinit that will grab all the logs from a failed deployment and put them somewhere for people to debug without the user having to juju debug-log into units or manually juju ssh into things to find the right logs, etc.

Ideally it wouldn't be tied to an online service, perhaps an option to export to a tarball so that things can be captured in offline situations (think orange boxes).

juju dhx does not work when I have no configuration file

I am trying to use the juju-dhx plugin and I encountered a reproducable error. When I have no configuration file the juju dhx command returns the error:

error: no ssh key id specified
ERROR subprocess encountered error code 2

Adding a configuration file resolves this problem. Please handle the case where no configuration file exists.

juju sync-watch throws stacktrace consistently when working with subordinate units

charles@xps13:~/projects/work/charms/trusty/flannel$ juju sync-watch flannel/1
Watching ....
Updating flannel/1
Traceback (most recent call last):
File "/home/charles/.juju-plugins/juju-sync-watch", line 190, in
changes = watch(opts.unit, opts.charm_dir, opts.retry, opts.quiet)
File "/home/charles/.juju-plugins/juju-sync-watch", line 115, in watch
handler.dispatch_update()
File "/home/charles/.juju-plugins/juju-sync-watch", line 98, in dispatch_update
if retry and unit_in_error(unit_name):
File "/home/charles/.juju-plugins/juju-sync-watch", line 132, in unit_in_error
unit = env.status()['Services'][service_name]['Units'][unit_name]
TypeError: 'NoneType' object has no attribute 'getitem'
ERROR subprocess encountered error code 1

"Feature request" - xml->config.yaml tool

Many big data applications have their configuration files defined in large XML files. Some of these configuration files include many configuration elements. As a charm developer, I would like to be able save development time and reduce errors by using xml to config.yaml converter plugin..

Support `juju help plugins`

Tim has a way to have juju help plugins work, but I think we need to support it explicitly. Type juju help plugins in ~/.juju-plugins to see the error.

juju-dhx does not support attaching to subordinate units

It appears that dhx doesn't support attaching to Subordinates of a service. This I imagine has to do with the lack of a machine sub to the output in juju status.

As a snippet from cory:

it's not listing the subordinates because it can only customize machines.

Plugin needed: `juju pause`

We should make a plugin that allows us to "pause" a deployment by stopping the containers until the user needs them again:

From IRC:

<mhall119> jcastro: is there a way to "shutdown" a juju environment so that I can reclaim memory from these LXC containers I've got running?
<mhall119> but in a way that lets me restart them without bootstrapping and re-deploying?
<jcastro> I believe you can stop the LXC containers
 But sec, I dunno if that works
<marcoceppi> mhall119: you cah just do `sudo lxc-ls --fancy`
 then `sudo lxc-stop -n <conatiner name>`
 when  you're ready, just start each container up again
 they'll reregister, etc
<marcoceppi> jcastro: we should just build a `juju-local` plugin
<jcastro> marcoceppi, oh man, that'd be a nice plugin

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.