2 Copyright 2020 Canonical Ltd.
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
8 http://www.apache.org/licenses/LICENSE-2.0
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
17 # OSM Charms and interfaces
19 **Description**: This document describes the high-level view of the OSM Charms and interfaces. An important note is that these charms Kubernetes Charms, so they must be deployed on top of a Kubernetes Cloud using Juju.
23 In the current directory, there is one folder "interfaces" that has all the interfaces of the OSM components, which are basically two: osm-nbi, and osm-ro.
25 Additionally, we can see six folders that contain each OSM core components: lcm-k8s, mon-k8s, nbi-k8s, pol-k8s, ro-k8s, and ui-k8s.
27 Then, we can see a folder "bundle" which has the templates for the OSM bundles in single instance and HA.
29 The "layers" folder include one common layer for all the osm charms (osm-common)
52 All the charms have a very similar structure. This subsection explains the purpose of each file inside the charms, as well as basic steps to get started.
54 The folder structure for each charm looks like this:
64 │ └── spec_template.yaml
73 - **config.yaml**: YAML file that include all the configurable options for the charm.
74 - **icon.svg**: SVG icon. This is the icon that will appear in the Charm Store.
75 - **layer.yaml**: YAML file with the layers that the charm needs. All the OSM Charms need at least the following layers: caas-base, status, leadership, and osm-common. If charms provide or require interfaces, which all of them do, those interfaces should be specified in this file too.
76 - **metadata.yaml**: YAML file that describe the top level information of the charm: name, description, series, interfaces that provide/require, needed storage, and deployment type.
77 - **reactive/\<charm>.py**: Python file that implements the actual logic to the charm.
78 - **reactive/spec_template.yaml**: Pod spec template to be used by the pods.
79 - **README.md**: This file describes how to build the charm, how to prepare the environment to test it with Microk8s.
80 - **.gitignore**: Typical Git Ignore file, to avoid pushing unwanted files to upstream.
81 - **.yamllint.yaml**: YAML file to specify the files to exclude from the yamllint test that tox.ini does.
82 - **tox.ini**: Includes basic functions to build the charms, and check the linting.
86 Each interface needs at least three files:
88 - **interface.yaml:** Metadata of the interface: name, maintainer, and summary.
89 - **provides.py:** Code for the charm that provides the interface.
90 - **requires.py:** Code for the charm that requires the interface.
92 Additionally, there are also files for copyright and a README that explains how to use the interface.
99 sudo apt install tox -y
102 ## Check the syntax of the charms
108 ## Build all the charms
117 # Generate bundle from built charms
118 python3 generate_bundle.py --local --destination osm.yaml
120 python3 generate_bundle.py --help
126 sudo snap install juju --classic
127 juju bootstrap localhost osm-lxd
132 > NOTE: This will be removed once the installer is merged.
135 sudo snap install osmclient
136 sudo snap alias osmclient.osm osm
137 sudo snap connect osmclient:juju-client-observe
138 sudo snap connect osmclient:ssh-public-keys
139 sudo snap connect osmclient:network-control
140 osmclient.overlay # Execute the commands printed by this command to enable native charms
143 ## Bootstrap Juju controller in Microk8s
146 sudo snap install microk8s --classic
147 sudo usermod -a -G microk8s ubuntu
148 sudo chown -f -R ubuntu ~/.kube
150 microk8s.status --wait-ready
151 microk8s.enable storage dns # (metallb) is optional
152 juju bootstrap microk8s osm-k8s
155 ## Deploy OSM with charms
159 juju deploy ./osm.yaml --overlay vca-overlay.yaml
162 ## Wait until Charms are deployed
165 watch -c juju status --color # Wait until every application is in active state
166 export OSM_HOSTNAME=<ip-nbi>