I ended up writing a pytohn script to condition bundle file which
populates charm with its absolute path. Paste here hope it will help
someone running into this:
import os, yaml
def check_charm_path_in_bundle(bundle_yml, dist=None):
"""Parse bundle file and replace charm path with absolute path.
By default `charm build` will create a subfolder `./dist/trusty`
in the charm folder itself. However, $JUJU_REPOSITORY can set to
an arbitrary path in the system even though it says Juju 2.x
doesn't observe this value anymore
(https://github.com/juju/docs/pull/1980). This is problematic for
bundle, because its charm path must be in form of a file path for
Juju to know charms are **local** (otherwise, it will search charm
store). So the only solution is to use absolute path in bundle.
"""
if not os.path.exists(bundle_yml):
print 'bundle YAML not found'
return False
# get absolute path for dist
if dist:
dist = os.path.abspath(dist)
else:
# if no dist path is given, fall back to $JUJU_REPOSITORY
dist = os.path.abspath(os.environ['JUJU_REPOSITORY'])
# parse bundle file and match with charms in /dist
bundle = yaml.load(open(bundle_yml))
machines = bundle['machines']
for charm, detail in bundle['services'].iteritems():
# Detail['to'] is a list. Each machine can then
# be different OS, eg. 1 is xenial, 2 is trusty.
# Here we are ignoring them, and only pick the first one.
m = detail['to'][0]
series = machines[m]['series']
charm_path = os.path.join(dist, series, charm)
if not os.path.exists(charm_path):
print 'charm %s at %s not found:' % (charm, charm_path)
return False
bundle['services'][charm]['charm'] = charm_path
# write back to bundle file
with open(bundle_yml, 'w') as f:
f.write(yaml.dump(bundle))
On 08/03/2017 08:54 PM, fengxia wrote:
Thanks Dmitrii.
This is... not exactly an ideal in my case. The bundle file is a
static, and charms are built by a CI. So I would rather have a cleaner
way to decouple the two. In other words, CI can have a /dist somewhere
it feels so, and bundle only needs know the charms are local, and
using sth like the OS environment variable (or a Juju config of some
kind?) to link the two.
Another question then, I know $JUJU_REPOSITORY is still used in `charm
build` to indicate where the built charms will be. Reading the note,
does it mean it is not used there either? But in Juju version
2.0.2-xenial-amd64 it still is.
On 08/03/2017 04:40 PM, Dmitrii Shcherbakov wrote:
Hi Feng,
Just use an absolute path:
https://github.com/juju/docs/pull/1980
Best Regards,
Dmitrii Shcherbakov
Field Software Engineer
IRC (freenode): Dmitrii-Sh
On Thu, Aug 3, 2017 at 11:34 PM, fengxia <fx...@lenovo.com
<mailto:fx...@lenovo.com>> wrote:
Hi Juju,
Trying to deploy a bundle which consists of local charms.
$JUJU_REPOSITORY=/home/fengxia/workspace/dist
in this folder, all charms are in "trusty/"
Bundle file is located in /home/fengxia/workspace/project/test.yaml:
services:
# solution
solution:
charm: ./trusty/solution
num_units: 1
But juju deploy tet.yaml yields an error:
ERROR the provided bundle has the following errors:
charm path in application "solution" does not exist:
/home/fengxia/workspace/project/trusty/solution
Looks to me that it ignores the $JUJU_REPOSITORY setting, and
looking for the charm in local directory instead. I know
"./trusty/solution" is pointing it this way.
So question now is, what's the right setting in bundle when
charms are NOT in the same folder as the bundle file?
--
Feng xia
Engineer
Lenovo USA
Phone: 5088011794
fx...@lenovo.com <mailto:fx...@lenovo.com>
Lenovo.com
Twitter | Facebook | Instagram | Blogs | Forums
--
Juju mailing list
Juju@lists.ubuntu.com <mailto:Juju@lists.ubuntu.com>
Modify settings or unsubscribe at:
https://lists.ubuntu.com/mailman/listinfo/juju
<https://lists.ubuntu.com/mailman/listinfo/juju>
--
Feng xia
Engineer
Lenovo USA
Phone: 5088011794
fx...@lenovo.com
Lenovo.com
Twitter | Facebook | Instagram | Blogs | Forums
--
Feng xia
Engineer
Lenovo USA
Phone: 5088011794
fx...@lenovo.com
Lenovo.com
Twitter | Facebook | Instagram | Blogs | Forums
--
Juju mailing list
Juju@lists.ubuntu.com
Modify settings or unsubscribe at:
https://lists.ubuntu.com/mailman/listinfo/juju