How to pack a hooks-based charm with CharmcraftΒΆ
Introduced in Charmcraft 1.4
Suppose you have a legacy hooks-only charm, for example, tiny-bash, which you can clone with:
git clone https://github.com/erik78se/tiny-bash
To make it packable by Charmcraft, all you need to do is navigate inside the charm
directory and create a charmcraft.yaml file with the part definition for a
hooks-based charm, as shown below:
type: charm
bases:
- build-on:
- name: "ubuntu"
channel: "20.04"
run-on:
- name: "ubuntu"
channel: "20.04"
parts:
tiny-bash:
plugin: dump
source: .
prime:
- LICENSE
- README.md
- config.yaml
- copyright
- hooks
- icon.svg
- metadata.yaml
After this, you can pack your charm with charmcraft pack, as usual:
charmcraft pack
If successful, the result should look like the following.
user@host:~$ Charms packed:
> tiny-bash_ubuntu-20.04-amd64.charm
The charm file should contain all the files listed in the prime section of the
tiny-bash part and the charm manifest.
unzip -l tiny-bash_ubuntu-20.04-amd64.charm
user@host:~$ Archive: tiny-bash_ubuntu-20.04-amd64.charm
> Length Date Time Name
> --------- ---------- ----- ----
> 423 2021-11-12 19:37 metadata.yaml
> 431 2021-11-12 19:37 README.md
> 12 2021-11-12 19:37 config.yaml
> 3693 2021-11-12 19:37 icon.svg
> 38 2021-11-12 19:37 copyright
> 261 2021-11-12 20:08 manifest.yaml
> 34523 2021-11-12 19:37 LICENSE
> 381 2021-11-12 19:37 hooks/update-status
> 346 2021-11-12 19:37 hooks/start
> 1294 2021-11-12 19:37 hooks/shared-fs-relation-changed
> 563 2021-11-12 19:37 hooks/stop
> 497 2021-11-12 19:37 hooks/leader-elected
> 447 2021-11-12 19:37 hooks/install
> 417 2021-11-12 19:37 hooks/leader-settings-changed
> 811 2021-11-12 19:37 hooks/upgrade-charm
> 625 2021-11-12 19:37 hooks/config-changed
> --------- -------
> 44762 16 files
And you can also deploy your application with juju deploy, as usual:
juju deploy ./tiny-bash_ubuntu-20.04-amd64.charm
user@host:~$ Located local charm "tiny-bash", revision 0
> Deploying "tiny-bash" from local charm "tiny-bash", revision 0
If successful, the result should look as below, i.e., with the application status active.
juju status
user@host:~$ Model Controller Cloud/Region Version SLA Timestamp
> default localhost-localhost localhost/localhost 2.9.12 unsupported 17:23:23-03:00
App Version Status Scale Charm Store Channel Rev OS Message
tiny-bash active 1 tiny-bash local 0 ubuntu update-status ran: 20:22
Unit Workload Agent Machine Public address Ports Message
tiny-bash/0* active idle 0 10.2.17.31 update-status ran: 20:22
Machine State DNS Inst id Series AZ Message
0 started 10.2.17.31 juju-55481c-0 focal Running