diff --git a/.zuul.yaml b/.zuul.yaml new file mode 100644 index 0000000..e7adce5 --- /dev/null +++ b/.zuul.yaml @@ -0,0 +1,47 @@ +--- +- project: + check: + jobs: + - openstack-tox-linters + - k8sapp-sriov-fec-operator-tox-py39 + - k8sapp-sriov-fec-operator-tox-pylint + gate: + jobs: + - openstack-tox-linters + - k8sapp-sriov-fec-operator-tox-py39 + - k8sapp-sriov-fec-operator-tox-pylint + +- job: + name: k8sapp-sriov-fec-operator-tox-py39 + parent: tox-py39 + description: | + Run py39 for sriov-fec-operator app + nodeset: debian-bullseye + required-projects: + - starlingx/config + - starlingx/fault + - starlingx/update + - starlingx/utilities + files: + - python-k8sapp-sriov-fec-operator/* + vars: + tox_envlist: py39 + python_version: 3.9 + tox_extra_args: -c python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/tox.ini + +- job: + name: k8sapp-sriov-fec-operator-tox-pylint + parent: tox + description: | + Run pylint test for k8sapp_sriov_fec_operator + required-projects: + - starlingx/config + - starlingx/fault + - starlingx/update + - starlingx/utilities + nodeset: ubuntu-bionic + files: + - python-k8sapp-sriov-fec-operator/* + vars: + tox_envlist: pylint + tox_extra_args: -c python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/tox.ini diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst new file mode 100644 index 0000000..f2f8e6d --- /dev/null +++ b/CONTRIBUTING.rst @@ -0,0 +1,16 @@ +If you would like to contribute to the development of OpenStack, +you must follow the steps in this page: + + https://docs.openstack.org/infra/manual/developers.html + +Once those steps have been completed, changes to OpenStack +should be submitted for review via the Gerrit tool, following +the workflow documented at: + + https://docs.openstack.org/infra/manual/developers.html#development-workflow + +Pull requests submitted through GitHub will be ignored. + +Bugs should be filed in Launchpad: + + https://bugs.launchpad.net/starlingx diff --git a/HACKING.rst b/HACKING.rst new file mode 100644 index 0000000..864c3a7 --- /dev/null +++ b/HACKING.rst @@ -0,0 +1,17 @@ +StarlingX App-sriov-fec-operator Style Commandments +========================================================= + +- Step 1: Read the OpenStack style commandments + https://docs.openstack.org/hacking/latest/ +- Step 2: Read on + +App-sriov-fec-operator Specific Commandments +--------------------------------------------------------- + +None so far + +Running tests +------------- +The approach to running tests is to simply run the command ``tox``. This will +create virtual environments, populate them with dependencies and run all of +the tests that OpenStack CI systems run. diff --git a/bindep.txt b/bindep.txt new file mode 100644 index 0000000..3ffe69f --- /dev/null +++ b/bindep.txt @@ -0,0 +1,10 @@ +# This is a cross-platform list tracking distribution packages needed for install and tests; +# see https://docs.openstack.org/infra/bindep/ for additional information. + +libffi-dev [platform:dpkg] +libldap2-dev [platform:dpkg] +libxml2-dev [platform:dpkg] +libxslt1-dev [platform:dpkg] +libsasl2-dev [platform:dpkg] +libffi-devel [platform:rpm] +python3-all-dev [platform:dpkg] diff --git a/centos_build_layer.cfg b/centos_build_layer.cfg new file mode 100644 index 0000000..c581999 --- /dev/null +++ b/centos_build_layer.cfg @@ -0,0 +1 @@ +flock diff --git a/centos_iso_image.inc b/centos_iso_image.inc new file mode 100644 index 0000000..2c8faec --- /dev/null +++ b/centos_iso_image.inc @@ -0,0 +1 @@ +stx-sriov-fec-operator-helm diff --git a/centos_pkg_dirs b/centos_pkg_dirs new file mode 100644 index 0000000..4c210bd --- /dev/null +++ b/centos_pkg_dirs @@ -0,0 +1,2 @@ +stx-sriov-fec-operator-helm +python-k8sapp-sriov-fec-operator diff --git a/centos_pkg_dirs_containers b/centos_pkg_dirs_containers new file mode 100644 index 0000000..4c210bd --- /dev/null +++ b/centos_pkg_dirs_containers @@ -0,0 +1,2 @@ +stx-sriov-fec-operator-helm +python-k8sapp-sriov-fec-operator diff --git a/centos_stable_docker_images.inc b/centos_stable_docker_images.inc new file mode 100644 index 0000000..9aec99a --- /dev/null +++ b/centos_stable_docker_images.inc @@ -0,0 +1 @@ +sriov-fec-operator-images diff --git a/python-k8sapp-sriov-fec-operator/centos/build_srpm.data b/python-k8sapp-sriov-fec-operator/centos/build_srpm.data new file mode 100644 index 0000000..e64a476 --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/centos/build_srpm.data @@ -0,0 +1,3 @@ +SRC_DIR="k8sapp_sriov_fec_operator" + +TIS_PATCH_VER=PKG_GITREVCOUNT diff --git a/python-k8sapp-sriov-fec-operator/centos/python-k8sapp-sriov-fec-operator.spec b/python-k8sapp-sriov-fec-operator/centos/python-k8sapp-sriov-fec-operator.spec new file mode 100644 index 0000000..ca5360a --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/centos/python-k8sapp-sriov-fec-operator.spec @@ -0,0 +1,52 @@ +%global app_name sriov-fec-operator +%global pypi_name k8sapp-sriov-fec-operator +%global sname k8sapp_sriov_fec_operator + +Name: python-%{pypi_name} +Version: 1.0 +Release: %{tis_patch_ver}%{?_tis_dist} +Summary: StarlingX sysinv extensions: Sriov fec operator + +License: Apache-2.0 +Source0: %{name}-%{version}.tar.gz + +BuildArch: noarch + +BuildRequires: python-setuptools +BuildRequires: python-pbr +BuildRequires: python2-pip +BuildRequires: python2-wheel + +%description +StarlingX sysinv extensions: Sriov fec operator K8S app + +%prep +%setup +# Remove bundled egg-info +rm -rf %{pypi_name}.egg-info + +%build +export PBR_VERSION=%{version} +%{__python2} setup.py build + +%py2_build_wheel + +%install +export PBR_VERSION=%{version}.%{tis_patch_ver} +export SKIP_PIP_INSTALL=1 +%{__python2} setup.py install --skip-build --root %{buildroot} +mkdir -p ${RPM_BUILD_ROOT}/plugins/%{app_name} +install -m 644 dist/*.whl ${RPM_BUILD_ROOT}/plugins/%{app_name}/ + +%files +%{python2_sitelib}/%{sname} +%{python2_sitelib}/%{sname}-*.egg-info + +%package wheels +Summary: %{name} wheels + +%description wheels +Contains python wheels for %{name} + +%files wheels +/plugins/* diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/.gitignore b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/.gitignore new file mode 100644 index 0000000..78c457c --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/.gitignore @@ -0,0 +1,35 @@ +# Compiled files +*.py[co] +*.a +*.o +*.so + +# Sphinx +_build +doc/source/api/ + +# Packages/installer info +*.egg +*.egg-info +dist +build +eggs +parts +var +sdist +develop-eggs +.installed.cfg + +# Other +*.DS_Store +.stestr +.testrepository +.tox +.venv +.*.swp +.coverage +bandit.xml +cover +AUTHORS +ChangeLog +*.sqlite diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/.stestr.conf b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/.stestr.conf new file mode 100644 index 0000000..d81047c --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/.stestr.conf @@ -0,0 +1,4 @@ +[DEFAULT] +test_path=./k8sapp_sriov_fec_operator/tests +top_dir=./k8sapp_sriov_fec_operator +#parallel_class=True diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/LICENSE b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/LICENSE new file mode 100644 index 0000000..f3a4cc6 --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2022 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/README.rst b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/README.rst new file mode 100644 index 0000000..6f0b047 --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/README.rst @@ -0,0 +1,7 @@ +k8sapp-sriov-fec-operator +========================= + +This project contains StarlingX Kubernetes application specific python plugins +for the sriov-fec-operator. These plugins are required to integrate the sriov +fec operator application into the StarlingX application framework and to +support the various StarlingX deployments. diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/__init__.py b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/common/__init__.py b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/common/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/common/constants.py b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/common/constants.py new file mode 100644 index 0000000..d4dee63 --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/common/constants.py @@ -0,0 +1,16 @@ +# +# Copyright (c) 2022 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# + +# Application Name +HELM_APP_SRIOV_FEC_OPERATOR = 'sriov-fec-operator' + +# Namespace to deploy the application +HELM_NS_SRIOV_FEC_OPERATOR = 'sriov-fec-operator' +HELM_NS_SRIOV_FEC_SYSTEM = 'sriov-fec-system' + +# Helm: Supported charts: +# These values match the names in the chart package's Chart.yaml +HELM_CHART_SRIOV_FEC_OPERATOR = 'sriov-fec-operator' diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/helm/__init__.py b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/helm/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/helm/sriov_fec_operator.py b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/helm/sriov_fec_operator.py new file mode 100644 index 0000000..f10e047 --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/helm/sriov_fec_operator.py @@ -0,0 +1,41 @@ +# +# Copyright (c) 2022 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# + +from sysinv.common import exception +from sysinv.helm import base + +from k8sapp_sriov_fec_operator.common import constants as app_constants + +class SriovFecOperatorHelm(base.BaseHelm): + """Class to encapsulate helm operations for the Sriov fec operator chart""" + + SUPPORTED_NAMESPACES = base.BaseHelm.SUPPORTED_NAMESPACES + \ + [app_constants.HELM_NS_SRIOV_FEC_SYSTEM] + SUPPORTED_APP_NAMESPACES = { + app_constants.HELM_APP_SRIOV_FEC_OPERATOR: + base.BaseHelm.SUPPORTED_NAMESPACES + + [app_constants.HELM_NS_SRIOV_FEC_SYSTEM], + } + + CHART = app_constants.HELM_CHART_SRIOV_FEC_OPERATOR + + SERVICE_NAME = app_constants.HELM_APP_SRIOV_FEC_OPERATOR + + def get_namespaces(self): + return self.SUPPORTED_NAMESPACES + + def get_overrides(self, namespace=None): + overrides = { + app_constants.HELM_NS_SRIOV_FEC_SYSTEM: {} + } + + if namespace in self.SUPPORTED_NAMESPACES: + return overrides[namespace] + elif namespace: + raise exception.InvalidHelmNamespace(chart=self.CHART, + namespace=namespace) + else: + return overrides diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/lifecycle/__init__.py b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/lifecycle/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/lifecycle/lifecycle_sriov_fec_operator.py b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/lifecycle/lifecycle_sriov_fec_operator.py new file mode 100644 index 0000000..7bcd251 --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/lifecycle/lifecycle_sriov_fec_operator.py @@ -0,0 +1,80 @@ +# +# Copyright (c) 2022 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# +# All Rights Reserved. +# + +""" System inventory App lifecycle operator.""" + +from k8sapp_sriov_fec_operator.common import constants as app_constants +from oslo_log import log as logging +from sysinv.common import constants +from sysinv.common import exception +from sysinv.common import kubernetes +from sysinv.common import utils as cutils +from sysinv.helm import lifecycle_base as base +from sysinv.helm.lifecycle_constants import LifecycleConstants + +LOG = logging.getLogger(__name__) + + +class SriovFecOperatorAppLifecycleOperator(base.AppLifecycleOperator): + def app_lifecycle_actions(self, context, conductor_obj, app_op, app, hook_info): + """Perform lifecycle actions for an operation + + :param context: request context, can be None + :param conductor_obj: conductor object, can be None + :param app_op: AppOperator object + :param app: AppOperator.Application object + :param hook_info: LifecycleHookInfo object + + """ + if hook_info.lifecycle_type == constants.APP_LIFECYCLE_TYPE_FLUXCD_REQUEST: + if hook_info.operation == constants.APP_APPLY_OP: + if hook_info.relative_timing == constants.APP_LIFECYCLE_TIMING_POST: + return self.post_apply(app_op, app, hook_info) + + if hook_info.lifecycle_type == constants.APP_LIFECYCLE_TYPE_OPERATION: + if hook_info.operation == constants.APP_REMOVE_OP: + if hook_info.relative_timing == constants.APP_LIFECYCLE_TIMING_PRE: + return self.pre_remove(app) + + if hook_info.lifecycle_type == constants.APP_LIFECYCLE_TYPE_OPERATION: + if hook_info.operation == constants.APP_REMOVE_OP: + if hook_info.relative_timing == constants.APP_LIFECYCLE_TIMING_POST: + return self.post_remove(app) + + super(SriovFecOperatorAppLifecycleOperator, self).app_lifecycle_actions( + context, conductor_obj, app_op, app, hook_info + ) + + def post_apply(self, app_op, app, hook_info): + if LifecycleConstants.EXTRA not in hook_info: + raise exception.LifecycleMissingInfo("Missing {}".format(LifecycleConstants.EXTRA)) + if LifecycleConstants.RETURN_CODE not in hook_info[LifecycleConstants.EXTRA]: + raise exception.LifecycleMissingInfo( + "Missing {} {}".format(LifecycleConstants.EXTRA, LifecycleConstants.RETURN_CODE)) + + # Raise a specific exception to be caught by the + # retry decorator and attempt a re-apply + if not hook_info[LifecycleConstants.EXTRA][LifecycleConstants.RETURN_CODE] and \ + not app_op.is_app_aborted(app.name): + LOG.info("%s app failed applying. Retrying." % str(app.name)) + raise exception.ApplicationApplyFailure(name=app.name) + + def pre_remove(self, app): + LOG.debug( + "Executing pre_remove for {} app".format(app_constants.HELM_APP_SRIOV_FEC_OPERATOR) + ) + LOG.debug("{} app: pre_remove".format(app.name)) + + def post_remove(self, app): + LOG.debug( + "Executing post_remove for {} app".format(app_constants.HELM_APP_SRIOV_FEC_OPERATOR) + ) + cmd = ['kubectl', '--kubeconfig', kubernetes.KUBERNETES_ADMIN_CONF, + 'delete', 'namespace', app_constants.HELM_NS_SRIOV_FEC_SYSTEM] + stdout, stderr = cutils.trycmd(*cmd) + LOG.debug("{} app: cmd={} stdout={} stderr={}".format(app.name, cmd, stdout, stderr)) diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/tests/__init__.py b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/tests/test_plugins.py b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/tests/test_plugins.py new file mode 100644 index 0000000..b3db025 --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/tests/test_plugins.py @@ -0,0 +1,43 @@ +# +# Copyright (c) 2022 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# + +from k8sapp_sriov_fec_operator.common import constants as app_constants +from sysinv.tests.helm.test_helm import HelmOperatorTestSuiteMixin + +from sysinv.tests.db import base as dbbase + + +class K8SAppSriovFecOperatorAppMixin(object): + app_name = app_constants.HELM_APP_SRIOV_FEC_OPERATOR + path_name = app_name + '.tgz' + + def setUp(self): + super(K8SAppSriovFecOperatorAppMixin, self).setUp() + + +# Test Configuration: +# - Controller +# - IPv6 +# - Ceph Storage +# - sriov-fec-operator app +class K8SAppSriovFecOperatorControllerTestCase(K8SAppSriovFecOperatorAppMixin, + dbbase.BaseIPv6Mixin, + dbbase.BaseCephStorageBackendMixin, + HelmOperatorTestSuiteMixin, + dbbase.ControllerHostTestCase): + pass + + +# Test Configuration: +# - AIO +# - IPv4 +# - Ceph Storage +# - sriov-fec-operator-app +class K8SAppSriovFecOperatorAIOTestCase(K8SAppSriovFecOperatorAppMixin, + dbbase.BaseCephStorageBackendMixin, + HelmOperatorTestSuiteMixin, + dbbase.AIOSimplexHostTestCase): + pass diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/tests/test_sriov_fec_operator.py b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/tests/test_sriov_fec_operator.py new file mode 100644 index 0000000..846aa60 --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/k8sapp_sriov_fec_operator/tests/test_sriov_fec_operator.py @@ -0,0 +1,19 @@ +# Copyright (c) 2022 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# + +from k8sapp_sriov_fec_operator.tests import test_plugins + +from sysinv.db import api as dbapi +from sysinv.tests.db import utils as dbutils +from sysinv.tests.helm import base + + +class SriovFecOperatorTestCase(test_plugins.K8SAppSriovFecOperatorAppMixin, + base.HelmTestCaseMixin): + + def setUp(self): + super(SriovFecOperatorTestCase, self).setUp() + self.app = dbutils.create_test_app(name='sriov-fec-operator') + self.dbapi = dbapi.get_instance() diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/pylint.rc b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/pylint.rc new file mode 100644 index 0000000..5892deb --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/pylint.rc @@ -0,0 +1,320 @@ +[MASTER] +# Specify a configuration file. +rcfile=pylint.rc + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Add files or directories to the blacklist. Should be base names, not paths. +ignore=tests + +# Pickle collected data for later comparisons. +persistent=yes + +# List of plugins (as comma separated values of python modules names) to load, +# usually to register additional checkers. +load-plugins= + +# Use multiple processes to speed up Pylint. +jobs=4 + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code +extension-pkg-whitelist=lxml.etree,greenlet + + + +[MESSAGES CONTROL] +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time. +# +# Python3 checker: +# +# E1601: print-statement +# E1602: parameter-unpacking +# E1603: unpacking-in-except +# E1604: old-raise-syntax +# E1605: backtick +# E1606: long-suffix +# E1607: old-ne-operator +# E1608: old-octal-literal +# E1609: import-star-module-level +# E1610: non-ascii-bytes-literal +# E1611: invalid-unicode-literal +# W1601: apply-builtin +# W1602: basestring-builtin +# W1603: buffer-builtin +# W1604: cmp-builtin +# W1605: coerce-builtin +# W1606: execfile-builtin +# W1607: file-builtin +# W1608: long-builtin +# W1609: raw_input-builtin +# W1610: reduce-builtin +# W1611: standarderror-builtin +# W1612: unicode-builtin +# W1613: xrange-builtin +# W1614: coerce-method +# W1615: delslice-method +# W1616: getslice-method +# W1617: setslice-method +# W1618: no-absolute-import +# W1619: old-division +# W1620: dict-iter-method +# W1621: dict-view-method +# W1622: next-method-called +# W1623: metaclass-assignment +# W1624: indexing-exception +# W1625: raising-string +# W1626: reload-builtin +# W1627: oct-method +# W1628: hex-method +# W1629: nonzero-method +# W1630: cmp-method +# W1632: input-builtin +# W1633: round-builtin +# W1634: intern-builtin +# W1635: unichr-builtin +# W1636: map-builtin-not-iterating +# W1637: zip-builtin-not-iterating +# W1638: range-builtin-not-iterating +# W1639: filter-builtin-not-iterating +# W1640: using-cmp-argument +# W1641: eq-without-hash +# W1642: div-method +# W1643: idiv-method +# W1644: rdiv-method +# W1645: exception-message-attribute +# W1646: invalid-str-codec +# W1647: sys-max-int +# W1648: bad-python3-import +# W1649: deprecated-string-function +# W1650: deprecated-str-translate-call +# W1651: deprecated-itertools-function +# W1652: deprecated-types-field +# W1653: next-method-defined +# W1654: dict-items-not-iterating +# W1655: dict-keys-not-iterating +# W1656: dict-values-not-iterating +# W1657: deprecated-operator-function +# W1658: deprecated-urllib-function +# W1659: xreadlines-attribute +# W1660: deprecated-sys-function +# W1661: exception-escape +# W1662: comprehension-escape +enable=E1603,E1609,E1610,E1602,E1606,E1608,E1607,E1605,E1604,E1601,E1611,W1652, + W1651,W1649,W1657,W1660,W1658,W1659,W1623,W1622,W1620,W1621,W1645,W1641, + W1624,W1648,W1625,W1611,W1662,W1661,W1650,W1640,W1630,W1614,W1615,W1642, + W1616,W1628,W1643,W1629,W1627,W1644,W1617,W1601,W1602,W1603,W1604,W1605, + W1654,W1655,W1656,W1619,W1606,W1607,W1639,W1618,W1632,W1634,W1608,W1636, + W1653,W1646,W1638,W1609,W1610,W1626,W1633,W1647,W1635,W1612,W1613,W1637 + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). +# See "Messages Control" section of +# https://pylint.readthedocs.io/en/latest/user_guide +# We are disabling (C)onvention +# We are disabling (R)efactor +# W0212: protected-access +# W1618: no-absolute-import +disable=C, R, W0212, W1618 + +[REPORTS] +# Set the output format. Available formats are text, parseable, colorized, msvs +# (visual studio) and html +output-format=text + +# Put messages in a separate file for each module / package specified on the +# command line instead of printing them on stdout. Reports (if any) will be +# written in a file name "pylint_global.[txt|html]". +files-output=no + +# Tells whether to display a full report or only the messages +reports=yes + +# Python expression which should return a note less than 10 (10 is the highest +# note). You have access to the variables errors warning, statement which +# respectively contain the number of errors / warnings messages and the total +# number of statements analyzed. This is used by the global evaluation report +# (RP0004). +evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) + + +[SIMILARITIES] +# Minimum lines number of a similarity. +min-similarity-lines=4 + +# Ignore comments when computing similarities. +ignore-comments=yes + +# Ignore docstrings when computing similarities. +ignore-docstrings=yes + + +[FORMAT] +# Maximum number of characters on a single line. +max-line-length=85 + +# Maximum number of lines in a module +max-module-lines=1000 + +# String used as indentation unit. This is usually 4 spaces or "\t" (1 tab). +indent-string=' ' + + +[TYPECHECK] +# Tells whether missing members accessed in mixin class should be ignored. A +# mixin class is detected if its name ends with "mixin" (case insensitive). +ignore-mixin-members=yes + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis +ignored-modules=distutils,eventlet.green.subprocess,six,six.moves + +# List of classes names for which member attributes should not be checked +# (useful for classes with attributes dynamically set). +# pylint is confused by sqlalchemy Table, as well as sqlalchemy Enum types +# ie: (unprovisioned, identity) +# LookupDict in requests library confuses pylint +ignored-classes=SQLObject, optparse.Values, thread._local, _thread._local, + Table, unprovisioned, identity, LookupDict + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E0201 when accessed. Python regular +# expressions are accepted. +generated-members=REQUEST,acl_users,aq_parent + + +[BASIC] +# List of builtins function names that should not be used, separated by a comma +bad-functions=map,filter,apply,input + +# Regular expression which should only match correct module names +module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ + +# Regular expression which should only match correct module level names +const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ + +# Regular expression which should only match correct class names +class-rgx=[A-Z_][a-zA-Z0-9]+$ + +# Regular expression which should only match correct function names +function-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression which should only match correct method names +method-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression which should only match correct instance attribute names +attr-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression which should only match correct argument names +argument-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression which should only match correct variable names +variable-rgx=[a-z_][a-z0-9_]{2,30}$ + +# Regular expression which should only match correct list comprehension / +# generator expression variable names +inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ + +# Good variable names which should always be accepted, separated by a comma +good-names=i,j,k,ex,Run,_ + +# Bad variable names which should always be refused, separated by a comma +bad-names=foo,bar,baz,toto,tutu,tata + +# Regular expression which should only match functions or classes name which do +# not require a docstring +no-docstring-rgx=__.*__ + + +[MISCELLANEOUS] +# List of note tags to take in consideration, separated by a comma. +notes=FIXME,XXX,TODO + + +[VARIABLES] +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# A regular expression matching the beginning of the name of dummy variables +# (i.e. not used). +dummy-variables-rgx=_|dummy + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid to define new builtins when possible. +additional-builtins= + + +[IMPORTS] +# Deprecated modules which should not be used, separated by a comma +deprecated-modules=regsub,string,TERMIOS,Bastion,rexec + +# Create a graph of every (i.e. internal and external) dependencies in the +# given file (report RP0402 must not be disabled) +import-graph= + +# Create a graph of external dependencies in the given file (report RP0402 must +# not be disabled) +ext-import-graph= + +# Create a graph of internal dependencies in the given file (report RP0402 must +# not be disabled) +int-import-graph= + + +[DESIGN] +# Maximum number of arguments for function / method +max-args=5 + +# Argument names that match this expression will be ignored. Default to name +# with leading underscore +ignored-argument-names=_.* + +# Maximum number of locals for function / method body +max-locals=15 + +# Maximum number of return / yield for function / method body +max-returns=6 + +# Maximum number of branch for function / method body +max-branchs=12 + +# Maximum number of statements in function / method body +max-statements=50 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=20 + + +[CLASSES] +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__,__new__,setUp + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + + +[EXCEPTIONS] +# Exceptions that will emit a warning when being caught. Defaults to +# "Exception" +overgeneral-exceptions=Exception diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/requirements.txt b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/requirements.txt new file mode 100644 index 0000000..5bc15a1 --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/requirements.txt @@ -0,0 +1,2 @@ +pbr>=0.5 +PyYAML==3.10 diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/setup.cfg b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/setup.cfg new file mode 100644 index 0000000..1226b24 --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/setup.cfg @@ -0,0 +1,42 @@ +[metadata] +name = k8sapp-sriov-fec-operator +summary = StarlingX sysinv extensions for sriov fec operator +long_description = file: README.rst +long_description_content_type = text/x-rst +license = Apache 2.0 +author = StarlingX +author-email = starlingx-discuss@lists.starlingx.io +home-page = https://www.starlingx.io/ +classifier = + Environment :: OpenStack + Intended Audience :: Information Technology + Intended Audience :: System Administrators + License :: OSI Approved :: Apache Software License + Operating System :: POSIX :: Linux + Programming Language :: Python + Programming Language :: Python :: 2 + Programming Language :: Python :: 2.7 + Programming Language :: Python :: 3 + Programming Language :: Python :: 3.4 + Programming Language :: Python :: 3.5 + +[files] +packages = + k8sapp_sriov_fec_operator + +[global] +setup-hooks = + pbr.hooks.setup_hook + +[entry_points] +systemconfig.helm_applications = + sriov-fec-operator = systemconfig.helm_plugins.sriov_fec_operator + +systemconfig.helm_plugins.sriov_fec_operator = + 001_sriov-fec-operator = k8sapp_sriov_fec_operator.helm.sriov_fec_operator:SriovFecOperatorHelm + +systemconfig.app_lifecycle = + sriov-fec-operator = k8sapp_sriov_fec_operator.lifecycle.lifecycle_sriov_fec_operator:SriovFecOperatorAppLifecycleOperator + +[wheel] +universal = 1 diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/setup.py b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/setup.py new file mode 100644 index 0000000..5a2f6e0 --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/setup.py @@ -0,0 +1,12 @@ +# +# Copyright (c) 2022 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# + +import setuptools + + +setuptools.setup( + setup_requires=['pbr>=2.0.0'], + pbr=True) diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/test-requirements.txt b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/test-requirements.txt new file mode 100644 index 0000000..e248a36 --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/test-requirements.txt @@ -0,0 +1,26 @@ +# The order of packages is significant, because pip processes them in the order +# of appearance. Changing the order has an impact on the overall integration +# process, which may cause wedges in the gate later. +flake8<3.8.0 +pycodestyle<2.6.0 # MIT License +hacking>=1.1.0,<=2.0.0 # Apache-2.0 +coverage>=3.6 +discover +fixtures>=3.0.0 # Apache-2.0/BSD +mock>=2.0.0 # BSD +passlib>=1.7.0 +psycopg2-binary +python-subunit>=0.0.18 +requests-mock>=0.6.0 # Apache-2.0 +sphinx!=1.2.0,!=1.3b1,<1.3,>=1.1.2 +oslosphinx<2.6.0,>=2.5.0 # Apache-2.0 +oslotest>=3.2.0 # Apache-2.0 +stestr>=1.0.0 # Apache-2.0 +testrepository>=0.0.18 +testtools!=1.2.0,>=0.9.36 +tempest-lib<0.5.0,>=0.4.0 +ipaddr +pytest +pyudev +migrate +markupsafe diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/tox.ini b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/tox.ini new file mode 100644 index 0000000..e03e1fa --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/tox.ini @@ -0,0 +1,143 @@ +[tox] +envlist = flake8,py27,py36,py39,pylint,bandit +minversion = 1.6 +# skipsdist = True +#,pip-missing-reqs + +# tox does not work if the path to the workdir is too long, so move it to /tmp +toxworkdir = /tmp/{env:USER}_k8sapp_sriov_fec_operatortox +stxdir = {toxinidir}/../../.. +distshare={toxworkdir}/.tox/distshare + +[testenv] +# usedevelop = True +# enabling usedevelop results in py27 develop-inst: +# Exception: Versioning for this project requires either an sdist tarball, +# or access to an upstream git repository. +# Note. site-packages is false and rpm-python must be yum installed on your dev machine. +sitepackages = False + +# tox is silly... these need to be separated by a newline.... +whitelist_externals = bash + find + +install_command = pip install --use-deprecated legacy-resolver \ + -v -v -v \ + -c{toxinidir}/upper-constraints.txt \ + -c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/stable/stein/upper-constraints.txt} \ + {opts} {packages} + +# Note the hash seed is set to 0 until can be tested with a +# random hash seed successfully. +setenv = VIRTUAL_ENV={envdir} + PYTHONHASHSEED=0 + PYTHONDONTWRITEBYTECODE=1 + OS_TEST_PATH=./k8sapp_sriov_fec_operator/tests + LANG=en_US.UTF-8 + LANGUAGE=en_US:en + LC_ALL=C + EVENTS_YAML=./k8sapp_sriov_fec_operator/tests/events_for_testing.yaml + SYSINV_TEST_ENV=True + TOX_WORK_DIR={toxworkdir} + PYLINTHOME={toxworkdir} + +deps = -r{toxinidir}/requirements.txt + -r{toxinidir}/test-requirements.txt + -e{[tox]stxdir}/config/sysinv/sysinv/sysinv + -e{[tox]stxdir}/config/tsconfig/tsconfig + -e{[tox]stxdir}/fault/fm-api/source + -e{[tox]stxdir}/fault/python-fmclient/fmclient + -e{[tox]stxdir}/utilities/ceph/python-cephclient/python-cephclient + -e{[tox]stxdir}/update/cgcs-patch/cgcs-patch + + +commands = + find . -type f -name "*.pyc" -delete + +[flake8] +exclude = build,dist,tools,.eggs +max-line-length=120 + +[testenv:flake8] +basepython = python3 +deps = -r{toxinidir}/test-requirements.txt + flake8-bugbear +commands = + flake8 {posargs} . + +[testenv:py27] +basepython = python2.7 +commands = + {[testenv]commands} + stestr run {posargs} + stestr slowest + +[testenv:py36] +basepython = python3.6 +commands = + {[testenv]commands} + stestr run {posargs} + stestr slowest + +[testenv:py39] +basepython = python3.9 +install_command = pip install \ + -v -v -v --use-deprecated legacy-resolver \ + -c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/starlingx/root/raw/branch/master/build-tools/requirements/debian/upper-constraints.txt} \ + {opts} {packages} +commands = + {[testenv]commands} + stestr run {posargs} + stestr slowest + + +[testenv:pep8] +# testenv:flake8 clone +basepython = {[testenv:flake8]basepython} +deps = {[testenv:flake8]deps} +commands = {[testenv:flake8]commands} + +[testenv:venv] +commands = {posargs} + +[bandit] + +[testenv:bandit] +basepython = python3 +deps = -r{toxinidir}/test-requirements.txt + bandit + +commands = bandit --ini tox.ini -n 5 -r k8sapp_sriov_fec_operator + +[testenv:pylint] +basepython = python3.6 +sitepackages = False + +deps = {[testenv]deps} + pylint +commands = + pylint {posargs} k8sapp_sriov_fec_operator --rcfile=./pylint.rc + +[testenv:cover] +basepython = python2.7 +deps = {[testenv]deps} +setenv = {[testenv]setenv} + PYTHON=coverage run --parallel-mode + +commands = + {[testenv]commands} + coverage erase + stestr run {posargs} + coverage combine + coverage html -d cover + coverage xml -o cover/coverage.xml + coverage report + +[testenv:pip-missing-reqs] +# do not install test-requirements as that will pollute the virtualenv for +# determining missing packages +# this also means that pip-missing-reqs must be installed separately, outside +# of the requirements.txt files +deps = pip_missing_reqs + -rrequirements.txt +commands=pip-missing-reqs -d --ignore-file=/k8sapp_sriov_fec_operator/tests k8sapp_sriov_fec_operator diff --git a/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/upper-constraints.txt b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/upper-constraints.txt new file mode 100644 index 0000000..9c30188 --- /dev/null +++ b/python-k8sapp-sriov-fec-operator/k8sapp_sriov_fec_operator/upper-constraints.txt @@ -0,0 +1 @@ +# Override upstream constraints based on StarlingX load diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..c01ade2 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +# Nothing diff --git a/sriov-fec-operator-images/centos/build-sriov-fec-operator-image.sh b/sriov-fec-operator-images/centos/build-sriov-fec-operator-image.sh new file mode 100644 index 0000000..6a76b5a --- /dev/null +++ b/sriov-fec-operator-images/centos/build-sriov-fec-operator-image.sh @@ -0,0 +1,90 @@ +#!/bin/sh +# +# Copyright (c) 2022 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# + +IMAGE=$1 +IMAGE_TAG=$2 +export CONTAINER_TOOL=docker +export BASE_IMAGE="centos:7.9.2009" + +echo "=============== build script ================" +echo image: "${IMAGE}" +echo image_tag: "${IMAGE_TAG}" +pwd + +if [ -z "${IMAGE_TAG}" ]; then + echo "Image tag must be specified. build ${IMAGE} Aborting..." >&2 + exit 1 +fi + +build_labeler_image() { + export LABELER_IMAGE=$1 + + sed -i "/FROM.*registry.*/c\FROM ${BASE_IMAGE}" labeler/Dockerfile + + echo "labeler_image: ${LABELER_IMAGE}" + + pwd + make -C labeler image + + echo "Labeler image build done" + + return 0 +} + +build_daemon_image() { + export SRIOV_FEC_DAEMON_IMAGE=$1 + + sed -i "/FROM.*registry.*/c\FROM ${BASE_IMAGE}" \ + sriov-fec/Dockerfile.daemon + + echo "daemon_image: ${SRIOV_FEC_DAEMON_IMAGE}" + + pwd + make -C sriov-fec image-sriov-fec-daemon + + echo "Daemon image build done" + + return 0 +} + +build_operator_image() { + + export SRIOV_FEC_OPERATOR_IMAGE=$1 + + sed -i "/FROM.*registry.*/c\FROM ${BASE_IMAGE}" \ + sriov-fec/Dockerfile + + echo "operator_image: ${SRIOV_FEC_OPERATOR_IMAGE}" + + pwd + make -C sriov-fec image-sriov-fec-operator + + echo "Operator image build done" + + return 0 +} + +case ${IMAGE} in + labeler) + echo "Build image: labeler" + build_labeler_image "${IMAGE_TAG}" + ;; + daemon) + echo "build image: daemon" + build_daemon_image "${IMAGE_TAG}" + ;; + operator) + echo "build image: Operator" + build_operator_image "${IMAGE_TAG}" + ;; + *) + echo "Unsupported ARGS in ${image_build_file}: ${IMAGE}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/sriov-fec-operator-images/centos/sriov-fec-daemon.stable_docker_image b/sriov-fec-operator-images/centos/sriov-fec-daemon.stable_docker_image new file mode 100644 index 0000000..d6406f5 --- /dev/null +++ b/sriov-fec-operator-images/centos/sriov-fec-daemon.stable_docker_image @@ -0,0 +1,8 @@ +BUILDER=script +LABEL=sriov-fec-daemon +SOURCE_REPO=https://github.com/smart-edge-open/sriov-fec-operator.git +SOURCE_REF=0293536cd6712d8f650e18191f3a4d1579f8f633 +COMMAND=bash +SCRIPT=build-sriov-fec-operator-image.sh +ARGS=daemon + diff --git a/sriov-fec-operator-images/centos/sriov-fec-labeler.stable_docker_image b/sriov-fec-operator-images/centos/sriov-fec-labeler.stable_docker_image new file mode 100644 index 0000000..ad8dda8 --- /dev/null +++ b/sriov-fec-operator-images/centos/sriov-fec-labeler.stable_docker_image @@ -0,0 +1,8 @@ +BUILDER=script +LABEL=sriov-fec-labeler +SOURCE_REPO=https://github.com/smart-edge-open/sriov-fec-operator.git +SOURCE_REF=0293536cd6712d8f650e18191f3a4d1579f8f633 +COMMAND=bash +SCRIPT=build-sriov-fec-operator-image.sh +ARGS=labeler + diff --git a/sriov-fec-operator-images/centos/sriov-fec-operator.stable_docker_image b/sriov-fec-operator-images/centos/sriov-fec-operator.stable_docker_image new file mode 100644 index 0000000..20266d3 --- /dev/null +++ b/sriov-fec-operator-images/centos/sriov-fec-operator.stable_docker_image @@ -0,0 +1,8 @@ +BUILDER=script +LABEL=sriov-fec-operator +SOURCE_REPO=https://github.com/smart-edge-open/sriov-fec-operator.git +SOURCE_REF=0293536cd6712d8f650e18191f3a4d1579f8f633 +COMMAND=bash +SCRIPT=build-sriov-fec-operator-image.sh +ARGS=operator + diff --git a/stx-sriov-fec-operator-helm/centos/build_srpm.data b/stx-sriov-fec-operator-helm/centos/build_srpm.data new file mode 100644 index 0000000..bbd8142 --- /dev/null +++ b/stx-sriov-fec-operator-helm/centos/build_srpm.data @@ -0,0 +1,9 @@ +SRC_DIR="stx-sriov-fec-operator-helm" + +TIS_PATCH_VER=PKG_GITREVCOUNT + +#FluxCD version +SRIOV_FEC_OPERATOR_VERSION=0.1.0 + +COPY_LIST="${PKG_BASE}/${SRC_DIR}/helm-charts/* ${PKG_BASE}/${SRC_DIR}/files/* +${PKG_BASE}/${SRC_DIR}/fluxcd-manifests/*" diff --git a/stx-sriov-fec-operator-helm/centos/stx-sriov-fec-operator-helm.spec b/stx-sriov-fec-operator-helm/centos/stx-sriov-fec-operator-helm.spec new file mode 100644 index 0000000..febcf67 --- /dev/null +++ b/stx-sriov-fec-operator-helm/centos/stx-sriov-fec-operator-helm.spec @@ -0,0 +1,94 @@ +# Application tunables (maps to metadata) +%global app_name sriov-fec-operator +%global helm_repo stx-platform + +# Install location +%global app_folder /usr/local/share/applications/helm + +# Build variables +%global helm_folder /usr/lib/helm + +Summary: StarlingX Sriov Fec Operator Helm Charts +Name: stx-sriov-fec-operator-helm +Version: 1.0 +Release: %{tis_patch_ver}%{?_tis_dist} +License: Apache-2.0 +Group: base +Packager: Intel +URL: unknown + +Source0: %{name}-%{version}.tar.gz + +BuildArch: noarch + +BuildRequires: helm +BuildRequires: python-k8sapp-sriov-fec-operator +BuildRequires: python-k8sapp-sriov-fec-operator-wheels + +%description +StarlingX Sriov Fec Operator Helm Charts + +%package fluxcd +Summary: StarlingX Sriov Fec Operator Application FluxCD Helm Charts +Group: base +License: Apache-2.0 + +%description fluxcd +StarlingX Sriov Fec Operator Application FluxCD Helm Charts + +%prep +%setup -n %{name}-%{version} + +%build +# This chart does not require chartmuseum server since +# it has no dependency on local or stable repos. +# Make the charts. These produce a tgz file +cd helm-charts +make sriov-fec-operator + +# switch back to source root +cd - + + +# Create a chart tarball compliant with sysinv kube-app.py +%define app_staging %{_builddir}/staging +%define app_tarball_fluxcd %{app_name}-%{version}-%{tis_patch_ver}.tgz +%define app_path %{_builddir}/%{app_tarball_fluxcd} + +# Setup staging +cd %{_builddir}/%{name}-%{version} +mkdir -p %{app_staging} +cp files/metadata.yaml %{app_staging} +cp -R fluxcd-manifests %{app_staging}/ +mkdir -p %{app_staging}/charts +cp helm-charts/*.tgz %{app_staging}/charts + +# Copy the plugins: installed in the buildroot +mkdir -p %{app_staging}/plugins +cp /plugins/%{app_name}/*.whl %{app_staging}/plugins + +cd %{app_staging} + +# Populate metadata +sed -i 's/@APP_NAME@/%{app_name}/g' %{app_staging}/metadata.yaml +sed -i 's/@APP_VERSION@/%{version}-%{tis_patch_ver}/g' %{app_staging}/metadata.yaml +sed -i 's/@HELM_REPO@/%{helm_repo}/g' %{app_staging}/metadata.yaml + +# calculate checksum of all files in app_staging +find . -type f ! -name '*.md5' -print0 | xargs -0 md5sum > checksum.md5 +# package the app +tar -zcf %{app_path} -C %{app_staging}/ . + +# switch back to source root +cd - + +# Cleanup staging +rm -fr %{app_staging} + +%install +install -d -m 755 %{buildroot}/%{app_folder} +install -p -D -m 755 %{app_path} %{buildroot}/%{app_folder} + +%files +%defattr(-,root,root,-) +%{app_folder}/%{app_tarball_fluxcd} diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/README b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/README new file mode 100644 index 0000000..b773ef4 --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/README @@ -0,0 +1,5 @@ +This directory contains all StarlingX charts that need to be built for this +application. Some charts are common across applications. These common charts +reside in the stx-config/kubernetes/helm-charts directory. To include these in +this application update the build_srpm.data file and use the COPY_LIST_TO_TAR +mechanism to populate these common charts. diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/files/index.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/files/index.yaml new file mode 100644 index 0000000..36db709 --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/files/index.yaml @@ -0,0 +1,3 @@ +apiVersion: v1 +entries: {} +generated: 2019-01-07T12:33:46.098166523-06:00 diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/files/metadata.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/files/metadata.yaml new file mode 100644 index 0000000..d2c6295 --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/files/metadata.yaml @@ -0,0 +1,5 @@ +maintain_user_overrides: true + +app_name: @APP_NAME@ +app_version: @APP_VERSION@ +helm_repo: @HELM_REPO@ diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/files/repositories.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/files/repositories.yaml new file mode 100644 index 0000000..fe1299f --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/files/repositories.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +generated: 2019-01-02T15:19:36.215111369-06:00 +repositories: +- caFile: "" + cache: /builddir/.helm/repository/cache/local-index.yaml + certFile: "" + keyFile: "" + name: local + password: "" + url: http://127.0.0.1:8879/charts + username: "" diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/base/helmrepository.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/base/helmrepository.yaml new file mode 100644 index 0000000..7df32de --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/base/helmrepository.yaml @@ -0,0 +1,13 @@ +# +# Copyright (c) 2022 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# + +apiVersion: source.toolkit.fluxcd.io/v1beta1 +kind: HelmRepository +metadata: + name: stx-platform +spec: + url: http://192.168.206.1:8080/helm_charts/stx-platform + interval: 60m diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/base/kustomization.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/base/kustomization.yaml new file mode 100644 index 0000000..89831ab --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/base/kustomization.yaml @@ -0,0 +1,8 @@ +# +# Copyright (c) 2022 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# + +resources: + - helmrepository.yaml diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/base/namespace.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/base/namespace.yaml new file mode 100644 index 0000000..3236681 --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/base/namespace.yaml @@ -0,0 +1,12 @@ +# +# Copyright (c) 2022 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# + +apiVersion: v1 +kind: Namespace +metadata: + labels: + control-plane: controller-manager + name: sriov-fec-system diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/kustomization.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/kustomization.yaml new file mode 100644 index 0000000..1e930a4 --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/kustomization.yaml @@ -0,0 +1,6 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: sriov-fec-system +resources: + - base + - sriov-fec-operator diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/sriov-fec-operator/helmrelease.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/sriov-fec-operator/helmrelease.yaml new file mode 100644 index 0000000..195b9fc --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/sriov-fec-operator/helmrelease.yaml @@ -0,0 +1,36 @@ +# +# Copyright (c) 2022 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# + +apiVersion: "helm.toolkit.fluxcd.io/v2beta1" +kind: HelmRelease +metadata: + name: sriov-fec-operator + labels: + chart_group: sriov-fec-operator +spec: + releaseName: sriov-fec-operator + chart: + spec: + chart: sriov-fec-operator + version: 0.1.1 + sourceRef: + kind: HelmRepository + name: stx-platform + interval: 5m + timeout: 30m + test: + enable: false + install: + disableHooks: false + upgrade: + disableHooks: false + valuesFrom: + - kind: Secret + name: sriov-fec-operator-static-overrides + valuesKey: sriov-fec-operator-static-overrides.yaml + - kind: Secret + name: sriov-fec-operator-system-overrides + valuesKey: sriov-fec-operator-system-overrides.yaml diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/sriov-fec-operator/kustomization.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/sriov-fec-operator/kustomization.yaml new file mode 100644 index 0000000..cf0cc82 --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/sriov-fec-operator/kustomization.yaml @@ -0,0 +1,18 @@ +# +# Copyright (c) 2022 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# + +namespace: sriov-fec-system +resources: + - helmrelease.yaml +secretGenerator: + - name: sriov-fec-operator-static-overrides + files: + - sriov-fec-operator-static-overrides.yaml + - name: sriov-fec-operator-system-overrides + files: + - sriov-fec-operator-system-overrides.yaml +generatorOptions: + disableNameSuffixHash: true diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/sriov-fec-operator/sriov-fec-operator-static-overrides.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/sriov-fec-operator/sriov-fec-operator-static-overrides.yaml new file mode 100644 index 0000000..7086148 --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/sriov-fec-operator/sriov-fec-operator-static-overrides.yaml @@ -0,0 +1,27 @@ +# +# Copyright (c) 2022 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# + +imagePullSecrets: [{"name": "default-registry-key"}] + +images: + tags: + sriov-fec-operator: sriov-fec/sriov-fec-operator:v2.1.1 + sriov-fec-labeler: sriov-fec/sriov-fec-labeler:v2.1.1 + sriov-fec-daemon: sriov-fec/sriov-fec-daemon:v2.1.1 + +sriovNetworkDevicePlugin: +image: + digest: "f717f9778f48665b7c592f2225df51b755a1fe048125e034a286c564ee10fd37" + repository: ghcr.io/k8snetworkplumbingwg/sriov-network-device-plugin + pullPolicy: IfNotPresent + tag: v3.5.1 + +kubeRbacProxy: + image: + digest: "0df4ae70e3bd0feffcec8f5cdb428f4abe666b667af991269ec5cb0bbda65869" + repository: gcr.io/kubebuilder/kube-rbac-proxy + pullPolicy: IfNotPresent + tag: v0.11.0 diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/sriov-fec-operator/sriov-fec-operator-system-overrides.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/sriov-fec-operator/sriov-fec-operator-system-overrides.yaml new file mode 100644 index 0000000..37bf228 --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/fluxcd-manifests/sriov-fec-operator/sriov-fec-operator-system-overrides.yaml @@ -0,0 +1,6 @@ +# +# Copyright (c) 2022 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# + diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/Makefile b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/Makefile new file mode 100644 index 0000000..ea8a380 --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/Makefile @@ -0,0 +1,43 @@ +# +# Copyright 2017 The Openstack-Helm Authors. +# +# Copyright (c) 2022 Intel Corporation +# +# SPDX-License-Identifier: Apache-2.0 +# +# It's necessary to set this because some environments don't link sh -> bash. +SHELL := /bin/bash +TASK := build + +EXCLUDES := helm-toolkit doc tests tools logs tmp +CHARTS := helm-toolkit $(filter-out $(EXCLUDES), $(patsubst %/.,%,$(wildcard */.))) + +.PHONY: $(EXCLUDES) $(CHARTS) + +all: $(CHARTS) + +$(CHARTS): + @if [ -d $@ ]; then \ + echo; \ + echo "===== Processing [$@] chart ====="; \ + make $(TASK)-$@; \ + fi + +init-%: + if [ -f $*/Makefile ]; then make -C $*; fi + if [ -f $*/requirements.yaml ]; then helm dep up $*; fi + +lint-%: init-% + if [ -d $* ]; then helm lint $*; fi + +build-%: + if [ -d $* ]; then helm package $*; fi + +clean: + @echo "Clean all build artifacts" + rm -f */templates/_partials.tpl */templates/_globals.tpl + rm -f *tgz */charts/*tgz */requirements.lock + rm -rf */charts */tmpcharts + +%: + @: diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/.helmignore b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/.helmignore new file mode 100644 index 0000000..50af031 --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/.helmignore @@ -0,0 +1,22 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/Chart.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/Chart.yaml new file mode 100644 index 0000000..efd026f --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +name: sriov-fec-operator +description: A Helm chart for SR-IOV FEC operator deployment +type: application +version: 0.1.1 +appVersion: "22.01.04" diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/certificate.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/certificate.yaml new file mode 100644 index 0000000..907e7d5 --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/certificate.yaml @@ -0,0 +1,21 @@ +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: sriov-fec-serving-cert + namespace: sriov-fec-system +spec: + dnsNames: + - sriov-fec-webhook-service.sriov-fec-system.svc + - sriov-fec-webhook-service.sriov-fec-system.svc.cluster.local + issuerRef: + kind: Issuer + name: sriov-fec-selfsigned-issuer + secretName: webhook-server-cert +--- +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: sriov-fec-selfsigned-issuer + namespace: sriov-fec-system +spec: + selfSigned: {} diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/configmap.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/configmap.yaml new file mode 100644 index 0000000..fe8dfab --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/configmap.yaml @@ -0,0 +1,29 @@ +apiVersion: v1 +data: + controller_manager_config.yaml: | + # SPDX-License-Identifier: Apache-2.0 + # Copyright (c) 2022 Intel Corporation + + apiVersion: controller-runtime.sigs.k8s.io/v1alpha1 + kind: ControllerManagerConfig + health: + healthProbeBindAddress: :8081 + metrics: + bindAddress: 127.0.0.1:8080 + webhook: + port: 9443 + leaderElection: + leaderElect: true + resourceName: bab0ab5c.intel.com +kind: ConfigMap +metadata: + name: sriov-fec-manager-config + namespace: sriov-fec-system +--- +apiVersion: v1 +kind: ConfigMap +metadata: + namespace: sriov-fec-system + name: operator-configuration +data: + isGeneric: "true" diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/crd.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/crd.yaml new file mode 100644 index 0000000..72b15d1 --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/crd.yaml @@ -0,0 +1,1833 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: sriov-fec-system/sriov-fec-serving-cert + controller-gen.kubebuilder.io/version: v0.7.0 + name: sriovfecclusterconfigs.sriovfec.intel.com +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + service: + name: sriov-fec-webhook-service + namespace: sriov-fec-system + path: /convert + conversionReviewVersions: + - v1 + - v1beta1 + group: sriovfec.intel.com + names: + kind: SriovFecClusterConfig + listKind: SriovFecClusterConfigList + plural: sriovfecclusterconfigs + shortNames: + - sfcc + singular: sriovfecclusterconfig + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.syncStatus + name: SyncStatus + type: string + name: v1 + schema: + openAPIV3Schema: + description: SriovFecClusterConfig is the Schema for the sriovfecclusterconfigs + API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: SriovFecClusterConfigSpec defines the desired state of SriovFecClusterConfig + properties: + drainSkip: + type: boolean + nodes: + description: List of node configurations + items: + properties: + nodeName: + description: Name of the node + type: string + physicalFunctions: + description: List of physical functions (cards) configs + items: + description: PhysicalFunctionConfig defines a possible configuration + of a single Physical Function (PF), i.e. card + properties: + bbDevConfig: + description: BBDevConfig is a config for PF's queues + properties: + acc100: + description: ACC100BBDevConfig specifies variables + to configure ACC100 with + properties: + downlink4G: + properties: + aqDepthLog2: + maximum: 4 + minimum: 4 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 16 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + downlink5G: + properties: + aqDepthLog2: + maximum: 4 + minimum: 4 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 16 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + maxQueueSize: + maximum: 1024 + minimum: 1024 + type: integer + numVfBundles: + maximum: 16 + minimum: 16 + type: integer + pfMode: + type: boolean + uplink4G: + properties: + aqDepthLog2: + maximum: 4 + minimum: 4 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 16 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + uplink5G: + properties: + aqDepthLog2: + maximum: 4 + minimum: 4 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 16 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + required: + - downlink4G + - downlink5G + - maxQueueSize + - numVfBundles + - pfMode + - uplink4G + - uplink5G + type: object + n3000: + description: N3000BBDevConfig specifies variables + to configure N3000 with + properties: + downlink: + properties: + bandwidth: + minimum: 0 + type: integer + loadBalance: + minimum: 0 + type: integer + queues: + properties: + vf0: + maximum: 32 + minimum: 0 + type: integer + vf1: + maximum: 32 + minimum: 0 + type: integer + vf2: + maximum: 32 + minimum: 0 + type: integer + vf3: + maximum: 32 + minimum: 0 + type: integer + vf4: + maximum: 32 + minimum: 0 + type: integer + vf5: + maximum: 32 + minimum: 0 + type: integer + vf6: + maximum: 32 + minimum: 0 + type: integer + vf7: + maximum: 32 + minimum: 0 + type: integer + required: + - vf0 + - vf1 + - vf2 + - vf3 + - vf4 + - vf5 + - vf6 + - vf7 + type: object + required: + - bandwidth + - loadBalance + - queues + type: object + flrTimeout: + minimum: 0 + type: integer + networkType: + enum: + - FPGA_5GNR + - FPGA_LTE + type: string + pfMode: + type: boolean + uplink: + properties: + bandwidth: + minimum: 0 + type: integer + loadBalance: + minimum: 0 + type: integer + queues: + properties: + vf0: + maximum: 32 + minimum: 0 + type: integer + vf1: + maximum: 32 + minimum: 0 + type: integer + vf2: + maximum: 32 + minimum: 0 + type: integer + vf3: + maximum: 32 + minimum: 0 + type: integer + vf4: + maximum: 32 + minimum: 0 + type: integer + vf5: + maximum: 32 + minimum: 0 + type: integer + vf6: + maximum: 32 + minimum: 0 + type: integer + vf7: + maximum: 32 + minimum: 0 + type: integer + required: + - vf0 + - vf1 + - vf2 + - vf3 + - vf4 + - vf5 + - vf6 + - vf7 + type: object + required: + - bandwidth + - loadBalance + - queues + type: object + required: + - downlink + - flrTimeout + - networkType + - pfMode + - uplink + type: object + type: object + pciAddress: + description: PCIAdress is a Physical Functions's PCI address + that will be configured according to this spec + pattern: ^[a-fA-F0-9]{4}:[a-fA-F0-9]{2}:[01][a-fA-F0-9]\.[0-7]$ + type: string + pfDriver: + description: PFDriver to bound the PFs to + type: string + vfAmount: + description: VFAmount is an amount of VFs to be created + minimum: 0 + type: integer + vfDriver: + description: VFDriver to bound the VFs to + type: string + required: + - bbDevConfig + - pciAddress + - pfDriver + - vfAmount + - vfDriver + type: object + type: array + required: + - nodeName + - physicalFunctions + type: object + type: array + required: + - nodes + type: object + status: + description: SriovFecClusterConfigStatus defines the observed state of + SriovFecClusterConfig + properties: + lastSyncError: + type: string + syncStatus: + description: Indicates the synchronization status of the CR + type: string + type: object + type: object + served: false + storage: false + subresources: + status: {} + - name: v2 + schema: + openAPIV3Schema: + description: SriovFecClusterConfig is the Schema for the sriovfecclusterconfigs + API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: SriovFecClusterConfigSpec defines the desired state of SriovFecClusterConfig + properties: + acceleratorSelector: + description: Selector describes target accelerator for this spec + properties: + deviceID: + type: string + driver: + pattern: (pci-pf-stub|pci_pf_stub|igb_uio) + type: string + maxVirtualFunctions: + type: integer + pciAddress: + pattern: ^[a-fA-F0-9]{4}:[a-fA-F0-9]{2}:[01][a-fA-F0-9]\.[0-7]$ + type: string + vendorID: + type: string + type: object + drainSkip: + description: Skips drain process when true; default false. Should + be true if operator is running on SNO + type: boolean + nodeSelector: + additionalProperties: + type: string + description: Selector describes target node for this spec + type: object + nodes: + description: List of node configurations. This element is deprecated + and should not be use because it will be removed in next release + of sriov-fec operator. + items: + properties: + nodeName: + description: Name of the node + type: string + physicalFunctions: + description: List of physical functions (cards) configs + items: + properties: + bbDevConfig: + description: BBDevConfig is a config for PF's queues + properties: + acc100: + description: ACC100BBDevConfig specifies variables + to configure ACC100 with + properties: + downlink4G: + properties: + aqDepthLog2: + maximum: 12 + minimum: 1 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 1 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + downlink5G: + properties: + aqDepthLog2: + maximum: 12 + minimum: 1 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 1 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + maxQueueSize: + maximum: 1024 + minimum: 1024 + type: integer + numVfBundles: + maximum: 16 + minimum: 1 + type: integer + pfMode: + type: boolean + uplink4G: + properties: + aqDepthLog2: + maximum: 12 + minimum: 1 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 1 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + uplink5G: + properties: + aqDepthLog2: + maximum: 12 + minimum: 1 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 1 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + required: + - downlink4G + - downlink5G + - maxQueueSize + - numVfBundles + - pfMode + - uplink4G + - uplink5G + type: object + n3000: + description: N3000BBDevConfig specifies variables + to configure N3000 with + properties: + downlink: + properties: + bandwidth: + minimum: 0 + type: integer + loadBalance: + minimum: 0 + type: integer + queues: + properties: + vf0: + maximum: 32 + minimum: 0 + type: integer + vf1: + maximum: 32 + minimum: 0 + type: integer + vf2: + maximum: 32 + minimum: 0 + type: integer + vf3: + maximum: 32 + minimum: 0 + type: integer + vf4: + maximum: 32 + minimum: 0 + type: integer + vf5: + maximum: 32 + minimum: 0 + type: integer + vf6: + maximum: 32 + minimum: 0 + type: integer + vf7: + maximum: 32 + minimum: 0 + type: integer + required: + - vf0 + - vf1 + - vf2 + - vf3 + - vf4 + - vf5 + - vf6 + - vf7 + type: object + required: + - bandwidth + - loadBalance + - queues + type: object + flrTimeout: + minimum: 0 + type: integer + networkType: + enum: + - FPGA_5GNR + - FPGA_LTE + type: string + pfMode: + type: boolean + uplink: + properties: + bandwidth: + minimum: 0 + type: integer + loadBalance: + minimum: 0 + type: integer + queues: + properties: + vf0: + maximum: 32 + minimum: 0 + type: integer + vf1: + maximum: 32 + minimum: 0 + type: integer + vf2: + maximum: 32 + minimum: 0 + type: integer + vf3: + maximum: 32 + minimum: 0 + type: integer + vf4: + maximum: 32 + minimum: 0 + type: integer + vf5: + maximum: 32 + minimum: 0 + type: integer + vf6: + maximum: 32 + minimum: 0 + type: integer + vf7: + maximum: 32 + minimum: 0 + type: integer + required: + - vf0 + - vf1 + - vf2 + - vf3 + - vf4 + - vf5 + - vf6 + - vf7 + type: object + required: + - bandwidth + - loadBalance + - queues + type: object + required: + - downlink + - flrTimeout + - networkType + - pfMode + - uplink + type: object + type: object + pciAddress: + description: PCIAdress is a Physical Functions's PCI address + that will be configured according to this spec + pattern: ^[a-fA-F0-9]{4}:[a-fA-F0-9]{2}:[01][a-fA-F0-9]\.[0-7]$ + type: string + pfDriver: + description: PFDriver to bound the PFs to + pattern: (pci-pf-stub|pci_pf_stub|igb_uio) + type: string + vfAmount: + description: VFAmount is an amount of VFs to be created + minimum: 0 + type: integer + vfDriver: + description: VFDriver to bound the VFs to + type: string + required: + - bbDevConfig + - pciAddress + - pfDriver + - vfAmount + - vfDriver + type: object + type: array + required: + - nodeName + - physicalFunctions + type: object + type: array + physicalFunction: + description: Physical function (card) config + properties: + bbDevConfig: + description: BBDevConfig is a config for PF's queues + properties: + acc100: + description: ACC100BBDevConfig specifies variables to configure + ACC100 with + properties: + downlink4G: + properties: + aqDepthLog2: + maximum: 12 + minimum: 1 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 1 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + downlink5G: + properties: + aqDepthLog2: + maximum: 12 + minimum: 1 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 1 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + maxQueueSize: + maximum: 1024 + minimum: 1024 + type: integer + numVfBundles: + maximum: 16 + minimum: 1 + type: integer + pfMode: + type: boolean + uplink4G: + properties: + aqDepthLog2: + maximum: 12 + minimum: 1 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 1 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + uplink5G: + properties: + aqDepthLog2: + maximum: 12 + minimum: 1 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 1 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + required: + - downlink4G + - downlink5G + - maxQueueSize + - numVfBundles + - pfMode + - uplink4G + - uplink5G + type: object + n3000: + description: N3000BBDevConfig specifies variables to configure + N3000 with + properties: + downlink: + properties: + bandwidth: + minimum: 0 + type: integer + loadBalance: + minimum: 0 + type: integer + queues: + properties: + vf0: + maximum: 32 + minimum: 0 + type: integer + vf1: + maximum: 32 + minimum: 0 + type: integer + vf2: + maximum: 32 + minimum: 0 + type: integer + vf3: + maximum: 32 + minimum: 0 + type: integer + vf4: + maximum: 32 + minimum: 0 + type: integer + vf5: + maximum: 32 + minimum: 0 + type: integer + vf6: + maximum: 32 + minimum: 0 + type: integer + vf7: + maximum: 32 + minimum: 0 + type: integer + required: + - vf0 + - vf1 + - vf2 + - vf3 + - vf4 + - vf5 + - vf6 + - vf7 + type: object + required: + - bandwidth + - loadBalance + - queues + type: object + flrTimeout: + minimum: 0 + type: integer + networkType: + enum: + - FPGA_5GNR + - FPGA_LTE + type: string + pfMode: + type: boolean + uplink: + properties: + bandwidth: + minimum: 0 + type: integer + loadBalance: + minimum: 0 + type: integer + queues: + properties: + vf0: + maximum: 32 + minimum: 0 + type: integer + vf1: + maximum: 32 + minimum: 0 + type: integer + vf2: + maximum: 32 + minimum: 0 + type: integer + vf3: + maximum: 32 + minimum: 0 + type: integer + vf4: + maximum: 32 + minimum: 0 + type: integer + vf5: + maximum: 32 + minimum: 0 + type: integer + vf6: + maximum: 32 + minimum: 0 + type: integer + vf7: + maximum: 32 + minimum: 0 + type: integer + required: + - vf0 + - vf1 + - vf2 + - vf3 + - vf4 + - vf5 + - vf6 + - vf7 + type: object + required: + - bandwidth + - loadBalance + - queues + type: object + required: + - downlink + - flrTimeout + - networkType + - pfMode + - uplink + type: object + type: object + pfDriver: + description: PFDriver to bound the PFs to + pattern: (pci-pf-stub|pci_pf_stub|igb_uio) + type: string + vfAmount: + description: VFAmount is an amount of VFs to be created + minimum: 0 + type: integer + vfDriver: + description: VFDriver to bound the VFs to + type: string + required: + - bbDevConfig + - pfDriver + - vfAmount + - vfDriver + type: object + priority: + description: Higher priority policies can override lower ones. + type: integer + type: object + status: + description: SriovFecClusterConfigStatus defines the observed state of + SriovFecClusterConfig + properties: + lastSyncError: + type: string + syncStatus: + description: Indicates the synchronization status of the CR + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + cert-manager.io/inject-ca-from: sriov-fec-system/sriov-fec-serving-cert + controller-gen.kubebuilder.io/version: v0.7.0 + name: sriovfecnodeconfigs.sriovfec.intel.com +spec: + conversion: + strategy: Webhook + webhook: + clientConfig: + service: + name: sriov-fec-webhook-service + namespace: sriov-fec-system + path: /convert + conversionReviewVersions: + - v1 + - v1beta1 + group: sriovfec.intel.com + names: + kind: SriovFecNodeConfig + listKind: SriovFecNodeConfigList + plural: sriovfecnodeconfigs + shortNames: + - sfnc + singular: sriovfecnodeconfig + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=="Configured")].reason + name: Configured + type: string + name: v1 + schema: + openAPIV3Schema: + description: SriovFecNodeConfig is the Schema for the sriovfecnodeconfigs + API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: SriovFecNodeConfigSpec defines the desired state of SriovFecNodeConfig + properties: + drainSkip: + type: boolean + physicalFunctions: + description: List of PhysicalFunctions configs + items: + description: PhysicalFunctionConfig defines a possible configuration + of a single Physical Function (PF), i.e. card + properties: + bbDevConfig: + description: BBDevConfig is a config for PF's queues + properties: + acc100: + description: ACC100BBDevConfig specifies variables to configure + ACC100 with + properties: + downlink4G: + properties: + aqDepthLog2: + maximum: 4 + minimum: 4 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 16 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + downlink5G: + properties: + aqDepthLog2: + maximum: 4 + minimum: 4 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 16 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + maxQueueSize: + maximum: 1024 + minimum: 1024 + type: integer + numVfBundles: + maximum: 16 + minimum: 16 + type: integer + pfMode: + type: boolean + uplink4G: + properties: + aqDepthLog2: + maximum: 4 + minimum: 4 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 16 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + uplink5G: + properties: + aqDepthLog2: + maximum: 4 + minimum: 4 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 16 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + required: + - downlink4G + - downlink5G + - maxQueueSize + - numVfBundles + - pfMode + - uplink4G + - uplink5G + type: object + n3000: + description: N3000BBDevConfig specifies variables to configure + N3000 with + properties: + downlink: + properties: + bandwidth: + minimum: 0 + type: integer + loadBalance: + minimum: 0 + type: integer + queues: + properties: + vf0: + maximum: 32 + minimum: 0 + type: integer + vf1: + maximum: 32 + minimum: 0 + type: integer + vf2: + maximum: 32 + minimum: 0 + type: integer + vf3: + maximum: 32 + minimum: 0 + type: integer + vf4: + maximum: 32 + minimum: 0 + type: integer + vf5: + maximum: 32 + minimum: 0 + type: integer + vf6: + maximum: 32 + minimum: 0 + type: integer + vf7: + maximum: 32 + minimum: 0 + type: integer + required: + - vf0 + - vf1 + - vf2 + - vf3 + - vf4 + - vf5 + - vf6 + - vf7 + type: object + required: + - bandwidth + - loadBalance + - queues + type: object + flrTimeout: + minimum: 0 + type: integer + networkType: + enum: + - FPGA_5GNR + - FPGA_LTE + type: string + pfMode: + type: boolean + uplink: + properties: + bandwidth: + minimum: 0 + type: integer + loadBalance: + minimum: 0 + type: integer + queues: + properties: + vf0: + maximum: 32 + minimum: 0 + type: integer + vf1: + maximum: 32 + minimum: 0 + type: integer + vf2: + maximum: 32 + minimum: 0 + type: integer + vf3: + maximum: 32 + minimum: 0 + type: integer + vf4: + maximum: 32 + minimum: 0 + type: integer + vf5: + maximum: 32 + minimum: 0 + type: integer + vf6: + maximum: 32 + minimum: 0 + type: integer + vf7: + maximum: 32 + minimum: 0 + type: integer + required: + - vf0 + - vf1 + - vf2 + - vf3 + - vf4 + - vf5 + - vf6 + - vf7 + type: object + required: + - bandwidth + - loadBalance + - queues + type: object + required: + - downlink + - flrTimeout + - networkType + - pfMode + - uplink + type: object + type: object + pciAddress: + description: PCIAdress is a Physical Functions's PCI address + that will be configured according to this spec + pattern: ^[a-fA-F0-9]{4}:[a-fA-F0-9]{2}:[01][a-fA-F0-9]\.[0-7]$ + type: string + pfDriver: + description: PFDriver to bound the PFs to + type: string + vfAmount: + description: VFAmount is an amount of VFs to be created + minimum: 0 + type: integer + vfDriver: + description: VFDriver to bound the VFs to + type: string + required: + - bbDevConfig + - pciAddress + - pfDriver + - vfAmount + - vfDriver + type: object + type: array + required: + - physicalFunctions + type: object + status: + description: SriovFecNodeConfigStatus defines the observed state of SriovFecNodeConfig + properties: + conditions: + description: Provides information about device update status + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + type FooStatus struct{ // Represents the observations of a + foo's current state. // Known .status.conditions.type are: + \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type + \ // +patchStrategy=merge // +listType=map // +listMapKey=type + \ Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` + \n // other fields }" + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be when + the underlying condition changed. If that is not known, then + using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: message is a human readable message indicating + details about the transition. This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers + of specific condition types may define expected values and + meanings for this field, and whether the values are considered + a guaranteed API. The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be useful + (see .node.status.conditions), the ability to deconflict is + important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + inventory: + description: Provides information about FPGA inventory on the node + properties: + sriovAccelerators: + items: + properties: + deviceID: + type: string + driver: + type: string + maxVirtualFunctions: + type: integer + pciAddress: + type: string + vendorID: + type: string + virtualFunctions: + items: + properties: + deviceID: + type: string + driver: + type: string + pciAddress: + type: string + required: + - deviceID + - driver + - pciAddress + type: object + type: array + required: + - deviceID + - driver + - maxVirtualFunctions + - pciAddress + - vendorID + - virtualFunctions + type: object + type: array + type: object + type: object + type: object + served: false + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=="Configured")].reason + name: Configured + type: string + name: v2 + schema: + openAPIV3Schema: + description: SriovFecNodeConfig is the Schema for the sriovfecnodeconfigs + API + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource this + object represents. Servers may infer this from the endpoint the client + submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: SriovFecNodeConfigSpec defines the desired state of SriovFecNodeConfig + properties: + drainSkip: + description: Skips drain process when true; default false. Should + be true if operator is running on SNO + type: boolean + physicalFunctions: + description: List of PhysicalFunctions configs + items: + properties: + bbDevConfig: + description: BBDevConfig is a config for PF's queues + properties: + acc100: + description: ACC100BBDevConfig specifies variables to configure + ACC100 with + properties: + downlink4G: + properties: + aqDepthLog2: + maximum: 12 + minimum: 1 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 1 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + downlink5G: + properties: + aqDepthLog2: + maximum: 12 + minimum: 1 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 1 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + maxQueueSize: + maximum: 1024 + minimum: 1024 + type: integer + numVfBundles: + maximum: 16 + minimum: 1 + type: integer + pfMode: + type: boolean + uplink4G: + properties: + aqDepthLog2: + maximum: 12 + minimum: 1 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 1 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + uplink5G: + properties: + aqDepthLog2: + maximum: 12 + minimum: 1 + type: integer + numAqsPerGroups: + maximum: 16 + minimum: 1 + type: integer + numQueueGroups: + maximum: 8 + minimum: 0 + type: integer + required: + - aqDepthLog2 + - numAqsPerGroups + - numQueueGroups + type: object + required: + - downlink4G + - downlink5G + - maxQueueSize + - numVfBundles + - pfMode + - uplink4G + - uplink5G + type: object + n3000: + description: N3000BBDevConfig specifies variables to configure + N3000 with + properties: + downlink: + properties: + bandwidth: + minimum: 0 + type: integer + loadBalance: + minimum: 0 + type: integer + queues: + properties: + vf0: + maximum: 32 + minimum: 0 + type: integer + vf1: + maximum: 32 + minimum: 0 + type: integer + vf2: + maximum: 32 + minimum: 0 + type: integer + vf3: + maximum: 32 + minimum: 0 + type: integer + vf4: + maximum: 32 + minimum: 0 + type: integer + vf5: + maximum: 32 + minimum: 0 + type: integer + vf6: + maximum: 32 + minimum: 0 + type: integer + vf7: + maximum: 32 + minimum: 0 + type: integer + required: + - vf0 + - vf1 + - vf2 + - vf3 + - vf4 + - vf5 + - vf6 + - vf7 + type: object + required: + - bandwidth + - loadBalance + - queues + type: object + flrTimeout: + minimum: 0 + type: integer + networkType: + enum: + - FPGA_5GNR + - FPGA_LTE + type: string + pfMode: + type: boolean + uplink: + properties: + bandwidth: + minimum: 0 + type: integer + loadBalance: + minimum: 0 + type: integer + queues: + properties: + vf0: + maximum: 32 + minimum: 0 + type: integer + vf1: + maximum: 32 + minimum: 0 + type: integer + vf2: + maximum: 32 + minimum: 0 + type: integer + vf3: + maximum: 32 + minimum: 0 + type: integer + vf4: + maximum: 32 + minimum: 0 + type: integer + vf5: + maximum: 32 + minimum: 0 + type: integer + vf6: + maximum: 32 + minimum: 0 + type: integer + vf7: + maximum: 32 + minimum: 0 + type: integer + required: + - vf0 + - vf1 + - vf2 + - vf3 + - vf4 + - vf5 + - vf6 + - vf7 + type: object + required: + - bandwidth + - loadBalance + - queues + type: object + required: + - downlink + - flrTimeout + - networkType + - pfMode + - uplink + type: object + type: object + pciAddress: + description: PCIAdress is a Physical Functions's PCI address + that will be configured according to this spec + pattern: ^[a-fA-F0-9]{4}:[a-fA-F0-9]{2}:[01][a-fA-F0-9]\.[0-7]$ + type: string + pfDriver: + description: PFDriver to bound the PFs to + pattern: (pci-pf-stub|pci_pf_stub|igb_uio) + type: string + vfAmount: + description: VFAmount is an amount of VFs to be created + minimum: 0 + type: integer + vfDriver: + description: VFDriver to bound the VFs to + type: string + required: + - bbDevConfig + - pciAddress + - pfDriver + - vfAmount + - vfDriver + type: object + type: array + required: + - physicalFunctions + type: object + status: + description: SriovFecNodeConfigStatus defines the observed state of SriovFecNodeConfig + properties: + conditions: + description: Provides information about device update status + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + type FooStatus struct{ // Represents the observations of a + foo's current state. // Known .status.conditions.type are: + \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type + \ // +patchStrategy=merge // +listType=map // +listMapKey=type + \ Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` + \n // other fields }" + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be when + the underlying condition changed. If that is not known, then + using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: message is a human readable message indicating + details about the transition. This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if .metadata.generation + is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers + of specific condition types may define expected values and + meanings for this field, and whether the values are considered + a guaranteed API. The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be useful + (see .node.status.conditions), the ability to deconflict is + important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + inventory: + description: Provides information about FPGA inventory on the node + properties: + sriovAccelerators: + items: + properties: + deviceID: + type: string + driver: + type: string + maxVirtualFunctions: + type: integer + pciAddress: + type: string + vendorID: + type: string + virtualFunctions: + items: + properties: + deviceID: + type: string + driver: + type: string + pciAddress: + type: string + required: + - deviceID + - driver + - pciAddress + type: object + type: array + required: + - deviceID + - driver + - maxVirtualFunctions + - pciAddress + - vendorID + - virtualFunctions + type: object + type: array + type: object + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: [] + storedVersions: [] diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/deployment.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/deployment.yaml new file mode 100644 index 0000000..26ce2a1 --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/deployment.yaml @@ -0,0 +1,94 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + control-plane: controller-manager + name: sriov-fec-controller-manager + namespace: sriov-fec-system +spec: + replicas: 2 + selector: + matchLabels: + control-plane: controller-manager + template: + metadata: + labels: + control-plane: controller-manager + spec: + containers: + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=127.0.0.1:8080 + - --leader-elect + command: + - /manager + env: + - name: SRIOV_FEC_DAEMON_IMAGE + value: {{.Values.env.SRIOV_FEC_DAEMON_IMAGE}} + - name: SRIOV_FEC_LABELER_IMAGE + value: {{.Values.env.SRIOV_FEC_LABELER_IMAGE}} + - name: SRIOV_FEC_NETWORK_DEVICE_PLUGIN_IMAGE + value: {{.Values.env.SRIOV_FEC_NETWORK_DEVICE_PLUGIN_IMAGE}} + - name: SRIOV_FEC_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + - name: SRIOV_FEC_GENERIC_K8S + valueFrom: + configMapKeyRef: + key: isGeneric + name: operator-configuration + optional: true + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + image: "{{ .Values.manager.image.repository}}:{{ .Values.manager.image.tag}}" + ports: + - containerPort: 9443 + name: webhook-server + protocol: TCP + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 200m + memory: 100Mi + requests: + cpu: 100m + memory: 20Mi + securityContext: + allowPrivilegeEscalation: false + volumeMounts: + - mountPath: /tmp/k8s-webhook-server/serving-certs + name: cert + readOnly: true + - args: + - --secure-listen-address=0.0.0.0:8443 + - --upstream=http://127.0.0.1:8080/ + - --logtostderr=true + - --v=10 + image: "{{.Values.kubeRbacProxy.image.repository}}:{{ .Values.kubeRbacProxy.image.tag}}" + name: "{{.Values.kubeRbacProxy.name}}" + ports: + - containerPort: 8443 + name: https + protocol: TCP + serviceAccountName: sriov-fec-controller-manager + terminationGracePeriodSeconds: 10 + volumes: + - name: cert + secret: + defaultMode: 420 + secretName: webhook-server-cert diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/role.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/role.yaml new file mode 100644 index 0000000..4b711b4 --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/role.yaml @@ -0,0 +1,150 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: sriov-fec-leader-election-role + namespace: sriov-fec-system +rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + name: sriov-fec-manager-role +rules: +- apiGroups: + - "" + resources: + - configmaps + - namespaces + - serviceaccounts + verbs: + - '*' +- apiGroups: + - "" + resources: + - nodes + verbs: + - list + - watch +- apiGroups: + - apps + resources: + - daemonsets + - deployments + - deployments/finalizers + verbs: + - '*' +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + - rolebindings + - roles + verbs: + - '*' +- apiGroups: + - security.openshift.io + resources: + - securitycontextconstraints + verbs: + - '*' +- apiGroups: + - sriovfec.intel.com + resources: + - sriovfecclusterconfigs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - sriovfec.intel.com + resources: + - sriovfecclusterconfigs/status + verbs: + - get + - patch + - update +- apiGroups: + - sriovfec.intel.com + resources: + - sriovfecnodeconfigs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - sriovfec.intel.com + resources: + - sriovfecnodeconfigs/status + verbs: + - get + - patch + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: sriov-fec-metrics-reader +rules: +- nonResourceURLs: + - /metrics + verbs: + - get +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: sriov-fec-proxy-role +rules: +- apiGroups: + - authentication.k8s.io + resources: + - tokenreviews + verbs: + - create +- apiGroups: + - authorization.k8s.io + resources: + - subjectaccessreviews + verbs: + - create diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/rolebinding.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/rolebinding.yaml new file mode 100644 index 0000000..dfab9ea --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/rolebinding.yaml @@ -0,0 +1,39 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: sriov-fec-leader-election-rolebinding + namespace: sriov-fec-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: sriov-fec-leader-election-role +subjects: +- kind: ServiceAccount + name: sriov-fec-controller-manager + namespace: sriov-fec-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: sriov-fec-manager-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: sriov-fec-manager-role +subjects: +- kind: ServiceAccount + name: sriov-fec-controller-manager + namespace: sriov-fec-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: sriov-fec-proxy-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: sriov-fec-proxy-role +subjects: +- kind: ServiceAccount + name: sriov-fec-controller-manager + namespace: sriov-fec-system diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/service.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/service.yaml new file mode 100644 index 0000000..ff10cca --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/service.yaml @@ -0,0 +1,27 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + control-plane: controller-manager + name: sriov-fec-controller-manager-metrics-service + namespace: sriov-fec-system +spec: + ports: + - name: https + port: 8443 + targetPort: https + selector: + control-plane: controller-manager +--- +apiVersion: v1 +kind: Service +metadata: + name: sriov-fec-webhook-service + namespace: sriov-fec-system +spec: + ports: + - port: 443 + protocol: TCP + targetPort: 9443 + selector: + control-plane: controller-manager diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/serviceaccount.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/serviceaccount.yaml new file mode 100644 index 0000000..a9d0d0f --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/serviceaccount.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: ServiceAccount +imagePullSecrets: + - name: default-registry-key +metadata: + name: sriov-fec-controller-manager + namespace: sriov-fec-system diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/validatingwebhookconfiguration.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/validatingwebhookconfiguration.yaml new file mode 100644 index 0000000..4bc105b --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/templates/validatingwebhookconfiguration.yaml @@ -0,0 +1,27 @@ +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + annotations: + cert-manager.io/inject-ca-from: sriov-fec-system/sriov-fec-serving-cert + name: sriov-fec-validating-webhook-configuration +webhooks: +- admissionReviewVersions: + - v1 + clientConfig: + service: + name: sriov-fec-webhook-service + namespace: sriov-fec-system + path: /validate-sriovfec-intel-com-v2-sriovfecclusterconfig + failurePolicy: Fail + name: vsriovfecclusterconfig.kb.io + rules: + - apiGroups: + - sriovfec.intel.com + apiVersions: + - v2 + operations: + - CREATE + - UPDATE + resources: + - sriovfecclusterconfigs + sideEffects: None diff --git a/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/values.yaml b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/values.yaml new file mode 100644 index 0000000..8fb629d --- /dev/null +++ b/stx-sriov-fec-operator-helm/stx-sriov-fec-operator-helm/helm-charts/sriov-fec-operator/values.yaml @@ -0,0 +1,20 @@ +# Default values for fec-operator. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +manager: + image: + repository: "docker.io/sriov-fec/sriov-fec-operator" + tag: "v2.1.1" + +kubeRbacProxy: + name: kube-rbac-proxy + image: + repository: "gcr.io/kubebuilder/kube-rbac-proxy" + tag: "v0.11.0" + +env: + SRIOV_FEC_DAEMON_IMAGE: "registry.local:9001/docker.io/sriov-fec/sriov-fec-daemon:v2.1.1" + SRIOV_FEC_LABELER_IMAGE: "registry.local:9001/docker.io/sriov-fec/sriov-fec-labeler:v2.1.1" + SRIOV_FEC_NETWORK_DEVICE_PLUGIN_IMAGE: "registry.local:9001/ghcr.io/k8snetworkplumbingwg/sriov-network-device-plugin:v3.5.1" + KUBE_RBAC_PROXY_IMAGE: "registry.local:9001/gcr.io/kubebuilder/kube-rbac-proxy:v0.11.0" diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 0000000..8ae3e22 --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1,3 @@ +# hacking pulls in flake8 +hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0 +bashate >= 0.2 diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..072d3d3 --- /dev/null +++ b/tox.ini @@ -0,0 +1,52 @@ +[tox] +envlist = linters +minversion = 2.3 +skipsdist = True +sitepackages=False + +[testenv] +install_command = pip install -U {opts} {packages} +setenv = + VIRTUAL_ENV={envdir} + OS_STDOUT_CAPTURE=1 + OS_STDERR_CAPTURE=1 + OS_DEBUG=1 + OS_LOG_CAPTURE=1 +deps = + -r{toxinidir}/requirements.txt + -r{toxinidir}/test-requirements.txt +whitelist_externals = + bash + +passenv = + XDG_CACHE_HOME + + +[testenv:bashate] +# Treat all E* codes as Errors rather than warnings using: -e 'E*' +commands = + bash -c "find {toxinidir} \ + -not \( -type d -name .?\* -prune \) \ + -type f \ + -not -name \*~ \ + -not -name \*.md \ + -name \*.sh \ + -print0 | xargs -r -n 1 -0 bashate -v \ + -e 'E*'" + +[testenv:linters] +commands = + {[testenv:bashate]commands} + +[testenv:flake8] +basepython = python3 +description = Dummy environment to allow flake8 to be run in subdir tox + +[testenv:pylint] +basepython = python3 +description = Dummy environment to allow pylint to be run in subdir tox + +[testenv:bandit] +basepython = python3 +description = Dummy environment to allow bandit to be run in subdir tox +