From 2a7622d28a96c548701e28333d4064c7fbc0e1c0 Mon Sep 17 00:00:00 2001 From: jniederm Date: Mon, 22 Jan 2018 08:00:50 +0100 Subject: [PATCH] kubernetes: Add Virtual machines side tab It lists VMs of Kubevirt. The tab is only shown if connected cluster has Kubevirt installed. It uses standard React + Redux + Saga approach. Nested in angular environment. Redux store is garbage collected when Virtual Machines view is left. Changed dependencies: * react-redux, redux-saga - React state management dependencies * babel-plugin-transform-regenerator - support for JS generator functions * eslint-plugin-flowtype, flow-bin, flow-webpack-plugin - JS type annotation Closes #7830 --- .eslintrc.json | 3 +- .flowconfig | 12 +++ .gitignore | 1 + package.json | 6 +- pkg/kubernetes/index.html | 8 +- pkg/kubernetes/scripts/kube-client-cockpit.js | 17 +++- pkg/kubernetes/scripts/kube-client.js | 4 + pkg/kubernetes/scripts/main.js | 2 + pkg/kubernetes/scripts/virtual-machines.js | 79 +++++++++++++++++ .../virtual-machines/action-creators.jsx | 34 ++++++++ .../scripts/virtual-machines/action-types.jsx | 21 +++++ .../components/VmsListing.jsx | 50 +++++++++++ .../components/VmsListingRow.jsx | 84 +++++++++++++++++++ .../scripts/virtual-machines/index.jsx | 82 ++++++++++++++++++ .../scripts/virtual-machines/reducers.jsx | 44 ++++++++++ .../scripts/virtual-machines/sagas.jsx | 23 +++++ .../scripts/virtual-machines/types.jsx | 62 ++++++++++++++ .../scripts/virtual-machines/utils.jsx | 28 +++++++ pkg/kubernetes/styles/sidebar.less | 3 +- pkg/kubernetes/styles/variables.less | 4 +- .../views/virtual-machines-page.html | 4 + test/verify/check-openshift | 66 +++++++++++++++ webpack.config.js | 2 +- 23 files changed, 630 insertions(+), 9 deletions(-) create mode 100644 .flowconfig create mode 100644 pkg/kubernetes/scripts/virtual-machines.js create mode 100644 pkg/kubernetes/scripts/virtual-machines/action-creators.jsx create mode 100644 pkg/kubernetes/scripts/virtual-machines/action-types.jsx create mode 100644 pkg/kubernetes/scripts/virtual-machines/components/VmsListing.jsx create mode 100644 pkg/kubernetes/scripts/virtual-machines/components/VmsListingRow.jsx create mode 100644 pkg/kubernetes/scripts/virtual-machines/index.jsx create mode 100644 pkg/kubernetes/scripts/virtual-machines/reducers.jsx create mode 100644 pkg/kubernetes/scripts/virtual-machines/sagas.jsx create mode 100644 pkg/kubernetes/scripts/virtual-machines/types.jsx create mode 100644 pkg/kubernetes/scripts/virtual-machines/utils.jsx create mode 100644 pkg/kubernetes/views/virtual-machines-page.html diff --git a/.eslintrc.json b/.eslintrc.json index 71c0e4176..6de9a396d 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -4,6 +4,7 @@ "es6": true }, "extends": "eslint:recommended", + "parser": "babel-eslint", "parserOptions": { "ecmaFeatures": { "experimentalObjectRestSpread": true, @@ -11,7 +12,7 @@ }, "sourceType": "module" }, - "plugins": ["react"], + "plugins": ["flowtype", "react"], "rules": { "react/jsx-uses-vars": "error", "no-console": "off", diff --git a/.flowconfig b/.flowconfig new file mode 100644 index 000000000..27065357a --- /dev/null +++ b/.flowconfig @@ -0,0 +1,12 @@ +[ignore] + +[include] + +[libs] + +[lints] + +[options] +module.name_mapper='.*cockpit$' -> '/src/base1/cockpit.js' + +[strict] diff --git a/.gitignore b/.gitignore index f7a1ab90c..3bc331705 100644 --- a/.gitignore +++ b/.gitignore @@ -165,6 +165,7 @@ po*.js.gz /pkg/*/manifest.json .idea +.vscode/ # Test output Test*.log diff --git a/package.json b/package.json index 0e8030e7c..849e83651 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,9 @@ "qunit-tap": "1.5.1", "qunitjs": "1.23.1", "react-lite": "0.15.39", + "react-redux": "5.0.6", "redux": "3.7.2", + "redux-saga": "0.16.0", "registry-image-widgets": "0.0.16", "requirejs": "2.1.22", "term.js-cockpit": "0.0.10" @@ -34,6 +36,7 @@ "babel-core": "^6.26.0", "babel-eslint": "~7.1.1", "babel-loader": "^6.4.1", + "babel-plugin-transform-regenerator": "6.26.0", "babel-preset-es2015": "^6.24.1", "babel-preset-react": "^6.24.1", "chrome-remote-interface": "^0.25.2", @@ -42,13 +45,14 @@ "css-loader": "~0.23.1", "eslint": "^3.0.0", "eslint-loader": "~1.6.1", + "eslint-plugin-flowtype": "2.39.1", "eslint-plugin-react": "~6.9.0", "exports-loader": "~0.6.3", "extend": "~3.0.0", "extract-text-webpack-plugin": "~1.0.1", - "htmlparser": "~1.7.7", "html-minifier": "~0.7.2", "html-webpack-plugin": "~2.22.0", + "htmlparser": "~1.7.7", "imports-loader": "~0.6.5", "jed": "~1.1.0", "jshint": "~2.9.1", diff --git a/pkg/kubernetes/index.html b/pkg/kubernetes/index.html index 87f645e00..66627a785 100644 --- a/pkg/kubernetes/index.html +++ b/pkg/kubernetes/index.html @@ -36,7 +36,7 @@ along with Cockpit; If not, see . -