From 904908bc5ff6d54ca63fc954d7fa018081f90358 Mon Sep 17 00:00:00 2001 From: Roopa Prabhu Date: Tue, 22 Jul 2014 11:15:56 -0700 Subject: [PATCH] Documentation cleanup Ticket: Reviewed By: Testing Done: - these changes are mainly related to api doc generation using sphinx --- LICENSE | 339 +++++++++++++++++++++++++ build.sh | 0 docs/source/apiref.rst | 27 +- docs/source/conf.py | 3 +- docs/source/developmentcorner.rst | 7 +- docs/source/gettingstarted.rst | 15 +- docs/source/images/interfaces.png | Bin 0 -> 28470 bytes docs/source/images/interfaces_all.png | Bin 0 -> 61743 bytes docs/source/intro.rst | 37 +-- {pkg => ifupdown}/__init__.py | 0 {pkg => ifupdown}/exceptions.py | 2 +- {pkg => ifupdown}/graph.py | 14 +- {pkg => ifupdown}/iface.py | 64 +++-- {pkg => ifupdown}/ifupdownbase.py | 2 +- {pkg => ifupdown}/ifupdownmain.py | 2 +- {pkg => ifupdown}/networkinterfaces.py | 23 +- {pkg => ifupdown}/scheduler.py | 23 +- {pkg => ifupdown}/statemanager.py | 2 +- {pkg => ifupdown}/template.py | 9 +- {pkg => ifupdown}/utils.py | 8 +- sbin/ifupdown | 8 +- setup.py | 1 - 22 files changed, 472 insertions(+), 114 deletions(-) create mode 100644 LICENSE mode change 100644 => 100755 build.sh create mode 100644 docs/source/images/interfaces.png create mode 100644 docs/source/images/interfaces_all.png rename {pkg => ifupdown}/__init__.py (100%) rename {pkg => ifupdown}/exceptions.py (83%) rename {pkg => ifupdown}/graph.py (80%) rename {pkg => ifupdown}/iface.py (89%) rename {pkg => ifupdown}/ifupdownbase.py (97%) rename {pkg => ifupdown}/ifupdownmain.py (99%) rename {pkg => ifupdown}/networkinterfaces.py (94%) rename {pkg => ifupdown}/scheduler.py (96%) rename {pkg => ifupdown}/statemanager.py (98%) rename {pkg => ifupdown}/template.py (89%) rename {pkg => ifupdown}/utils.py (80%) diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..22fbe5d --- /dev/null +++ b/LICENSE @@ -0,0 +1,339 @@ +GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {description} + Copyright (C) {year} {fullname} + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + {signature of Ty Coon}, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. \ No newline at end of file diff --git a/build.sh b/build.sh old mode 100644 new mode 100755 diff --git a/docs/source/apiref.rst b/docs/source/apiref.rst index ba8245e..f30dc39 100644 --- a/docs/source/apiref.rst +++ b/docs/source/apiref.rst @@ -2,8 +2,8 @@ Documentation for the Code ************************** -ifupdownmain -- explicit members -================================ +ifupdownmain +============ ifupdownmain is the main ifupdown module. @@ -12,10 +12,8 @@ ifupdownmain is the main ifupdown module. .. autoclass:: ifupdownMain :members: up, down, reload, query -iface -- explicit members -========================= - -iface is the class that represents an ifupdown iface object. +iface +===== .. automodule:: iface @@ -28,8 +26,8 @@ iface is the class that represents an ifupdown iface object. .. autoclass:: ifaceJsonEncoder -scheduler -- explicit members -============================= +scheduler +========= .. automodule:: scheduler @@ -39,16 +37,16 @@ scheduler -- explicit members .. autoclass:: ifaceSchedulerFlags -networkinterfaces -- explicit members -===================================== +networkinterfaces +================= .. automodule:: networkinterfaces .. autoclass:: networkInterfaces :members: load, subscribe -statemanager -- explicit members -================================ +statemanager +============ .. automodule:: statemanager @@ -58,11 +56,10 @@ statemanager -- explicit members .. autoclass:: stateManager :members: read_saved_state, save_state -graph -- explicit members -========================= +graph +===== .. automodule:: graph .. autoclass:: graph :members: topological_sort_graphs_all, generate_dots - diff --git a/docs/source/conf.py b/docs/source/conf.py index 0bff236..19cbdb2 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -16,8 +16,7 @@ import sys, os # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) -sys.path.insert(0, os.path.abspath('/work/monster-03/roopa/cumulus-2.1-ifupdown2/packages/ifupdown2/pkg')) +sys.path.insert(0, os.path.abspath('../../ifupdown')) # -- General configuration ----------------------------------------------------- diff --git a/docs/source/developmentcorner.rst b/docs/source/developmentcorner.rst index 48a4c09..c4ea51b 100644 --- a/docs/source/developmentcorner.rst +++ b/docs/source/developmentcorner.rst @@ -11,8 +11,11 @@ python modules. That includes inet, inet6 and dhcp configurations. for python-ifupdown2 * if you are looking at developing a new module, pls look at writing a addon - module in the python-ifupdown2 documentation + module in the python-ifupdown2-addons documentation Apiref ------ - :doc:`apiref.rst` +.. toctree:: + :maxdepth: 2 + + apiref.rst diff --git a/docs/source/gettingstarted.rst b/docs/source/gettingstarted.rst index 0de5829..16db725 100644 --- a/docs/source/gettingstarted.rst +++ b/docs/source/gettingstarted.rst @@ -3,20 +3,25 @@ Getting Started Prerequisites ------------- -* python-ifupdown2 is current only tested on a debian release wheezy or greater +* python-ifupdown2 is currently only tested on debian wheezy * python-ifupdown2 needs python version 2.6 or greater * build depends on: python-stdeb (for deb builds), python-docutils (for rst2man) -* depends on python-gvgen package for printing interface graphs (this will be made optional soon) +* depends on python-gvgen package for printing interface graphs (this will be made optional in the future) * optional dependency for template engine: python-mako +* python-ifupdown2 needs python-ifupdown2-addons to function correctly Building -------- -git clone -cd ifupdown2 -./build.sh +$git clone ifupdown2 +$cd ifupdown2/ifupdown2 + +$./build.sh Installing ---------- install generated python-ifupdown2-.deb + +$dpkg -i .deb + diff --git a/docs/source/images/interfaces.png b/docs/source/images/interfaces.png new file mode 100644 index 0000000000000000000000000000000000000000..fda6d92a278be5ec9c9736921c09b21df6653619 GIT binary patch literal 28470 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

Z+LNYP>gDN&kzKT2B-3{1YRJZ2i znO8=9d;wRXq|H}+PUb0L7y9y_T{*k8_HuGwkl;D)@oV%HHjh~!F6prHn-9O>t@fSV zK0rcRGHUg3V8|3Q%}ODvUy5*|{B+K?px179QP#p-?iK|(Y#Hl1(sozs?BU@1soi>#TMb&Di zAN!QmEE{pI7-o8|*_M#xhsr>2Z9~zqLH#MlQ;9aqNTEeK^d}7$k8d2NWNP4;(4>(Fu^ECp{{+H@A{hs%HXP0ebsx! z7MA>bCSDK>Q%%5}L~Uy)hM$*g@AK-p-Fl*x^LkIH=P_P-;k26gp|7ID(u|;Q^gS{@ zWtT2NidugZRB`H?IgW0k{rK;w3ZfP90K@^`vR-#Dzgqw0dGs(t<RgP*BrAfhh3_Np%jr?Xwl&c=)ES{4A6FROSoldH8 zIa(hPO4!js1$}Xb`Jk=2WfUP~9=i`woMs?4Zr(;{{>nF|@>UXm@!$sJcx1v!X;O$R z=jasvg;h?IBdq_p#^t&M;e1E9BY+-?bzN399uMLzP_D-eZq`1iX&n$)?-*`78bo<^ zQ>xPJYZG%8+i9RpvE5`;Pnvh~h^U=^dH7N{C^}8z`->9;KMQD(a%RbSinVTW-P?W< zssW4$?>?G>0G+V>-u}epmhOe(e~2lpp+uc@P^~d~QanSq<;=_nGs$Skn6EY&W%Udv zAA#+XW!0L?pcCmV2_-5sOZpYK5mkc5M@XAYqinRx{Jv~AeIPGmbS`W|^Z@$W6+0a_ z!2|w5wC${zFVW$3JH)ETcJzkQkM75}ly#yn*hz%r?~rC}DmZggpC6;g-iF6f3r)G5=sB8tZwc_;<`Iw4Qj)$D1i zXE`8<6mkGV6(Nsi| z=xxk;MPuGk7@BXv?A;zktL-M~DFm^O`-*xjPwIX`+=>Dr@r!Zjh7bWPEpxBu|0>W$JN z6m8z#1$ve4jdS`Q2eD{j4=#K2OgM!~xMZXR zg(?GRZ$Qv;i>3$TJt6ggNu4 zx8FSZ1S#UKNIa+*_fSo#dKGTL)&|-dy|1N1=#(%7tMW6q+jlA9pU*wpqX^Z<-q31l1T=mtMBqI7J z(MhDIkK&;E#;*mOKFU360$age-Sf{WW@X79;%%?n@g&?|;z5-|dP19?F`NqC3M<@% S=>q>TiID< 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 literal 0 HcmV?d00001 diff --git a/docs/source/intro.rst b/docs/source/intro.rst index a08dc86..d81ab95 100644 --- a/docs/source/intro.rst +++ b/docs/source/intro.rst @@ -1,15 +1,3 @@ -Introduction -============ -ifupdown2 is a replacement for the debian network interface -management package ifupdown. It is ifupdown re-written in python. It -maintains the original ifupdown pluggable architecture and extends it further. - -It comes as two packages: - * python-ifupdown2 - * python-ifupdown2-addons - -(Packaging may change in the future) - python-ifupdown2 ---------------- @@ -18,7 +6,7 @@ parsing /etc/network/interfaces file, loading, scheduling, template parsing, state management and interface dependency generation of interfaces. It dynamically loads python modules from /usr/share/ifupdownmodules (provided - by the python-ifupdown2-addons package). To remain compatible with other +by the python-ifupdown2-addons package). To remain compatible with other packages that depend on ifupdown, it also executes scripts under /etc/network/. To make the transition smoother, a python module under /usr/share/ifupdownmodules will override a script by the same name under @@ -30,26 +18,3 @@ adding python modules. ifupdown2 module calls all modules for every interface declared in the /etc/network/interfaces file. - - -python-ifupdown2-addons ------------------------ - -The python-ifupdown2-addons package contains ifupdown2 addon modules. - -addon modules are responsible for applying interface configuration. -The modules are installed under /usr/share/ifupdownmodules. - -Each module can declare its own set of supported attributes. Each module -is passed the iface object (which is a representation of /etc/network/interfaces -iface entry). Each module is also passed the operation to be performed. - -Example modules are /usr/share/ifupdownmodules/address.py, -/usr/share/ifupdownmodules/bridge.py etc - -The order in which these modules are invoked is listed in -/var/lib/ifupdownaddons/addons.conf. There is a ifaddon utility in the works -to better manage the module ordering. - -For details on how to add a module, see the api reference and development -documentation. diff --git a/pkg/__init__.py b/ifupdown/__init__.py similarity index 100% rename from pkg/__init__.py rename to ifupdown/__init__.py diff --git a/pkg/exceptions.py b/ifupdown/exceptions.py similarity index 83% rename from pkg/exceptions.py rename to ifupdown/exceptions.py index 2d4e0b2..f6cc8b7 100644 --- a/pkg/exceptions.py +++ b/ifupdown/exceptions.py @@ -1,6 +1,6 @@ #!/usr/bin/python # -# Copyright 2013. Cumulus Networks, Inc. +# Copyright 2014 Cumulus Networks, Inc. All rights reserved. # Author: Roopa Prabhu, roopa@cumulusnetworks.com # # ifupdown -- diff --git a/pkg/graph.py b/ifupdown/graph.py similarity index 80% rename from pkg/graph.py rename to ifupdown/graph.py index c17fc5b..49b1348 100644 --- a/pkg/graph.py +++ b/ifupdown/graph.py @@ -1,6 +1,6 @@ #!/usr/bin/python # -# Copyright 2013. Cumulus Networks, Inc. +# Copyright 2014 Cumulus Networks, Inc. All rights reserved. # Author: Roopa Prabhu, roopa@cumulusnetworks.com # # graph -- @@ -27,8 +27,10 @@ class graph(): """ runs topological sort on interface list passed as dependency graph Args: - dependency_graphs (dict): dependency graph with dependency lists for interfaces - indegrees_arg (dict): indegrees array for all interfaces + **dependency_graphs** (dict): dependency graph with dependency + lists for interfaces + + **indegrees_arg** (dict): indegrees array for all interfaces """ S = [] Q = deque() @@ -67,8 +69,10 @@ class graph(): """ spits out interface dependency graph in dot format Args: - dependency_graphs (dict): dependency graph with dependency lists for interfaces - indegrees_arg (dict): indegrees array for all interfaces + **dependency_graphs** (dict): dependency graph with dependency + lists for interfaces + + **indegrees_arg** (dict): indegrees array for all interfaces """ gvgraph = GvGen() diff --git a/pkg/iface.py b/ifupdown/iface.py similarity index 89% rename from pkg/iface.py rename to ifupdown/iface.py index 9474967..93d5411 100644 --- a/pkg/iface.py +++ b/ifupdown/iface.py @@ -1,6 +1,6 @@ #!/usr/bin/python # -# Copyright 2013. Cumulus Networks, Inc. +# Copyright 2014 Cumulus Networks, Inc. All rights reserved. # Author: Roopa Prabhu, roopa@cumulusnetworks.com # # iface -- @@ -9,7 +9,7 @@ """ifupdown2 network interface object -It closely resembles the 'iface' object in /etc/network/interfaces +It is modeled based on the 'iface' section in /etc/network/interfaces file. But can be extended to include any other network interface format """ @@ -129,30 +129,46 @@ class ifaceJsonDecoder(): return iface(attrsdict=ifaceattrdict) class iface(): - """ ifupdown2 interface object class + """ ifupdown2 iface object class Attributes: - name Name of the interface - addr_family Address family eg, inet, inet6. Can be None to indicate both address families - addr_method Address method eg, static, manual or None for static - address method - config dictionary of config lines for this interface - state Configuration state of an interface as defined by - ifaceState - status Configuration status of an interface as defined by - ifaceStatus - flags Internal flags used by iface processing - priv_flags private flags owned by module using this class - refcnt reference count, indicating number of interfaces - dependent on this iface - lowerifaces list of interface names lower to this interface or - this interface depends on - upperifaces list of interface names upper to this interface or - the interfaces that depend on this interface - auto True if interface belongs to the auto class - classes List of classes the interface belongs to - env shell environment the interface needs during execution - raw_config raw interface config from file + **name** Name of the interface + + **addr_family** Address family eg, inet, inet6. Can be None to + indicate both address families + + **addr_method** Address method eg, static, manual or None for + static address method + + **config** dictionary of config lines for this interface + + **state** Configuration state of an interface as defined by + ifaceState + + **status** Configuration status of an interface as defined by + ifaceStatus + + **flags** Internal flags used by iface processing + + **priv_flags** private flags owned by module using this class + + **refcnt** reference count, indicating number of interfaces + dependent on this iface + + **lowerifaces** list of interface names lower to this interface or + this interface depends on + + **upperifaces** list of interface names upper to this interface or + the interfaces that depend on this interface + + **auto** True if interface belongs to the auto class + + **classes** List of classes the interface belongs to + + **env** shell environment the interface needs during + execution + + **raw_config** raw interface config from file """ # flag to indicate that the object was created from pickled state diff --git a/pkg/ifupdownbase.py b/ifupdown/ifupdownbase.py similarity index 97% rename from pkg/ifupdownbase.py rename to ifupdown/ifupdownbase.py index 36d8d2e..efccfeb 100644 --- a/pkg/ifupdownbase.py +++ b/ifupdown/ifupdownbase.py @@ -1,6 +1,6 @@ #!/usr/bin/python # -# Copyright 2013. Cumulus Networks, Inc. +# Copyright 2014 Cumulus Networks, Inc. All rights reserved. # Author: Roopa Prabhu, roopa@cumulusnetworks.com # # ifupdownBase -- diff --git a/pkg/ifupdownmain.py b/ifupdown/ifupdownmain.py similarity index 99% rename from pkg/ifupdownmain.py rename to ifupdown/ifupdownmain.py index 25e58ce..2c60bd1 100644 --- a/pkg/ifupdownmain.py +++ b/ifupdown/ifupdownmain.py @@ -1,6 +1,6 @@ #!/usr/bin/python # -# Copyright 2013. Cumulus Networks, Inc. +# Copyright 2014 Cumulus Networks, Inc. All rights reserved. # Author: Roopa Prabhu, roopa@cumulusnetworks.com # # ifupdownMain -- diff --git a/pkg/networkinterfaces.py b/ifupdown/networkinterfaces.py similarity index 94% rename from pkg/networkinterfaces.py rename to ifupdown/networkinterfaces.py index 0333025..46f9053 100644 --- a/pkg/networkinterfaces.py +++ b/ifupdown/networkinterfaces.py @@ -1,6 +1,6 @@ #!/usr/bin/python # -# Copyright 2013. Cumulus Networks, Inc. +# Copyright 2014 Cumulus Networks, Inc. All rights reserved. # Author: Roopa Prabhu, roopa@cumulusnetworks.com # # networkInterfaces -- @@ -33,11 +33,15 @@ class networkInterfaces(): """This member function initializes the networkinterfaces parser object. Kwargs: - interfacesfile (str): path to the interfaces file (default is /etc/network/interfaces) - interfacesfileiobuf (object): interfaces file io stream - interfacesfileformat (str): format of interfaces file (choices are 'native' and 'json'. 'native' being the default) - template_engine (str): template engine name - template_lookuppath (str): template lookup path + **interfacesfile** (str): path to the interfaces file (default is /etc/network/interfaces) + + **interfacesfileiobuf** (object): interfaces file io stream + + **interfacesfileformat** (str): format of interfaces file (choices are 'native' and 'json'. 'native' being the default) + + **template_engine** (str): template engine name + + **template_lookuppath** (str): template lookup path Raises: AttributeError, KeyError """ @@ -89,11 +93,12 @@ class networkInterfaces(): ifaceobj.addr_method = 'static' def subscribe(self, callback_name, callback_func): - """This member function registers callback functions + """This member function registers callback functions. Args: - callback_name (str): callback function name (supported names: 'iface_found', 'validateifaceattr', 'validateifaceobj') - callback_func (function pointer): callback function pointer + **callback_name** (str): callback function name (supported names: 'iface_found', 'validateifaceattr', 'validateifaceobj') + + **callback_func** (function pointer): callback function pointer Warns on error """ diff --git a/pkg/scheduler.py b/ifupdown/scheduler.py similarity index 96% rename from pkg/scheduler.py rename to ifupdown/scheduler.py index dfade6e..7782f12 100644 --- a/pkg/scheduler.py +++ b/ifupdown/scheduler.py @@ -1,6 +1,6 @@ #!/usr/bin/python # -# Copyright 2013. Cumulus Networks, Inc. +# Copyright 2014 Cumulus Networks, Inc. All rights reserved. # Author: Roopa Prabhu, roopa@cumulusnetworks.com # # ifaceScheduler -- @@ -21,6 +21,8 @@ from threading import * from ifupdownbase import * class ifaceSchedulerFlags(): + """ Enumerates scheduler flags """ + INORDER = 0x1 POSTORDER = 0x2 @@ -324,15 +326,20 @@ class ifaceScheduler(): argument. Runs topological sort on interface dependency graph. Args: - ifupdownobj (object): ifupdownMain object - ifacenames (list): list of interface names - ops : list of operations to perform eg ['pre-up', 'up', 'post-up'] - dependency_graph (dict): dependency graph in adjacency list format + **ifupdownobj** (object): ifupdownMain object + + **ifacenames** (list): list of interface names + + **ops** : list of operations to perform eg ['pre-up', 'up', 'post-up'] + + **dependency_graph** (dict): dependency graph in adjacency list format Kwargs: - indegrees (dict): indegree array of the dependency graph - order (int): ifaceSchedulerFlags (POSTORDER, INORDER) - followdependents (bool): follow dependent interfaces if true + **indegrees** (dict): indegree array of the dependency graph + + **order** (int): ifaceSchedulerFlags (POSTORDER, INORDER) + + **followdependents** (bool): follow dependent interfaces if true """ # diff --git a/pkg/statemanager.py b/ifupdown/statemanager.py similarity index 98% rename from pkg/statemanager.py rename to ifupdown/statemanager.py index a5daf1c..83d6e52 100644 --- a/pkg/statemanager.py +++ b/ifupdown/statemanager.py @@ -1,6 +1,6 @@ #!/usr/bin/python # -# Copyright 2013. Cumulus Networks, Inc. +# Copyright 2014 Cumulus Networks, Inc. All rights reserved. # Author: Roopa Prabhu, roopa@cumulusnetworks.com # # stateManager -- diff --git a/pkg/template.py b/ifupdown/template.py similarity index 89% rename from pkg/template.py rename to ifupdown/template.py index faf597c..f1792cc 100644 --- a/pkg/template.py +++ b/ifupdown/template.py @@ -1,11 +1,18 @@ #!/usr/bin/python +# +# Copyright 2014 Cumulus Networks, Inc. All rights reserved. +# Author: Roopa Prabhu, roopa@cumulusnetworks.com +# +# template -- +# helper class to render templates +# import logging import traceback from utils import * class templateEngine(): - """ has template rendering methods """ + """ provides template rendering methods """ def __init__(self, template_engine, template_lookuppath=None): self.logger = logging.getLogger('ifupdown.' + diff --git a/pkg/utils.py b/ifupdown/utils.py similarity index 80% rename from pkg/utils.py rename to ifupdown/utils.py index 74116d3..9dd6910 100644 --- a/pkg/utils.py +++ b/ifupdown/utils.py @@ -1,5 +1,11 @@ #!/usr/bin/python - +# +# Copyright 2014 Cumulus Networks, Inc. All rights reserved. +# Author: Roopa Prabhu, roopa@cumulusnetworks.com +# +# utils -- +# helper class +# import os import fcntl diff --git a/sbin/ifupdown b/sbin/ifupdown index 91e2525..6ead2ed 100755 --- a/sbin/ifupdown +++ b/sbin/ifupdown @@ -1,5 +1,11 @@ #!/usr/bin/python - +# +# Copyright 2014 Cumulus Networks, Inc. All rights reserved. +# Author: Roopa Prabhu, roopa@cumulusnetworks.com +# +# ifupdown -- +# tool to configure network interfaces +# import sys import os import argcomplete diff --git a/setup.py b/setup.py index b83fbe5..b6ca032 100755 --- a/setup.py +++ b/setup.py @@ -6,7 +6,6 @@ setup(name='ifupdown2', author='Roopa Prabhu', author_email='roopa@cumulusnetworks.com', url='cumulusnetworks.com', - package_dir = {'ifupdown' : 'pkg'}, packages=['ifupdown'], scripts = ['sbin/ifupdown'], install_requires = ['python-gvgen'],