<div dir="ltr">Good stuff, well done team!</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jul 3, 2014 at 12:11 PM, Curtis Hovey-Canonical <span dir="ltr"><<a href="mailto:curtis@canonical.com" target="_blank">curtis@canonical.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">juju-core 1.20.0<br>
<br>
A new stable release of Juju, juju-core 1.20.0, is now available.<br>
<br>
<br>
Getting Juju<br>
<br>
juju-core 1.20.0 is available for utopic and backported to earlier<br>
series in the following PPA:<br>
<br>
    <a href="https://launchpad.net/~juju/+archive/stable" target="_blank">https://launchpad.net/~juju/+archive/stable</a><br>
<br>
<br>
New and Notable<br>
<br>
* High Availability<br>
<br>
* Availability Zone Placement<br>
<br>
* Azure Availability Sets<br>
<br>
* Juju debug-log Command Supports Filtering and Works with LXC<br>
<br>
* Constraints Support instance-type<br>
<br>
* The lxc-use-clone Option Makes LXC Faster for Non-Local Providers<br>
<br>
* Support for Multiple NICs with the Same MAC<br>
<br>
* MaaS Network Constraints and Deploy Argument<br>
<br>
* MAAS Provider Supports Placement and add-machine<br>
<br>
* Server-Side API Versioning<br>
<br>
<br>
Resolved issues<br>
<br>
* Juju client is not using the floating ip to connect to the<br>
  state server<br>
  Lp 1308767<br>
<br>
* Juju help promotes the 'wrong' versions of commands<br>
  Lp 1299120<br>
<br>
* Juju backup command fails against trusty bootstrap node<br>
  Lp 1305780<br>
<br>
* The root-disk constraint is broken on ec2<br>
  Lp 1324729<br>
<br>
* Bootstrapping juju from within a juju deployed unit fails<br>
  Lp 1285256<br>
<br>
* Images are not found if endpoint and region are inherited from<br>
  the top level in simplestreams metadata<br>
  Lp 1329805<br>
<br>
* Missing @ syntax for reading config setting from file content<br>
  Lp 1216967<br>
<br>
* Deploy --config assumes relative path if it starts with a tilde (~)<br>
  Lp 1271819<br>
<br>
* local charm deployment fails with symlinks<br>
  Lp 1330919<br>
<br>
* Git usage can trigger disk space/memory issues for charms with blobs<br>
  Lp 1232304<br>
<br>
* Juju upgrade-charm fails because of git<br>
  Lp 1297559<br>
<br>
* .pyc files caused upgrade-charm to fail with merge conflicts<br>
  Lp 1191028<br>
<br>
* Juju debug-hooks should display a start message<br>
  Lp 1270856<br>
<br>
* Can't determine which relation is in error from status<br>
  Lp 1194481<br>
<br>
* Dying units departure is reported late<br>
  Lp 1192433<br>
<br>
* Juju upgrade-juju needs a dry run mode<br>
  Lp 1272544<br>
<br>
* Restarting API server with lots of agents gets hung<br>
  Lp 1290843<br>
<br>
* Juju destroy-environment >=256 nodes fails<br>
  Lp 1316272<br>
<br>
* Azure destroy-environment does not complete<br>
  Lp 1324910<br>
<br>
* Azure bootstrap dies with xml schema validation error<br>
  Lp 1259947<br>
<br>
* Azure provider stat output does not show machine hardware info<br>
  Lp 1215177<br>
<br>
* Bootstrapping azure causes memory to fill<br>
  Lp 1250007<br>
<br>
* Juju destroy-environment on openstack should remove sec groups<br>
  Lp 1227574<br>
<br>
* Floating IPs are not recycled in OpenStack Havana<br>
  Lp 1247500<br>
<br>
* LXC cloning should be default behaviour<br>
  Lp 1318485<br>
<br>
* Nasty worrying output using local provider<br>
  Lp 1304132<br>
<br>
* Intermittent error destroying local provider environments<br>
  Lp 1307290<br>
<br>
* Default bootstrap timeout is too low for MAAS environments<br>
  Lp 1314665<br>
<br>
* MAAS provider cannot provision named instance<br>
  Lp 1237709<br>
<br>
* Manual provisioning requires target hostname to be directly resolvable<br>
  Lp 1300264<br>
<br>
* Manual provider specify bash as shell for ubuntu user<br>
  Lp 1303195<br>
<br>
<br>
High Availability<br>
<br>
The juju state-server (bootstrap node) can be placed into high<br>
availability mode. Juju will automatically recover when one or more the<br>
state-servers fail. You can use the 'ensure-availability' command to<br>
create the additional state-servers:<br>
<br>
    juju ensure-availability<br>
<br>
The 'ensure-availability' command creates 3 state servers by default,<br>
but you may use the '-n' option to specify a larger number. The number<br>
of state servers must be odd. The command supports the 'series' and<br>
'constraints' options like the 'bootstrap' command. You can learn more<br>
details by running 'juju ensure-availability --help'<br>
<br>
<br>
Availability Zone Placement<br>
<br>
Juju supports explicit placement of machines to availability zones<br>
(AZs), and implicitly spreads units across the available zones.<br>
<br>
When bootstrapping or adding a machine, you can specify the availability<br>
zone explicitly as a placement directive. e.g.<br>
<br>
    juju bootstrap --to zone=us-east-1b<br>
    juju add-machine zone=us-east-1c<br>
<br>
If you don't specify a zone explicitly, Juju will automatically and<br>
uniformly distribute units across the available zones within the region.<br>
Assuming the charm and the charm's service are well written, you can<br>
rest assured that IaaS downtime will not affect your application.<br>
Commands you already use will ensure your services are always available.<br>
e.g.<br>
<br>
    juju deploy -n 10 <service><br>
<br>
When adding machines without an AZ explicitly specified, or when adding<br>
units to a service, the ec2 and openstack providers will now<br>
automatically spread instances across all available AZs in the region.<br>
The spread is based on density of instance "distribution groups".<br>
<br>
State servers compose a distribution group: when running 'juju<br>
ensure-availability', state servers will be spread across AZs. Each<br>
deployed service (e.g. mysql, redis, whatever) composes a separate<br>
distribution group; the AZ spread of one service does not affect the AZ<br>
spread of another service.<br>
<br>
Amazon's EC2 and OpenStack Havana-based clouds and newer are supported.<br>
This includes HP Cloud. Older versions of OpenStack are not supported.<br>
<br>
<br>
Azure availability sets<br>
<br>
Azure environments can be configured to use availability sets. This<br>
feature ensures services are distributed for high availability; as long<br>
as at least two units are deployed, Azure guarantees 99.95% availability<br>
of the service overall. Exposed ports will be automatically load<br>
balanced across all units within the service.<br>
<br>
New Azure environments will have support for availability sets by<br>
default. To revert to the previous behaviour, the<br>
'availability-sets-enabled' option must be set in environments.yaml like<br>
so:<br>
    availability-sets-enabled: false<br>
<br>
Placement is disabled when 'availability-sets-enabled' is true. The<br>
option cannot be disabled after the environment is bootstrapped.<br>
<br>
<br>
Juju debug-log Command Supports Filtering and Works with LXC<br>
<br>
The 'debug-log' command shows the consolidate logs of all juju agents<br>
running on all machines in the environment. The command operates like<br>
'tail -f' to stream the logs to the your terminal. The feature now<br>
support local-provider LXC environments. Several options are available<br>
to select which log lines to display.<br>
<br>
The 'lines' and 'limit' options allow you to select the starting log<br>
line and how many additional lines to display. The default behaviour is<br>
to show the last 10 lines of the log. The 'lines' option selects the<br>
starting line from the end of the log. The 'limit' option restricts the<br>
number of lines to show. For example, you can see just 20 lines from<br>
last 100 lines of the log like this:<br>
<br>
    juju debug-log --lines 100 --limit 20<br>
<br>
There are many ways to filter the juju log to see just the pertinent<br>
information. A juju log line is written in this format:<br>
<br>
    <entity> <timestamp> <log-level> <module>:<line-no> <message><br>
<br>
The 'include' and 'exclude' options select the entity that logged the<br>
message. An entity is a juju machine or unit agent. The entity names are<br>
similar to the names shown by 'juju status'. You can exclude all the log<br>
messages from the bootstrap machine that hosts the state-server like<br>
this:<br>
<br>
    juju debug-log --exclude machine-0<br>
<br>
The options can be used multiple times to select the log messages. This<br>
example selects all the message from a unit and its machine as reported<br>
by status:<br>
<br>
    juju debug-log --include unit-mysql-0 --include machine-1<br>
<br>
The 'level' option restricts messages to the specified log-level or<br>
greater. The levels from lowest to highest are TRACE, DEBUG, INFO,<br>
WARNING, and ERROR. The WARNING and ERROR messages from the log can seen<br>
thusly:<br>
<br>
    juju debug-log --level WARNING<br>
<br>
The 'include-module' and 'exclude-module' are used to select the kind of<br>
message displayed. The module name is dotted. You can specify all or<br>
some of a module name to include or exclude messages from the log. This<br>
example progressively excludes more content from the logs<br>
<br>
    juju debug-log --exclude-module juju.state.apiserver<br>
    juju debug-log --exclude-module juju.state<br>
    juju debug-log --exclude-module juju<br>
<br>
The 'include-module' and 'exclude-module' options can be used multiple<br>
times to select the modules you are interested in. For example, you can<br>
see the juju.cmd and juju.worker messages like this:<br>
<br>
    juju debug-log --include-module juju.cmd --include-module juju.worker<br>
<br>
The 'debug-log' command output can be piped to grep to filter the<br>
message like this:<br>
<br>
    juju debug-log --lines 500 | grep amd64<br>
<br>
You can learn more by running 'juju debug-log --help' and 'juju help<br>
logging'<br>
<br>
<br>
Constraints Support instance-type<br>
<br>
You can specify 'instance-type' with the 'constraints' option to<br>
select a specific image defined by the cloud provider. The<br>
'instance-type' constraint can be used with Azure, EC2, HP Cloud, and<br>
all OpenStack-based clouds. For example, when creating an EC2<br>
environment, you can specify 'm1.small':<br>
<br>
    juju bootstrap --constraints instance-type=m1.small<br>
<br>
Constraints are validated by all providers to ensure values conflicts<br>
and unsupported options are rejected. Previously, juju would reconcile<br>
such problems and select an image, possibly one that didn't meet the<br>
needs of the service.<br>
<br>
<br>
The lxc-use-clone Option Makes LXC Faster for Non-Local Providers<br>
<br>
When 'lxc-use-clone' is set to true, the LXC provisioner will be<br>
configured to use cloning regardless of provider type. This option<br>
cannot be changed once it is set. You can set the option to true in<br>
environments.yaml like this:<br>
<br>
    lxc-use-clone: true<br>
<br>
This speeds up LXC provisioning when using placement with any provider.<br>
For example, deploying mysql to a new LXC container on machine 0 will<br>
start faster:<br>
<br>
    juju deploy --to lxc:0 mysql<br>
<br>
<br>
Support for Multiple NICs with the Same MAC<br>
<br>
Juju now supports multiple physical and virtual network interfaces with<br>
the same MAC address on the same machine. Juju takes care of this<br>
automatically, there is nothing you need to do.<br>
<br>
Caution, network settings are not upgraded from 1.18.x to 1.20.x. If you<br>
used juju 1.18.x to deploy an environment with specified networks, you<br>
must redeploy your environment instead of upgrading to 1.20.0.<br>
<br>
The output of 'juju status'  will include information about networks<br>
when there is more than one. The networks will be presented in this<br>
manner:<br>
    machines: ...<br>
    services: ...<br>
    networks:<br>
      net1:<br>
        provider-id: foo<br>
        cidr: <a href="http://0.1.2.0/24" target="_blank">0.1.2.0/24</a><br>
        vlan-tag: 42<br>
<br>
<br>
MaaS Network Constraints and Deploy Argument<br>
<br>
You can specify which networks to include or exclude as a constraint to<br>
the deploy command. The constraint is used to select a machine to deploy<br>
the service's units too. The value of 'networks' is a comma-delimited<br>
list of juju network names (provided by MaaS). Excluded networks are<br>
prefixed with a "^". For example, this command specify the service<br>
requires the "logging" and "storage" networks and conflicts with the<br>
"db" and "dmz" networks.<br>
<br>
    juju deploy mongodb --constraints networks=logging,storage,^db,^dmz<br>
<br>
The network constraint does not enable the network for the service. It<br>
only defines what machine to pick.<br>
<br>
Use the 'deploy' command's 'networks' option to specify service-specific<br>
network requirements. The 'networks' option takes a comma-delimited list<br>
of juju-specific network names. Juju will enable the networks on the<br>
machines that host service units.<br>
<br>
Juju networking support is still experimental and under development,<br>
currently only supported with the MaaS provider.<br>
<br>
juju deploy mongodb --networks=logging,storage<br>
<br>
The 'exclude-network' option was removed from the deploy command as it<br>
is superseded by the constraint option.<br>
<br>
There are plans to add support for network constraint and argument with<br>
Amazon EC2, Azure, and OpenStack Havana-based clouds like HP Cloud in<br>
the future.<br>
<br>
<br>
MAAS Provider Supports Placement and add-machine<br>
<br>
You can specify which MAAS host to place the juju state-server on with<br>
the 'to' option. To bootstrap on a host named 'fnord', run this:<br>
<br>
    juju bootstrap --to fnord<br>
<br>
The MAAS provider support the add-machine command now. You can provision<br>
an existing host in the MAAS-based Juju environment. For example, you<br>
can  add running machine named fnord like this:<br>
<br>
    juju add-machine fnord<br>
<br>
<br>
Server Side API Versioning<br>
<br>
The Juju API server now has support for a Version field in requests that<br>
are made. For this release, there are no RPC calls that require anything<br>
other than 'version=0' which is the default when no Version is supplied.<br>
This should have limited impact on existing CLI or API users, since it<br>
allows us to maintain exact compatibility with existing requests. New<br>
features and APIs should be exposed under versioned requests.<br>
<br>
For details on the internals (for people writing API clients), see:<br>
    <a href="https://docs.google.com/document/d/1fPOSUu7Dc_23pil1HGNTSpdFRhkMHGxe4o6jBghZZ1A/edit?usp=sharing" target="_blank">https://docs.google.com/document/d/1fPOSUu7Dc_23pil1HGNTSpdFRhkMHGxe4o6jBghZZ1A/edit?usp=sharing</a><br>

<br>
<br>
Finally<br>
<br>
We encourage everyone to subscribe the mailing list at<br>
<a href="mailto:juju-dev@lists.canonical.com">juju-dev@lists.canonical.com</a>, or join us on #juju-dev on freenode.<br>
<br>
PS. Juju just got 20% more amazing.<br>
<span class="HOEnZb"><font color="#888888"><br>
<br>
--<br>
Curtis Hovey<br>
Canonical Cloud Development and Operations<br>
<a href="http://launchpad.net/~sinzui" target="_blank">http://launchpad.net/~sinzui</a><br>
<br>
--<br>
Juju-dev mailing list<br>
<a href="mailto:Juju-dev@lists.ubuntu.com">Juju-dev@lists.ubuntu.com</a><br>
Modify settings or unsubscribe at: <a href="https://lists.ubuntu.com/mailman/listinfo/juju-dev" target="_blank">https://lists.ubuntu.com/mailman/listinfo/juju-dev</a><br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div dir="ltr">Alexis Bruemmer<div>Juju Core Manager, Canonical Ltd.</div><div>(503) 686-5018</div><div><a href="mailto:alexis.bruemmer@canonical.com" target="_blank">alexis.bruemmer@canonical.com</a></div>
</div>
</div>