open-port: command not found

Akshat Jiwan Sharma akshatjiwan at
Fri Oct 27 09:58:19 UTC 2017

Thanks Marco and Andrew for the great discussion. I admit that I was a bit
confused while running the `open-port` command.

>"Different machines will run different applications"

This is exactly what confused me. I'm actually running two applications on
a single machine (wordpress and mysql). So when I wanted to open the port
for that machine it was with the understanding  that it would in turn make
it available to any service running on that machine. Where as the open-port
command understood the context in terms of units or applications as Andrew
pointed out.

Besides Marco's suggestion if we could update the docs to indicate what
commands are run in what context that would be really helpful. For example
if you look at nginx's documentation
taking a random directive like server_tokens you can see that command can
run in http, server and location blocks.

> Syntax: *server_tokens* on | off | build | *string*;

server_tokens on;

Context: http, server, location

Would it make sense to do something like that in juju's documentation as


On Thu, Oct 26, 2017 at 3:59 PM, Marco Ceppi <marco.ceppi at>

> I think the use case is pretty apparent from the start of this thread,
> it's opaque to a user that --all does not result in the same execution
> environment as --unit or --application. It seems --all should be
> disambiguated to --all-machines and possibly an --all-units feature. I
> could see wanting to collect information from hook tools of all units in a
> deploy, network-get for example, or other commands.
> Marco
> On Mon, Oct 23, 2017 at 11:20 AM Andrew Wilkins <
> andrew.wilkins at> wrote:
>> On Mon, Oct 23, 2017 at 5:12 PM Marco Ceppi <marco.ceppi at>
>> wrote:
>>> On Mon, Oct 23, 2017, 03:59 Andrew Wilkins <andrew.wilkins at>
>>> wrote:
>>>> On Mon, Oct 23, 2017 at 4:20 AM Akshat Jiwan Sharma <
>>>> akshatjiwan at> wrote:
>>>>> HI,
>>>>> I'm trying to manually expose a port on a juju machine. According to this
>>>>> answer
>>>>> <>
>>>>> I should be able to do something like this:-
>>>>>  juju run  "open-port 443" --all
>>>>> However when I type this in my shell it throws an error
>>>>> open-port: command not found
>>>> The different between the command you're running, and the one on
>>>> AskUbuntu, is that you're not passing --unit. When you pass --unit, it runs
>>>> the command in the context of a unit on the machine. You must be running in
>>>> the context of a unit to use "hook tools", such as open-port.
>>> It seems weird that `juju run` behaves differently when using --unit and
>>> --all, is there a particular reason for that? I wouldn't expect the above
>>> command to fail.
>> `juju run` supports running commands in either a machine or unit context.
>> Only if you run within a unit context do you get access to hook tools.
>> Hooks require a unit context.
>> "--all" means "all machines", so the command runs in a machine context,
>> for each machine. You could have multiple units on a machine, so we can't
>> automatically choose a unit. Even if we could, what would be the use case
>> for doing that? Different machines will run different applications, which
>> will each have their own firewall requirements.
>> Cheers,
>> Andrew
> --
> Juju mailing list
> Juju at
> Modify settings or unsubscribe at:
> mailman/listinfo/juju
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the Juju mailing list