=head1 Writing a hook

We'll start with an example of a F<config-changed> hook and break down the
code piece by piece

  #!/usr/bin/env perl
  use charm;

C<use charm> is the entrypoint to exposing charm routines useful for deploying
the service. This provides facilities such as installing packages, printing logs,
getting relation information, and configuring service level options.

  log "Start of charm authoring for config-changed";

The C<log> facility uses C<juju-log> as the utility for logging what's happening
in your charm.

  my $port = execute(['config-get', 'port']);

C<config-get> routine will pull config options defined in F<config.yaml>.

  # close existing bitlbee port

  log "Opening port for bitlbee";

  ( my $output = qq{BITLBEE_PORT=$port
  BITLBEE_OPTS="-F"
  BITLBEE_DISABLED=0
  BITLBEE_UPGRADE_DONT_RESTART=0
  } );

  path('/etc/default/bitlbee')->spew_utf8($output);

C<path> is exposed from L<Path::Tiny> so anything that applies to that module works
the same here.

  service_control('bitlbee', 'restart');

C<service_control> is another helper for start/stopping services on the system
where the charm is placed.

  execute(['open-port', $port]);

C<open_port> exposes a port accessible publicly, and its opposite C<close_port> will
remove that accessibility.

=cut
