Coder Social home page Coder Social logo

smak1993 / charmed-osm-mariadb-k8s Goto Github PK

View Code? Open in Web Editor NEW
0.0 2.0 1.0 40 KB

(Charmed OSM) MariaDB for Kubernetes written using the Operator Framework

Python 99.15% Makefile 0.85%
charm charms osm charmed-osm canonical juju ubuntu mariadb mariadb-charm charmed-mariadb

charmed-osm-mariadb-k8s's Introduction

Overview

MariaDb Charm for Kubernetes using the Operator Framework.
This charm provides the mysql interface for other charmed-osm charms.

Usage

To use, first pull in dependencies via git submodule:

git submodule init
git submodule update

You must specify key configuration attributes when deploying, or else arbitary defaults will be used. The attributes which should be set are:

- user
- password
- database
- root_password

Example

juju deploy . \
--config user=syed \
--config password=mohammad \
--config database=adnan \
--config root_password=karim

These values may also be in a config.yaml file, eg

$ juju deploy mysql --config config.yaml

Finally, deploy and relate a database:

juju deploy cs:~charmed-osm/keystone-k8s
juju relate mariadb-k8s keystone-k8s

Charm structure:

├── config.yaml
├── hooks
│   └── start -> ../src/charm.py
├── lib
│   ├── ops -> ../mod/operator/ops
├── metadata.yaml
├── mod
│   └── operator
│       ├── LICENSE.txt
│       ├── Makefile
│       ├── ops
│       │   ├── charm.py
│       │   ├── framework.py
│       │   ├── __init__.py
│       │   ├── jujuversion.py
│       │   ├── main.py
│       │   ├── model.py
│       ├── README.md
│       ├── setup.py
│       └── test
│           ├── bin
│           │   ├── relation-ids
│           │   └── relation-list
│           ├── charms
│           │   └── test_main
│           │       ├── config.yaml
│           │       ├── lib
│           │       │   ├── __init__.py
│           │       │   └── ops -> ../../../../ops
│           │       ├── metadata.yaml
│           │       └── src
│           │           └── charm.py
│           ├── __init__.py
│           ├── test_charm.py
│           ├── test_framework.py
│           ├── test_helpers.py
│           ├── test_jujuversion.py
│           ├── test_main.py
│           └── test_model.py
├── src
│   ├── charm.py
│   └── interface_mysql_provides.py
└── templates
    ├── README.md
    ├── spec_template_ha.yaml
    └── spec_template.yaml

Development Guide

Install Test Dependencies

  1. Install pyenv so that you can test with different versions of Python
curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
  1. Append the following to your ~/.bashrc then log out and log back in
export PATH="/home/mark/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
  1. Install development packages
sudo apt install build-essential libssl-dev zlib1g-dev libbz2-dev \
    libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
    xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git
  1. Install Python 3.6.10 and 3.7.7
pyenv install 3.6.10
pyenv install 3.7.7

NOTE: For more available versions, run pyenv install --list

  1. Create a virtualenv for this project
pyenv virtualenv 3.6.10 mariadb-3.6.10

Your newly created virtualenv should now be activated if your prompt change to the following:

(mariadb-3.6.10) ubuntu@dev-18-04-2:~/src/mariadb-operator$

Notice the things in parentheses that corresponds to the virtualenv you created in the previous step. This is thanks to the coordination of pyenv-virtualenv and a .python-version file in the rootdir of this project.

If you cd .. or cd anywhere else the virtualenv will automatically be deactivated. When you cd back into the project dir, the virtualenv will automatically be activated.

  1. Install more development dependencies:
python3 -m pip install --upgrade pip
python3 -m pip install "pip-tools>=5.2.1,<5.3"
pip-sync test-requirements.txt
  1. Subsequent installation of development dependencies
pip-sync test-requirements.txt

Adding A Test Dependency

  1. Add it to test-requirements.in and then compile it:
echo "foo=>1.0.0,<1.1.0" >> test-requirements.in
pip-compile test-requirements.in
  1. Sync the packages installed in your env to the ones declared in the regenerated test-requirements.txt
pip-sync test-requirements.txt
  1. Commit test-requirements.in and test-requirements.txt. Both files should now be updated and the foo package installed in your local machine. Make sure to commit both files to the repo to let your teammates know of the new dependency.
git add test-requirements.*
git commit -m "Add foo to test-requirements.txt"
git push origin

Running All The Tests

  1. Ensure you start with a new terminal session because sometimes the shell won't find tox immediately after installation.

  2. Run:

tox

Viewing the Coverage Report

To view the coverage report, run the tests first and then run:

make coverage-server

This will run a simple web server on port 5000 that will serve the files in the auto-generated htmlcov/ directory. You may leave this server running in a separate session as you run the tests so that you can just switch back to the browser and hit refresh to see the changes to your coverage down to the line of code.

charmed-osm-mariadb-k8s's People

Contributors

relaxdiego avatar smak1993 avatar

Watchers

 avatar  avatar

Forkers

relaxdiego

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.