Skip to content

Commit

Permalink
[gsoc] Added draft GSOC 2020 idea page
Browse files Browse the repository at this point in the history
  • Loading branch information
nemesifier committed Feb 5, 2020
1 parent 9b8906b commit 1d7e2b3
Showing 1 changed file with 259 additions and 0 deletions.
259 changes: 259 additions & 0 deletions gsoc/ideas-2020.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,259 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>OpenWISP GSoC 2020 Ideas List</title>
<link rel="stylesheet" href="../css/reset.css" type="text/css">
<link rel="stylesheet" href="../css/semantic.min.css" type="text/css">
<link rel="stylesheet" href="../css/style.css" type="text/css" media="screen">
<link rel="icon" type="image/x-icon" href="../images/favicon.png" />
</head>
<body class="content">
<div class="ui sidebar vertical menu">
<a class="item" href="../index.html">Home</a>
<a class="item" href="../whatis.html">Features</a>
<a class="item" href="../history.html">History</a>
<a class="item" href="../support.html">Support</a>
<a class="item" href="http://openwisp.io/docs">Docs</a>
<a class="item" href="../thecode.html">Code</a>
<a class="item" href="../about.html">People</a>
</div>
<div class="pusher">
<div class="ui grid" id="top-bar">
<div class="ui computer only column sixteen wide">
<div class="ui center aligned container secondary menu">
<h1 class="item logo">
<a href="../">OpenWISP</a>
</h1>
<div class="right menu">
<a class="item" href="../index.html">Home</a>
<a class="item" href="../whatis.html">Features</a>
<a class="item" href="../history.html">History</a>
<a class="item" href="http://openwisp.io/docs">Docs</a>
<a class="item" href="../support.html">Support</a>
<a class="item" href="../thecode.html">Code</a>
<a class="item" href="../about.html">People</a>
</div>
</div>
</div>
<div class="ui mobile tablet only sixteen wide column">
<div class="ui menu">
<h1 class="item logo">
<a href="../">OpenWISP</a>
</h1>
<div class="right menu">
<div class="menu-open item">
<i class="sidebar icon"></i>
</div>
</div>
</div>
</div>
</div>
<div class="ui grid" id="main">
<article class="ui container">
<h1>Google Summer of Code 2020 Idea List</h1>
<p>
Do you want to apply with us?
We have a page that describes how to increase your chances of success. Please read it carefully.
</p>
<p class="center">
<a class="ui big inverted red button"
href="http://openwisp.io/docs/developer/google-summer-of-code.html">
Read our GSoC Quick Start!
</a>
</p>

<h2>General suggestions and warnings</h2>

<ul class="ui bulleted link list">
<li>
<strong>some details may be missing from the project idea</strong>:
we expect students to do their own research, propose solutions,
and be ready to deal with uncertainty and solve challenges
that may come up during the project
</li>
<li>
<strong>
code and prototypes are preferred over detailed documents
and unreliable estimates:
</strong>
rather than wasting your time on writing a very long application document,
we suggest you to invest in writing a prototype (which means the code
may be thrown out entirely) which will help you understand the challenges
of the project you want to work on;
your application should refer to the prototype or other github
contributions you made to OpenWISP that show you have the capability
to succeed in the project idea you are applying for
</li>
<li>
<strong>accepted students will have to create github issues and
a kanban board on github for their project</strong>:
the requirements listed in the idea page will have to be converted
into github issues which shall be tracked from a kanban board on github
to allow the openwisp community to easily keep track of the project progress
</li>
</ul>

<h2 id="netengine">netengine: pull monitoring info from network devices</h2>
<p><strong>Languages &amp; technologies used:</strong> python, NetJSON, SNMP, HTTP, OpenWRT, Linux.</p>

<p>
Netengine is a python library that aims to provide a single API
to extract common information from network devices using different protocols
(eg: SNMP, SSH, HTTP) and different firwmares (eg: OpenWRT, AirOS).
</p>

<p>
The library kinda worked but was not brought to production level work
and since OpenWISP 2 is going to have a monitoring system soon, wa want
to rewrite this library to bring its implementation to production level.
</p>

<p>
<strong>NOTE</strong>: backward compatibility does not have to be maintained
we can freely change and improve the API and internal structure of the library
if we think the change is going to improve the quality of the implementation.
</p>

<p>
<strong>WARNING</strong>: to work on this project you need an AirOS device;
OpenWRT/LEDE can be installed in a virtual box VM, but AirOS cannot (at least
not as easily). If you don't have an AirOS device compatible with the latest
version and you do not indend to buy one you cannot work on this project.<br>
If it ever happens that you get accepted but you fail to buy an AirOS device,
you will be failed.
</p>

<p><strong>Measurable outcomes:</strong></p>
<ul class="ui bulleted link list">
<li>
change the output format of the to_json method to
<a href="http://netjson.org/docs/what.html#devicemonitoring">NetJSON DeviceMonitoring</a>
</li>
<li>
mock all external network calls during tests (SSH, HTTP, SNMP)
</li>
<li>
upgrade the OpenWRT backends to make it work well on OpenWRT Chaos Calmer and LEDE 17-01;
if there are incompatibilities, create different backends for each version, ensuring
the shared logic is stored in a common class
</li>
<li>
upgrade the AirOS backends to make it work with the latest 2 version of AirOS;
if there are incompatibilities, create different backends for each version, ensuring
the shared logic is stored in a common class
</li>
<li>achieve 95% test coverage</li>
<li>
improve documentation: at the moment the documentation is really scarce,
we need the documentation to mention all the backends and all the important
features, providing also a few examples of how to use the library
</li>
<li>set up a travis build that performs tests and checks test coverage</li>
</ul>
<p><strong>NOTE</strong>: this is one of those projects that sounds easy but is not.</p>

<h2 id="ansible-plugin-for-netjsonconfig">Ansible plugin for the netjsonconfig library</h2>
<p><strong>Languages &amp; technologies used:</strong> python, ansible.</p>
<p><a class="reference external" href="https://github.com/ansible/ansible">Ansible</a> is an IT automation tool that has been recently
gaining popularity also in the <a class="reference external" href="http://openwrt.org">OpenWRT</a> world.</p>
<p>We want to implement an ansible plugin that integrates <a class="reference external" href="http://netjsonconfig.openwisp.org">netjsonconfig</a>
and allows using its two most interesting features, that is templates and context, in ansible.</p>
<p>It should be possible to define configuration templates, assign them to specific playbooks and define
specific configurations for hosts.</p>
<p>The configuration format format used by netjsonconfig is <a class="reference external" href="http://netjson.org/docs/what.html#deviceconfiguration">NetJSON DeviceConfiguration</a>, but a <em>YAML</em>
conversion of <em>NetJSON</em> would be good as well. Support for both would be preferred.</p>
<p><strong>Measurable outcomes:</strong></p>
<ul class="ui bulleted link list">
<li>Implement an ansible module that integrates netjsonconfig in ansible and allows using
<a class="reference external" href="http://netjson.org/docs/what.html#deviceconfiguration">NetJSON DeviceConfiguration</a> (or its <em>YAML</em> equivalent) to configure OpenWRT devices</li>
<li>Achieve a test coverage higher than 80%</li>
<li>Provide documentation using <a class="reference external" href="http://www.sphinx-doc.org/">python-sphinx</a></li>
</ul>

<h2 id="netjson-ubus">Implement NetJSON output in ubus (OpenWRT/LEDE)</h2>
<p><a href="http://netjson.org">NetJSON</a> is emerging as a common format to exchange configuration and monitoring information
from network devices. Year after year it's becoming easier to achieve interoperability between different software packages
for networking software. Now is time to start implementing NetJSON in a lower level of the stack and the next
natural step in that direction is to implement it in <a href="https://wiki.openwrt.org/doc/techref/ubus">ubus (OpenWrt micro bus architecture)</a>,
which is included by default in <a href="https://openwrt.org/">OpenWRT</a>, the two linux distributions
commonly used with OpenWISP.
</p>
<p>In this project the student will have to develop ubus API extensions that allow retrieving monitoring informatio in NetJSON format
(<a href="http://netjson.org/docs/what.html#devicemonitoring">NetJSON DeviceMonitoring</a>) from ubus.
</p>
<p><strong>Measurable outcomes:</strong></p>
<ul class="ui bulleted link list">
<li>
Implement a way to retrieve <a href="http://netjson.org/docs/what.html#devicemonitoring">DeviceMonitoring</a> output in ubus,
consider reusing part of the code used in <a href="https://github.com/wlanslovenija/nodewatcher-agent#ubus-api">nodewatcher-agent</a>
</li>
<li>Write tests and obtain test coverage of 95%</li>
<li>Write a Makefile to package the software for OpenWRT/LEDE</li>
<li>Document the compilation/install process and the usage of the module in the README</li>
<li>Set up a build on travis that automatically compiles the modules and runs tests</li>
</ul>

<h2 id="pfsense-backend-for-netjsonconfig">PfSense backend for OpenWISP 2</h2>
<p><strong>Languages &amp; technologies used:</strong> python, pfsense, json-schema, netjson.</p>
<p>Implement a <a class="reference external" href="https://pfsense.org/">PfSense</a> backend in <a class="reference external" href="http://netjsonconfig.openwisp.org">netjsonconfig</a>.</p>
<p><strong>Measurable outcomes:</strong></p>
<ul class="ui bulleted link list">
<li>The <code class="docutils literal"><span class="pre">PfSense</span></code> backend must generate a configuration archive compatible with PfSense 2.2.x</li>
<li>The <code class="docutils literal"><span class="pre">PfSense</span></code> backend must generate a configuration archive compatible with PfSense 2.3.x</li>
<li>The <code class="docutils literal"><span class="pre">PfSense</span></code> backend schema must cover at least 75% of the features offered by the PfSense
web interface, with particular attention to interfaces, wireless settings, vlans, firewall rules and VPNs</li>
<li>The general test coverage of the library must be kept higher than 95%</li>
<li>The backend must be to be documented inside the <a class="reference external" href="http://www.sphinx-doc.org/">python-sphinx</a> docs dir
contained in the <em>netjsonconfig</em> repo</li>
</ul>

<h2>More ideas coming soon</h2>

<p>More ideas will be added to this page during February 2020.</p>

<h2>Apply with us</h2>
<p>
Do you want to apply with us?
We have a page that describes how to increase your chances of success. Please read it carefully.
</p>
<p class="center">
<a class="ui big inverted red button"
href="http://openwisp.io/docs/developer/google-summer-of-code.html">
Get started!
</a>
</p>
</article>
</div>
<div class="ui black inverted segment padding-vertical" id="footer">
<div class="ui container stackable two column grid">
<div class="column logo white">
<a href="./">OpenWISP</a>
</div>
<div class="column social">
<a href="https://twitter.com/openwisp" class="ui twitter button">
<i class="twitter icon"></i>
Twitter
</a>
<a href="https://facebook.com/openwisp" class="ui facebook button">
<i class="facebook icon"></i>
Facebook
</a>
<a href="https://www.linkedin.com/groups/4777261" class="ui linkedin button">
<i class="linkedin icon"></i>
Linked In
</a>
<a href="https://github.com/openwisp" class="ui black button">
<i class="github icon"></i> Github
</a>
</div>
<p>&copy; 2008-2020 OpenWISP and individual contributors.</p>
</div>
</div>
</div>
<script src="../js/jquery-1.7.1.min.js"></script>
<script src="../js/semantic.min.js"></script>
<script src="../js/scripts.js"></script>
</body>
</html>

0 comments on commit 1d7e2b3

Please sign in to comment.