additional catering towards the application developer

Matthew Dirba Matthew.Dirba at arm.com
Fri Dec 11 05:02:46 UTC 2015


Merlin,

    Adding a wrapper around juju action may have been the first juju
related code that I wrote.

function jujuaction {
    time=$1
    shift
    echo juju action do $@
    tmp=`juju action do "$@" |cut -f2 -d:`
    printf "${tmp} "
    while true; do
        sleep $time
        juju action status $tmp |grep -E "status: (pending|running)"
>/dev/null || break
        printf "."
    done
    echo ""
    juju action fetch $tmp
}


  Looking at the help for juju I would ask/prefer that waiting for an
action or parsing a result would be done with new commands sent to juju
action.

usage: juju action [options] <command> ...
purpose: execute, manage, monitor, and retrieve results of actions

options:
--description  (= false)

-h, --help  (= false)
    show help on a command or other topic

"juju action" executes and manages actions on units; it queues up new
actions,
monitors the status of running actions, and retrieves the results of
completed
actions.

commands:
    defined - show actions defined for a service
    do      - queue an action for execution
    fetch   - show results of an action by ID
    help    - show help on a command or other topic
    status  - show results of all actions filtered by optional ID prefix
wait - run an action and return all of the results
parse - run an action and return the results matching a result string or
dict

Example Usage:
juju action wait <unit> <params>
juju action parse <unit> <params> result=Œavg.latency'







Regards,
Matt Dirba
512.779.4696





>
>Message: 6
>Date: Wed, 9 Dec 2015 17:13:09 -0500
>From: Adam Stokes <adam.stokes at canonical.com>
>To: Merlijn Sebrechts <merlijn.sebrechts at gmail.com>
>Cc: juju <juju at lists.ubuntu.com>
>Subject: Re: additional catering towards the application developer
>Message-ID:
><CAKorV6wUZJzh=0nvUEsmhDT9OKWTUA2fw_uKV_b11fW_aTM2Gw at mail.gmail.com>
>Content-Type: text/plain; charset="utf-8"
>
>Also there seems to be a couple of bugs relevant to this discussion:
>
>https://bugs.launchpad.net/juju-core/+bug/1445066
>https://bugs.launchpad.net/juju-core/+bug/1445078
>
>On Wed, Dec 9, 2015 at 5:09 PM, Adam Stokes <adam.stokes at canonical.com>
>wrote:
>
>> I agree, having the ability to run actions synchronously and wait for a
>> result  would be a huge step in allowing charm authors to provide
>>actions
>> that can be used during the development of your application _before_ you
>> reach the stage of charming that app.
>>
>> Casey, made a suggestion of possibly making the actions more relevant to
>> the type of task it's running (background vs run-and-wait). For
>>example, to
>> launch an action in the background you could do `juju action launch
>>(begin,
>> start)` and to run an action immediately and wait for the result would
>>be
>> `juju action do` or even drop the word `action` and have it be `juju
>> launch` and `juju do`. Semantics aside though I think this would be an
>> excellent addition and first step for getting application developers
>> interested in bringing their application into the Juju ecosystem.
>>
>> On Wed, Dec 9, 2015 at 4:48 PM, Merlijn Sebrechts <
>> merlijn.sebrechts at gmail.com> wrote:
>>
>>> I've been thinking about the actions as well. 99% of the actions
>>>use-case
>>> is: Run the action, wait for it to finish and show the result. Most of
>>>the
>>> actions are things like 'restart', 'show-something',...
>>>
>>> I think waiting for the action to finish and show the result should be
>>> put in as a flag, with the possibility to become default in Juju2.
>>>
>>> - Juju 1: Add flag --wait
>>> - Juju 2: Make --wait default and add flag --no-wait
>>>
>>>
>>> What do you guys think? Is this what you had in mind, Adam?
>>>
>>> 2015-12-09 18:28 GMT+01:00 Adam Stokes <adam.stokes at canonical.com>:
>>>
>>>> I wanted to write this to get a discussion going around how we can
>>>>better
>>>> support application developers. This is something I've been thinking
>>>> about
>>>> for awhile and was further convinced to write this email after seeing
>>>> posts
>>>> like:
>>>>
>>>>http://askubuntu.com/questions/635758/is-juju-a-suitable-tool-for-devel
>>>>opment-as-well-as-deployment
>>>>
>>>> The scenario:
>>>>
>>>> In its simplest form, I am writing a web application that needs a
>>>> database. I
>>>> would like to quickly startup a postgresql server and grab it's
>>>> connection
>>>> information.
>>>>
>>>> How's its done with docker:
>>>> $ docker pull k0st/alpine-postgres
>>>> $ docker run --name myapp -e POSTGRES_USER=user -e
>>>> POSTGRES_PASSWORD=password -e POSTGRES_DB=testdb k0st/alpine-postgres
>>>> $ docker inspect --format '{{ .NetworkSettings.IPAddress }}' myapp
>>>> 172.16.0.5
>>>>
>>>> From here you can build your connection string:
>>>> postgresql://user:password@172.16.0.5:5432/testdb
>>>>
>>>> And now how we could possibly accomplish this with Juju today:
>>>>
>>>> 1. Using Juju actions:
>>>>
>>>> $ juju deploy postgresql
>>>> $ juju action do postgresql/0 createdb username=user password=pass
>>>> database=testdb
>>>> Action queued with id 32432-432-432-432-432-432
>>>> $ juju action fetch 32432-432-432-432-432-432
>>>>
>>>> .. Parse the results
>>>>
>>>> message: "" # No error message.
>>>> results:
>>>>   result-map:
>>>>     connection_string: postgresql://user:pass@
>>>> <unit-public-address>:5432/testdb
>>>>     message: Hello world!
>>>>   outcome: success
>>>> status: completed
>>>>
>>>> 2. Adding support in the charm hook (config-changed)
>>>>
>>>> $ juju deploy postgresql
>>>> $ juju set postgresql "createdb=user:pass:dbname"
>>>>
>>>> .. config-changed
>>>>
>>>> status-set "active", "db created:
>>>> postgresql://user:pass@unit-public-address:5432/dbname"
>>>>
>>>> $ juju status postgresql
>>>>
>>>> Look for the status message in the output.
>>>>
>>>> As you can tell between docker and juju we're still looking at 3
>>>> commands for
>>>> just standing a database up, creating the db, and getting its
>>>>connection
>>>> details.
>>>>
>>>> It would be really nice if I could just do:
>>>>
>>>> $ juju deploy postgresql
>>>> $ juju postgresql create-db --username=user --password=pass
>>>> --database=mydb
>>>>
>>>> # Default to json output for our application to consume and make use
>>>>of
>>>> {"error": "", "result": "postgresql://user:pass@unit-public-address
>>>> :5432/mydb"}
>>>>
>>>> Even an action would still be ok if the action would print the results
>>>> to stdout
>>>> $ juju action do postgresql/0 create-db username=user password=pass
>>>> database=mydb
>>>> {"error": "", "result": "postgresql://user:pass@unit-public-address
>>>> :5432/mydb"}
>>>>
>>>> For me, personally, I don't want to use docker or vagrant or any other
>>>> tool as
>>>> I feel Juju is fully capable of catering to the application developer.
>>>>
>>>> Thoughts?
>>>>
>>>> --
>>>> Juju mailing list
>>>> Juju at lists.ubuntu.com
>>>> Modify settings or unsubscribe at:
>>>> https://lists.ubuntu.com/mailman/listinfo/juju
>>>>
>>>>
>>>
>>

IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.




More information about the Juju mailing list