I’m trying to use the operator framework with juju 2.8
I need some code example on how I can get the DNS address pictured below because I don’t understand how to achieve this. Apparently, juju has access to that somehow, I just can’t understand how.
I’m trying to use the operator framework with juju 2.8
I need some code example on how I can get the DNS address pictured below because I don’t understand how to achieve this. Apparently, juju has access to that somehow, I just can’t understand how.
I probably can’t help as I’m new to the framework, but it occurs to me that it might help to know why you need the machine’s IP address rather than a unit’s address etc? I bet that would help someone with knowledge of the framework better understand the situation and offer advice.
For example, are you needing this machine IP address while processing a particular event such as start or a relation joined/changed event?
I need it to configure a trusted domain in config. php for nextcloud. It’s required to access the site as admin.
I the start hook.
This!
Thanx to @jamesbeedy
… and some more…
… now I just need to figure out how to do this in “ops”.
Hi Erik,
The first step is to understand why you need the IP address. Juju models not just the machines/applications but also the network(s) connecting the applications. Juju has a concept of spaces - you can read more here: https://juju.is/docs/spaces - which allows an administrator to restrict which segment of the network specific intra-application or inter-application traffic is routed over.
This means to get an IP address, your charm needs to have a relation. The simplest use case, would be for setting up a cluster, so you want traffic between units of the same application. In which case you need two things:
First, you need a peer relation, which can be setup in metadata.yaml:
peers:
application-internal-peer-name:
interface: application-peer-name
Then, from your config-changed or relation-changed event handlers you could access the associated address with this code:
self.model.get_binding("application-internal-peer-name").network.bind_address
The public-address is not yet exposed in the Operator Framework.
The result, is that the public-address is different depending on which cloud you deploy on.
ingress-address is not equal to the public-address.
I placed an issue about this in github: https://github.com/canonical/operator/issues/449