From 15c3b13b92d81dc188e7336901e456323ab91b2a Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Tue, 25 Feb 2014 15:03:25 +0100 Subject: devassistant: Add C and Python provider templates This commit introduces basic Developer Assistant support for generating C and Python OpenLMI providers. Turned off by default, enable with -DWITH-DEVASSISTANT=ON cmake argument. --- tools/CMakeLists.txt | 3 + tools/devassistant/assistants/crt/c/openlmi.yaml | 87 ++++ .../assistants/crt/python/openlmi.yaml | 77 ++++ .../files/crt/c/openlmi/CMakeLists.txt.tpl | 38 ++ tools/devassistant/files/crt/c/openlmi/COPYING | 456 +++++++++++++++++++++ .../c/openlmi/mof/60_LMI_{{PROJECT_NAME}}.mof.tpl | 37 ++ .../files/crt/c/openlmi/mof/CMakeLists.txt.tpl | 2 + .../90_LMI_{{PROJECT_NAME}}_Profile.mof.skel.tpl | 22 + .../files/crt/c/openlmi/src/CMakeLists.txt.tpl | 48 +++ .../src/cmpiLMI_{{PROJECT_NAME}}-cimprovagt | 23 ++ .../devassistant/files/crt/python/openlmi/COPYING | 456 +++++++++++++++++++++ .../files/crt/python/openlmi/MANIFEST.in.tpl | 4 + tools/devassistant/files/crt/python/openlmi/README | 35 ++ .../openlmi/mof/60_LMI_{{PROJECT_NAME}}.mof.tpl | 1 + .../python/openlmi/mof/{{PROJECT_NAME}}.reg.tpl | 7 + .../openlmi/pycmpi{{PROJECT_NAME}}-cimprovagt | 25 ++ .../files/crt/python/openlmi/setup.py.tpl | 18 + .../src/lmi/{{PROJECT_NAME}}/LMI_MyCoolClass.py | 173 ++++++++ .../src/lmi/{{PROJECT_NAME}}/__init__.py.tpl | 22 + .../files/crt/python/openlmi/tools/gen_code.sh | 58 +++ 20 files changed, 1592 insertions(+) create mode 100644 tools/devassistant/assistants/crt/c/openlmi.yaml create mode 100644 tools/devassistant/assistants/crt/python/openlmi.yaml create mode 100644 tools/devassistant/files/crt/c/openlmi/CMakeLists.txt.tpl create mode 100644 tools/devassistant/files/crt/c/openlmi/COPYING create mode 100644 tools/devassistant/files/crt/c/openlmi/mof/60_LMI_{{PROJECT_NAME}}.mof.tpl create mode 100644 tools/devassistant/files/crt/c/openlmi/mof/CMakeLists.txt.tpl create mode 100644 tools/devassistant/files/crt/c/openlmi/src/90_LMI_{{PROJECT_NAME}}_Profile.mof.skel.tpl create mode 100644 tools/devassistant/files/crt/c/openlmi/src/CMakeLists.txt.tpl create mode 100644 tools/devassistant/files/crt/c/openlmi/src/cmpiLMI_{{PROJECT_NAME}}-cimprovagt create mode 100644 tools/devassistant/files/crt/python/openlmi/COPYING create mode 100644 tools/devassistant/files/crt/python/openlmi/MANIFEST.in.tpl create mode 100644 tools/devassistant/files/crt/python/openlmi/README create mode 120000 tools/devassistant/files/crt/python/openlmi/mof/60_LMI_{{PROJECT_NAME}}.mof.tpl create mode 100644 tools/devassistant/files/crt/python/openlmi/mof/{{PROJECT_NAME}}.reg.tpl create mode 100755 tools/devassistant/files/crt/python/openlmi/pycmpi{{PROJECT_NAME}}-cimprovagt create mode 100644 tools/devassistant/files/crt/python/openlmi/setup.py.tpl create mode 100644 tools/devassistant/files/crt/python/openlmi/src/lmi/{{PROJECT_NAME}}/LMI_MyCoolClass.py create mode 100644 tools/devassistant/files/crt/python/openlmi/src/lmi/{{PROJECT_NAME}}/__init__.py.tpl create mode 100755 tools/devassistant/files/crt/python/openlmi/tools/gen_code.sh (limited to 'tools') diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 04d11b7..fb7f98f 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -1,3 +1,6 @@ install(PROGRAMS openlmi-doc-class2rst openlmi-doc-class2uml DESTINATION bin) +if (WITH-DEVASSISTANT) + install(DIRECTORY devassistant DESTINATION share USE_SOURCE_PERMISSIONS) +endif (WITH-DEVASSISTANT) diff --git a/tools/devassistant/assistants/crt/c/openlmi.yaml b/tools/devassistant/assistants/crt/c/openlmi.yaml new file mode 100644 index 0000000..d9d81a5 --- /dev/null +++ b/tools/devassistant/assistants/crt/c/openlmi.yaml @@ -0,0 +1,87 @@ +openlmi: + fullname: OpenLMI + description: OpenLMI assistant will help you create an OpenLMI provider and install necessary dependencies. + + dependencies: + - use: super.dependencies + - rpm: ['gcc', 'glibc-devel', 'openlmi-providers-devel', 'openlmi-indicationmanager-libs-devel', 'python-sphinx-theme-openlmi', 'cmake', 'sblim-cmpi-devel', 'konkretcmpi-devel'] + + dependencies_eclipse: + - use: eclipse.dependencies_c + + dependencies_vim: + - use: vim.dependencies + + args: +# name: +# use: common_args + + vim: + snippet: vim + + eclipse: + snippet: eclipse + + github: + snippet: common_args + + files: + csources: &csources + source: . + + run: + - $dirname: $(dirname "$name") + - $basename: $(basename "$name") + - $lbasename: $(basename "$name" | tr '[A-Z]' '[a-z]') + - log_i: "Project name will be converted to lowercase letters ($lbasename)" + - $lowername: $(echo "$dirname/$lbasename") + - if not $(ls "$lowername"): + - log_i: 'Copying c source tree to project destination' + - cl_i: cp -r *csources "$lowername" + - dda_c: "$lowername" + - cl: cd "$lowername" + + # for some reason the \n newlines are often parsed badly (ignored), this doesn't seem to happen with \r newlines + # https://bugzilla.redhat.com/show_bug.cgi?id=1061207 + - for $i in $(find -type f -name '*.tpl' -printf '%p\r'): + - log_i: "Processing file $i..." + - jinja_render: + template: + source: $i + destination: $(pwd) + data: + PROJECT_NAME: $basename + + - cl: for j in `find -name '*{{PROJECT_NAME}}*'`; do mv "$j" "`echo $j | sed 's/{{PROJECT_NAME}}/$basename/'`"; done + - cl: find -name '*.tpl' -delete + - use: git_init_add_commit + - else: + - cl: cd "$lowername" + - log_i: 'Project already exists' + + - log_i: 'Running cmake' + - cl_i: mkdir build + - cl_i: cd build + - cl_i: cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_VERBOSE_MAKEFILE=0 + - cl_i: make clean + - log_i: 'Compiling sources' + - cl_i: make + - cl_i: cd .. + - if defined $vim: + - use: vim.run + - if $eclipse: + - use: eclipse.run_c + - if defined $github: + - log_i: "Push to GitHub repository" + - github: create_and_push + + - log_i: 'OpenLMI provider sources have been generated, remember it''s just a skeleton' + - log_i: 'that should be filled in order to make the provider usable. Specifically classes' + - log_i: 'in MOF files and corresponding code in the generated skeleton.' + - log_i: '' + - log_i: 'Have a look at http://www.openlmi.org/development website for further instructions' + - log_i: 'and examples.' + - log_i: '' + - log_i: 'To install the sources, run "make install" in the build directory. Provider' + - log_i: 'registration is need to be done as a next step, have a look at "make help" and' + - log_i: 'related "register-XXX" and "unregister-XXX" make targets.' diff --git a/tools/devassistant/assistants/crt/python/openlmi.yaml b/tools/devassistant/assistants/crt/python/openlmi.yaml new file mode 100644 index 0000000..1a736aa --- /dev/null +++ b/tools/devassistant/assistants/crt/python/openlmi.yaml @@ -0,0 +1,77 @@ +openlmi: + fullname: Python OpenLMI provider + description: 'Python OpenLMI assistant will help you create an OpenLMI provider and install necessary dependencies.' + + dependencies: + - use: super.dependencies + - rpm: ['pywbem', 'cmpi-bindings-pywbem', 'openlmi-providers'] + + dependencies_eclipse: + - use: eclipse.dependencies_python + + dependencies_vim: + - use: vim.dependencies + + args: + name: + use: common_args + + eclipse: + use: eclipse + + github: + use: common_args + + vim: + use: vim + + files: + gitignore: &gitignore + source: ../.gitignore + sources: &sources + source: . + + run: + - $dirname: $(dirname "$name") + - $basename: $(basename "$name") + - log_i: 'Creating Python OpenLMI provider $basename in $dirname ...' + - if $(test -e "$name"): + - log_e: '$name already exists, cannot proceed.' + - else: + - cl_i: cp -r --dereference *sources "$name" + - cl: cd "$basename" + + # for some reason the \n newlines are often parsed badly (ignored), this doesn't seem to happen with \r newlines + # https://bugzilla.redhat.com/show_bug.cgi?id=1061207 + - for $i in $(find -type f -name '*.tpl' -printf '%p\r'): + - log_i: "Processing file $i..." + - jinja_render: + template: + source: $i + destination: $(pwd) + data: + PROJECT_NAME: $basename + + - cl: for j in `find -name '*{{PROJECT_NAME}}*'`; do mv "$j" "`echo $j | sed 's/{{PROJECT_NAME}}/$basename/'`"; done + - cl: find -name '*.tpl' -delete + + - log_i: 'Building sources ...' + - cl: python setup.py build + - cl_i: cd .. + + - cl: cd "$name" + - dda_c: . + - if defined $vim: + - use: vim.run + - if $eclipse: + - use: eclipse.run_python + - cl: cp *gitignore . + - use: git_init_add_commit + - if defined $github: + - github: create_and_push + - log_i: 'Python OpenLMI provider project $basename in $dirname has been created.' + - log_i: 'Remember it''s just a skeleton that should be filled in order to make the provider' + - log_i: 'usable. Specifically classes in MOF files and corresponding code in the generated' + - log_i: 'skeleton.' + - log_i: '' + - log_i: 'Please have a look at the README file for further instructions.' diff --git a/tools/devassistant/files/crt/c/openlmi/CMakeLists.txt.tpl b/tools/devassistant/files/crt/c/openlmi/CMakeLists.txt.tpl new file mode 100644 index 0000000..71fc67c --- /dev/null +++ b/tools/devassistant/files/crt/c/openlmi/CMakeLists.txt.tpl @@ -0,0 +1,38 @@ + +project({{ PROJECT_NAME|lower }} C) + +set(OPENLMI_VERSION_MAJOR 0) +set(OPENLMI_VERSION_MINOR 0) +set(OPENLMI_VERSION_REVISION 1) +set(OPENLMI_VERSION "${OPENLMI_VERSION_MAJOR}.${OPENLMI_VERSION_MINOR}.${OPENLMI_VERSION_REVISION}") + +cmake_minimum_required(VERSION 2.6) + +# Set flags and definitions +add_definitions(-D_XOPEN_SOURCE=500 -D_GNU_SOURCE) +set(CMAKE_C_FLAGS "-Wall -g -Wextra -Wno-unused-parameter -Wformat -Wparentheses -Wl,--no-undefined ${CMAKE_C_FLAGS}") + +# Set LIB_SUFFIX to 64 on 64bit architectures +if(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(LIB_SUFFIX "") +else(CMAKE_SIZEOF_VOID_P EQUAL 4) + SET(LIB_SUFFIX 64) +endif(CMAKE_SIZEOF_VOID_P EQUAL 4) + +# Find OpenLMIMacros when installed in other prefix than /usr (e.g. /usr/local) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_INSTALL_PREFIX}) +include(OpenLMIMacros RESULT_VARIABLE LMIMACROS) + +if (${LMIMACROS} STREQUAL "NOTFOUND") + message(FATAL_ERROR "OpenLMIMacros.cmake not found, check if openlmi-providers(-devel) is installed") +endif (${LMIMACROS} STREQUAL "NOTFOUND") + +find_package(PkgConfig) + +# Find required packages +find_package(CMPI REQUIRED) +find_package(KonkretCMPI REQUIRED) +find_package(OpenLMI REQUIRED) + +add_subdirectory(src) +add_subdirectory(mof) diff --git a/tools/devassistant/files/crt/c/openlmi/COPYING b/tools/devassistant/files/crt/c/openlmi/COPYING new file mode 100644 index 0000000..ca4f73b --- /dev/null +++ b/tools/devassistant/files/crt/c/openlmi/COPYING @@ -0,0 +1,456 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 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. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +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 and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, 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 library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete 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 distribute a copy of this License along with the +Library. + + 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 Library or any portion +of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +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 Library, 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 Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you 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. + + If distribution of 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 satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be 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. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library 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. + + 9. 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 Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +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 with +this License. + + 11. 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 Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library 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 Library. + +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. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library 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. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +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 Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +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 + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. 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 LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. diff --git a/tools/devassistant/files/crt/c/openlmi/mof/60_LMI_{{PROJECT_NAME}}.mof.tpl b/tools/devassistant/files/crt/c/openlmi/mof/60_LMI_{{PROJECT_NAME}}.mof.tpl new file mode 100644 index 0000000..d24c2dd --- /dev/null +++ b/tools/devassistant/files/crt/c/openlmi/mof/60_LMI_{{PROJECT_NAME}}.mof.tpl @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2014 John Doe. All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Authors: John Doe + */ + +[ Version("0.0.1"), Provider("cmpi:cmpiLMI_{{ PROJECT_NAME }}"), + Description("ManagedElement is an abstract class that provides a common " + "superclass (or top of the inheritance tree) for the " + "non-association classes in the CIM Schema. Feel free to extend it to your needs. ")] +class LMI_MyCoolClass: CIM_ManagedElement +{ + [ Implemented(true), Override("Caption"), + Description("The Caption property is a short textual description " + "(one- line string) of the object." ), + MaxLen(64) ] + string Caption; + + [ Implemented(true), Override("Description"), + Description("The Description property provides a textual description " + "of the object.") ] + string Description; +}; diff --git a/tools/devassistant/files/crt/c/openlmi/mof/CMakeLists.txt.tpl b/tools/devassistant/files/crt/c/openlmi/mof/CMakeLists.txt.tpl new file mode 100644 index 0000000..8aa28ba --- /dev/null +++ b/tools/devassistant/files/crt/c/openlmi/mof/CMakeLists.txt.tpl @@ -0,0 +1,2 @@ + +install(FILES 60_LMI_{{ PROJECT_NAME }}.mof DESTINATION share/openlmi-{{ PROJECT_NAME|lower }}) diff --git a/tools/devassistant/files/crt/c/openlmi/src/90_LMI_{{PROJECT_NAME}}_Profile.mof.skel.tpl b/tools/devassistant/files/crt/c/openlmi/src/90_LMI_{{PROJECT_NAME}}_Profile.mof.skel.tpl new file mode 100644 index 0000000..d54aa39 --- /dev/null +++ b/tools/devassistant/files/crt/c/openlmi/src/90_LMI_{{PROJECT_NAME}}_Profile.mof.skel.tpl @@ -0,0 +1,22 @@ +instance of PG_ProviderProfileCapabilities +{ + CapabilityID = "@CLASS@"; + + ProviderModuleName = "cmpiLMI_{{ PROJECT_NAME }}"; + + ProviderName = "@CLASS@"; + + RegisteredProfile = 0; + + OtherRegisteredProfile = "OpenLMI-{{ PROJECT_NAME }}"; + OtherProfileOrganization = "OpenLMI"; + + ProfileVersion = "@VERSION@"; + + RegisteredSubProfiles = { + }; + + ConformingElements = { + "@CLASS@" + }; +}; diff --git a/tools/devassistant/files/crt/c/openlmi/src/CMakeLists.txt.tpl b/tools/devassistant/files/crt/c/openlmi/src/CMakeLists.txt.tpl new file mode 100644 index 0000000..237f20e --- /dev/null +++ b/tools/devassistant/files/crt/c/openlmi/src/CMakeLists.txt.tpl @@ -0,0 +1,48 @@ +set(PROVIDER_NAME {{ PROJECT_NAME }}) +set(LIBRARY_NAME cmpiLMI_${PROVIDER_NAME}) +set(MOF 60_LMI_{{ PROJECT_NAME }}.mof) +set(CIMPROVAGT_SCRIPT cmpiLMI_{{ PROJECT_NAME }}-cimprovagt) + +set(provider_SRCS +) + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") + +konkretcmpi_generate(${MOF} + CIM_PROVIDERS + CIM_HEADERS + CIM_CLASSES + ${OPENLMI_QUALIFIERS_MOF} +) + +add_library(${LIBRARY_NAME} SHARED + ${provider_SRCS} + ${CIM_PROVIDERS} + ${CIM_HEADERS} +) + +include_directories(${CMAKE_CURRENT_BINARY_DIR} + ${CMPI_INCLUDE_DIR} + ) + +target_link_libraries(${LIBRARY_NAME} + openlmicommon + ${KONKRETCMPI_LIBRARIES} + ) + +set(CIM_PROVIDERS_CLASSES "") +foreach(CIM_CLASS ${CIM_CLASSES}) + if(NOT ${CIM_CLASS} MATCHES "Indication") + set(CIM_PROVIDERS_CLASSES ${CIM_PROVIDERS_CLASSES} ${CIM_CLASS}) + endif(NOT ${CIM_CLASS} MATCHES "Indication") +endforeach(CIM_CLASS ${CIM_CLASSES}) + +set(TARGET_MOF "${CMAKE_BINARY_DIR}/mof/90_LMI_{{ PROJECT_NAME }}_Profile.mof") +profile_mof_generate("90_LMI_{{ PROJECT_NAME }}_Profile.mof.skel" "${TARGET_MOF}" "${CIM_PROVIDERS_CLASSES}") + +# Create registration file +cim_registration(${PROVIDER_NAME} ${LIBRARY_NAME} ${MOF} share/openlmi-providers) + +install(TARGETS ${LIBRARY_NAME} DESTINATION lib${LIB_SUFFIX}/cmpi/) +install(PROGRAMS ${CIMPROVAGT_SCRIPT} DESTINATION libexec/pegasus) +install(FILES ${TARGET_MOF} DESTINATION share/openlmi-providers/) diff --git a/tools/devassistant/files/crt/c/openlmi/src/cmpiLMI_{{PROJECT_NAME}}-cimprovagt b/tools/devassistant/files/crt/c/openlmi/src/cmpiLMI_{{PROJECT_NAME}}-cimprovagt new file mode 100644 index 0000000..0098f3b --- /dev/null +++ b/tools/devassistant/files/crt/c/openlmi/src/cmpiLMI_{{PROJECT_NAME}}-cimprovagt @@ -0,0 +1,23 @@ +#!/bin/sh +# +# Copyright (C) 2014 John Doe. All rights reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# +# Authors: John Doe +# + + +/usr/libexec/pegasus/cimprovagt "$@" diff --git a/tools/devassistant/files/crt/python/openlmi/COPYING b/tools/devassistant/files/crt/python/openlmi/COPYING new file mode 100644 index 0000000..ca4f73b --- /dev/null +++ b/tools/devassistant/files/crt/python/openlmi/COPYING @@ -0,0 +1,456 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 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. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +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 and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, 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 library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete 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 distribute a copy of this License along with the +Library. + + 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 Library or any portion +of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +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 Library, 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 Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you 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. + + If distribution of 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 satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be 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. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library 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. + + 9. 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 Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +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 with +this License. + + 11. 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 Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library 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 Library. + +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. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library 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. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser 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 Library +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 Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +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 + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "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 +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. 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 LIBRARY 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 +LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. diff --git a/tools/devassistant/files/crt/python/openlmi/MANIFEST.in.tpl b/tools/devassistant/files/crt/python/openlmi/MANIFEST.in.tpl new file mode 100644 index 0000000..16af69e --- /dev/null +++ b/tools/devassistant/files/crt/python/openlmi/MANIFEST.in.tpl @@ -0,0 +1,4 @@ +include COPYING README + +include mof/*.mof mof/{{ PROJECT_NAME }}.reg +include pycmpi{{ PROJECT_NAME }}-cimprovagt diff --git a/tools/devassistant/files/crt/python/openlmi/README b/tools/devassistant/files/crt/python/openlmi/README new file mode 100644 index 0000000..e83e58d --- /dev/null +++ b/tools/devassistant/files/crt/python/openlmi/README @@ -0,0 +1,35 @@ +If you're reading this, it means the very basic skeleton of the Python OpenLMI +provider has been successfully created. There is certain amount of work needed +to be done manually as Developer Assistant provides no wizard that will help +you to generate fully working provider. + + 1. Prepare your model and create corresponding MOF files + + 2. Update your python sources either manually or using the attached script. + A script "gen_code.sh" in the tools/ directory is provided for convenience + and recreates all Python source files for classes found in the MOF files. + + It has few limitations though, such as it needs to be run as root and + a CIMOM should be running. This is due to MOF files being registered + in order to be able to generate source (skeleton) files. This is not however + needed for the very basic example case, the OpenLMI devassistant templates + are pre-generated and ready to use. Note that the script overwrites files + without asking. + + The script optionally takes one argument of project name used in generated + files. When run with no argument, a template mode is assumed and placeholders + are used (to be processed by the devassistant project creation mode). + A LMI_CIMOM_USERNAME and LMI_CIMOM_PASSWORD env. variables are used for MOF + files registration. + + 3. Check the path in the .reg file, located in the "mof" subdirectory. A guess + of python site-packages path is made during creation, though it might be + necessary to tweak it in some environments. + + 4. Run "python setup.py install --root /" under root to install your provider. + + 5. In the "mof" directory register the MOF files using a similar command like + this (needs root privileges): + # openlmi-mof-register register -v 0.0.1 60_LMI_MyProject.mof MyProject.reg + + 6. Restart your CIMOM and check the result! diff --git a/tools/devassistant/files/crt/python/openlmi/mof/60_LMI_{{PROJECT_NAME}}.mof.tpl b/tools/devassistant/files/crt/python/openlmi/mof/60_LMI_{{PROJECT_NAME}}.mof.tpl new file mode 120000 index 0000000..010d509 --- /dev/null +++ b/tools/devassistant/files/crt/python/openlmi/mof/60_LMI_{{PROJECT_NAME}}.mof.tpl @@ -0,0 +1 @@ +../../../c/openlmi/mof/60_LMI_{{PROJECT_NAME}}.mof.tpl \ No newline at end of file diff --git a/tools/devassistant/files/crt/python/openlmi/mof/{{PROJECT_NAME}}.reg.tpl b/tools/devassistant/files/crt/python/openlmi/mof/{{PROJECT_NAME}}.reg.tpl new file mode 100644 index 0000000..eeca3ca --- /dev/null +++ b/tools/devassistant/files/crt/python/openlmi/mof/{{PROJECT_NAME}}.reg.tpl @@ -0,0 +1,7 @@ +[LMI_MyCoolClass] + provider: /usr/lib/python2.7/site-packages/lmi/{{PROJECT_NAME}}/LMI_MyCoolClass.py + location: pyCmpiProvider + type: instance + namespace: root/cimv2 + group: pycmpi{{PROJECT_NAME}} + diff --git a/tools/devassistant/files/crt/python/openlmi/pycmpi{{PROJECT_NAME}}-cimprovagt b/tools/devassistant/files/crt/python/openlmi/pycmpi{{PROJECT_NAME}}-cimprovagt new file mode 100755 index 0000000..267447e --- /dev/null +++ b/tools/devassistant/files/crt/python/openlmi/pycmpi{{PROJECT_NAME}}-cimprovagt @@ -0,0 +1,25 @@ +#!/bin/bash +# +# Copyright (C) 2013 Red Hat, Inc. All rights reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# +# Authors: Jan Safranek + +# This is cimprovagt wrapper to have separate SELinux policy for the storage +# provider in Fedora linux. See README.RedHat.Security in tog-pegasus package +# for details how it's supposed to work. + +/usr/libexec/pegasus/cimprovagt "$@" diff --git a/tools/devassistant/files/crt/python/openlmi/setup.py.tpl b/tools/devassistant/files/crt/python/openlmi/setup.py.tpl new file mode 100644 index 0000000..84b09ad --- /dev/null +++ b/tools/devassistant/files/crt/python/openlmi/setup.py.tpl @@ -0,0 +1,18 @@ +from setuptools import setup + +setup( + name='{{ PROJECT_NAME }}', + description='{{ PROJECT_NAME }}', + author='John Doe', + author_email='john@example.com', + url='http://example.com/openlmi/', + version='0.0.1', + package_dir={'': 'src'}, + namespace_packages = ['lmi'], + packages=['lmi', 'lmi.{{ PROJECT_NAME }}'], + classifiers=[ + 'License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)', + 'Operating System :: POSIX :: Linux', + 'Topic :: System :: Systems Administration', + ], +) diff --git a/tools/devassistant/files/crt/python/openlmi/src/lmi/{{PROJECT_NAME}}/LMI_MyCoolClass.py b/tools/devassistant/files/crt/python/openlmi/src/lmi/{{PROJECT_NAME}}/LMI_MyCoolClass.py new file mode 100644 index 0000000..4c7637f --- /dev/null +++ b/tools/devassistant/files/crt/python/openlmi/src/lmi/{{PROJECT_NAME}}/LMI_MyCoolClass.py @@ -0,0 +1,173 @@ +"""Python Provider for LMI_MyCoolClass + +Instruments the CIM class LMI_MyCoolClass + +""" + +import pywbem +from pywbem.cim_provider2 import CIMProvider2 + +class LMI_MyCoolClass(CIMProvider2): + """Instrument the CIM class LMI_MyCoolClass + + ManagedElement is an abstract class that provides a common superclass + (or top of the inheritance tree) for the non-association classes in + the CIM Schema. Feel free to extend it to your needs. + + """ + + def __init__ (self, env): + logger = env.get_logger() + logger.log_debug('Initializing provider %s from %s' \ + % (self.__class__.__name__, __file__)) + + def get_instance(self, env, model): + """Return an instance. + + Keyword arguments: + env -- Provider Environment (pycimmb.ProviderEnvironment) + model -- A template of the pywbem.CIMInstance to be returned. The + key properties are set on this instance to correspond to the + instanceName that was requested. The properties of the model + are already filtered according to the PropertyList from the + request. Only properties present in the model need to be + given values. If you prefer, you can set all of the + values, and the instance will be filtered for you. + + Possible Errors: + CIM_ERR_ACCESS_DENIED + CIM_ERR_INVALID_PARAMETER (including missing, duplicate, unrecognized + or otherwise incorrect parameters) + CIM_ERR_NOT_FOUND (the CIM Class does exist, but the requested CIM + Instance does not exist in the specified namespace) + CIM_ERR_FAILED (some other unspecified error occurred) + + """ + + logger = env.get_logger() + logger.log_debug('Entering %s.get_instance()' \ + % self.__class__.__name__) + + + # TODO fetch system resource matching the following keys: + + #model['Caption'] = '' # TODO + #model['Description'] = '' # TODO + return model + + def enum_instances(self, env, model, keys_only): + """Enumerate instances. + + The WBEM operations EnumerateInstances and EnumerateInstanceNames + are both mapped to this method. + This method is a python generator + + Keyword arguments: + env -- Provider Environment (pycimmb.ProviderEnvironment) + model -- A template of the pywbem.CIMInstances to be generated. + The properties of the model are already filtered according to + the PropertyList from the request. Only properties present in + the model need to be given values. If you prefer, you can + always set all of the values, and the instance will be filtered + for you. + keys_only -- A boolean. True if only the key properties should be + set on the generated instances. + + Possible Errors: + CIM_ERR_FAILED (some other unspecified error occurred) + + """ + + logger = env.get_logger() + logger.log_debug('Entering %s.enum_instances()' \ + % self.__class__.__name__) + + # Prime model.path with knowledge of the keys, so key values on + # the CIMInstanceName (model.path) will automatically be set when + # we set property values on the model. + model.path.update({}) + + while False: # TODO more instances? + # TODO fetch system resource + # Key properties + if keys_only: + yield model + else: + try: + yield self.get_instance(env, model) + except pywbem.CIMError, (num, msg): + if num not in (pywbem.CIM_ERR_NOT_FOUND, + pywbem.CIM_ERR_ACCESS_DENIED): + raise + + def set_instance(self, env, instance, modify_existing): + """Return a newly created or modified instance. + + Keyword arguments: + env -- Provider Environment (pycimmb.ProviderEnvironment) + instance -- The new pywbem.CIMInstance. If modifying an existing + instance, the properties on this instance have been filtered by + the PropertyList from the request. + modify_existing -- True if ModifyInstance, False if CreateInstance + + Return the new instance. The keys must be set on the new instance. + + Possible Errors: + CIM_ERR_ACCESS_DENIED + CIM_ERR_NOT_SUPPORTED + CIM_ERR_INVALID_PARAMETER (including missing, duplicate, unrecognized + or otherwise incorrect parameters) + CIM_ERR_ALREADY_EXISTS (the CIM Instance already exists -- only + valid if modify_existing is False, indicating that the operation + was CreateInstance) + CIM_ERR_NOT_FOUND (the CIM Instance does not exist -- only valid + if modify_existing is True, indicating that the operation + was ModifyInstance) + CIM_ERR_FAILED (some other unspecified error occurred) + + """ + + logger = env.get_logger() + logger.log_debug('Entering %s.set_instance()' \ + % self.__class__.__name__) + # TODO create or modify the instance + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_SUPPORTED) # Remove to implement + return instance + + def delete_instance(self, env, instance_name): + """Delete an instance. + + Keyword arguments: + env -- Provider Environment (pycimmb.ProviderEnvironment) + instance_name -- A pywbem.CIMInstanceName specifying the instance + to delete. + + Possible Errors: + CIM_ERR_ACCESS_DENIED + CIM_ERR_NOT_SUPPORTED + CIM_ERR_INVALID_NAMESPACE + CIM_ERR_INVALID_PARAMETER (including missing, duplicate, unrecognized + or otherwise incorrect parameters) + CIM_ERR_INVALID_CLASS (the CIM Class does not exist in the specified + namespace) + CIM_ERR_NOT_FOUND (the CIM Class does exist, but the requested CIM + Instance does not exist in the specified namespace) + CIM_ERR_FAILED (some other unspecified error occurred) + + """ + + logger = env.get_logger() + logger.log_debug('Entering %s.delete_instance()' \ + % self.__class__.__name__) + + # TODO delete the resource + raise pywbem.CIMError(pywbem.CIM_ERR_NOT_SUPPORTED) # Remove to implement + +## end of class LMI_MyCoolClassProvider + +## get_providers() for associating CIM Class Name to python provider class name + +def get_providers(env): + lmi_mycoolclass_prov = LMI_MyCoolClass(env) + return {'LMI_MyCoolClass': lmi_mycoolclass_prov} + diff --git a/tools/devassistant/files/crt/python/openlmi/src/lmi/{{PROJECT_NAME}}/__init__.py.tpl b/tools/devassistant/files/crt/python/openlmi/src/lmi/{{PROJECT_NAME}}/__init__.py.tpl new file mode 100644 index 0000000..7e506f2 --- /dev/null +++ b/tools/devassistant/files/crt/python/openlmi/src/lmi/{{PROJECT_NAME}}/__init__.py.tpl @@ -0,0 +1,22 @@ +# Copyright (C) 2014 John Doe. All rights reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library 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 +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# +# Authors: John Doe + +""" +{{ PROJECT_NAME }}. + +""" diff --git a/tools/devassistant/files/crt/python/openlmi/tools/gen_code.sh b/tools/devassistant/files/crt/python/openlmi/tools/gen_code.sh new file mode 100755 index 0000000..8a7349b --- /dev/null +++ b/tools/devassistant/files/crt/python/openlmi/tools/gen_code.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +# This script generates Python code skeleton for each class defined in the MOF files. +# At the moment, MOF files need to be registered in the CIMOM in order to be able +# to generate the code. This is rather unfortunate and requires root privileges. +# +# Make sure to set proper LMI_CIMOM_USERNAME and LMI_CIMOM_PASSWORD env. variables! +# +# This script takes optional argument of project name, i.e. when regenerating within +# an existing project. Leave blank for devassistant template preparation. + + +SITE_PACKAGES=`python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"` +TMPL_NAME="{{PROJECT_NAME}}" +TMPL_SUFFIX=".tpl" + +if [ ! -z $1 ]; then + TMPL_NAME=$1 + TMPL_SUFFIX="" +fi + +openlmi-mof-register --just-mofs register ../mof/*.mof* +rm -f ../mof/${TMPL_NAME}.reg${TMPL_SUFFIX} + +pushd ../src/lmi/* +for i in `cat ../../../mof/*.mof* | grep '^class.*:' | sed 's/^class[\t ]*\(.*\)[\t ]*:.*/\1/'`; do + echo "Generating code for class '${i}'" + python > ${i}.py << PYGEN +import pywbem +import pywbem.cim_provider2 +import os + +username = os.environ.get("LMI_CIMOM_USERNAME", "root") +password = os.environ.get("LMI_CIMOM_PASSWORD", "") + +con = pywbem.WBEMConnection("https://localhost", (username, password)) +cc = con.GetClass("${i}", "root/cimv2") + +python_code, registration = pywbem.cim_provider2.codegen(cc) +print python_code + +PYGEN + + # Fill the reg file + cat >> ../../../mof/${TMPL_NAME}.reg${TMPL_SUFFIX} << REG +[${i}] + provider: ${SITE_PACKAGES}/lmi/${TMPL_NAME}/${i}.py + location: pyCmpiProvider + type: instance + namespace: root/cimv2 + group: pycmpi${TMPL_NAME} + +REG + +done +popd + +openlmi-mof-register --just-mofs unregister ../mof/*.mof* -- cgit