Giter Site home page Giter Site logo

haofrank / lab-openshift Goto Github PK

View Code? Open in Web Editor NEW

This project forked from nyu-devops/lab-openshift

0.0 0.0 0.0 147 KB

Code to be used for the OpenShift lab

License: Apache License 2.0

Shell 5.49% JavaScript 9.16% Python 70.44% Makefile 6.06% HTML 6.40% Dockerfile 2.37% Procfile 0.08%

lab-openshift's Introduction

Lab OpenShift

Build Status codecov License made-with-python Open in Remote - Containers

NYU DevOps lab on Lab OpenShift

Introduction

This lab introduces Red Hat OpenShift as a Platform As A Service (PaaS) solution to cloud computing. It also demonstrates how to create a simple RESTful service using Python Flask and PostgreSQL. The resource model is persistence using SQLAlchemy to keep the application simple. It's purpose is to show the correct API calls and return codes that should be used for a REST API.

Note: The base service code is contained in routes.py while the business logic for manipulating Pets is in the models.py file. This follows the popular Model View Controller (MVC) separation of duities by keeping the model separate from the controller. As such, we have two test suites: one for the model (test_models.py) and one for the service itself (test_routes.py)

Prerequisite Software Installation

This lab uses Docker and Visual Studio Code with the Remote Containers extension to provide a consistent repeatable disposable development environment for all of the labs in this course.

You will need the following software installed:

All of these can be installed manually by clicking on the links above or you can use a package manager like Homebrew on Mac of Chocolatey on Windows.

Alternately, you can use Vagrant and VirtualBox to create a consistent development environment in a virtual machine (VM).

You can read more about creating these environments in my article: Creating Reproducable Development Environments

Bring up the development environment

To bring up the development environment you should clone this repo, change into the repo directory:

git clone https://github.com/nyu-devops/lab-openshift.git
cd lab-openshift

Depending on which development environment you created, pick from the following:

Start developing with Visual Studio Code and Docker

Open Visual Studio Code using the code . command. VS Code will prompt you to reopen in a container and you should say yes. This will take a while as it builds the Docker image and creates a container from it to develop in.

code .

Note that there is a period . after the code command. This tells Visual Studio Code to open the editor and load the current folder of files.

Once the environment is loaded you should be placed at a bash prompt in the /app folder inside of the development container. This folder is mounted to the current working directory of your repository on your computer. This means that any file you edit while inside of the /app folder in the container is actually being edited on your computer. You can then commit your changes to git from either inside or outside of the container.

Using Vagrant and VirtualBox

Bring up the virtual machine using Vagrant.

vagrant up
vagrant ssh
cd /vagrant

This will place you in the virtual machine in the /vagrant folder which has been shared with your computer so that your source files can be edited outside of the VM and run inside of the VM.

Running the tests

As developers we always want to run the tests before we change any code. That way we know if we broke the code or if someone before us did. Always run the test cases first!

Run the tests using pytest

pytest

Nose is configured via the included setup.cfg file to automatically include the flags --pspec so that the R-Spec red-green-refactor is meaningful. If you are in a command shell that supports colors, passing tests will be green while failing tests will be red.

It also uses the flag --cov=service so that configured to automatically run the coverage tool and you should see a percentage-of-coverage report at the end of your tests. If you want to see what lines of code were not tested use:

coverage report -m

This is particularly useful because it reports the line numbers for the code that have not been covered so you know which lines you want to target with new test cases to get higher code coverage.

You can also manually run pytest with coverage (but setup.cfg does this already)

pytest --pspec --cov=service --cov-fail-under=95 --disable-warnings

Try and get as close to 100% coverage as you can.

It's also a good idea to make sure that your Python code follows the PEP8 standard. Both flake8 and pylint have been included in the requirements.txt file so that you can check if your code is compliant like this:

flake8 . --count --max-complexity=10 --max-line-length=127 --statistics
pylint service tests --max-line-length=127

Visual Studio Code is configured to use pylint while you are editing. This catches a lot of errors while you code that would normally be caught at runtime. It's a good idea to always code with pylint active.

Running the service

The project uses honcho which gets it's commands from the Procfile. To start the service simply use:

honcho start

You should be able to reach the service at: http://localhost:8000. The port that is used is controlled by an environment variable defined in the .flaskenv file which Flask uses to load it's configuration from the environment by default.

Shutdown development environment

If you are using Visual Studio Code with Docker, simply existing Visual Studio Code will stop the docker containers. They will start up again the next time you need to develop as long as you don't manually delete them.

If you are using Vagrant and VirtualBox, when you are done, you can exit and shut down the vm with:

exit
vagrant halt

If the VM is no longer needed you can remove it with:

vagrant destroy

What's featured in the project?

* service/routes.py -- the main Service routes using Python Flask
* service/models.py -- the data model using SQLAlchemy
* tests/test_routes.py -- test cases against the Pet service
* tests/test_models.py -- test cases against the Pet model

License

Copyright (c) 2016-2023 John Rofrano. All rights reserved.

Licensed under the Apache License. See LICENSE

This repo is part of the NYU masters class: CSCI-GA.2820-001 DevOps and Agile Methodologies conceived, created and taught by John Rofrano

lab-openshift's People

Contributors

rofrano avatar

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.