From f2b0caf5515a302795f0496acaa2175eaa272d0d Mon Sep 17 00:00:00 2001 From: Doug Hellmann Date: Tue, 18 Feb 2020 13:16:53 -0500 Subject: [PATCH 1/2] update vendored copy of baremetal-operator Grab the latest version with the new field for disabling certificate verification. Signed-off-by: Doug Hellmann --- Gopkg.lock | 4 +- .../metal3-io/baremetal-operator/.travis.yml | 2 - .../metal3-io/baremetal-operator/Gopkg.lock | 807 ++++++++---------- .../metal3-io/baremetal-operator/Gopkg.toml | 57 +- .../metal3-io/baremetal-operator/Makefile | 68 +- .../metal3-io/baremetal-operator/README.md | 5 + .../cmd/make-bm-worker/main.go | 18 +- .../cmd/make-bm-worker/templates/templates.go | 20 +- .../baremetal-operator/cmd/manager/main.go | 21 +- ...yaml => metal3.io_baremetalhosts_crd.yaml} | 229 ++++- .../deploy/ironic_bmo_configmap.env | 9 + .../deploy/ironic_bmo_configmap.yaml | 13 - .../baremetal-operator/deploy/ironic_ci.env | 9 + .../deploy/kustomization.yaml | 19 + .../baremetal-operator/deploy/namespace.yaml | 4 + .../deploy/operator_ironic.yaml | 104 +-- .../baremetal-operator/deploy/role.yaml | 50 +- .../deploy/role_binding.yaml | 6 +- .../docs/BaremetalHost_ProvisioningState.dot | 34 +- .../docs/BaremetalHost_ProvisioningState.png | Bin 238125 -> 264587 bytes .../metal3-io/baremetal-operator/docs/api.md | 429 ++++++---- .../docs/baremetalhost-states.md | 12 +- .../baremetal-operator/docs/dev-setup.md | 55 +- .../docs/publishing-images.md | 8 +- .../baremetal-operator/docs/testing.md | 11 +- .../{deploy/crds => examples}/demo-hosts.yaml | 0 .../example-host-bad-credentials.yaml | 0 .../crds => examples}/example-host.yaml | 0 .../{deploy/crds => examples}/worker-0.yaml | 0 .../baremetal-operator/hack/gofmt.sh | 19 + .../baremetal-operator/hack/gosec.sh | 19 + .../baremetal-operator/hack/govet.sh | 20 + .../baremetal-operator/hack/markdownlint.sh | 62 ++ .../baremetal-operator/hack/shellcheck.sh | 19 + .../metal3-io/baremetal-operator/hack/unit.sh | 26 + .../metal3/v1alpha1/baremetalhost_types.go | 125 ++- .../metal3/v1alpha1/zz_generated.deepcopy.go | 41 +- .../metal3/v1alpha1/zz_generated.openapi.go | 7 +- .../baremetal-operator/pkg/bmc/access.go | 51 +- .../baremetal-operator/pkg/bmc/idrac.go | 44 +- .../baremetal-operator/pkg/bmc/ipmi.go | 44 +- .../baremetal-operator/pkg/bmc/irmc.go | 44 +- .../baremetal-operator/pkg/bmc/redfish.go | 160 ++++ .../controller/baremetalhost/action_result.go | 92 ++ .../baremetalhost/baremetalhost_controller.go | 567 +++++------- .../baremetalhost/host_state_machine.go | 346 ++++++++ .../pkg/controller/baremetalhost/metrics.go | 135 +++ .../pkg/provisioner/ironic/ironic.go | 114 +-- .../baremetal-operator/tools/clean_host.sh | 8 +- .../tools/run_local_ironic.sh | 80 +- 50 files changed, 2544 insertions(+), 1473 deletions(-) rename vendor/github.com/metal3-io/baremetal-operator/deploy/crds/{metal3_v1alpha1_baremetalhost_crd.yaml => metal3.io_baremetalhosts_crd.yaml} (59%) create mode 100644 vendor/github.com/metal3-io/baremetal-operator/deploy/ironic_bmo_configmap.env delete mode 100644 vendor/github.com/metal3-io/baremetal-operator/deploy/ironic_bmo_configmap.yaml create mode 100644 vendor/github.com/metal3-io/baremetal-operator/deploy/ironic_ci.env create mode 100644 vendor/github.com/metal3-io/baremetal-operator/deploy/kustomization.yaml create mode 100644 vendor/github.com/metal3-io/baremetal-operator/deploy/namespace.yaml rename vendor/github.com/metal3-io/baremetal-operator/{deploy/crds => examples}/demo-hosts.yaml (100%) rename vendor/github.com/metal3-io/baremetal-operator/{deploy/crds => examples}/example-host-bad-credentials.yaml (100%) rename vendor/github.com/metal3-io/baremetal-operator/{deploy/crds => examples}/example-host.yaml (100%) rename vendor/github.com/metal3-io/baremetal-operator/{deploy/crds => examples}/worker-0.yaml (100%) create mode 100755 vendor/github.com/metal3-io/baremetal-operator/hack/gofmt.sh create mode 100755 vendor/github.com/metal3-io/baremetal-operator/hack/gosec.sh create mode 100755 vendor/github.com/metal3-io/baremetal-operator/hack/govet.sh create mode 100755 vendor/github.com/metal3-io/baremetal-operator/hack/markdownlint.sh create mode 100755 vendor/github.com/metal3-io/baremetal-operator/hack/shellcheck.sh create mode 100755 vendor/github.com/metal3-io/baremetal-operator/hack/unit.sh create mode 100644 vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/redfish.go create mode 100644 vendor/github.com/metal3-io/baremetal-operator/pkg/controller/baremetalhost/action_result.go create mode 100644 vendor/github.com/metal3-io/baremetal-operator/pkg/controller/baremetalhost/host_state_machine.go create mode 100644 vendor/github.com/metal3-io/baremetal-operator/pkg/controller/baremetalhost/metrics.go diff --git a/Gopkg.lock b/Gopkg.lock index 16c474af2..e3f620fc6 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -283,14 +283,14 @@ [[projects]] branch = "master" - digest = "1:3d549d4bbecddf6fac2daad99bfcc4ce2ff0d68e71aa3df114b2a7a84fdda343" + digest = "1:f8ee68a2bc230e1daa5232215163f82513e5620dd5dc63512c41dcadcefcc4b7" name = "github.com/metal3-io/baremetal-operator" packages = [ "pkg/apis", "pkg/apis/metal3/v1alpha1", ] pruneopts = "T" - revision = "7869f83d0e93fdb9c589eaf66b7d459d67b39f83" + revision = "71b826cc0f0a0686efc4fe84e2eab7e36aab27f7" source = "https://github.com/openshift/baremetal-operator.git" [[projects]] diff --git a/vendor/github.com/metal3-io/baremetal-operator/.travis.yml b/vendor/github.com/metal3-io/baremetal-operator/.travis.yml index 660c54107..e512ce596 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/.travis.yml +++ b/vendor/github.com/metal3-io/baremetal-operator/.travis.yml @@ -9,8 +9,6 @@ go: - "1.11.5" before_install: - - go get golang.org/x/lint/golint - - go get -u github.com/securego/gosec/cmd/gosec - go get github.com/golang/dep/cmd/dep - git clone --branch=v0.8.x --depth=1 https://github.com/operator-framework/operator-sdk $GOPATH/src/github.com/operator-framework/operator-sdk && pushd $GOPATH/src/github.com/operator-framework/operator-sdk && make dep && make install && popd diff --git a/vendor/github.com/metal3-io/baremetal-operator/Gopkg.lock b/vendor/github.com/metal3-io/baremetal-operator/Gopkg.lock index 2febbcbbe..fcfd25251 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/Gopkg.lock +++ b/vendor/github.com/metal3-io/baremetal-operator/Gopkg.lock @@ -2,23 +2,15 @@ [[projects]] - digest = "1:ee62a1a435f8c200d626b2f1cf04b5c3d8efe8d39f31c3abdf6f61682883049e" + digest = "1:9facd370d4b5aaf82bb6549c358eefc71c771458fc91d1afe724434aece9d886" name = "cloud.google.com/go" packages = ["compute/metadata"] - pruneopts = "NT" - revision = "457ea5c15ccf3b87db582c450e80101989da35f7" - version = "v0.40.0" + pruneopts = "" + revision = "cfe8f6d1fe6976d03af790d7a8b9bf6aa73287bd" + version = "v0.47.0" [[projects]] - digest = "1:6974cb842e66a4600006200e47a067278ea5671d4f7114be67c01a3af5affa7d" - name = "contrib.go.opencensus.io/exporter/ocagent" - packages = ["."] - pruneopts = "NT" - revision = "dcb33c7f3b7cfe67e8a2cea10207ede1b7c40764" - version = "v0.4.12" - -[[projects]] - digest = "1:241d902cd2ac2f2e62b029e3d7302380a25eff4c545bdb92cd2bf734fb6eb2a7" + digest = "1:e4a02906493a47ee87ef61aeea130ce6624da07349a6dc62494a4e72b550ca8e" name = "github.com/Azure/go-autorest" packages = [ "autorest", @@ -28,242 +20,226 @@ "logger", "tracing", ] - pruneopts = "NT" - revision = "09205e8f6711a776499a14cf8adc6bd380db5d81" - version = "v12.2.0" + pruneopts = "" + revision = "3492b2aff5036c67228ab3c7dba3577c871db200" + version = "v13.3.0" [[projects]] - digest = "1:75d2b55b13298745ec068057251d05d65bbae0a668201fe45ad6986551a55601" + digest = "1:e4b30804a381d7603b8a344009987c1ba351c26043501b23b8c7ce21f0b67474" name = "github.com/BurntSushi/toml" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "3012a1dbe2e4bd1391d42b32f0577cb7bbc7f005" version = "v0.3.1" [[projects]] - digest = "1:0a111edd8693fd977f42a0c4f199a0efb13c20aec9da99ad8830c7bb6a87e8d6" + digest = "1:c0952fb3cf9506cff577b4edf4458889570dcbd2902a7b90a1fd96bfbb97ccd8" name = "github.com/PuerkitoBio/purell" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "44968752391892e1b0d0b821ee79e9a85fa13049" version = "v1.1.1" [[projects]] branch = "master" - digest = "1:8098cd40cd09879efbf12e33bcd51ead4a66006ac802cd563a66c4f3373b9727" + digest = "1:331a419049c2be691e5ba1d24342fc77c7e767a80c666a18fd8a9f7b82419c1c" name = "github.com/PuerkitoBio/urlesc" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "de5bf2ad457846296e2031421a34e2568e304e35" [[projects]] - digest = "1:680b63a131506e668818d630d3ca36123ff290afa0afc9f4be21940adca3f27d" - name = "github.com/appscode/jsonpatch" - packages = ["."] - pruneopts = "NT" - revision = "7c0e3b262f30165a8ec3d0b4c6059fd92703bfb2" - version = "1.0.0" - -[[projects]] - digest = "1:c819830f4f5ef85874a90ac3cbcc96cd322c715f5c96fbe4722eacd3dafbaa07" + digest = "1:ac2a05be7167c495fe8aaf8aaf62ecf81e78d2180ecb04e16778dc6c185c96a5" name = "github.com/beorn7/perks" packages = ["quantile"] - pruneopts = "NT" - revision = "4b2b341e8d7715fae06375aa633dbb6e91b3fb46" - version = "v1.0.0" - -[[projects]] - digest = "1:13af3d205c774ec0bbda45fee1a4089f3cd9a55c5367b527698b34550ec15e71" - name = "github.com/census-instrumentation/opencensus-proto" - packages = [ - "gen-go/agent/common/v1", - "gen-go/agent/metrics/v1", - "gen-go/agent/trace/v1", - "gen-go/metrics/v1", - "gen-go/resource/v1", - "gen-go/trace/v1", - ] - pruneopts = "NT" - revision = "a105b96453fe85139acc07b68de48f2cbdd71249" - version = "v0.2.0" + pruneopts = "" + revision = "37c8de3658fcb183f997c4e13e8337516ab753e6" + version = "v1.0.1" [[projects]] - digest = "1:4b8b5811da6970495e04d1f4e98bb89518cc3cfc3b3f456bdb876ed7b6c74049" + digest = "1:0deddd908b6b4b768cfc272c16ee61e7088a60f7fe2f06c547bd3d8e1f8b8e77" name = "github.com/davecgh/go-spew" packages = ["spew"] - pruneopts = "NT" + pruneopts = "" revision = "8991bc29aa16c548c550c7ff78260e27b9ab7c73" version = "v1.1.1" [[projects]] - digest = "1:3a5601f7ac7fc10fc2a98039b18d83a767f3830141a08c19ae45c45244f43e57" + digest = "1:6098222470fe0172157ce9bbef5d2200df4edde17ee649c5d6e48330e4afa4c6" name = "github.com/dgrijalva/jwt-go" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "06ea1031745cb8b3dab3f6a236daf2b0aa468b7e" version = "v3.2.0" [[projects]] - digest = "1:13c005cd1497b291d3aaf711086e94f6046efb7f104db33208bff268f0187213" + digest = "1:03a98f5067540d81c4a163b21279c4ce5f158b78e9409921110635d2d7cb603d" name = "github.com/emicklei/go-restful" packages = [ ".", "log", ] - pruneopts = "NT" - revision = "6ac3b8eb89d325e5c750d77f344a6870464d03c3" - version = "v2.9.6" + pruneopts = "" + revision = "99f05a26a0a1c71e664ebe6a76d29b2c80333056" + version = "v2.11.1" [[projects]] - digest = "1:448bf60e9dce6d5fd9dfa8fd9eb9a23163424ff4e4f142456405781e942e3998" + digest = "1:46ddeb9dd35d875ac7568c4dc1fc96ce424e034bdbb984239d8ffc151398ec01" name = "github.com/evanphx/json-patch" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "026c730a0dcc5d11f93f1cf1cc65b01247ea7b6f" version = "v4.5.0" [[projects]] - digest = "1:81466b4218bf6adddac2572a30ac733a9255919bc2f470b4827a317bd4ee1756" + digest = "1:b13707423743d41665fd23f0c36b2f37bb49c30e94adb813319c44188a51ba22" name = "github.com/ghodss/yaml" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "0ca9ea5df5451ffdf184b4428c902747c2c11cd7" version = "v1.0.0" [[projects]] - digest = "1:d421af4c4fe51d399667d573982d663fe1fa67020a88d3ae43466ebfe8e2b5c9" + digest = "1:65587005c6fa4293c0b8a2e457e689df7fda48cc5e1f5449ea2c1e7784551558" name = "github.com/go-logr/logr" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "9fb12b3b21c5415d16ac18dc5cd42c1cfdd40c4e" version = "v0.1.0" [[projects]] - digest = "1:340497a512995aa69c0add901d79a2096b3449d35a44a6f1f1115091a9f8c687" + digest = "1:d81dfed1aa731d8e4a45d87154ec15ef18da2aa80fa9a2f95bec38577a244a99" name = "github.com/go-logr/zapr" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "03f06a783fbb7dfaf3f629c7825480e43a7105e6" version = "v0.1.1" [[projects]] - digest = "1:260f7ebefc63024c8dfe2c9f1a2935a89fa4213637a1f522f592f80c001cc441" + digest = "1:47688961daa2895c860642608d671822b7b53fed1e3e3e2d46506f01dcddaae3" name = "github.com/go-openapi/jsonpointer" packages = ["."] - pruneopts = "NT" - revision = "a105a905c5e6ad147f08504784917f3e178e0ba5" - version = "v0.19.2" + pruneopts = "" + revision = "ed123515f087412cd7ef02e49b0b0a5e6a79a360" + version = "v0.19.3" [[projects]] - digest = "1:98abd61947ff5c7c6fcfec5473d02a4821ed3a2dd99a4fbfdb7925b0dd745546" + digest = "1:69c513ad15614075cbb474bc636fbb901aa3e9273a6da3d583df76fa62ec83d3" name = "github.com/go-openapi/jsonreference" packages = ["."] - pruneopts = "NT" - revision = "2903bfd4bfbaf188694f1edf731f2725a8fa344f" - version = "v0.19.2" + pruneopts = "" + revision = "82f31475a8f7a12bc26962f6e26ceade8ea6f66a" + version = "v0.19.3" [[projects]] - digest = "1:f04cb7797917efbe9d9efd509a311f28930a9ee7ef1e047d01808d64ded53554" + digest = "1:4b44076c920b8d25526a6c492b886e79a41a09164021a614aae8f6aeb42721bd" name = "github.com/go-openapi/spec" packages = ["."] - pruneopts = "NT" - revision = "bdfd7e07daecc404d77868a88b2364d0aed0ee5a" - version = "v0.19.2" + pruneopts = "" + revision = "8557d72e4f077c2dbe1e48df09e596b6fb9b7991" + version = "v0.19.4" [[projects]] - digest = "1:10332cabbb0525ad9384874b4c0e23501540b7f469ab4177f47f227d46ad2dca" + digest = "1:fb1a3f651afb10230982d116bef8cb05dff148c5d3243c8ed79ef78d51f1ebe7" name = "github.com/go-openapi/swag" packages = ["."] - pruneopts = "NT" - revision = "7e8dd5ceab83c86d17bc967d09e195414fe2b47e" - version = "v0.19.2" + pruneopts = "" + revision = "c3d0f7896d589f3babb99eea24bbc7de98108e72" + version = "v0.19.5" [[projects]] - digest = "1:53151cc4366e3945282d4b783fd41f35222cabbc75601e68d8133648c63498d1" + digest = "1:d96df3666b8c63ed64ddd08bc03a4df20d7f26c7628d934b62e789be51291410" name = "github.com/gobuffalo/envy" packages = ["."] - pruneopts = "NT" - revision = "043cb4b8af871b49563291e32c66bb84378a60ac" - version = "v1.7.0" + pruneopts = "" + revision = "909ea676d4c90832fefbf55a5a4fb04d8bef8931" + version = "v1.7.1" [[projects]] - digest = "1:0b39706cfa32c1ba9e14435b5844d04aef81b60f44b6077e61e0607d56692603" + digest = "1:2d91d473ef2d15740d0578097415b3767dfcf832186a7e09706b2967eabb19ed" + name = "github.com/gobuffalo/flect" + packages = ["."] + pruneopts = "" + revision = "86360480338dcc8c7b61de28a928595f77079989" + version = "v0.1.6" + +[[projects]] + digest = "1:d69d2ba23955582a64e367ff2b0808cdbd048458c178cea48f11ab8c40bd7aea" name = "github.com/gogo/protobuf" packages = [ "proto", "sortkeys", ] - pruneopts = "NT" - revision = "ba06b47c162d49f2af050fb4c75bcbc86a159d5c" - version = "v1.2.1" - -[[projects]] - branch = "master" - digest = "1:e2b86e41f3d669fc36b50d31d32d22c8ac656c75aa5ea89717ce7177e134ff2a" - name = "github.com/golang/glog" - packages = ["."] - pruneopts = "NT" - revision = "23def4e6c14b4da8ac2ed8007337bc5eb5007998" + pruneopts = "" + revision = "5628607bb4c51c3157aacc3a50f0ab707582b805" + version = "v1.3.1" [[projects]] branch = "master" - digest = "1:20b774dcfdf0fff3148432beb828c52404f3eb3d70b7ce71ae0356ed6cbc2bae" + digest = "1:156e8134a4ab3efcbcbc6e3dd5069bfb70ed8cbb1cdd7db557bd9035c363f335" name = "github.com/golang/groupcache" packages = ["lru"] - pruneopts = "NT" - revision = "5b532d6fd5efaf7fa130d4e859a2fde0fc3a9e1b" + pruneopts = "" + revision = "611e8accdfc92c4187d399e95ce826046d4c8d73" [[projects]] - digest = "1:d7212166c4b7f30a20fb3de70ab7e36564900b2e36360ffd31958b5af8fed025" + digest = "1:b852d2b62be24e445fcdbad9ce3015b44c207815d631230dfce3f14e7803f5bf" name = "github.com/golang/protobuf" packages = [ - "jsonpb", "proto", - "protoc-gen-go/descriptor", - "protoc-gen-go/generator", - "protoc-gen-go/generator/internal/remap", - "protoc-gen-go/plugin", "ptypes", "ptypes/any", "ptypes/duration", - "ptypes/struct", "ptypes/timestamp", - "ptypes/wrappers", ] - pruneopts = "NT" - revision = "b5d812f8a3706043e23a9cd5babf2e5423744d30" - version = "v1.3.1" + pruneopts = "" + revision = "6c65a5562fc06764971b7c5d05c76c75e84bdbf7" + version = "v1.3.2" [[projects]] - digest = "1:52c5834e2bebac9030c97cc0798ac11c3aa8a39f098aeb419f142533da6cd3cc" + digest = "1:9fcb267c272bc5054564b392e3ff7e65e35400fd9914afb1d169f92b95e7dbc9" + name = "github.com/google/go-cmp" + packages = [ + "cmp", + "cmp/internal/diff", + "cmp/internal/flags", + "cmp/internal/function", + "cmp/internal/value", + ] + pruneopts = "" + revision = "2d0692c2e9617365a95b295612ac0d4415ba4627" + version = "v0.3.1" + +[[projects]] + digest = "1:8d4a577a9643f713c25a32151c0f26af7228b4b97a219b5ddb7fd38d16f6e673" name = "github.com/google/gofuzz" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "f140a6486e521aad38f5917de355cbf147cc0496" version = "v1.0.0" [[projects]] - digest = "1:ab3ec1fe3e39bac4b3ab63390767766622be35b7cab03f47f787f9ec60522a53" + digest = "1:ad92aa49f34cbc3546063c7eb2cabb55ee2278b72842eda80e2a20a8a06a8d73" name = "github.com/google/uuid" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "0cd6bf5da1e1c83f8b45653022c74f71af0538a4" version = "v1.1.1" [[projects]] - digest = "1:4be9c3a040a921a53c073587b3f339811f338123d239b556303223e4b9628af9" + digest = "1:728f28282e0edc47e2d8f41c9ec1956ad645ad6b15e6376ab31e2c3b094fc38f" name = "github.com/googleapis/gnostic" packages = [ "OpenAPIv2", "compiler", "extensions", ] - pruneopts = "NT" - revision = "e73c7ec21d36ddb0711cb36d1502d18363b5c2c9" - version = "v0.3.0" + pruneopts = "" + revision = "ab0dd09aa10e2952b28e12ecd35681b20463ebab" + version = "v0.3.1" [[projects]] - digest = "1:f60e7e9be98ff9d00371b24fcbe92e019b809b592d7d10b4cb61965ba59610f6" + digest = "1:220dccbfc231f373f5ffc0f66bb3d9cd3b1394e38c042a9a458535b57335b05a" name = "github.com/gophercloud/gophercloud" packages = [ ".", @@ -279,303 +255,257 @@ "openstack/utils", "pagination", ] - pruneopts = "NT" - revision = "2d40ff7a3874e2b376ff245d549e7757048cd65c" - -[[projects]] - branch = "master" - digest = "1:8ec8e8a30ea1c7895d295ea0e1fb9fb118a77a4698367579f8de47c99fbbf89b" - name = "github.com/gophercloud/utils" - packages = ["openstack/baremetal/v1/nodes"] - pruneopts = "NT" - revision = "25f1b77b8c0367b43939dbb20f5dd12e3c9b0053" - -[[projects]] - digest = "1:c64d81bb49f6d8b684ea4d3155d691196841ddb964d517a84b05be38bf96971d" - name = "github.com/grpc-ecosystem/grpc-gateway" - packages = [ - "internal", - "runtime", - "utilities", - ] - pruneopts = "NT" - revision = "cd0c8ef3533e9c04e6520cac37a81fe262fb0b34" - version = "v1.9.2" + pruneopts = "" + revision = "a8bdb516e71d7c586306501b30b80f06f53c013e" + version = "v0.6.0" [[projects]] - digest = "1:52094d0f8bdf831d1a2401e9b6fee5795fdc0b2a2d1f8bb1980834c289e79129" + digest = "1:7f6f07500a0b7d3766b00fa466040b97f2f5b5f3eef2ecabfe516e703b05119a" name = "github.com/hashicorp/golang-lru" packages = [ ".", "simplelru", ] - pruneopts = "NT" - revision = "7087cb70de9f7a8bc0a10c375cb0d2280a8edf9c" - version = "v0.5.1" + pruneopts = "" + revision = "7f827b33c0f158ec5dfbba01bb0b14a4541fd81d" + version = "v0.5.3" [[projects]] - digest = "1:aaa38889f11896ee3644d77e17dc7764cc47f5f3d3b488268df2af2b52541c5f" + digest = "1:6906c992632a66c125bd44e68a7abc354d9eda683e451b5c2d9b1614d15d4f18" name = "github.com/imdario/mergo" packages = ["."] - pruneopts = "NT" - revision = "7c29201646fa3de8506f701213473dd407f19646" - version = "v0.3.7" + pruneopts = "" + revision = "1afb36080aec31e0d1528973ebe6721b191b0369" + version = "v0.3.8" [[projects]] - digest = "1:406338ad39ab2e37b7f4452906442a3dbf0eb3379dd1f06aafb5c07e769a5fbb" + digest = "1:870d441fe217b8e689d7949fef6e43efbc787e50f200cb1e70dbca9204a1d6be" name = "github.com/inconshreveable/mousetrap" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75" version = "v1.0" [[projects]] - digest = "1:f5b9328966ccea0970b1d15075698eff0ddb3e75889560aad2e9f76b289b536a" + digest = "1:7df5a9695a743c3e1626b28bb8741602c8c15527e1efaeaec48ab2ff9a23f74c" name = "github.com/joho/godotenv" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "23d116af351c84513e1946b527c88823e476be13" version = "v1.3.0" [[projects]] - digest = "1:0fbdc0dfdabfa16d50dd7151b7efe3189ffb0df68fa9866dc35240bfea39ad92" + digest = "1:64bdeae058b988b2b198326b1ca6155497e904e697348d838add8a6e4c25842e" name = "github.com/json-iterator/go" packages = ["."] - pruneopts = "NT" - revision = "0ff49de124c6f76f8494e194af75bde0f1a49a29" - version = "v1.1.6" + pruneopts = "" + revision = "03217c3e97663914aec3faafde50d081f197a0a2" + version = "v1.1.8" [[projects]] - digest = "1:58999a98719fddbac6303cb17e8d85b945f60b72f48e3a2df6b950b97fa926f1" + digest = "1:0f51cee70b0d254dbc93c22666ea2abf211af81c1701a96d04e2284b408621db" name = "github.com/konsorten/go-windows-terminal-sequences" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "f55edac94c9bbba5d6182a4be46d86a2c9b5b50e" version = "v1.0.2" [[projects]] - branch = "master" - digest = "1:5abd2595ba85b83e66f26ac8e89605dd334f0bfe3c455c1bf25a6a176a4fe836" + digest = "1:263db331ad7732d9d1e45003031dd3d6295c0c4be232f99596dde34fa51e3df9" name = "github.com/mailru/easyjson" packages = [ "buffer", "jlexer", "jwriter", ] - pruneopts = "NT" - revision = "b2ccc519800e761ac8000b95e5d57c80a897ff9e" + pruneopts = "" + revision = "1b2b06f5f209fea48ff5922d8bfb2b9ed5d8f00b" + version = "v0.7.0" [[projects]] - digest = "1:56dbf15e091bf7926cb33a57cb6bdfc658fc6d3498d2f76f10a97ce7856f1fde" + digest = "1:68145053d55a0fa6b5f259eb70de75cb3914f6440472007e67c87894e1c06697" name = "github.com/markbates/inflect" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "24b83195037b3bc61fcda2d28b7b0518bce293b6" version = "v1.0.4" [[projects]] - digest = "1:ea1db000388d88b31db7531c83016bef0d6db0d908a07794bfc36aca16fbf935" + digest = "1:63722a4b1e1717be7b98fc686e0b30d5e7f734b9e93d7dee86293b6deab7ea28" name = "github.com/matttproud/golang_protobuf_extensions" packages = ["pbutil"] - pruneopts = "NT" + pruneopts = "" revision = "c12348ce28de40eed0136aa2b644d0ee0650e56c" version = "v1.0.1" [[projects]] - digest = "1:f9f72e583aaacf1d1ac5d6121abd4afd3c690baa9e14e1d009df26bf831ba347" + digest = "1:6dbb0eb72090871f2e58d1e37973fe3cb8c0f45f49459398d3fc740cb30e13bd" name = "github.com/mitchellh/go-homedir" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "af06845cf3004701891bf4fdb884bfe4920b3727" version = "v1.1.0" [[projects]] - digest = "1:2f42fa12d6911c7b7659738758631bec870b7e9b4c6be5444f963cdcfccc191f" + digest = "1:0c0ff2a89c1bb0d01887e1dac043ad7efbf3ec77482ef058ac423d13497e16fd" name = "github.com/modern-go/concurrent" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "bacd9c7ef1dd9b15be4a9909b8ac7a4e313eec94" version = "1.0.3" [[projects]] - digest = "1:c6aca19413b13dc59c220ad7430329e2ec454cc310bc6d8de2c7e2b93c18a0f6" + digest = "1:e32bdbdb7c377a07a9a46378290059822efdce5c8d96fe71940d87cb4f918855" name = "github.com/modern-go/reflect2" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "4b7aa43c6742a2c18fdef89dd197aaae7dac7ccd" version = "1.0.1" [[projects]] - branch = "master" - digest = "1:47206e7630ed0f7fb37b6655dfd7da0be1c28b591694251278561b57846ad131" + digest = "1:b2355141a05cea043f2720b871ac68a4b88738fa49c4df590bf72e4623072bd1" name = "github.com/operator-framework/operator-sdk" packages = [ - "internal/pkg/scaffold", - "internal/pkg/scaffold/input", - "internal/pkg/scaffold/internal/deps", + "internal/scaffold", + "internal/scaffold/input", + "internal/scaffold/internal/deps", "internal/util/fileutil", "internal/util/k8sutil", "internal/util/projutil", "internal/util/yamlutil", "pkg/k8sutil", - "pkg/leader", "pkg/test", "version", ] - pruneopts = "NT" - revision = "3cf985d4cbc5cebf14430079d3c72176f9866ed5" - -[[projects]] - digest = "1:93b1d84c5fa6d1ea52f4114c37714cddd84d5b78f151b62bb101128dd51399bf" - name = "github.com/pborman/uuid" - packages = ["."] - pruneopts = "NT" - revision = "adf5a7427709b9deb95d29d3fa8a2bf9cfd388f1" - version = "v1.2" + pruneopts = "" + revision = "2445fcda834ca4b7cf0d6c38fba6317fb219b469" + version = "v0.12.0" [[projects]] - digest = "1:14715f705ff5dfe0ffd6571d7d201dd8e921030f8070321a79380d8ca4ec1a24" + digest = "1:1d7e1867c49a6dd9856598ef7c3123604ea3daabf5b83f303ff457bcbc410b1d" name = "github.com/pkg/errors" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "ba968bfe8b2f7e042a574c888954fccecfa385b4" version = "v0.8.1" [[projects]] - digest = "1:e2fde2e6d46505f0d91d6d350410ca82f382870c90d6b05227302f45f78828a7" + digest = "1:6bea0cda3fc62855d5312163e7d259fb97e31692d93c08cfffbeb2d00df0f13c" name = "github.com/prometheus/client_golang" packages = [ "prometheus", "prometheus/internal", "prometheus/promhttp", ] - pruneopts = "NT" - revision = "2641b987480bca71fb39738eb8c8b0d577cb1d76" - version = "v0.9.4" + pruneopts = "" + revision = "170205fb58decfd011f1550d4cfb737230d7ae4f" + version = "v1.1.0" [[projects]] branch = "master" - digest = "1:c2cc5049e927e2749c0d5163c9f8d924880d83e84befa732b9aad0b6be227bed" + digest = "1:0a565f69553dd41b3de790fde3532e9237142f2637899e20cd3e7396f0c4f2f7" name = "github.com/prometheus/client_model" packages = ["go"] - pruneopts = "NT" - revision = "fd36f4220a901265f90734c3183c5f0c91daa0b8" + pruneopts = "" + revision = "14fe0d1b01d4d5fc031dd4bec1823bd3ebbe8016" [[projects]] - digest = "1:7b648586b69c7d73698ee422681975eb23e8b7468dbd457872c559fc95177861" + digest = "1:8904acfa3ef080005c1fc0670ed0471739d1e211be5638cfa6af536b701942ae" name = "github.com/prometheus/common" packages = [ "expfmt", "internal/bitbucket.org/ww/goautoneg", "model", ] - pruneopts = "NT" - revision = "31bed53e4047fd6c510e43a941f90cb31be0972a" - version = "v0.6.0" + pruneopts = "" + revision = "287d3e634a1e550c9e463dd7e5a75a422c614505" + version = "v0.7.0" [[projects]] - digest = "1:85cecf7dcfeab7a2c5fd37e7e302f5bc81f00c9551e27769cb693c1a3fc2e740" + digest = "1:af5cd8219fd15c06eadaab455c0beb72f2f7bb32d298acb401d30c452a8dbd7e" name = "github.com/prometheus/procfs" packages = [ ".", "internal/fs", + "internal/util", ] - pruneopts = "NT" - revision = "3f98efb27840a48a7a2898ec80be07674d19f9c8" - version = "v0.0.3" + pruneopts = "" + revision = "499c85531f756d1129edd26485a5f73871eeb308" + version = "v0.0.5" [[projects]] - digest = "1:a4644e85e1f29f9825a4e61dcdd8244fe7c4db02eead3f508d5a5bdf7924dbbd" + digest = "1:413d03d8e710ce85e20a6c17c1708c9d059e8a197669a73e29e51e8abcc29bc9" name = "github.com/rogpeppe/go-internal" packages = [ "modfile", "module", "semver", ] - pruneopts = "NT" - revision = "438578804ca6f31be148c27683afc419ce47c06e" - version = "v1.3.0" + pruneopts = "" + revision = "d89504fbbf2c313df24867a5ffafcc9b847961ff" + version = "v1.5.0" [[projects]] - digest = "1:efe8ddffa78bddbd1d826faf622cca77dbf7ddc72df04077d69a688cac657148" + digest = "1:1a405cddcf3368445051fb70ab465ae99da56ad7be8d8ca7fc52159d1c2d873c" name = "github.com/sirupsen/logrus" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "839c75faf7f98a33d445d181f3018b5c3409a45e" version = "v1.4.2" [[projects]] - digest = "1:49b6e0d199dc20969bf7c9d14647313e1dd1b102178fad4ca999d8a9584edfab" + digest = "1:956f655c87b7255c6b1ae6c203ebb0af98cf2a13ef2507e34c9bf1c0332ac0f5" name = "github.com/spf13/afero" packages = [ ".", "mem", ] - pruneopts = "NT" + pruneopts = "" revision = "588a75ec4f32903aa5e39a2619ba6a4631e28424" version = "v1.2.2" [[projects]] - digest = "1:37a91e5093cb260946900c75198c293f3439187e43f48e1a3ae10b4aa55bd7ad" + digest = "1:0c63b3c7ad6d825a898f28cb854252a3b29d37700c68a117a977263f5ec94efe" name = "github.com/spf13/cobra" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "f2b07da1e2c38d5f12845a4f607e2e1018cbb1f5" version = "v0.0.5" [[projects]] - digest = "1:9d8420bbf131d1618bde6530af37c3799340d3762cc47210c1d9532a4c3a2779" + digest = "1:688428eeb1ca80d92599eb3254bdf91b51d7e232fead3a73844c1f201a281e51" name = "github.com/spf13/pflag" packages = ["."] - pruneopts = "NT" - revision = "298182f68c66c05229eb03ac171abe6e309ee79a" - version = "v1.0.3" - -[[projects]] - digest = "1:8bcb2616463bc981681c4b26f2aa817be8167682b76fb7884ec3fafdc9f82372" - name = "go.opencensus.io" - packages = [ - ".", - "internal", - "internal/tagencoding", - "metric/metricdata", - "metric/metricproducer", - "plugin/ocgrpc", - "plugin/ochttp", - "plugin/ochttp/propagation/b3", - "plugin/ochttp/propagation/tracecontext", - "resource", - "stats", - "stats/internal", - "stats/view", - "tag", - "trace", - "trace/internal", - "trace/propagation", - "trace/tracestate", - ] - pruneopts = "NT" - revision = "43463a80402d8447b7fce0d2c58edf1687ff0b58" - version = "v0.19.3" + pruneopts = "" + revision = "2e9d26c8c37aae03e3f9d4e90b7116f5accb7cab" + version = "v1.0.5" [[projects]] - digest = "1:cc9d86ec4e6e3bdf87e3a421273bfeed003cf8e21351c0302fe8b0eb7b10efe6" + digest = "1:31e329f8b429379a071a0ece44d10508e5ab3628857528681a5d493ce4d334bd" name = "go.uber.org/atomic" packages = ["."] - pruneopts = "NT" - revision = "df976f2515e274675050de7b3f42545de80594fd" - version = "v1.4.0" + pruneopts = "" + revision = "9dc4df04d0d1c39369750a9f6c32c39560672089" + version = "v1.5.0" [[projects]] - digest = "1:58ca93bdf81bac106ded02226b5395a0595d5346cdc4caa8d9c1f3a5f8f9976e" + digest = "1:dfa0ac0e9eaefded9479bba35e8c274cbbe688894c583e28ad66c0a95d2eeb45" name = "go.uber.org/multierr" packages = ["."] - pruneopts = "NT" - revision = "3c4937480c32f4c13a875a1829af76c98ca3d40a" - version = "v1.1.0" + pruneopts = "" + revision = "824d08f79702fe5f54aca8400aa0d754318786e7" + version = "v1.4.0" [[projects]] - digest = "1:80f7b1f444dbbe5b64a5174c6726af3243a4770fb19daaae9613c4d615a9684a" + branch = "master" + digest = "1:4f9d5475f0ab52f0dc28c6bfd2cfeebb0a5f823e8ae4cc8bc53ae112762d275c" + name = "go.uber.org/tools" + packages = ["update-license"] + pruneopts = "" + revision = "2cfd321de3ee5d5f8a5fda2521d1703478334d98" + +[[projects]] + digest = "1:6be51df3fe75b1c0ff227aaa618f85e852a87bdf35354352856859b605217afe" name = "go.uber.org/zap" packages = [ ".", @@ -585,21 +515,32 @@ "internal/exit", "zapcore", ] - pruneopts = "NT" - revision = "27376062155ad36be76b0f12cf1572a221d3a48c" - version = "v1.10.0" + pruneopts = "" + revision = "a6015e13fab9b744d96085308ce4e8f11bad1996" + version = "v1.12.0" [[projects]] branch = "master" - digest = "1:9f3f0a891360d57597d5c26c479dce4c6b158efc73dcd702f23002d218b55a98" + digest = "1:ca6a57b56c4a49d5d5675f8f67d98529c3dfbe948e9c50434b560504a76bffc8" name = "golang.org/x/crypto" packages = ["ssh/terminal"] - pruneopts = "NT" - revision = "cc06ce4a13d484c0101a9e92913248488a75786d" + pruneopts = "" + revision = "bd318be0434a57050ed475e0f45c3dbb16c09c2e" + +[[projects]] + branch = "master" + digest = "1:07a6b419f790dba389a58ba7ef5bb5e5281fe0b3046398b33767e3bd21c0b736" + name = "golang.org/x/lint" + packages = [ + ".", + "golint", + ] + pruneopts = "" + revision = "16217165b5de779cb6a5e4fc81fa9c1166fda457" [[projects]] branch = "master" - digest = "1:9445b98d5ea9ea221cac46d87aa3a8707f0dcae24aedd5d5c0eb01ddae243503" + digest = "1:70dd5b4f739e41c26eb591e079100778d748d632ca4c23c548e0c86bf6c6955c" name = "golang.org/x/net" packages = [ "context", @@ -608,15 +549,13 @@ "http2", "http2/hpack", "idna", - "internal/timeseries", - "trace", ] - pruneopts = "NT" - revision = "3b0461eec859c4b73bb64fdc8285971fd33e3938" + pruneopts = "" + revision = "daa7c04131f568e31c51927b359a2d197a357058" [[projects]] branch = "master" - digest = "1:39b3fcfdc10f07969cf1e9fcb901bbb600083fff9880739f4ea596b48656c5a1" + digest = "1:01bdbbc604dcd5afb6f66a717f69ad45e9643c72d5bc11678d44ffa5c50f9e42" name = "golang.org/x/oauth2" packages = [ ".", @@ -625,30 +564,22 @@ "jws", "jwt", ] - pruneopts = "NT" + pruneopts = "" revision = "0f29369cfe4552d0e4bcddc57cc75f4d7e672a33" [[projects]] branch = "master" - digest = "1:bde1844fd8dff0a4ed259e24bf0e3cb91c2bc7bc3cd0a43118c6ef8f8be1b9ca" - name = "golang.org/x/sync" - packages = ["semaphore"] - pruneopts = "NT" - revision = "112230192c580c3556b8cee6403af37a4fc5f28c" - -[[projects]] - branch = "master" - digest = "1:17e1a59f06a8afe10b1541cb8feab2694846a0f49b5805a4f8561c6f3b7b2594" + digest = "1:5da06c7366923db1cab57ee8f391f815b1245271f836421e65da4945b765b283" name = "golang.org/x/sys" packages = [ "unix", "windows", ] - pruneopts = "NT" - revision = "04f50cda93cbb67f2afa353c52f342100e80e625" + pruneopts = "" + revision = "d32e6e3b99c40f2bfaea45ea9596ed539eed1c0d" [[projects]] - digest = "1:348fa8283a7c60b5b71ce04d27b37f7c0fce552d4d0b463b5b3ebbd1840d3f1a" + digest = "1:740b51a55815493a8d0f2b1e0d0ae48fe48953bf7eaf3fcc4198823bf67768c0" name = "golang.org/x/text" packages = [ "collate", @@ -669,28 +600,33 @@ "unicode/rangetable", "width", ] - pruneopts = "NT" + pruneopts = "" revision = "342b2e1fbaa52c93f31447ad2c6abc048c63e475" version = "v0.3.2" [[projects]] branch = "master" - digest = "1:9fdc2b55e8e0fafe4b41884091e51e77344f7dc511c5acedcfd98200003bff90" + digest = "1:c43c206d0f8927031df6fc877cf58502af5ff875b76b4ceb6b617b676f7731f7" name = "golang.org/x/time" packages = ["rate"] - pruneopts = "NT" - revision = "9d24e82272b4f38b78bc8cff74fa936d31ccd8ef" + pruneopts = "" + revision = "555d28b269f0569763d25dbe1a237ae74c6bcc82" [[projects]] branch = "master" - digest = "1:4b7b3b68430251bcea9abad52e36f3ea6227c4384d5dfd22083ee0976c19bd80" + digest = "1:0c35143075fa8ac07751ab47ba6a136526e2b2b51f8d9309d1ee1ccc7915a13b" name = "golang.org/x/tools" packages = [ + "go/analysis", + "go/analysis/passes/inspect", "go/ast/astutil", + "go/ast/inspector", + "go/buildutil", "go/gcexportdata", "go/internal/gcimporter", "go/internal/packagesdriver", "go/packages", + "go/types/objectpath", "go/types/typeutil", "imports", "internal/fastwalk", @@ -698,20 +634,32 @@ "internal/imports", "internal/module", "internal/semver", + "internal/span", ] - pruneopts = "NT" - revision = "4874f863e654449ac721e9d65f7467dbaba3da2e" + pruneopts = "" + revision = "97ad0ed33101b39103eaf8aeab62b59dd1cfb89e" [[projects]] - digest = "1:b3fe055d94338b24d532229659c32b8ef4798f509172efbbb362d0f6d3494e3d" - name = "google.golang.org/api" - packages = ["support/bundler"] - pruneopts = "NT" - revision = "02490b97dff7cfde1995bd77de808fd27053bc87" - version = "v0.7.0" + branch = "master" + digest = "1:61bfb54376228f1111f1f0f2d609971251f49ba1e3d8dd801249b521010ae0ca" + name = "golang.org/x/xerrors" + packages = [ + ".", + "internal", + ] + pruneopts = "" + revision = "1b5146add8981d58be77b16229c0ff0f8bebd8c1" + +[[projects]] + digest = "1:c7cb9c801cc95782f58acfd9a885bf6ec5d395bf50485f1d68ee0e2d7e6b9e6a" + name = "gomodules.xyz/jsonpatch" + packages = ["v2"] + pruneopts = "" + revision = "e8422f09d27ee2c8cfb2c7f8089eb9eeb0764849" + version = "v2.0.1" [[projects]] - digest = "1:25a3797e84a65cc761261eb04134cc03bc64861ef37d1242d92b199bd955800f" + digest = "1:c4404231035fad619a12f82ae3f0f8f9edc1cc7f34e7edad7a28ccac5336cc96" name = "google.golang.org/appengine" packages = [ ".", @@ -725,93 +673,75 @@ "internal/urlfetch", "urlfetch", ] - pruneopts = "NT" - revision = "b2f4a3cf3c67576a2ee09e1fe62656a5086ce880" - version = "v1.6.1" - -[[projects]] - branch = "master" - digest = "1:e0864226329449f4c483216975400933acc5e0bef47feba57edea87afbea90c7" - name = "google.golang.org/genproto" - packages = [ - "googleapis/api/httpbody", - "googleapis/rpc/status", - "protobuf/field_mask", - ] - pruneopts = "NT" - revision = "989357319d63150615221e52d4addd4b7933fd91" - -[[projects]] - digest = "1:d2c237dc4281b21718395454f2e51e246e17ab620d807609e2eb4d67686e1348" - name = "google.golang.org/grpc" - packages = [ - ".", - "balancer", - "balancer/base", - "balancer/roundrobin", - "binarylog/grpc_binarylog_v1", - "codes", - "connectivity", - "credentials", - "credentials/internal", - "encoding", - "encoding/proto", - "grpclog", - "internal", - "internal/backoff", - "internal/balancerload", - "internal/binarylog", - "internal/channelz", - "internal/envconfig", - "internal/grpcrand", - "internal/grpcsync", - "internal/syscall", - "internal/transport", - "keepalive", - "metadata", - "naming", - "peer", - "resolver", - "resolver/dns", - "resolver/passthrough", - "stats", - "status", - "tap", - ] - pruneopts = "NT" - revision = "501c41df7f472c740d0674ff27122f3f48c80ce7" - version = "v1.21.1" + pruneopts = "" + revision = "971852bfffca25b069c31162ae8f247a3dba083b" + version = "v1.6.5" [[projects]] - digest = "1:1b91ae0dc69a41d4c2ed23ea5cffb721ea63f5037ca4b81e6d6771fbb8f45129" + digest = "1:eb53021a8aa3f599d29c7102e65026242bdedce998a54837dc67f14b6a97c5fd" name = "gopkg.in/fsnotify.v1" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9" source = "https://github.com/fsnotify/fsnotify.git" version = "v1.4.7" [[projects]] - digest = "1:2d1fbdc6777e5408cabeb02bf336305e724b925ff4546ded0fa8715a7267922a" + digest = "1:75fb3fcfc73a8c723efde7777b40e8e8ff9babf30d8c56160d01beffea8a95a6" name = "gopkg.in/inf.v0" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "d2d2541c53f18d2a059457998ce2876cc8e67cbf" version = "v0.9.1" [[projects]] - digest = "1:18108594151654e9e696b27b181b953f9a90b16bf14d253dd1b397b025a1487f" + digest = "1:16c45073e621eb4261d14740daeaf985e53657ebb40b14fc56499c23e876f84a" name = "gopkg.in/yaml.v2" packages = ["."] - pruneopts = "NT" - revision = "51d6538a90f86fe93ac480b35f37b2be17fef232" - version = "v2.2.2" + pruneopts = "" + revision = "f90ceb4f409096b60e2e9076b38b304b8246e5fa" + version = "v2.2.5" [[projects]] - digest = "1:f3583903dae3234541161e9f005cbeb135a118a56a4728987a7561e687714698" + digest = "1:afc5a2804ec9be0562c937b0c684bbaf5a9c4aef7511677b539c3806be3f4783" + name = "honnef.co/go/tools" + packages = [ + "arg", + "cmd/staticcheck", + "config", + "deprecated", + "facts", + "functions", + "go/types/typeutil", + "internal/cache", + "internal/passes/buildssa", + "internal/renameio", + "internal/sharedcheck", + "lint", + "lint/lintdsl", + "lint/lintutil", + "lint/lintutil/format", + "loader", + "printf", + "simple", + "ssa", + "ssautil", + "staticcheck", + "staticcheck/vrp", + "stylecheck", + "unused", + "version", + ] + pruneopts = "" + revision = "afd67930eec2a9ed3e9b19f684d17a062285f16a" + version = "2019.2.3" + +[[projects]] + digest = "1:5e5cfbab57ea5444c1eb295a39fdc403f097f5ace592c829db7b3e0e3ea66903" name = "k8s.io/api" packages = [ "admission/v1beta1", + "admissionregistration/v1", "admissionregistration/v1beta1", "apps/v1", "apps/v1beta1", @@ -831,6 +761,7 @@ "coordination/v1", "coordination/v1beta1", "core/v1", + "discovery/v1alpha1", "events/v1beta1", "extensions/v1beta1", "networking/v1", @@ -849,26 +780,26 @@ "storage/v1alpha1", "storage/v1beta1", ] - pruneopts = "NT" - revision = "40a48860b5abbba9aa891b02b32da429b08d96a0" - version = "kubernetes-1.14.0" + pruneopts = "" + revision = "35e52d86657aba06859dd22099bfa14faf1effb2" [[projects]] - digest = "1:43ecb62a1eaf8b1c3d91fb0525ce03f2f4ab66d83e2a42a096b0479e4d23950c" + digest = "1:6ff2033184fcf9e213724ef91e2f465d0c54171ce82c259d06f9b3d09cb736e3" name = "k8s.io/apiextensions-apiserver" packages = [ "pkg/apis/apiextensions", + "pkg/apis/apiextensions/v1", "pkg/apis/apiextensions/v1beta1", "pkg/client/clientset/clientset/scheme", ] - pruneopts = "NT" - revision = "53c4693659ed354d76121458fb819202dd1635fa" - version = "kubernetes-1.14.0" + pruneopts = "" + revision = "5357c4baaf6562e4d37c9afc9fef99bd16d76a9f" [[projects]] - digest = "1:cedf8eb24150165cc58afc33d503686e63a6c74267ee67604d1eb65fc7f01f68" + digest = "1:8ac118b8194fbc5d845ca59c3e3ca2e179ffe49a3f4db9093cd636f423f32f2d" name = "k8s.io/apimachinery" packages = [ + "pkg/api/equality", "pkg/api/errors", "pkg/api/meta", "pkg/api/resource", @@ -913,12 +844,11 @@ "third_party/forked/golang/json", "third_party/forked/golang/reflect", ] - pruneopts = "NT" - revision = "d7deff9243b165ee192f5551710ea4285dcfd615" - version = "kubernetes-1.14.0" + pruneopts = "" + revision = "a2eda9f80ab8a454a81bdde16d62a1afe5f931c0" [[projects]] - digest = "1:8bc3cec7a064846dea817e20e5c454b2ba1bf77e1a439d3359e0dc0c2a2710a5" + digest = "1:f110130ff91e7ac33f92c2cca01853dadc8a005c36a639b33e7d2d98381bf75a" name = "k8s.io/client-go" packages = [ "discovery", @@ -927,6 +857,7 @@ "dynamic", "kubernetes", "kubernetes/scheme", + "kubernetes/typed/admissionregistration/v1", "kubernetes/typed/admissionregistration/v1beta1", "kubernetes/typed/apps/v1", "kubernetes/typed/apps/v1beta1", @@ -946,6 +877,7 @@ "kubernetes/typed/coordination/v1", "kubernetes/typed/coordination/v1beta1", "kubernetes/typed/core/v1", + "kubernetes/typed/discovery/v1alpha1", "kubernetes/typed/events/v1beta1", "kubernetes/typed/extensions/v1beta1", "kubernetes/typed/networking/v1", @@ -1001,96 +933,44 @@ "util/retry", "util/workqueue", ] - pruneopts = "NT" - revision = "6ee68ca5fd8355d024d02f9db0b3b667e8357a0f" - version = "kubernetes-1.14.0" - -[[projects]] - digest = "1:2d821667dbd520a7ef31bdc923543f197ba30021b4317fd8871618ada52f23b0" - name = "k8s.io/code-generator" - packages = [ - "cmd/client-gen", - "cmd/client-gen/args", - "cmd/client-gen/generators", - "cmd/client-gen/generators/fake", - "cmd/client-gen/generators/scheme", - "cmd/client-gen/generators/util", - "cmd/client-gen/path", - "cmd/client-gen/types", - "cmd/conversion-gen", - "cmd/conversion-gen/args", - "cmd/conversion-gen/generators", - "cmd/deepcopy-gen", - "cmd/deepcopy-gen/args", - "cmd/defaulter-gen", - "cmd/defaulter-gen/args", - "cmd/informer-gen", - "cmd/informer-gen/args", - "cmd/informer-gen/generators", - "cmd/lister-gen", - "cmd/lister-gen/args", - "cmd/lister-gen/generators", - "pkg/namer", - "pkg/util", - ] - pruneopts = "T" - revision = "50b561225d70b3eb79a1faafd3dfe7b1a62cbe73" - version = "kubernetes-1.14.0" - -[[projects]] - branch = "master" - digest = "1:be219f9a8b4ec4488dc55bb2b321e801193f37b8b0825c015ec389a7de011a90" - name = "k8s.io/gengo" - packages = [ - "args", - "examples/deepcopy-gen/generators", - "examples/defaulter-gen/generators", - "examples/set-gen/sets", - "generator", - "namer", - "parser", - "types", - ] - pruneopts = "NT" - revision = "e17681d19d3ac4837a019ece36c2a0ec31ffe985" + pruneopts = "" + revision = "bec269661e48cb1e5fbb0d037f356ffe9e9978a0" [[projects]] - digest = "1:8e0d93051b04c69a8f226da08f97515c7991524a676908ef228afd35fdc42264" + digest = "1:7ce71844fcaaabcbe09a392902edb5790ddca3a7070ae8d20830dc6dbe2751af" name = "k8s.io/klog" packages = ["."] - pruneopts = "NT" - revision = "d98d8acdac006fb39831f1b25640813fef9c314f" - version = "v0.3.3" + pruneopts = "" + revision = "2ca9ad30301bf30a8a6e0fa2110db6b8df699a91" + version = "v1.0.0" [[projects]] - digest = "1:c48a795cd7048bb1888273bc604b6e69b22f9b8089c3df65f77cc527757b515c" + branch = "master" + digest = "1:16a343bd9d820ae320de4d1eaa8acc7a214aac4b38fb21d03255d3a457d861df" name = "k8s.io/kube-openapi" packages = [ - "cmd/openapi-gen", - "cmd/openapi-gen/args", "pkg/common", - "pkg/generators", - "pkg/generators/rules", "pkg/util/proto", - "pkg/util/sets", ] - pruneopts = "NT" - revision = "0cf8f7e6ed1d2e3d47d02e3b6e559369af24d803" + pruneopts = "" + revision = "30be4d16710ac61bce31eb28a01054596fe6a9f1" [[projects]] branch = "master" - digest = "1:9d4cf9e47f4571be17d7ce10150998567e0b28b4c84d46f7f52f689790cb5719" + digest = "1:eea15d4ad177b9185f26550b314024a374838830b33a0954b179cad16f2e39a7" name = "k8s.io/utils" packages = [ "buffer", "integer", + "pointer", "trace", ] - pruneopts = "NT" - revision = "c55fbcfc754a5b2ec2fbae8fb9dcac36bdba6a12" + pruneopts = "" + revision = "2b95a09bc58df43d4032504619706b6a38293a47" [[projects]] - digest = "1:4d0f1aaba3d754432e1d1fdb0082d399bc6ca7a36ee8fb2eb49dcb5a3cb945eb" + branch = "master" + digest = "1:6dcab317b340b71064272186c9ecf30fdf228a228e9745533a5a6d8d443f32c4" name = "sigs.k8s.io/controller-runtime" packages = [ "pkg/cache", @@ -1101,9 +981,9 @@ "pkg/client/fake", "pkg/controller", "pkg/controller/controllerutil", - "pkg/conversion", "pkg/event", "pkg/handler", + "pkg/healthz", "pkg/internal/controller", "pkg/internal/controller/metrics", "pkg/internal/log", @@ -1120,39 +1000,37 @@ "pkg/recorder", "pkg/runtime/inject", "pkg/runtime/log", - "pkg/runtime/signals", "pkg/scheme", "pkg/source", "pkg/source/internal", "pkg/webhook", "pkg/webhook/admission", - "pkg/webhook/conversion", "pkg/webhook/internal/certwatcher", "pkg/webhook/internal/metrics", ] - pruneopts = "NT" - revision = "96b67f231945a8e8550dbdd8bfbd550a0c68097b" + pruneopts = "" + revision = "47744b5a819ddb704a85e6b11408cdf45443861b" [[projects]] - digest = "1:2918f6bb392201c6d3c0e8d2098b34d7c53b49341ee925ba645f5bfc9ef736b2" + digest = "1:0980d7a58070915ad1b5253f4d520d241a9a42b0700bb37c1222a50d080f00c3" name = "sigs.k8s.io/controller-tools" packages = [ - "pkg/crd/generator", - "pkg/crd/util", - "pkg/internal/codegen", - "pkg/internal/codegen/parse", - "pkg/internal/general", - "pkg/util", + "pkg/crd", + "pkg/crd/markers", + "pkg/genall", + "pkg/loader", + "pkg/markers", + "pkg/version", ] - pruneopts = "NT" - revision = "464fbed97efaced33902e262f09c5eae7315c3e3" - version = "v0.1.11" + pruneopts = "" + revision = "d556e7d0fb947b07a02d5c202e2e3b898b9e28e7" + version = "v0.2.2" [[projects]] - digest = "1:8730e0150dfb2b7e173890c8b9868e7a273082ef8e39f4940e3506a481cf895c" + digest = "1:321081b4a44256715f2b68411d8eda9a17f17ebfe6f0cc61d2cc52d11c08acfa" name = "sigs.k8s.io/yaml" packages = ["."] - pruneopts = "NT" + pruneopts = "" revision = "fd68e9863619f6ec2fdd8625fe1f02e7c877e480" version = "v1.1.0" @@ -1168,9 +1046,7 @@ "github.com/gophercloud/gophercloud/openstack/baremetal/v1/ports", "github.com/gophercloud/gophercloud/openstack/baremetalintrospection/noauth", "github.com/gophercloud/gophercloud/openstack/baremetalintrospection/v1/introspection", - "github.com/gophercloud/utils/openstack/baremetal/v1/nodes", "github.com/operator-framework/operator-sdk/pkg/k8sutil", - "github.com/operator-framework/operator-sdk/pkg/leader", "github.com/operator-framework/operator-sdk/pkg/test", "github.com/operator-framework/operator-sdk/version", "github.com/pkg/errors", @@ -1183,14 +1059,6 @@ "k8s.io/apimachinery/pkg/util/wait", "k8s.io/client-go/kubernetes/scheme", "k8s.io/client-go/plugin/pkg/client/auth/gcp", - "k8s.io/code-generator/cmd/client-gen", - "k8s.io/code-generator/cmd/conversion-gen", - "k8s.io/code-generator/cmd/deepcopy-gen", - "k8s.io/code-generator/cmd/defaulter-gen", - "k8s.io/code-generator/cmd/informer-gen", - "k8s.io/code-generator/cmd/lister-gen", - "k8s.io/gengo/args", - "k8s.io/kube-openapi/cmd/openapi-gen", "k8s.io/kube-openapi/pkg/common", "sigs.k8s.io/controller-runtime/pkg/client", "sigs.k8s.io/controller-runtime/pkg/client/config", @@ -1198,10 +1066,11 @@ "sigs.k8s.io/controller-runtime/pkg/controller", "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil", "sigs.k8s.io/controller-runtime/pkg/handler", + "sigs.k8s.io/controller-runtime/pkg/log", "sigs.k8s.io/controller-runtime/pkg/manager", + "sigs.k8s.io/controller-runtime/pkg/manager/signals", "sigs.k8s.io/controller-runtime/pkg/reconcile", "sigs.k8s.io/controller-runtime/pkg/runtime/log", - "sigs.k8s.io/controller-runtime/pkg/runtime/signals", "sigs.k8s.io/controller-runtime/pkg/scheme", "sigs.k8s.io/controller-runtime/pkg/source", ] diff --git a/vendor/github.com/metal3-io/baremetal-operator/Gopkg.toml b/vendor/github.com/metal3-io/baremetal-operator/Gopkg.toml index eafc9d7a4..4438ec213 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/Gopkg.toml +++ b/vendor/github.com/metal3-io/baremetal-operator/Gopkg.toml @@ -1,72 +1,37 @@ -# Force dep to vendor the code generators, which aren't imported just used at dev time. -required = [ - "k8s.io/code-generator/cmd/defaulter-gen", - "k8s.io/code-generator/cmd/deepcopy-gen", - "k8s.io/code-generator/cmd/conversion-gen", - "k8s.io/code-generator/cmd/client-gen", - "k8s.io/code-generator/cmd/lister-gen", - "k8s.io/code-generator/cmd/informer-gen", - "k8s.io/kube-openapi/cmd/openapi-gen", - "k8s.io/gengo/args", - "github.com/pkg/errors", - "github.com/gophercloud/gophercloud", - "github.com/gophercloud/utils/openstack/baremetal/v1/nodes", -] - -[[override]] - name = "k8s.io/kube-openapi" - revision = "0cf8f7e6ed1d2e3d47d02e3b6e559369af24d803" - -[[override]] - name = "k8s.io/code-generator" - version = "kubernetes-1.14.0" - [[override]] name = "k8s.io/api" - version = "kubernetes-1.14.0" + # revision for tag "kubernetes-1.16.2" + revision = "35e52d86657aba06859dd22099bfa14faf1effb2" [[override]] name = "k8s.io/apiextensions-apiserver" - version = "kubernetes-1.14.0" + # revision for tag "kubernetes-1.16.2" + revision = "5357c4baaf6562e4d37c9afc9fef99bd16d76a9f" [[override]] name = "k8s.io/apimachinery" - version = "kubernetes-1.14.0" + # revision for tag "kubernetes-1.16.2" + revision = "a2eda9f80ab8a454a81bdde16d62a1afe5f931c0" [[override]] name = "k8s.io/client-go" - version = "kubernetes-1.14.0" + # revision for tag "kubernetes-1.16.2" + revision = "bec269661e48cb1e5fbb0d037f356ffe9e9978a0" [[override]] name = "github.com/coreos/prometheus-operator" - version = "=v0.26.0" + version = "=v0.34.0" [[override]] name = "sigs.k8s.io/controller-runtime" - # Pin the latest master HEAD to get support webhooks - # which are not yet released - revision="96b67f231945a8e8550dbdd8bfbd550a0c68097b" - -[[constraint]] - name = "github.com/gophercloud/gophercloud" - revision = "2d40ff7a3874e2b376ff245d549e7757048cd65c" + branch = "master" [[constraint]] name = "github.com/operator-framework/operator-sdk" - # The version rule is used for a specific release and the master branch for in between releases. - branch = "master" #osdk_branch_annotation - # version = "=v0.4.0" #osdk_version_annotation + version = "=v0.12.0" # We need to specify fsnotify source to avoid dep panic # https://github.com/golang/dep/issues/1799 [[override]] name = "gopkg.in/fsnotify.v1" source = "https://github.com/fsnotify/fsnotify.git" - -[prune] - go-tests = true - non-go = true - - [[prune.project]] - name = "k8s.io/code-generator" - non-go = false diff --git a/vendor/github.com/metal3-io/baremetal-operator/Makefile b/vendor/github.com/metal3-io/baremetal-operator/Makefile index 86f6540b8..69df3459c 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/Makefile +++ b/vendor/github.com/metal3-io/baremetal-operator/Makefile @@ -9,27 +9,30 @@ GIT_COMMIT="$(shell git rev-parse --verify 'HEAD^{commit}')" export LDFLAGS="-X github.com/metal3-io/baremetal-operator/pkg/version.Raw=$(shell git describe --always --abbrev=40 --dirty) -X github.com/metal3-io/baremetal-operator/pkg/version.Commit=${GIT_COMMIT}" # Set some variables the operator expects to have in order to work +# Those need to be the same as in deploy/ironic_ci.env export OPERATOR_NAME=baremetal-operator -export DEPLOY_KERNEL_URL=http://172.22.0.1/images/ironic-python-agent.kernel -export DEPLOY_RAMDISK_URL=http://172.22.0.1/images/ironic-python-agent.initramfs +export DEPLOY_KERNEL_URL=http://172.22.0.1:6180/images/ironic-python-agent.kernel +export DEPLOY_RAMDISK_URL=http://172.22.0.1:6180/images/ironic-python-agent.initramfs export IRONIC_ENDPOINT=http://localhost:6385/v1/ export IRONIC_INSPECTOR_ENDPOINT=http://localhost:5050/v1/ .PHONY: help help: @echo "Targets:" - @echo " test -- run unit tests and linter" - @echo " unit -- run the unit tests" - @echo " unit-verbose -- run unit tests with verbose flag enabled" - @echo " lint -- run the linter" - @echo " e2e-local -- run end-to-end tests locally" - @echo " help -- this help output" + @echo " test -- run unit tests and linter" + @echo " unit -- run the unit tests" + @echo " unit-cover -- run the unit tests and write code coverage statistics to console" + @echo " unit-cover-html -- run the unit tests and open code coverage statistics in a browser" + @echo " unit-verbose -- run unit tests with verbose flag enabled" + @echo " lint -- run the linter" + @echo " e2e-local -- run end-to-end tests locally" + @echo " help -- this help output" @echo @echo "Variables:" - @echo " TEST_NAMESPACE -- project name to use ($(TEST_NAMESPACE))" - @echo " SETUP -- controls the --no-setup flag ($(SETUP))" - @echo " GO_TEST_FLAGS -- flags to pass to --go-test-flags ($(GO_TEST_FLAGS))" - @echo " DEBUG -- debug flag, if any ($(DEBUG))" + @echo " TEST_NAMESPACE -- project name to use ($(TEST_NAMESPACE))" + @echo " SETUP -- controls the --no-setup flag ($(SETUP))" + @echo " GO_TEST_FLAGS -- flags to pass to --go-test-flags ($(GO_TEST_FLAGS))" + @echo " DEBUG -- debug flag, if any ($(DEBUG))" .PHONY: test test: generate unit lint dep-check @@ -46,16 +49,26 @@ travis: unit-verbose lint unit: go test $(GO_TEST_FLAGS) ./cmd/... ./pkg/... +.PHONY: unit-cover +unit-cover: + go test -coverprofile=cover.out $(GO_TEST_FLAGS) ./cmd/... ./pkg/... + go tool cover -func=cover.out + +.PHONY: unit-cover-html +unit-cover-html: + go test -coverprofile=cover.out $(GO_TEST_FLAGS) ./cmd/... ./pkg/... + go tool cover -html=cover.out + .PHONY: unit-verbose unit-verbose: VERBOSE=-v make unit -crd_file=deploy/crds/metal3_v1alpha1_baremetalhost_crd.yaml +crd_file=deploy/crds/metal3.io_baremetalhosts_crd.yaml crd_tmp=.crd.yaml.tmp .PHONY: lint -lint: test-sec - golint -set_exit_status pkg/... cmd/... +lint: test-sec $GOPATH/bin/golint + find ./pkg ./cmd -type f -name \*.go |grep -v zz_ | xargs -L1 golint -set_exit_status go vet ./pkg/... ./cmd/... cp $(crd_file) $(crd_tmp); make generate; if ! diff -q $(crd_file) $(crd_tmp); then mv $(crd_tmp) $(crd_file); exit 1; else rm $(crd_tmp); fi @@ -66,6 +79,9 @@ test-sec: $GOPATH/bin/gosec $GOPATH/bin/gosec: go get -u github.com/securego/gosec/cmd/gosec +$GOPATH/bin/golint: + go get -u golang.org/x/lint/golint + .PHONY: docs docs: $(patsubst %.dot,%.png,$(wildcard docs/*.dot)) @@ -81,7 +97,7 @@ e2e-local: .PHONY: dep dep: - dep ensure + dep ensure -v .PHONY: run run: @@ -108,13 +124,13 @@ build: .PHONY: deploy deploy: - echo "{ \"kind\": \"Namespace\", \"apiVersion\": \"v1\", \"metadata\": { \"name\": \"$(RUN_NAMESPACE)\", \"labels\": { \"name\": \"$(RUN_NAMESPACE)\" } } }" | kubectl apply -f - - kubectl apply -f deploy/service_account.yaml -n $(RUN_NAMESPACE) - kubectl apply -f deploy/role.yaml -n $(RUN_NAMESPACE) - kubectl apply -f deploy/role_binding.yaml - kubectl apply -f deploy/crds/metal3_v1alpha1_baremetalhost_crd.yaml - kubectl apply -f deploy/operator.yaml -n $(RUN_NAMESPACE) - -.PHONY: dep-check -dep-check: - dep check + cd deploy && kustomize edit set namespace $(RUN_NAMESPACE) && cd .. + kustomize build deploy | kubectl apply -f - + +.PHONY: dep-status +dep-status: + dep status + +.PHONY: dep-prune +dep-prune: + dep prune -v diff --git a/vendor/github.com/metal3-io/baremetal-operator/README.md b/vendor/github.com/metal3-io/baremetal-operator/README.md index cace34497..cd1c7759b 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/README.md +++ b/vendor/github.com/metal3-io/baremetal-operator/README.md @@ -1,5 +1,10 @@ # Bare Metal Operator +[![Ubuntu V1alpha1 build status](https://jenkins.nordix.org/view/Airship/job/airship_master_integration_test_ubuntu/badge/icon?subject=Ubuntu%20E2E%20V1alpha1)](https://jenkins.nordix.org/view/Airship/job/airship_master_integration_test_ubuntu) +[![CentOS V1alpha1 build status](https://jenkins.nordix.org/view/Airship/job/airship_master_integration_test_centos/badge/icon?subject=CentOS%20E2E%20V1alpha1)](https://jenkins.nordix.org/view/Airship/job/airship_master_integration_test_centos) +[![Ubuntu V1alpha2 build status](https://jenkins.nordix.org/view/Airship/job/airship_master_v1a2_integration_test_ubuntu/badge/icon?subject=Ubuntu%20E2E%20V1alpha2)](https://jenkins.nordix.org/view/Airship/job/airship_master_v1a2_integration_test_ubuntu) +[![CentOS V1alpha2 build status](https://jenkins.nordix.org/view/Airship/job/airship_master_v1a2_integration_test_centos/badge/icon?subject=CentOS%20E2E%20V1alpha2)](https://jenkins.nordix.org/view/Airship/job/airship_master_v1a2_integration_test_centos) + The Bare Metal Operator implements a Kubernetes API for managing bare metal hosts. It maintains an inventory of available hosts as instances of the `BareMetalHost` Custom Resource Definition. The Bare Metal Operator knows how diff --git a/vendor/github.com/metal3-io/baremetal-operator/cmd/make-bm-worker/main.go b/vendor/github.com/metal3-io/baremetal-operator/cmd/make-bm-worker/main.go index 0d7ae49aa..4615bce70 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/cmd/make-bm-worker/main.go +++ b/vendor/github.com/metal3-io/baremetal-operator/cmd/make-bm-worker/main.go @@ -13,6 +13,7 @@ func main() { var username = flag.String("user", "", "username for BMC") var password = flag.String("password", "", "password for BMC") var bmcAddress = flag.String("address", "", "address URL for BMC") + var disableCertificateVerification = flag.Bool("disableCertificateVerification", false, "will skip certificate validation when true") var hardwareProfile = flag.String("hardwareprofile", "", "hardwareProfile to be used") var macAddress = flag.String("boot-mac", "", "boot-mac for bootMACAddress") var verbose = flag.Bool("v", false, "turn on verbose output") @@ -42,14 +43,15 @@ func main() { } template := templates.Template{ - Name: strings.Replace(hostName, "_", "-", -1), - BMCAddress: *bmcAddress, - Username: *username, - Password: *password, - HardwareProfile: *hardwareProfile, - BootMacAddress: *macAddress, - Consumer: strings.TrimSpace(*consumer), - ConsumerNamespace: strings.TrimSpace(*consumerNamespace), + Name: strings.Replace(hostName, "_", "-", -1), + BMCAddress: *bmcAddress, + DisableCertificateVerification: *disableCertificateVerification, + Username: *username, + Password: *password, + HardwareProfile: *hardwareProfile, + BootMacAddress: *macAddress, + Consumer: strings.TrimSpace(*consumer), + ConsumerNamespace: strings.TrimSpace(*consumerNamespace), } if *verbose { fmt.Fprintf(os.Stderr, "%v", template) diff --git a/vendor/github.com/metal3-io/baremetal-operator/cmd/make-bm-worker/templates/templates.go b/vendor/github.com/metal3-io/baremetal-operator/cmd/make-bm-worker/templates/templates.go index ea5fd449c..bf51c466a 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/cmd/make-bm-worker/templates/templates.go +++ b/vendor/github.com/metal3-io/baremetal-operator/cmd/make-bm-worker/templates/templates.go @@ -37,18 +37,22 @@ spec: name: {{ .Consumer }} namespace: {{ .ConsumerNamespace }} {{- end }} +{{- if .DisableCertificateVerification }} + disableCertificateVerification: true +{{- end}} ` // Template holds the arguments to pass to the template. type Template struct { - Name string - BMCAddress string - Username string - Password string - HardwareProfile string - BootMacAddress string - Consumer string - ConsumerNamespace string + Name string + BMCAddress string + DisableCertificateVerification bool + Username string + Password string + HardwareProfile string + BootMacAddress string + Consumer string + ConsumerNamespace string } // EncodedUsername returns the username in the format needed to store diff --git a/vendor/github.com/metal3-io/baremetal-operator/cmd/manager/main.go b/vendor/github.com/metal3-io/baremetal-operator/cmd/manager/main.go index 07e69a1d6..6b5afcbd0 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/cmd/manager/main.go +++ b/vendor/github.com/metal3-io/baremetal-operator/cmd/manager/main.go @@ -1,7 +1,6 @@ package main import ( - "context" "flag" "fmt" "os" @@ -11,13 +10,14 @@ import ( "github.com/metal3-io/baremetal-operator/pkg/controller" "github.com/metal3-io/baremetal-operator/pkg/version" "github.com/operator-framework/operator-sdk/pkg/k8sutil" - "github.com/operator-framework/operator-sdk/pkg/leader" sdkVersion "github.com/operator-framework/operator-sdk/version" + _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" + "sigs.k8s.io/controller-runtime/pkg/client/config" "sigs.k8s.io/controller-runtime/pkg/manager" + "sigs.k8s.io/controller-runtime/pkg/manager/signals" logf "sigs.k8s.io/controller-runtime/pkg/runtime/log" - "sigs.k8s.io/controller-runtime/pkg/runtime/signals" ) var log = logf.Log.WithName("cmd") @@ -55,16 +55,13 @@ func main() { os.Exit(1) } - // Become the leader before proceeding - err = leader.Become(context.TODO(), "baremetal-operator-lock") - if err != nil { - log.Error(err, "") - os.Exit(1) - } - + log.Info(fmt.Sprintf("gather metrics at http://%s/metrics", *metricsAddr)) opts := manager.Options{ - Namespace: namespace, - MetricsBindAddress: *metricsAddr, + LeaderElection: true, + LeaderElectionID: "baremetal-operator", + LeaderElectionNamespace: namespace, + Namespace: namespace, + MetricsBindAddress: *metricsAddr, } // Create a new Cmd to provide shared dependencies and start components diff --git a/vendor/github.com/metal3-io/baremetal-operator/deploy/crds/metal3_v1alpha1_baremetalhost_crd.yaml b/vendor/github.com/metal3-io/baremetal-operator/deploy/crds/metal3.io_baremetalhosts_crd.yaml similarity index 59% rename from vendor/github.com/metal3-io/baremetal-operator/deploy/crds/metal3_v1alpha1_baremetalhost_crd.yaml rename to vendor/github.com/metal3-io/baremetal-operator/deploy/crds/metal3.io_baremetalhosts_crd.yaml index d3bf28814..c07f41a63 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/deploy/crds/metal3_v1alpha1_baremetalhost_crd.yaml +++ b/vendor/github.com/metal3-io/baremetal-operator/deploy/crds/metal3.io_baremetalhosts_crd.yaml @@ -46,20 +46,22 @@ spec: status: {} validation: openAPIV3Schema: + description: BareMetalHost is the Schema for the baremetalhosts 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/api-conventions.md#resources' + 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/api-conventions.md#types-kinds' + 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: BareMetalHostSpec defines the desired state of BareMetalHost properties: bmc: description: How do we connect to the BMC? @@ -72,6 +74,13 @@ spec: description: The name of the secret containing the BMC credentials (requires keys "username" and "password"). type: string + disableCertificateVerification: + description: DisableCertificateVerification disables verification + of server certificates when using HTTPS to connect to the BMC. + This is required when the server certificate is self-signed, but + is insecure because it allows a man-in-the-middle to intercept + the connection. + type: boolean required: - address - credentialsName @@ -85,6 +94,39 @@ spec: description: ConsumerRef can be used to store information about something that is using a host. When it is not empty, the host is considered "in use". + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an + entire object, this string should contain a valid JSON/Go field + access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within + a pod, this would take on a value like: "spec.containers{name}" + (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" + (container with index 2 in this pod). This syntax is chosen only + to have some well-defined way of referencing a part of an object. + TODO: this design is not final and this field is subject to change + in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is + made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string type: object description: description: Description is a human-entered text used to help identify @@ -111,8 +153,8 @@ spec: description: URL is a location of an image to deploy. type: string required: - - url - checksum + - url type: object online: description: Should the server be online? @@ -122,24 +164,77 @@ spec: to the corresponding Machine. This list will overwrite any modifications made to the Machine on an ongoing basis. items: + description: The node this Taint is attached to has the "effect" on + any pod that does not tolerate the Taint. + properties: + effect: + description: Required. The effect of the taint on pods that do + not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule + and NoExecute. + type: string + key: + description: Required. The taint key to be applied to a node. + type: string + timeAdded: + description: TimeAdded represents the time at which the taint + was added. It is only written for NoExecute taints. + format: date-time + type: string + value: + description: Required. The taint value corresponding to the taint + key. + type: string + required: + - effect + - key type: object type: array userData: description: UserData holds the reference to the Secret containing the user data to be passed to the host before it boots. + properties: + name: + description: Name is unique within a namespace to reference a secret + resource. + type: string + namespace: + description: Namespace defines the space within which the secret + name must be unique. + type: string type: object required: - online type: object status: + description: BareMetalHostStatus defines the observed state of BareMetalHost properties: errorMessage: description: the last error message reported by the provisioning subsystem type: string + errorType: + description: ErrorType indicates the type of failure encountered when + the OperationalStatus is OperationalStatusError + enum: + - registration error + - inspection error + - provisioning error + - power management error + type: string goodCredentials: description: the last credentials we were able to validate as working properties: credentials: + description: SecretReference represents a Secret Reference. It has + enough information to retrieve secret in any namespace + properties: + name: + description: Name is unique within a namespace to reference + a secret resource. + type: string + namespace: + description: Namespace defines the space within which the secret + name must be unique. + type: string type: object credentialsVersion: type: string @@ -148,14 +243,13 @@ spec: description: The hardware discovered to exist on the host. properties: cpu: + description: CPU describes one processor on the host. properties: arch: type: string clockMegahertz: - format: double - type: number + description: ClockSpeed is a clock speed in MHz count: - format: int64 type: integer flags: items: @@ -165,12 +259,13 @@ spec: type: string required: - arch - - model - clockMegahertz - - flags - count + - flags + - model type: object firmware: + description: Firmware describes the firmware on the host. properties: bios: description: The BIOS for this firmware @@ -196,6 +291,7 @@ spec: type: string nics: items: + description: NIC describes one network interface on the host. properties: ip: description: The IP address of the device @@ -215,22 +311,19 @@ spec: type: boolean speedGbps: description: The speed of the device - format: int64 type: integer vlanId: description: The untagged VLAN ID format: int32 - maximum: 4094 - minimum: 0 type: integer vlans: description: The VLANs available items: + description: VLAN represents the name and ID of a VLAN properties: id: + description: VLANID is a 12-bit 802.1Q VLAN identifier format: int32 - maximum: 4094 - minimum: 0 type: integer name: type: string @@ -239,20 +332,21 @@ spec: type: object type: array required: - - name - - model - - mac - ip + - mac + - model + - name + - pxe - speedGbps - vlanId - - pxe type: object type: array ramMebibytes: - format: int64 type: integer storage: items: + description: Storage describes one storage device (disk, SSD, + etc.) on the host. properties: hctl: description: The SCSI location of the device @@ -288,11 +382,13 @@ spec: required: - name - rotational - - sizeBytes - serialNumber + - sizeBytes type: object type: array systemVendor: + description: HardwareSystemVendor stores details about the whole + hardware system. properties: manufacturer: type: string @@ -306,13 +402,13 @@ spec: - serialNumber type: object required: - - systemVendor + - cpu - firmware - - ramMebibytes + - hostname - nics + - ramMebibytes - storage - - cpu - - hostname + - systemVendor type: object hardwareProfile: description: The name of the profile matching the hardware details. @@ -321,8 +417,70 @@ spec: description: LastUpdated identifies when this status was last observed. format: date-time type: string + operationHistory: + description: OperationHistory holds information about operations performed + on this host. + properties: + deprovision: + description: OperationMetric contains metadata about an operation + (inspection, provisioning, etc.) used for tracking metrics. + properties: + end: + format: date-time + nullable: true + type: string + start: + format: date-time + nullable: true + type: string + type: object + inspect: + description: OperationMetric contains metadata about an operation + (inspection, provisioning, etc.) used for tracking metrics. + properties: + end: + format: date-time + nullable: true + type: string + start: + format: date-time + nullable: true + type: string + type: object + provision: + description: OperationMetric contains metadata about an operation + (inspection, provisioning, etc.) used for tracking metrics. + properties: + end: + format: date-time + nullable: true + type: string + start: + format: date-time + nullable: true + type: string + type: object + register: + description: OperationMetric contains metadata about an operation + (inspection, provisioning, etc.) used for tracking metrics. + properties: + end: + format: date-time + nullable: true + type: string + start: + format: date-time + nullable: true + type: string + type: object + type: object operationalStatus: description: OperationalStatus holds the status of the host + enum: + - "" + - OK + - discovered + - error type: string poweredOn: description: indicator for whether or not the host is powered on @@ -345,34 +503,45 @@ spec: description: URL is a location of an image to deploy. type: string required: - - url - checksum + - url type: object state: description: An indiciator for what the provisioner is doing with the host. type: string required: - - state - ID + - state type: object triedCredentials: description: the last credentials we sent to the provisioning backend properties: credentials: + description: SecretReference represents a Secret Reference. It has + enough information to retrieve secret in any namespace + properties: + name: + description: Name is unique within a namespace to reference + a secret resource. + type: string + namespace: + description: Namespace defines the space within which the secret + name must be unique. + type: string type: object credentialsVersion: type: string type: object required: - - operationalStatus - - hardwareProfile - - provisioning - - goodCredentials - - triedCredentials - errorMessage + - hardwareProfile + - operationHistory + - operationalStatus - poweredOn + - provisioning type: object + type: object version: v1alpha1 versions: - name: v1alpha1 diff --git a/vendor/github.com/metal3-io/baremetal-operator/deploy/ironic_bmo_configmap.env b/vendor/github.com/metal3-io/baremetal-operator/deploy/ironic_bmo_configmap.env new file mode 100644 index 000000000..7bbc28b7e --- /dev/null +++ b/vendor/github.com/metal3-io/baremetal-operator/deploy/ironic_bmo_configmap.env @@ -0,0 +1,9 @@ +HTTP_PORT=6180 +PROVISIONING_INTERFACE=eth2 +DHCP_RANGE=172.22.0.10,172.22.0.100 +DEPLOY_KERNEL_URL=http://172.22.0.2:6180/images/ironic-python-agent.kernel +DEPLOY_RAMDISK_URL=http://172.22.0.2:6180/images/ironic-python-agent.initramfs +IRONIC_ENDPOINT=http://172.22.0.2:6385/v1/ +IRONIC_INSPECTOR_ENDPOINT=http://172.22.0.2:5050/v1/ +CACHEURL=http://172.22.0.1/images +IRONIC_FAST_TRACK=false diff --git a/vendor/github.com/metal3-io/baremetal-operator/deploy/ironic_bmo_configmap.yaml b/vendor/github.com/metal3-io/baremetal-operator/deploy/ironic_bmo_configmap.yaml deleted file mode 100644 index a741e2d42..000000000 --- a/vendor/github.com/metal3-io/baremetal-operator/deploy/ironic_bmo_configmap.yaml +++ /dev/null @@ -1,13 +0,0 @@ -kind: ConfigMap -apiVersion: v1 -metadata: - name: ironic-bmo-configmap -data: - http_port: "6180" - http_ip: "172.22.0.1" - interface: "ens3" - dhcp_range: "172.22.0.10,172.22.0.100" - deploy_kernel_url: "http://172.22.0.1/images/ironic-python-agent.kernel" - deploy_ramdisk_url: "http://172.22.0.1/images/ironic-python-agent.initramfs" - ironic_endpoint: "http://localhost:6385/v1/" - ironic_inspector_endpoint: "http://localhost:5050/v1/" diff --git a/vendor/github.com/metal3-io/baremetal-operator/deploy/ironic_ci.env b/vendor/github.com/metal3-io/baremetal-operator/deploy/ironic_ci.env new file mode 100644 index 000000000..f66db7ca5 --- /dev/null +++ b/vendor/github.com/metal3-io/baremetal-operator/deploy/ironic_ci.env @@ -0,0 +1,9 @@ +HTTP_PORT=6180 +PROVISIONING_INTERFACE=provisioning +DHCP_RANGE=172.22.0.10,172.22.0.100 +DEPLOY_KERNEL_URL=http://172.22.0.1:6180/images/ironic-python-agent.kernel +DEPLOY_RAMDISK_URL=http://172.22.0.1:6180/images/ironic-python-agent.initramfs +IRONIC_ENDPOINT=http://172.22.0.1:6385/v1/ +IRONIC_INSPECTOR_ENDPOINT=http://172.22.0.1:5050/v1/ +CACHEURL=http://172.22.0.1/images +IRONIC_FAST_TRACK=false diff --git a/vendor/github.com/metal3-io/baremetal-operator/deploy/kustomization.yaml b/vendor/github.com/metal3-io/baremetal-operator/deploy/kustomization.yaml new file mode 100644 index 000000000..f64e1937d --- /dev/null +++ b/vendor/github.com/metal3-io/baremetal-operator/deploy/kustomization.yaml @@ -0,0 +1,19 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: metal3 +resources: +- namespace.yaml +- service_account.yaml +- role.yaml +- role_binding.yaml +- crds/metal3.io_baremetalhosts_crd.yaml +- operator_ironic.yaml +configMapGenerator: +- envs: + - ironic_bmo_configmap.env + name: ironic-bmo-configmap +secretGenerator: +- literals: + - password=changeme + name: mariadb-password + type: Opaque diff --git a/vendor/github.com/metal3-io/baremetal-operator/deploy/namespace.yaml b/vendor/github.com/metal3-io/baremetal-operator/deploy/namespace.yaml new file mode 100644 index 000000000..5dd639ab2 --- /dev/null +++ b/vendor/github.com/metal3-io/baremetal-operator/deploy/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: metal3 diff --git a/vendor/github.com/metal3-io/baremetal-operator/deploy/operator_ironic.yaml b/vendor/github.com/metal3-io/baremetal-operator/deploy/operator_ironic.yaml index 4fb9ffeb5..e4dcd1bcc 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/deploy/operator_ironic.yaml +++ b/vendor/github.com/metal3-io/baremetal-operator/deploy/operator_ironic.yaml @@ -16,7 +16,7 @@ spec: hostNetwork: true containers: - name: baremetal-operator - image: quay.io/metal3-io/baremetal-operator:master + image: quay.io/metal3-io/baremetal-operator ports: - containerPort: 60000 name: metrics @@ -34,26 +34,9 @@ spec: fieldPath: metadata.name - name: OPERATOR_NAME value: "baremetal-operator" - - name: DEPLOY_KERNEL_URL - valueFrom: - configMapKeyRef: - name: ironic-bmo-configmap - key: deploy_kernel_url - - name: DEPLOY_RAMDISK_URL - valueFrom: - configMapKeyRef: - name: ironic-bmo-configmap - key: deploy_ramdisk_url - - name: IRONIC_ENDPOINT - valueFrom: - configMapKeyRef: - name: ironic-bmo-configmap - key: ironic_endpoint - - name: IRONIC_INSPECTOR_ENDPOINT - valueFrom: - configMapKeyRef: - name: ironic-bmo-configmap - key: ironic_inspector_endpoint + envFrom: + - configMapRef: + name: ironic-bmo-configmap - name: ironic-dnsmasq image: quay.io/metal3-io/ironic imagePullPolicy: Always @@ -64,27 +47,9 @@ spec: volumeMounts: - mountPath: /shared name: ironic-data-volume - env: - - name: HTTP_PORT - valueFrom: - configMapKeyRef: - name: ironic-bmo-configmap - key: http_port - - name: IP - valueFrom: - configMapKeyRef: - name: ironic-bmo-configmap - key: http_ip - - name: DHCP_RANGE - valueFrom: - configMapKeyRef: - name: ironic-bmo-configmap - key: dhcp_range - - name: INTERFACE - valueFrom: - configMapKeyRef: - name: ironic-bmo-configmap - key: interface + envFrom: + - configMapRef: + name: ironic-bmo-configmap - name: mariadb image: quay.io/metal3-io/ironic imagePullPolicy: Always @@ -111,17 +76,9 @@ spec: volumeMounts: - mountPath: /shared name: ironic-data-volume - env: - - name: HTTP_PORT - valueFrom: - configMapKeyRef: - name: ironic-bmo-configmap - key: http_port - - name: IP - valueFrom: - configMapKeyRef: - name: ironic-bmo-configmap - key: http_ip + envFrom: + - configMapRef: + name: ironic-bmo-configmap - name: ironic image: quay.io/metal3-io/ironic imagePullPolicy: Always @@ -132,38 +89,37 @@ spec: volumeMounts: - mountPath: /shared name: ironic-data-volume + envFrom: + - configMapRef: + name: ironic-bmo-configmap env: - name: MARIADB_PASSWORD valueFrom: secretKeyRef: name: mariadb-password key: password - - name: HTTP_PORT - valueFrom: - configMapKeyRef: - name: ironic-bmo-configmap - key: http_port - - name: IP - valueFrom: - configMapKeyRef: - name: ironic-bmo-configmap - key: http_ip - - name: INTERFACE - valueFrom: - configMapKeyRef: - name: ironic-bmo-configmap - key: interface - name: ironic-inspector image: quay.io/metal3-io/ironic-inspector imagePullPolicy: Always securityContext: privileged: true - env: - - name: INTERFACE - valueFrom: - configMapKeyRef: - name: ironic-bmo-configmap - key: interface + envFrom: + - configMapRef: + name: ironic-bmo-configmap + initContainers: + - name: ironic-ipa-downloader + image: quay.io/metal3-io/ironic-ipa-downloader + imagePullPolicy: Always + command: + - /usr/local/bin/get-resource.sh + securityContext: + privileged: true + envFrom: + - configMapRef: + name: ironic-bmo-configmap + volumeMounts: + - mountPath: /shared + name: ironic-data-volume volumes: - name: ironic-data-volume emptyDir: {} diff --git a/vendor/github.com/metal3-io/baremetal-operator/deploy/role.yaml b/vendor/github.com/metal3-io/baremetal-operator/deploy/role.yaml index 9d842135b..11c674c11 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/deploy/role.yaml +++ b/vendor/github.com/metal3-io/baremetal-operator/deploy/role.yaml @@ -1,5 +1,5 @@ apiVersion: rbac.authorization.k8s.io/v1 -kind: Role +kind: ClusterRole metadata: creationTimestamp: null name: metal3-baremetal-operator @@ -7,30 +7,32 @@ rules: - apiGroups: - "" resources: - - pods - - services - - endpoints - - persistentvolumeclaims - - events - configmaps + verbs: + - list + - get + - create + - update +- apiGroups: + - "" + resources: - secrets verbs: - - '*' + - watch + - list + - update - apiGroups: - "" resources: - - namespaces + - events verbs: - - get + - create - apiGroups: - - apps + - "" resources: - - deployments - - daemonsets - - replicasets - - statefulsets + - namespaces verbs: - - '*' + - get - apiGroups: - monitoring.coreos.com resources: @@ -41,6 +43,20 @@ rules: - apiGroups: - metal3.io resources: - - '*' + - baremetalhosts + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - metal3.io + resources: + - baremetalhosts/status verbs: - - '*' + - get + - patch + - update diff --git a/vendor/github.com/metal3-io/baremetal-operator/deploy/role_binding.yaml b/vendor/github.com/metal3-io/baremetal-operator/deploy/role_binding.yaml index 82c2860ee..d34e96c3b 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/deploy/role_binding.yaml +++ b/vendor/github.com/metal3-io/baremetal-operator/deploy/role_binding.yaml @@ -1,14 +1,14 @@ -kind: RoleBinding +kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: metal3-baremetal-operator - namespace: metal3 subjects: - kind: ServiceAccount name: metal3-baremetal-operator + namespace: metal3 - kind: User name: developer roleRef: - kind: Role + kind: ClusterRole name: metal3-baremetal-operator apiGroup: rbac.authorization.k8s.io diff --git a/vendor/github.com/metal3-io/baremetal-operator/docs/BaremetalHost_ProvisioningState.dot b/vendor/github.com/metal3-io/baremetal-operator/docs/BaremetalHost_ProvisioningState.dot index a7485e330..e6195b5ea 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/docs/BaremetalHost_ProvisioningState.dot +++ b/vendor/github.com/metal3-io/baremetal-operator/docs/BaremetalHost_ProvisioningState.dot @@ -5,39 +5,45 @@ digraph BaremetalHost { Discovered [shape=doublecircle] Discovered -> Registering [label="BMC.* != \"\""] - Discovered -> Deleted1 [label="!DeletionTimestamp.IsZero()"] + Discovered -> Deleting1 [label="!DeletionTimestamp.IsZero()"] - Deleted1 [shape=point] + Deleting1 [shape=point] ExternallyProvisioned [label="Externally\nProvisioned"] Registering -> Inspecting [label="!externallyProvisioned && NeedsHardwareInspection()"] Registering -> ExternallyProvisioned [label="externallyProvisioned"] Registering -> RegistrationError [shape=doublecircle label="registration error"] - Registering -> Deleted2 [label="!DeletionTimestamp.IsZero()"] + Registering -> Deleting2 [label="!DeletionTimestamp.IsZero()"] - Deleted2 [shape=point] + Deleting2 [shape=point] ExternallyProvisioned -> Inspecting [label="!externallyProvisioned && NeedsHardwareInspection()"] + ExternallyProvisioned -> MatchProfile [label="!externallyProvisioned && NeedsHardwareProfile()"] ExternallyProvisioned -> Ready [label="!externallyProvisioned"] Ready -> ExternallyProvisioned [label="externallyProvisioned"] - Inspecting -> Ready [label="done"] - Inspecting -> Deleted3 [label="!DeletionTimestamp.IsZero()"] + Inspecting -> MatchProfile [label="done"] + Inspecting -> Deleting3 [label="!DeletionTimestamp.IsZero()"] - Deleted3 [shape=point] + Deleting3 [shape=point] + + MatchProfile -> Ready [label="done"] + MatchProfile -> Deleted4 [label="!DeletionTimestamp.IsZero()"] + + Deleting4 [shape=point] RegistrationError [shape=doublecircle label="Error"] RegistrationError -> Registering [label="(user edits settings)"] - RegistrationError -> Deleted4 [label="!DeletionTimestamp.IsZero()"] + RegistrationError -> Deleted5 [label="!DeletionTimestamp.IsZero()"] - Deleted4 [shape=point] + Deleting5 [shape=point] Ready [shape=doublecircle] Ready -> Provisioning [label="NeedsProvisioning()"] - Ready -> Deleted5 [label="!DeletionTimestamp.IsZero()"] + Ready -> Deleting6 [label="!DeletionTimestamp.IsZero()"] - Deleted5 [shape=point] + Deleting6 [shape=point] Provisioning -> Provisioned [label=done] Provisioning -> ProvisioningError [label="provisioning error"] @@ -52,11 +58,11 @@ digraph BaremetalHost { Provisioned -> Deprovisioning [label="!DeletionTimestamp.IsZero()"] ExternallyProvisioned [shape=doublecircle] - ExternallyProvisioned -> Deleted [label="!DeletionTimestamp.IsZero()"] + ExternallyProvisioned -> Deleting [label="!DeletionTimestamp.IsZero()"] Deprovisioning -> Provisioning [label="NeedsProvisioning()"] Deprovisioning -> Ready [label="!NeedsProvisioning()"] - Deprovisioning -> Deleted [label="!DeletionTimestamp.IsZero()"] + Deprovisioning -> Deleting [label="!DeletionTimestamp.IsZero()"] - Deleted [shape=doublecircle] + Deleting [shape=doublecircle] } diff --git a/vendor/github.com/metal3-io/baremetal-operator/docs/BaremetalHost_ProvisioningState.png b/vendor/github.com/metal3-io/baremetal-operator/docs/BaremetalHost_ProvisioningState.png index 3c374592b1e460204a6f3949d1a5be918e919a62..a594c6d1f9cfac04581e587901229f1d97a54c81 100644 GIT binary patch literal 264587 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
oG-M(7t+Ol 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%0DJrlW=WGW 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
C+4B`X~=pNY97>px)ESs`x8(9$`& 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 diff --git a/vendor/github.com/metal3-io/baremetal-operator/docs/api.md b/vendor/github.com/metal3-io/baremetal-operator/docs/api.md index 052258e87..9e0dd5f88 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/docs/api.md +++ b/vendor/github.com/metal3-io/baremetal-operator/docs/api.md @@ -2,198 +2,269 @@ ## BareMetalHost -The BareMetalHost resource defines the properties of a physical host -necessary to manage and provision it. - -### Spec Fields - -*bmc* -- The connection information for the BMC controller on the host. - -*bmc.address* -- The URL for communicating with the BMC controller. When -communicating over IPMI, this should be a URL of the form -`ipmi://:` (an unadorned `:` is also accepted). -Specifying the port is optional; the default port is 623. Dell iDRAC is also -supported, by using the scheme `idrac://` (or `idrac+http://` to disable TLS) -in place of `https://` in the iDRAC URL; only the hostname or IP address is -required - `idrac://host.example` is equivalent to -`idrac+https://host.example:443/wsman`. Fujitsu iRMC is also supported, -by using the scheme `irmc://:` with `` is optional. - -*bmc.credentials* -- A reference to a Secret containing the connection -data, at least username and password, for the BMC. - -*online* -- A boolean indicating whether the host should be powered on -(true) or off (false). Changing this value will trigger a change in -power state on the physical host. - -*consumerRef* -- A reference to another object that is using the -host. For example, a Machine when the host is being used by the -machine-api. - -*externallyProvisioned* -- A boolean indicating whether something else -is managing the image running on the host. When set, if no image is -provided, the host's power status and hardware inventory will be -monitored. If this flag is set, no provisioning or deprovisioning -operations are performed for the host. - -*image.url* -- The URL of an image to deploy to the host. - -*image.checksum* -- An md5 checksum or URL to a file with a checksum -for the image at *image.url*. - -*userData* -- A reference to the Secret containing the user data to be -passed to the host before it boots. - -*description* -- A human-provided string to help identify the host. - -``` ---- -apiVersion: v1 -kind: Secret -metadata: - name: openshift-worker-1-bmc-secret -type: Opaque -data: - username: YWRtaW4= - password: cGFzc3dvcmQ= - ---- +**Metal³** introduces the concept of **BareMetalHost** resource, which +defines a physical host and its properties. The **BareMetalHost** embeds +two well differentiated sections, the bare metal host specification +and its current status. + +### BareMetalHost spec + +The *BareMetalHost's* *spec* defines the desire state of the host. It contains +mainly, but not only, provisioning details. + +#### Spec fields + +* *bmc* -- The connection information for the BMC (Baseboard Management + Controller) on the host. + * *address* -- The URL for communicating with the BMC controller, based + on the provider being used, the URL will look as follows: + * IPMI + * `ipmi://:`, an unadorned `:` is also accepted + and the port is optional, if using the default one (623). + * Dell iDRAC + * `idrac://` (or `idrac+http://` to disable TLS). + * Fujitsu iRMC + * `irmc://:`, where `` is optional if using the default. + * Redfish + * `redfish://` (or `redfish+http://` to disable TLS), the hostname + or IP address, and the path to the system ID are required, + for example `redfish://myhost.example/redfish/v1/Systems/MySystemExample` + + * *credentialsName* -- A reference to a *secret* containing the + username and password for the BMC. + + * *disableCertificateVerification* -- A boolean to skip certificate + validation when true. + +* *online* -- A boolean indicating whether the host should be powered on + (true) or off (false). Changing this value will trigger a change in + power state on the physical host. + +* *consumerRef* -- A reference to another resource that is using the + host, it could be empty if the host is not being currently used. + For example, a *Machine* resource when the host is being used by the + [*machine-api*](https://github.com/kubernetes-sigs/cluster-api). + +* *externallyProvisioned* -- A boolean indicating whether the host + provisioning and deprovisioning are managed externally. When set, + the host's power status and hardware inventory will be monitored + but no provisioning or deprovisioning operations are performed + on the host. + +* *image* -- Holds details for the image to be deployed on a given host. + * *url* -- The URL of an image to deploy to the host. + * *checksum* -- The actual checksum or a URL to a file containing + the checksum for the image at *image.url*. + +* *userData* -- A reference to the Secret containing the cloudinit user data + and its namespace, so it can be attached to the host before it boots + for configuring different aspects of the OS (like networking, storage, ...). + +* *description* -- A human-provided string to help identify the host. + +### BareMetalHost status + +Moving onto the next block, the *BareMetalHost's* *status* which represents +the host's current state. Including tested credentials, current hardware +details, etc. + +#### Status fields + +* *goodCredentials* -- A reference to the secret and its namespace + holding the last set of BMC credentials the system was able to validate + as working. + +* *triedCredentials* -- A reference to the secret and its namespace + holding the last set of BMC credentials that were sent to + the provisioning backend. + +* *lastUpdated* -- The timestamp of the last time the status of the + host was updated. + +* *operationalStatus* -- The status of the server. Value is one of the + following: + * *OK* -- Indicates all the details for the host are known and working, + meaning the host is correctly configured and manageable. + * *discovered* -- Implies some of the host's details are either + not working correctly or missing. For example, the BMC address is known + but the login credentials are not. + * *error* -- Indicates the system found some sort of irrecuperable error. + Refer to the *errorMessage* field in the status section for more details. + +* *errorMessage* -- Details of the last error reported by the provisioning + backend, if any. + +* *hardware* -- The details for hardware capabilities discovered on the + host. These are filled in by the provisioning agent when the host is + registered. + * *nics* -- List of network interfaces for the host. + * *name* -- A string identifying the network device, + e.g. *nic-1*. + * *mac* -- The MAC address of the NIC. + * *ip* -- The IP address of the NIC, if one was assigned + when the discovery agent ran. + * *speedGbps* -- The speed of the device in Gbps. + * *vlans* -- A list holding all the VLANs available for this NIC. + * *vlanId* -- The untagged VLAN ID. + * *pxe* -- Whether the NIC is able to boot using PXE. + * *storage* -- List of storage (disk, SSD, etc.) available to the host. + * *name* -- A string identifying the storage device, + e.g. *disk 1 (boot)*. + * *rotational* -- Either true or false, indicates whether the disk + is rotational. + * *sizeBytes* -- Size of the storage device. + * *serialNumber* -- The device's serial number. + * *cpu* -- Details of the CPU(s) in the system. + * *arch* -- The architecture of the CPU. + * *model* -- The model string. + * *clockMegahertz* -- The speed in GHz of the CPU. + * *flags* -- List of CPU flags, e.g. 'mmx','sse','sse2','vmx', ... + * *count* -- Amount of these CPUs available in the system. + * *firmware* -- Contains BIOS information like for instance its *vendor* + and *version*. + * *systemVendor* -- Contains information about the host's *manufacturer*, + the *productName* and *serialNumber*. + * *ramMebibytes* -- The host's amount of memory in Mebibytes. +* *hardwareProfile* -- The name of the hardware profile that matches the + hardware discovered on the host. These details are saved + to the *Hardware* section. If the hardware does not match any + known profile, the value `unknown` will be set on this field + and is used by default. In practice, this only affects which device + the OS image will be written to. The following are the current + supported `hardwareProfile` settings and their corresponding root devices. + + | **hardwareProfile** | **Root Device** | + |---------------------|-----------------| + | `unknown` | /dev/sda | + | `libvirt` | /dev/vda | + | `dell` | HCTL: 0:0:0:0 | + | `dell-raid` | HCTL: 0:2:0:0 | + + **NOTE:** These are subject to change. + +* *poweredOn* -- Boolean indicating whether the host is powered on. + See *online* on the *BareMetalHost's* *Spec*. +* *provisioning* -- Settings related to deploying an image to the host. + * *state* -- The current state of any ongoing provisioning operation. + The following are the currently supported ones: + * *\* -- There is no provisioning happening, at the moment. + * *registration error* -- The details for the host's BMC are + either incorrect or incomplete therfore the host could not be managed. + * *registering* -- The host's BMC details are being checked. + * *match profile* -- The discovered hardware details on the host + are being compared against known profiles. + * *ready* -- The host is available to be consumed. + * *provisioning* -- An image is being written to the host's disk(s). + * *provisioning error* -- The image could not be written to the host. + * *provisioned* -- An image has been completely written to the host's + disk(s). + * *externally provisioned* -- Metal³ does not manage the image on the host. + * *deprovisioning* -- The image is being wiped from the host's disk(s). + * *inspecting* -- The hardware details for the host are being collected + by an agent. + * *power management error* -- An error was found while trying to power + the host either on or off. + +### BareMetalHost Example + +The following is a complete example from a running cluster of a *BareMetalHost* +resource (in YAML), it includes its specification and status sections: + +```yaml apiVersion: metal3.io/v1alpha1 kind: BareMetalHost metadata: - name: openshift-worker-1 -spec: - online: true - bmc: - address: libvirt://192.168.122.1:6234/ - credentialsName: openshift-worker-1-bmc-secret - bootMACAddress: 00:11:55:9e:1d:f7 - userData: - namespace: openshift-machine-api - name: worker-user-data - image: - url: "http://172.22.0.1/images/rhcos-ootpa-latest.qcow2" - checksum: "http://172.22.0.1/images/rhcos-ootpa-latest.qcow2.md5sum" -``` - -### Status Fields - -*consumerRef* -- The thing using the host. Usually a Machine, linking -the host to a Node. - -*lastUpdated* -- The timestamp of the last time the status for the -host was updated. - -*operationalStatus* -- The status of the server. Value is one of the -following: - * *OK* -- The host is configured correctly and is manageable. - * *discovered* -- The host is only partially configured, such as - when the BMC address is known but the login credentials are not. - * *error* -- There is an error with the configuration data for the - host or there is a problem with the host itself. Refer to the - *errorMessage* field in the status section for more details about - the error condition. - -*errorMessage* -- Details for any error. - -*hardware* -- The details for hardware capabilities discovered on the -host. These are filled in by the provisioning agent when the host is -registered. - -*hardware.nics* -- List of network interfaces for the host. - -*hardware.nics.mac* -- The MAC address of the NIC. - -*hardware.nics.ip* -- The IP address of the NIC, if one was assigned -when the discovery agent ran. - -*hardware.storage* -- List of storage (disk, SSD, etc.) available to -the host. - -*hardware.storage.size* -- Size in GB of the storage location. - -*hardware.storage.info* -- Information string about the storage. - -*hardware.cpus* -- List of CPUs in the system. - -*hardware.cpus.type* -- The type of the CPU. - -*hardware.cpus.speed* -- The speed in GHz of the CPU. - -*hardwareProfile* -- The name of the hardware profile that matches the -hardware discovered on the host. Details about the hardware are saved -to the *hardware* section of the status. If the hardware does not -match a known profile, the value "unknown" is used. In practice, so far -this affects which device the deployed OS image is written to. The -following `hardwareProfile` settings and the corresponding root device -are listed here, and are definitely subject to change. (Note that the -default is `unknown`.) - -| **hardwareProfile** | **Root Device** | -|---------------------|-----------------| -| `unknown` | /dev/sda | -| `libvirt` | /dev/vda | -| `dell` | HCTL: 0:0:0:0 | -| `dell-raid` | HCTL: 0:2:0:0 | - -*poweredOn* -- Boolean indicating whether the host is powered on. See -*online*. - -*provisioning* -- Settings related to deploying an image to the host. - -*provisioning.state* -- The current state of any ongoing provisioning -operation. One of: - * ** -- No provisioning is happening. - * *registration error* -- The details for the BMC for the host are - incorrect or incomplete and the host could not be managed. - * *registering* -- The details for the BMC for the host are being - checked. - * *match profile* -- The details for the hardware found on the host - are being compared against known profiles. - * *ready* -- The host is available to be consumed. - * *validation error* -- The details for the BMC for the host are - incorrect or incomplete and the host could not be managed. - * *provisioning* -- An image is being written to the host. - * *provisioning error* -- The image could not be written to the host. - * *provisioned* -- An image has been written to the host completely. - * *externally provisioned* -- The host has a consumer, but metal3 - did not write an image to the host. - * *deprovisioning* -- The host storage is being wiped. - * *inspecting* -- The hardware details for the host are being - collected. - * *power management error* -- The host could not be powered on or - off, as requested through the *online* field setting. - -``` -apiVersion: metal3.io/v1alpha1 -kind: BareMetalHost -metadata: - creationTimestamp: 2019-02-08T20:10:32Z + creationTimestamp: "2019-09-20T06:33:35Z" finalizers: - baremetalhost.metal3.io - generation: 9 - name: example-baremetalhost + generation: 2 + name: bmo-master-0 namespace: bmo-project - resourceVersion: "1750818" - selfLink: /apis/metal3.io/v1alpha1/namespaces/bmo-project/baremetalhosts/example-baremetalhost - uid: 96837048-2bdd-11e9-8df7-525400f68198 + resourceVersion: "22642" + selfLink: /apis/metal3.io/v1alpha1/namespaces/bmo-project/baremetalhosts/bmo-master-0 + uid: 92b2f77a-db70-11e9-9db1-525400764849 spec: bmc: - credentials: - name: bmc1-secret - address: ipmi://192.168.122.1:6233 + address: ipmi://10.10.57.19 + credentialsName: bmo-master-0-bmc-secret + bootMACAddress: 98:03:9b:61:80:48 + consumerRef: + apiVersion: machine.openshift.io/v1beta1 + kind: Machine + name: bmo-master-0 + namespace: bmo-project + externallyProvisioned: true + hardwareProfile: default + image: + checksum: http://172.16.1.100/images/myOSv1/myOS.qcow2.md5sum + url: http://172.16.1.100/images/myOSv1/myOS.qcow2 online: true + userData: + name: bmo-master-user-data + namespace: bmo-project status: errorMessage: "" + goodCredentials: + credentials: + name: bmo-master-0-bmc-secret + namespace: bmo-project + credentialsVersion: "5562" hardware: - cpus: null - nics: null - storage: null - hardwareProfile: unknown - image: "" - lastUpdated: 2019-02-11T17:44:30Z + cpu: + arch: x86_64 + clockMegahertz: 2000 + count: 40 + flags: [] + model: Intel(R) Xeon(R) Gold 6138 CPU @ 2.00GHz + firmware: + bios: + date: 12/17/2018 + vendor: Dell Inc. + version: 1.6.13 + hostname: bmo-master-0.localdomain + nics: + - ip: 172.22.135.105 + mac: "00:00:00:00:00:00" + model: unknown + name: eno1 + pxe: true + speedGbps: 25 + vlanId: 0 + ramMebibytes: 0 + storage: [] + systemVendor: + manufacturer: Dell Inc. + productName: PowerEdge r460 + serialNumber: "" + hardwareProfile: "" + lastUpdated: "2019-09-20T07:03:23Z" operationalStatus: OK - provisioningID: "" + poweredOn: true + provisioning: + ID: a4438010-3fc6-4c5c-b570-900bbe85da57 + image: + checksum: "" + url: "" + state: externally provisioned + triedCredentials: + credentials: + name: bmo-master-0-bmc-secret + namespace: bmo-project + credentialsVersion: "5562" +``` + +And here it is the secret `bmo-master-0-bmc-secret` holding the host's BMC credentials: + +```yaml +--- +apiVersion: v1 +kind: Secret +metadata: + name: bmo-master-0-bmc-secret +type: Opaque +data: + username: YWRtaW4= + password: cGFzc3dvcmQ= ``` ## Triggering Provisioning diff --git a/vendor/github.com/metal3-io/baremetal-operator/docs/baremetalhost-states.md b/vendor/github.com/metal3-io/baremetal-operator/docs/baremetalhost-states.md index ab1976b5f..639875e96 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/docs/baremetalhost-states.md +++ b/vendor/github.com/metal3-io/baremetal-operator/docs/baremetalhost-states.md @@ -1,6 +1,7 @@ # BaremetalHost Provisioning States -The following diagram shows the possible Provisioning State transitions for the BaremetalHost object: +The following diagram shows the possible Provisioning State transitions for the +BaremetalHost object: ![BaremetalHost ProvisioningState transitions](BaremetalHost_ProvisioningState.png) @@ -35,6 +36,11 @@ using a ramdisk. The agent collects information about the available hardware components, and this process is called "inspection." The host will stay in the Inspecting state until this process is completed. +## Match Profile + +A host in the Match Profile state is being matched against a hardware +profile. + ## Ready A host in the Ready state is available to be provisioned. @@ -60,8 +66,8 @@ If an error occurs during one of the processing states (Registering, Inspecting, Provisioning, Deprovisioning) the host will enter the Error state. -## Deleted +## Deleting When the host is marked to be deleted, it will move from its current -state to Deleted, at which point the resource record is deleted from +state to Deleting, at which point the resource record is deleted from kubernetes. diff --git a/vendor/github.com/metal3-io/baremetal-operator/docs/dev-setup.md b/vendor/github.com/metal3-io/baremetal-operator/docs/dev-setup.md index 75f15be84..0e3206297 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/docs/dev-setup.md +++ b/vendor/github.com/metal3-io/baremetal-operator/docs/dev-setup.md @@ -1,27 +1,26 @@ -Setup Development Environment -============================= +# Setup Development Environment ## Install the operator-sdk Follow the instructions in the Quick Start section of -https://github.com/operator-framework/operator-sdk to check out and + to check out and install the operator-sdk tools. -## With minkube +## With minikube 1. Install and launch minikube - https://kubernetes.io/docs/setup/minikube/ + -3. Create a namespace to host the operator +1. Create a namespace to host the operator - ``` + ```bash kubectl create namespace metal3 ``` -4. Install operator-sdk +1. Install operator-sdk - ``` + ```bash eval $(go env) mkdir -p $GOPATH/src/github.com/metal3-io cd $GOPATH/src/github.com/metal3-io @@ -30,12 +29,12 @@ install the operator-sdk tools. kubectl apply -f deploy/service_account.yaml -n metal3 kubectl apply -f deploy/role.yaml -n metal3 kubectl apply -f deploy/role_binding.yaml - kubectl apply -f deploy/crds/metal3_v1alpha1_baremetalhost_crd.yaml + kubectl apply -f deploy/crds/metal3.io_baremetalhosts_crd.yaml ``` -5. Launch the operator locally +1. Launch the operator locally - ``` + ```bash export OPERATOR_NAME=baremetal-operator export DEPLOY_KERNEL_URL=http://172.22.0.1/images/ironic-python-agent.kernel export DEPLOY_RAMDISK_URL=http://172.22.0.1/images/ironic-python-agent.initramfs @@ -44,10 +43,10 @@ install the operator-sdk tools. operator-sdk up local --namespace=metal3 ``` -6. Create the CR +1. Create the CR - ``` - kubectl apply -f deploy/crds/example-host.yaml + ```bash + kubectl apply -f deploy/crds/example-host.yaml -n metal3 ``` ## Running without Ironic @@ -57,7 +56,7 @@ is to be able to have some test data, use the test fixture provisioner instead of the real Ironic provisioner by passing `-test-mode` to the operator when launching it. -``` +```bash operator-sdk up local --operator-flags "-test-mode" ``` @@ -74,8 +73,9 @@ your environment. ## Using libvirt VMs with Ironic -In order to use VMs as hosts, they need to be connected to [vbmc](https://docs.openstack.org/tripleo-docs/latest/install/environments/virtualbmc.html) and -the `bootMACAddress` field needs to be set to the MAC address of the +In order to use VMs as hosts, they need to be connected to +[vbmc](https://docs.openstack.org/tripleo-docs/latest/install/environments/virtualbmc.html) +and the `bootMACAddress` field needs to be set to the MAC address of the network interface that will PXE boot. For example: @@ -98,7 +98,7 @@ registering a host. It takes as input the name of the `virsh` domain and produces as output the basic YAML to register that host properly, with the boot MAC address and BMC address filled in. -``` +```bash $ go run cmd/make-virt-host/main.go openshift_worker_1 --- apiVersion: v1 @@ -123,18 +123,19 @@ spec: bootMACAddress: 00:1a:74:74:e5:cf ``` -The output can be passed directly to `oc apply` like this: +The output can be passed directly to `kubectl apply` like this: -``` -$ go run cmd/make-virt-host/main.go openshift_worker_1 | oc apply -f - +```bash +go run cmd/make-virt-host/main.go openshift_worker_1 | kubectl apply -f - ``` When the host is a *master*, include the `-consumer` and `-consumer-namespace` options to associate the host with the existing `Machine` object. -``` -$ go run cmd/make-virt-host/main.go -consumer ostest-master-1 -consumer-namespace openshift-machine-api openshift_master_1 +```bash +$ go run cmd/make-virt-host/main.go -consumer ostest-master-1 \ + -consumer-namespace openshift-machine-api openshift_master_1 --- apiVersion: v1 kind: Secret @@ -166,8 +167,9 @@ spec: The `make-bm-worker` tool may be a more convenient way of creating YAML definitions for workers than editing the files directly. -``` -$ go run cmd/make-bm-worker/main.go -address 1.2.3.4 -password password -user admin worker-99 +```bash +$ go run cmd/make-bm-worker/main.go -address 1.2.3.4 \ + -password password -user admin worker-99 --- apiVersion: v1 kind: Secret @@ -188,4 +190,5 @@ spec: bmc: address: 1.2.3.4 credentialsName: worker-99-bmc-secret + disableCertificateVerification: true ``` diff --git a/vendor/github.com/metal3-io/baremetal-operator/docs/publishing-images.md b/vendor/github.com/metal3-io/baremetal-operator/docs/publishing-images.md index d56f62b17..948267d1b 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/docs/publishing-images.md +++ b/vendor/github.com/metal3-io/baremetal-operator/docs/publishing-images.md @@ -11,7 +11,7 @@ your development fork. 2. Set up your account on [quay.io](https://quay.io). 3. Link your repository from step 1 to quay.io by following the instructions to "Create New Repository" from - https://quay.io/repository/ + 1. Enter the quay.io repository name. It is good practice to use the same name as the github repo. @@ -66,8 +66,8 @@ your development fork. the service account, role, and mapping. 2. Apply the new deployment: - oc apply -f deploy/dev-operator.yaml + kubectl apply -f deploy/dev-operator.yaml -To monitor the operator, use `oc get pods` to find the pod name for +To monitor the operator, use `kubectl get pods` to find the pod name for the deployment (it will start with `baremetal-operator`) and then use -`oc log -f $podname` to see the console log output. +`kubectl log -f $podname` to see the console log output. diff --git a/vendor/github.com/metal3-io/baremetal-operator/docs/testing.md b/vendor/github.com/metal3-io/baremetal-operator/docs/testing.md index 548d44c2e..eb2e68d61 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/docs/testing.md +++ b/vendor/github.com/metal3-io/baremetal-operator/docs/testing.md @@ -6,7 +6,7 @@ The user running the tests must have permission on the cluster to create CRDs. An example role binding setting for configuring the "developer" user is provided in test/e2e/role_binding.yaml -``` +```bash oc --as system:admin apply -f test/e2e/role_binding.yaml ``` @@ -14,24 +14,25 @@ oc --as system:admin apply -f test/e2e/role_binding.yaml Run the tests using the operator-sdk command line tool -``` +```bash operator-sdk test local ./test/e2e --namespace operator-test --up-local --debug ``` If the setup steps above have already been run, causing "X already exists" errors, use the --no-setup option to skip that step in the test. -``` +```bash operator-sdk test local ./test/e2e --namespace operator-test --up-local --debug --no-setup ``` The tests can also be run via `make` -``` +```bash make test ``` Run linters test before pushing your commit -``` + +```bash make lint ``` diff --git a/vendor/github.com/metal3-io/baremetal-operator/deploy/crds/demo-hosts.yaml b/vendor/github.com/metal3-io/baremetal-operator/examples/demo-hosts.yaml similarity index 100% rename from vendor/github.com/metal3-io/baremetal-operator/deploy/crds/demo-hosts.yaml rename to vendor/github.com/metal3-io/baremetal-operator/examples/demo-hosts.yaml diff --git a/vendor/github.com/metal3-io/baremetal-operator/deploy/crds/example-host-bad-credentials.yaml b/vendor/github.com/metal3-io/baremetal-operator/examples/example-host-bad-credentials.yaml similarity index 100% rename from vendor/github.com/metal3-io/baremetal-operator/deploy/crds/example-host-bad-credentials.yaml rename to vendor/github.com/metal3-io/baremetal-operator/examples/example-host-bad-credentials.yaml diff --git a/vendor/github.com/metal3-io/baremetal-operator/deploy/crds/example-host.yaml b/vendor/github.com/metal3-io/baremetal-operator/examples/example-host.yaml similarity index 100% rename from vendor/github.com/metal3-io/baremetal-operator/deploy/crds/example-host.yaml rename to vendor/github.com/metal3-io/baremetal-operator/examples/example-host.yaml diff --git a/vendor/github.com/metal3-io/baremetal-operator/deploy/crds/worker-0.yaml b/vendor/github.com/metal3-io/baremetal-operator/examples/worker-0.yaml similarity index 100% rename from vendor/github.com/metal3-io/baremetal-operator/deploy/crds/worker-0.yaml rename to vendor/github.com/metal3-io/baremetal-operator/examples/worker-0.yaml diff --git a/vendor/github.com/metal3-io/baremetal-operator/hack/gofmt.sh b/vendor/github.com/metal3-io/baremetal-operator/hack/gofmt.sh new file mode 100755 index 000000000..329fa31d8 --- /dev/null +++ b/vendor/github.com/metal3-io/baremetal-operator/hack/gofmt.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +set -eux + +IS_CONTAINER=${IS_CONTAINER:-false} +CONTAINER_RUNTIME="${CONTAINER_RUNTIME:-podman}" + +if [ "${IS_CONTAINER}" != "false" ]; then + TOP_DIR="${1:-.}" + go fmt "${TOP_DIR}"/pkg/... "${TOP_DIR}"/cmd/... +else + "${CONTAINER_RUNTIME}" run --rm \ + --env IS_CONTAINER=TRUE \ + --volume "${PWD}:/workdir:rw,z" \ + --entrypoint sh \ + --workdir /workdir \ + registry.hub.docker.com/library/golang:1.12 \ + /workdir/hack/gofmt.sh "${@}" +fi; diff --git a/vendor/github.com/metal3-io/baremetal-operator/hack/gosec.sh b/vendor/github.com/metal3-io/baremetal-operator/hack/gosec.sh new file mode 100755 index 000000000..a7e15b4b8 --- /dev/null +++ b/vendor/github.com/metal3-io/baremetal-operator/hack/gosec.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +set -eux + +IS_CONTAINER=${IS_CONTAINER:-false} +CONTAINER_RUNTIME="${CONTAINER_RUNTIME:-podman}" + +if [ "${IS_CONTAINER}" != "false" ]; then + export XDG_CACHE_HOME="/tmp/.cache" + gosec -severity medium --confidence medium -quiet ./... +else + "${CONTAINER_RUNTIME}" run --rm \ + --env IS_CONTAINER=TRUE \ + --volume "${PWD}:/go/src/github.com/metal3-io/baremetal-operator:ro,z" \ + --entrypoint sh \ + --workdir /go/src/github.com/metal3-io/baremetal-operator \ + registry.hub.docker.com/securego/gosec:latest \ + /go/src/github.com/metal3-io/baremetal-operator/hack/gosec.sh "${@}" +fi; diff --git a/vendor/github.com/metal3-io/baremetal-operator/hack/govet.sh b/vendor/github.com/metal3-io/baremetal-operator/hack/govet.sh new file mode 100755 index 000000000..00e1f2320 --- /dev/null +++ b/vendor/github.com/metal3-io/baremetal-operator/hack/govet.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +set -eux + +IS_CONTAINER=${IS_CONTAINER:-false} +CONTAINER_RUNTIME="${CONTAINER_RUNTIME:-podman}" + +if [ "${IS_CONTAINER}" != "false" ]; then + TOP_DIR="${1:-.}" + export XDG_CACHE_HOME="/tmp/.cache" + go vet "${TOP_DIR}"/pkg/... "${TOP_DIR}"/cmd/... +else + "${CONTAINER_RUNTIME}" run --rm \ + --env IS_CONTAINER=TRUE \ + --volume "${PWD}:/go/src/github.com/metal3-io/baremetal-operator:ro,z" \ + --entrypoint sh \ + --workdir /go/src/github.com/metal3-io/baremetal-operator \ + registry.hub.docker.com/library/golang:1.12 \ + /go/src/github.com/metal3-io/baremetal-operator/hack/govet.sh "${@}" +fi; diff --git a/vendor/github.com/metal3-io/baremetal-operator/hack/markdownlint.sh b/vendor/github.com/metal3-io/baremetal-operator/hack/markdownlint.sh new file mode 100755 index 000000000..5bdca93ac --- /dev/null +++ b/vendor/github.com/metal3-io/baremetal-operator/hack/markdownlint.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +set -eux + +IS_CONTAINER=${IS_CONTAINER:-false} +CONTAINER_RUNTIME="${CONTAINER_RUNTIME:-podman}" + +if [ "${IS_CONTAINER}" != "false" ]; then + TOP_DIR="${1:-.}" + find "${TOP_DIR}" -path ./vendor -prune -o -name '*.md' -exec \ + mdl --style all --warnings \ + --rules "MD001,MD002,MD003,MD004,MD005,MD006,MD007,MD009,MD010,MD011,MD012,MD013,MD014,MD018,MD019,MD020,MD021,MD022,MD023,MD024,MD025,MD026,MD027,MD028,MD030,MD031,MD032,MD033,MD034,MD035,MD036,MD037,MD038,MD039,MD040,MD041" \ + {} \+ +else + "${CONTAINER_RUNTIME}" run --rm \ + --env IS_CONTAINER=TRUE \ + --volume "${PWD}:/workdir:ro,z" \ + --entrypoint sh \ + --workdir /workdir \ + registry.hub.docker.com/pipelinecomponents/markdownlint:latest \ + /workdir/hack/markdownlint.sh "${@}" +fi; + +# $ mdl --style all -l +# MD001 - Header levels should only increment by one level at a time +# MD002 - First header should be a top level header +# MD003 - Header style +# MD004 - Unordered list style +# MD005 - Inconsistent indentation for list items at the same level +# MD006 - Consider starting bulleted lists at the beginning of the line +# MD007 - Unordered list indentation +# MD009 - Trailing spaces +# MD010 - Hard tabs +# MD011 - Reversed link syntax +# MD012 - Multiple consecutive blank lines +# MD013 - Line length +# MD014 - Dollar signs used before commands without showing output +# MD018 - No space after hash on atx style header +# MD019 - Multiple spaces after hash on atx style header +# MD020 - No space inside hashes on closed atx style header +# MD021 - Multiple spaces inside hashes on closed atx style header +# MD022 - Headers should be surrounded by blank lines +# MD023 - Headers must start at the beginning of the line +# MD024 - Multiple headers with the same content +# MD025 - Multiple top level headers in the same document +# MD026 - Trailing punctuation in header +# MD027 - Multiple spaces after blockquote symbol +# MD028 - Blank line inside blockquote +# MD029 - Ordered list item prefix - DISABLED +# MD030 - Spaces after list markers +# MD031 - Fenced code blocks should be surrounded by blank lines +# MD032 - Lists should be surrounded by blank lines +# MD033 - Inline HTML +# MD034 - Bare URL used +# MD035 - Horizontal rule style +# MD036 - Emphasis used instead of a header +# MD037 - Spaces inside emphasis markers +# MD038 - Spaces inside code span elements +# MD039 - Spaces inside link text +# MD040 - Fenced code blocks should have a language specified +# MD041 - First line in file should be a top level header +# MD046 - Code block style - DISABLED diff --git a/vendor/github.com/metal3-io/baremetal-operator/hack/shellcheck.sh b/vendor/github.com/metal3-io/baremetal-operator/hack/shellcheck.sh new file mode 100755 index 000000000..4a96a7a92 --- /dev/null +++ b/vendor/github.com/metal3-io/baremetal-operator/hack/shellcheck.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +set -eux + +IS_CONTAINER=${IS_CONTAINER:-false} +CONTAINER_RUNTIME="${CONTAINER_RUNTIME:-podman}" + +if [ "${IS_CONTAINER}" != "false" ]; then + TOP_DIR="${1:-.}" + find "${TOP_DIR}" -path ./vendor -prune -o -name '*.sh' -exec shellcheck -s bash {} \+ +else + "${CONTAINER_RUNTIME}" run --rm \ + --env IS_CONTAINER=TRUE \ + --volume "${PWD}:/workdir:ro,z" \ + --entrypoint sh \ + --workdir /workdir \ + registry.hub.docker.com/koalaman/shellcheck-alpine:stable \ + /workdir/hack/shellcheck.sh "${@}" +fi; diff --git a/vendor/github.com/metal3-io/baremetal-operator/hack/unit.sh b/vendor/github.com/metal3-io/baremetal-operator/hack/unit.sh new file mode 100755 index 000000000..5f1cca74d --- /dev/null +++ b/vendor/github.com/metal3-io/baremetal-operator/hack/unit.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +set -eux + +IS_CONTAINER=${IS_CONTAINER:-false} +ARTIFACTS=${ARTIFACTS:-/tmp} +CONTAINER_RUNTIME="${CONTAINER_RUNTIME:-podman}" + +if [ "${IS_CONTAINER}" != "false" ]; then + eval "$(go env)" + cd "${GOPATH}"/src/github.com/metal3-io/baremetal-operator + export XDG_CACHE_HOME="/tmp/.cache" + go test -v ./pkg/... ./cmd/... -coverprofile "${ARTIFACTS}"/cover.out +else + "${CONTAINER_RUNTIME}" run --rm \ + --env IS_CONTAINER=TRUE \ + --env DEPLOY_KERNEL_URL=http://172.22.0.1/images/ironic-python-agent.kernel \ + --env DEPLOY_RAMDISK_URL=http://172.22.0.1/images/ironic-python-agent.initramfs \ + --env IRONIC_ENDPOINT=http://localhost:6385/v1/ \ + --env IRONIC_INSPECTOR_ENDPOINT=http://localhost:5050/v1/ \ + --volume "${PWD}:/go/src/github.com/metal3-io/baremetal-operator:ro,z" \ + --entrypoint sh \ + --workdir /go/src/github.com/metal3-io/baremetal-operator \ + registry.hub.docker.com/library/golang:1.12 \ + /go/src/github.com/metal3-io/baremetal-operator/hack/unit.sh "${@}" +fi; diff --git a/vendor/github.com/metal3-io/baremetal-operator/pkg/apis/metal3/v1alpha1/baremetalhost_types.go b/vendor/github.com/metal3-io/baremetal-operator/pkg/apis/metal3/v1alpha1/baremetalhost_types.go index 9446e7dc5..13772bf8d 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/pkg/apis/metal3/v1alpha1/baremetalhost_types.go +++ b/vendor/github.com/metal3-io/baremetal-operator/pkg/apis/metal3/v1alpha1/baremetalhost_types.go @@ -1,6 +1,8 @@ package v1alpha1 import ( + "time" + corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" @@ -36,6 +38,26 @@ const ( OperationalStatusError OperationalStatus = "error" ) +// ErrorType indicates the class of problem that has caused the Host resource +// to enter an error state. +type ErrorType string + +const ( + // RegistrationError is an error condition occurring when the + // controller is unable to connect to the Host's baseboard management + // controller. + RegistrationError ErrorType = "registration error" + // InspectionError is an error condition occurring when an attempt to + // obtain hardware details from the Host fails. + InspectionError ErrorType = "inspection error" + // ProvisioningError is an error condition occuring when the controller + // fails to provision or deprovision the Host. + ProvisioningError ErrorType = "provisioning error" + // PowerManagementError is an error condition occurring when the + // controller is unable to modify the power state of the Host. + PowerManagementError ErrorType = "power management error" +) + // ProvisioningState defines the states the provisioner will report // the host has having. type ProvisioningState string @@ -58,10 +80,6 @@ const ( // StateReady means the host can be consumed StateReady ProvisioningState = "ready" - // StateValidationError means the provisioning instructions had an - // error - StateValidationError ProvisioningState = "validation error" - // StateProvisioning means we are writing an image to the host's // disk(s) StateProvisioning ProvisioningState = "provisioning" @@ -89,6 +107,10 @@ const ( // StatePowerManagementError means something went wrong trying to // power the server on or off. StatePowerManagementError ProvisioningState = "power management error" + + // StateDeleting means we are in the process of cleaning up the host + // ready for deletion + StateDeleting ProvisioningState = "deleting" ) // BMCDetails contains the information necessary to communicate with @@ -102,6 +124,13 @@ type BMCDetails struct { // The name of the secret containing the BMC credentials (requires // keys "username" and "password"). CredentialsName string `json:"credentialsName"` + + // DisableCertificateVerification disables verification of server + // certificates when using HTTPS to connect to the BMC. This is + // required when the server certificate is self-signed, but is + // insecure because it allows a man-in-the-middle to intercept the + // connection. + DisableCertificateVerification bool `json:"disableCertificateVerification,omitempty"` } // BareMetalHostSpec defines the desired state of BareMetalHost @@ -125,7 +154,7 @@ type BareMetalHostSpec struct { // Which MAC address will PXE boot? This is optional for some // types, but required for libvirt VMs driven by vbmc. - // +kubebuilder:validation:Pattern=[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5} + // +kubebuilder:validation:Pattern=`[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}` BootMACAddress string `json:"bootMACAddress,omitempty"` // Should the server be online? @@ -254,7 +283,7 @@ type NIC struct { Model string `json:"model"` // The device MAC addr - // +kubebuilder:validation:Pattern=[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5} + // +kubebuilder:validation:Pattern=`[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}` MAC string `json:"mac"` // The IP address of the device @@ -327,20 +356,55 @@ func (cs CredentialsStatus) Match(secret corev1.Secret) bool { return false case cs.Reference.Name != secret.ObjectMeta.Name: return false + case cs.Reference.Namespace != secret.ObjectMeta.Namespace: + return false case cs.Version != secret.ObjectMeta.ResourceVersion: return false } return true } +// OperationMetric contains metadata about an operation (inspection, +// provisioning, etc.) used for tracking metrics. +type OperationMetric struct { + // +nullable + Start metav1.Time `json:"start,omitempty"` + // +nullable + End metav1.Time `json:"end,omitempty"` +} + +// Duration returns the length of time that was spent on the +// operation. If the operation is not finished, it returns 0. +func (om OperationMetric) Duration() time.Duration { + if om.Start.IsZero() { + return 0 + } + return om.End.Time.Sub(om.Start.Time) +} + +// OperationHistory holds information about operations performed on a +// host. +type OperationHistory struct { + Register OperationMetric `json:"register,omitempty"` + Inspect OperationMetric `json:"inspect,omitempty"` + Provision OperationMetric `json:"provision,omitempty"` + Deprovision OperationMetric `json:"deprovision,omitempty"` +} + // BareMetalHostStatus defines the observed state of BareMetalHost type BareMetalHostStatus struct { // Important: Run "operator-sdk generate k8s" to regenerate code // after modifying this file // OperationalStatus holds the status of the host + // +kubebuilder:validation:Enum="";OK;discovered;error OperationalStatus OperationalStatus `json:"operationalStatus"` + // ErrorType indicates the type of failure encountered when the + // OperationalStatus is OperationalStatusError + // +kubebuilder:validation:Enum=registration error;inspection error;provisioning error;power management error + ErrorType ErrorType `json:"errorType,omitempty"` + // LastUpdated identifies when this status was last observed. // +optional LastUpdated *metav1.Time `json:"lastUpdated,omitempty"` @@ -355,16 +419,20 @@ type BareMetalHostStatus struct { Provisioning ProvisionStatus `json:"provisioning"` // the last credentials we were able to validate as working - GoodCredentials CredentialsStatus `json:"goodCredentials"` + GoodCredentials CredentialsStatus `json:"goodCredentials,omitempty"` // the last credentials we sent to the provisioning backend - TriedCredentials CredentialsStatus `json:"triedCredentials"` + TriedCredentials CredentialsStatus `json:"triedCredentials,omitempty"` // the last error message reported by the provisioning subsystem ErrorMessage string `json:"errorMessage"` // indicator for whether or not the host is powered on PoweredOn bool `json:"poweredOn"` + + // OperationHistory holds information about operations performed + // on this host. + OperationHistory OperationHistory `json:"operationHistory"` } // ProvisionStatus holds the state information for a single target. @@ -418,11 +486,15 @@ func (host *BareMetalHost) Available() bool { // SetErrorMessage updates the ErrorMessage in the host Status struct // when necessary and returns true when a change is made or false when // no change is made. -func (host *BareMetalHost) SetErrorMessage(message string) (dirty bool) { +func (host *BareMetalHost) SetErrorMessage(errType ErrorType, message string) (dirty bool) { if host.Status.OperationalStatus != OperationalStatusError { host.Status.OperationalStatus = OperationalStatusError dirty = true } + if host.Status.ErrorType != errType { + host.Status.ErrorType = errType + dirty = true + } if host.Status.ErrorMessage != message { host.Status.ErrorMessage = message dirty = true @@ -433,6 +505,11 @@ func (host *BareMetalHost) SetErrorMessage(message string) (dirty bool) { // ClearError removes any existing error message. func (host *BareMetalHost) ClearError() (dirty bool) { dirty = host.SetOperationalStatus(OperationalStatusOK) + var emptyErrType ErrorType = "" + if host.Status.ErrorType != emptyErrType { + host.Status.ErrorType = emptyErrType + dirty = true + } if host.Status.ErrorMessage != "" { host.Status.ErrorMessage = "" dirty = true @@ -533,9 +610,6 @@ func (host *BareMetalHost) NeedsHardwareInspection() bool { // status and returns true when more work is needed or false // otherwise. func (host *BareMetalHost) NeedsProvisioning() bool { - if host.Spec.ExternallyProvisioned { - return false - } if !host.Spec.Online { // The host is not supposed to be powered on. return false @@ -571,15 +645,15 @@ func (host *BareMetalHost) WasProvisioned() bool { // NeedsDeprovisioning compares the settings with the provisioning // status and returns true when the host should be deprovisioned. func (host *BareMetalHost) NeedsDeprovisioning() bool { - if host.Spec.ExternallyProvisioned { - return false + if host.Spec.Image == nil { + return true + } + if host.Spec.Image.URL == "" { + return true } if host.Status.Provisioning.Image.URL == "" { return false } - if host.Spec.Image == nil { - return true - } if host.Spec.Image.URL != host.Status.Provisioning.Image.URL { return true } @@ -638,6 +712,23 @@ func (host *BareMetalHost) NewEvent(reason, message string) corev1.Event { } } +// OperationMetricForState returns a pointer to the metric for the given +// provisioning state. +func (host *BareMetalHost) OperationMetricForState(operation ProvisioningState) (metric *OperationMetric) { + history := &host.Status.OperationHistory + switch operation { + case StateRegistering: + metric = &history.Register + case StateInspecting: + metric = &history.Inspect + case StateProvisioning: + metric = &history.Provision + case StateDeprovisioning: + metric = &history.Deprovision + } + return +} + // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // BareMetalHostList contains a list of BareMetalHost diff --git a/vendor/github.com/metal3-io/baremetal-operator/pkg/apis/metal3/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/metal3-io/baremetal-operator/pkg/apis/metal3/v1alpha1/zz_generated.deepcopy.go index c567605b9..722c5d742 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/pkg/apis/metal3/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/github.com/metal3-io/baremetal-operator/pkg/apis/metal3/v1alpha1/zz_generated.deepcopy.go @@ -73,7 +73,7 @@ func (in *BareMetalHost) DeepCopyObject() runtime.Object { func (in *BareMetalHostList) DeepCopyInto(out *BareMetalHostList) { *out = *in out.TypeMeta = in.TypeMeta - out.ListMeta = in.ListMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) if in.Items != nil { in, out := &in.Items, &out.Items *out = make([]BareMetalHost, len(*in)) @@ -156,6 +156,7 @@ func (in *BareMetalHostStatus) DeepCopyInto(out *BareMetalHostStatus) { out.Provisioning = in.Provisioning in.GoodCredentials.DeepCopyInto(&out.GoodCredentials) in.TriedCredentials.DeepCopyInto(&out.TriedCredentials) + in.OperationHistory.DeepCopyInto(&out.OperationHistory) return } @@ -312,6 +313,44 @@ func (in *NIC) DeepCopy() *NIC { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OperationHistory) DeepCopyInto(out *OperationHistory) { + *out = *in + in.Register.DeepCopyInto(&out.Register) + in.Inspect.DeepCopyInto(&out.Inspect) + in.Provision.DeepCopyInto(&out.Provision) + in.Deprovision.DeepCopyInto(&out.Deprovision) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OperationHistory. +func (in *OperationHistory) DeepCopy() *OperationHistory { + if in == nil { + return nil + } + out := new(OperationHistory) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OperationMetric) DeepCopyInto(out *OperationMetric) { + *out = *in + in.Start.DeepCopyInto(&out.Start) + in.End.DeepCopyInto(&out.End) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OperationMetric. +func (in *OperationMetric) DeepCopy() *OperationMetric { + if in == nil { + return nil + } + out := new(OperationMetric) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ProvisionStatus) DeepCopyInto(out *ProvisionStatus) { *out = *in diff --git a/vendor/github.com/metal3-io/baremetal-operator/pkg/apis/metal3/v1alpha1/zz_generated.openapi.go b/vendor/github.com/metal3-io/baremetal-operator/pkg/apis/metal3/v1alpha1/zz_generated.openapi.go index 2dc8b8c58..b25ebb195 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/pkg/apis/metal3/v1alpha1/zz_generated.openapi.go +++ b/vendor/github.com/metal3-io/baremetal-operator/pkg/apis/metal3/v1alpha1/zz_generated.openapi.go @@ -1,4 +1,4 @@ -// +build ! +// +build !ignore_autogenerated // This file was autogenerated by openapi-gen. Do not edit it manually! @@ -20,17 +20,18 @@ func schema_pkg_apis_metal3_v1alpha1_BareMetalHost(ref common.ReferenceCallback) Schema: spec.Schema{ SchemaProps: spec.SchemaProps{ Description: "BareMetalHost is the Schema for the baremetalhosts API", + Type: []string{"object"}, Properties: map[string]spec.Schema{ "kind": { SchemaProps: spec.SchemaProps{ - 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/api-conventions.md#types-kinds", + 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{"string"}, Format: "", }, }, "apiVersion": { SchemaProps: spec.SchemaProps{ - 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/api-conventions.md#resources", + 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{"string"}, Format: "", }, diff --git a/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/access.go b/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/access.go index f927e6832..f29d041aa 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/access.go +++ b/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/access.go @@ -10,7 +10,7 @@ import ( // AccessDetailsFactory describes a callable that returns a new // AccessDetails based on the input parameters. -type AccessDetailsFactory func(bmcType, portNum, hostname, path string) (AccessDetails, error) +type AccessDetailsFactory func(parsedURL *url.URL, disableCertificateVerification bool) (AccessDetails, error) var factories = map[string]AccessDetailsFactory{} @@ -46,11 +46,16 @@ type AccessDetails interface { // Boot interface to set BootInterface() string + + ManagementInterface() string + PowerInterface() string + RAIDInterface() string + VendorInterface() string } -func getTypeHostPort(address string) (bmcType, host, port, path string, err error) { +func getParsedURL(address string) (parsedURL *url.URL, err error) { // Start by assuming "type://host:port" - parsedURL, err := url.Parse(address) + parsedURL, err = url.Parse(address) if err != nil { // We failed to parse the URL, but it may just be a host or // host:port string (which the URL parser rejects because ":" @@ -60,55 +65,51 @@ func getTypeHostPort(address string) (bmcType, host, port, path string, err erro if strings.Contains(address, ":") { // If we can parse host:port, carry on with those // values. Otherwise, report the original parser error. - var err2 error - host, port, err2 = net.SplitHostPort(address) + _, _, err2 := net.SplitHostPort(address) if err2 != nil { - return "", "", "", "", errors.Wrap(err, "failed to parse BMC address information") + return nil, errors.Wrap(err, "failed to parse BMC address information") } - bmcType = "ipmi" - } else { - bmcType = "ipmi" - host = address + } + parsedURL = &url.URL{ + Scheme: "ipmi", + Host: address, } } else { // Successfully parsed the URL - bmcType = parsedURL.Scheme if parsedURL.Opaque != "" { parsedURL, err = url.Parse(strings.Replace(address, ":", "://", 1)) if err != nil { - return "", "", "", "", errors.Wrap(err, "failed to parse BMC address information") + return nil, errors.Wrap(err, "failed to parse BMC address information") } } - port = parsedURL.Port() - host = parsedURL.Hostname() if parsedURL.Scheme == "" { - bmcType = "ipmi" - if host == "" { + if parsedURL.Hostname() == "" { // If there was no scheme at all, the hostname was // interpreted as a path. - host = parsedURL.Path + parsedURL, err = url.Parse(strings.Join([]string{"ipmi://", address}, "")) + if err != nil { + return nil, errors.Wrap(err, "failed to parse BMC address information") + } } - } else { - path = parsedURL.Path } } - return bmcType, host, port, path, nil + return parsedURL, nil } // NewAccessDetails creates an AccessDetails structure from the URL // for a BMC. -func NewAccessDetails(address string) (AccessDetails, error) { +func NewAccessDetails(address string, disableCertificateVerification bool) (AccessDetails, error) { - bmcType, host, port, path, err := getTypeHostPort(address) + parsedURL, err := getParsedURL(address) if err != nil { return nil, err } - factory, ok := factories[bmcType] + factory, ok := factories[parsedURL.Scheme] if !ok { - return nil, &UnknownBMCTypeError{address, bmcType} + return nil, &UnknownBMCTypeError{address, parsedURL.Scheme} } - return factory(bmcType, port, host, path) + return factory(parsedURL, disableCertificateVerification) } diff --git a/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/idrac.go b/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/idrac.go index 0161e4e5a..cb3a5c1f9 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/idrac.go +++ b/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/idrac.go @@ -1,6 +1,7 @@ package bmc import ( + "net/url" "strings" ) @@ -10,20 +11,22 @@ func init() { registerFactory("idrac+https", newIDRACAccessDetails) } -func newIDRACAccessDetails(bmcType, portNum, hostname, path string) (AccessDetails, error) { +func newIDRACAccessDetails(parsedURL *url.URL, disableCertificateVerification bool) (AccessDetails, error) { return &iDracAccessDetails{ - bmcType: bmcType, - portNum: portNum, - hostname: hostname, - path: path, + bmcType: parsedURL.Scheme, + portNum: parsedURL.Port(), + hostname: parsedURL.Hostname(), + path: parsedURL.Path, + disableCertificateVerification: disableCertificateVerification, }, nil } type iDracAccessDetails struct { - bmcType string - portNum string - hostname string - path string + bmcType string + portNum string + hostname string + path string + disableCertificateVerification bool } func (a *iDracAccessDetails) Type() string { @@ -40,6 +43,10 @@ func (a *iDracAccessDetails) Driver() string { return "idrac" } +func (a *iDracAccessDetails) DisableCertificateVerification() bool { + return a.disableCertificateVerification +} + // DriverInfo returns a data structure to pass as the DriverInfo // parameter when creating a node in Ironic. The structure is // pre-populated with the access information, and the caller is @@ -51,6 +58,9 @@ func (a *iDracAccessDetails) DriverInfo(bmcCreds Credentials) map[string]interfa "drac_password": bmcCreds.Password, "drac_address": a.hostname, } + if a.disableCertificateVerification { + result["drac_verify_ca"] = false + } schemes := strings.Split(a.bmcType, "+") if len(schemes) > 1 { @@ -69,3 +79,19 @@ func (a *iDracAccessDetails) DriverInfo(bmcCreds Credentials) map[string]interfa func (a *iDracAccessDetails) BootInterface() string { return "ipxe" } + +func (a *iDracAccessDetails) ManagementInterface() string { + return "" +} + +func (a *iDracAccessDetails) PowerInterface() string { + return "" +} + +func (a *iDracAccessDetails) RAIDInterface() string { + return "" +} + +func (a *iDracAccessDetails) VendorInterface() string { + return "" +} diff --git a/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/ipmi.go b/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/ipmi.go index 2a9341d97..46eac5126 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/ipmi.go +++ b/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/ipmi.go @@ -1,22 +1,28 @@ package bmc +import ( + "net/url" +) + func init() { registerFactory("ipmi", newIPMIAccessDetails) registerFactory("libvirt", newIPMIAccessDetails) } -func newIPMIAccessDetails(bmcType, portNum, hostname, path string) (AccessDetails, error) { +func newIPMIAccessDetails(parsedURL *url.URL, disableCertificateVerification bool) (AccessDetails, error) { return &ipmiAccessDetails{ - bmcType: bmcType, - portNum: portNum, - hostname: hostname, + bmcType: parsedURL.Scheme, + portNum: parsedURL.Port(), + hostname: parsedURL.Hostname(), + disableCertificateVerification: disableCertificateVerification, }, nil } type ipmiAccessDetails struct { - bmcType string - portNum string - hostname string + bmcType string + portNum string + hostname string + disableCertificateVerification bool } const ipmiDefaultPort = "623" @@ -41,6 +47,10 @@ func (a *ipmiAccessDetails) Driver() string { return "ipmi" } +func (a *ipmiAccessDetails) DisableCertificateVerification() bool { + return a.disableCertificateVerification +} + // DriverInfo returns a data structure to pass as the DriverInfo // parameter when creating a node in Ironic. The structure is // pre-populated with the access information, and the caller is @@ -53,6 +63,10 @@ func (a *ipmiAccessDetails) DriverInfo(bmcCreds Credentials) map[string]interfac "ipmi_password": bmcCreds.Password, "ipmi_address": a.hostname, } + + if a.disableCertificateVerification { + result["ipmi_verify_ca"] = false + } if a.portNum == "" { result["ipmi_port"] = ipmiDefaultPort } @@ -62,3 +76,19 @@ func (a *ipmiAccessDetails) DriverInfo(bmcCreds Credentials) map[string]interfac func (a *ipmiAccessDetails) BootInterface() string { return "ipxe" } + +func (a *ipmiAccessDetails) ManagementInterface() string { + return "" +} + +func (a *ipmiAccessDetails) PowerInterface() string { + return "" +} + +func (a *ipmiAccessDetails) RAIDInterface() string { + return "" +} + +func (a *ipmiAccessDetails) VendorInterface() string { + return "" +} diff --git a/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/irmc.go b/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/irmc.go index b40048b57..5b54ad506 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/irmc.go +++ b/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/irmc.go @@ -1,21 +1,27 @@ package bmc +import ( + "net/url" +) + func init() { registerFactory("irmc", newIRMCAccessDetails) } -func newIRMCAccessDetails(bmcType, portNum, hostname, path string) (AccessDetails, error) { +func newIRMCAccessDetails(parsedURL *url.URL, disableCertificateVerification bool) (AccessDetails, error) { return &iRMCAccessDetails{ - bmcType: bmcType, - portNum: portNum, - hostname: hostname, + bmcType: parsedURL.Scheme, + portNum: parsedURL.Port(), + hostname: parsedURL.Hostname(), + disableCertificateVerification: disableCertificateVerification, }, nil } type iRMCAccessDetails struct { - bmcType string - portNum string - hostname string + bmcType string + portNum string + hostname string + disableCertificateVerification bool } func (a *iRMCAccessDetails) Type() string { @@ -32,6 +38,10 @@ func (a *iRMCAccessDetails) Driver() string { return "irmc" } +func (a *iRMCAccessDetails) DisableCertificateVerification() bool { + return a.disableCertificateVerification +} + // DriverInfo returns a data structure to pass as the DriverInfo // parameter when creating a node in Ironic. The structure is // pre-populated with the access information, and the caller is @@ -44,6 +54,10 @@ func (a *iRMCAccessDetails) DriverInfo(bmcCreds Credentials) map[string]interfac "irmc_address": a.hostname, } + if a.disableCertificateVerification { + result["irmc_verify_ca"] = false + } + if a.portNum != "" { result["irmc_port"] = a.portNum } @@ -54,3 +68,19 @@ func (a *iRMCAccessDetails) DriverInfo(bmcCreds Credentials) map[string]interfac func (a *iRMCAccessDetails) BootInterface() string { return "pxe" } + +func (a *iRMCAccessDetails) ManagementInterface() string { + return "" +} + +func (a *iRMCAccessDetails) PowerInterface() string { + return "" +} + +func (a *iRMCAccessDetails) RAIDInterface() string { + return "irmc" +} + +func (a *iRMCAccessDetails) VendorInterface() string { + return "" +} diff --git a/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/redfish.go b/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/redfish.go new file mode 100644 index 000000000..c2e093135 --- /dev/null +++ b/vendor/github.com/metal3-io/baremetal-operator/pkg/bmc/redfish.go @@ -0,0 +1,160 @@ +package bmc + +import ( + "net/url" + "strings" +) + +func init() { + registerFactory("redfish", newRedfishAccessDetails) + registerFactory("redfish+http", newRedfishAccessDetails) + registerFactory("redfish+https", newRedfishAccessDetails) + registerFactory("redfish-virtualmedia", newRedfishVirtualMediaAccessDetails) + registerFactory("ilo5-virtualmedia", newRedfishVirtualMediaAccessDetails) + registerFactory("idrac-virtualmedia", newRedfishiDracVirtualMediaAccessDetails) +} + +func redfishDetails(parsedURL *url.URL, disableCertificateVerification bool) *redfishAccessDetails { + return &redfishAccessDetails{ + bmcType: parsedURL.Scheme, + host: parsedURL.Host, + path: parsedURL.Path, + disableCertificateVerification: disableCertificateVerification, + } +} + +func newRedfishAccessDetails(parsedURL *url.URL, disableCertificateVerification bool) (AccessDetails, error) { + return redfishDetails(parsedURL, disableCertificateVerification), nil +} + +func newRedfishVirtualMediaAccessDetails(parsedURL *url.URL, disableCertificateVerification bool) (AccessDetails, error) { + return &redfishVirtualMediaAccessDetails{ + *redfishDetails(parsedURL, disableCertificateVerification), + }, nil +} + +func newRedfishiDracVirtualMediaAccessDetails(parsedURL *url.URL, disableCertificateVerification bool) (AccessDetails, error) { + return &redfishiDracVirtualMediaAccessDetails{ + *redfishDetails(parsedURL, disableCertificateVerification), + }, nil +} + +type redfishAccessDetails struct { + bmcType string + host string + path string + disableCertificateVerification bool +} + +type redfishVirtualMediaAccessDetails struct { + redfishAccessDetails +} + +type redfishiDracVirtualMediaAccessDetails struct { + redfishAccessDetails +} + +const redfishDefaultScheme = "https" + +func (a *redfishAccessDetails) Type() string { + return a.bmcType +} + +// NeedsMAC returns true when the host is going to need a separate +// port created rather than having it discovered. +func (a *redfishAccessDetails) NeedsMAC() bool { + // For the inspection to work, we need a MAC address + // https://github.com/metal3-io/baremetal-operator/pull/284#discussion_r317579040 + return true +} + +func (a *redfishAccessDetails) Driver() string { + return "redfish" +} + +func (a *redfishAccessDetails) DisableCertificateVerification() bool { + return a.disableCertificateVerification +} + +// DriverInfo returns a data structure to pass as the DriverInfo +// parameter when creating a node in Ironic. The structure is +// pre-populated with the access information, and the caller is +// expected to add any other information that might be needed (such as +// the kernel and ramdisk locations). +func (a *redfishAccessDetails) DriverInfo(bmcCreds Credentials) map[string]interface{} { + redfishAddress := []string{} + schemes := strings.Split(a.bmcType, "+") + if len(schemes) > 1 { + redfishAddress = append(redfishAddress, schemes[1]) + } else { + redfishAddress = append(redfishAddress, redfishDefaultScheme) + } + redfishAddress = append(redfishAddress, "://") + redfishAddress = append(redfishAddress, a.host) + + result := map[string]interface{}{ + "redfish_system_id": a.path, + "redfish_username": bmcCreds.Username, + "redfish_password": bmcCreds.Password, + "redfish_address": strings.Join(redfishAddress, ""), + } + + if a.disableCertificateVerification { + result["redfish_verify_ca"] = false + } + + return result +} + +// That can be either pxe or redfish-virtual-media +func (a *redfishAccessDetails) BootInterface() string { + return "ipxe" +} + +func (a *redfishAccessDetails) ManagementInterface() string { + return "" +} + +func (a *redfishAccessDetails) PowerInterface() string { + return "" +} + +func (a *redfishAccessDetails) RAIDInterface() string { + return "" +} + +func (a *redfishAccessDetails) VendorInterface() string { + return "" +} + +// Virtual Media Overrides + +func (a *redfishVirtualMediaAccessDetails) BootInterface() string { + return "redfish-virtual-media" +} + +// iDrac Virtual Media Overrides + +func (a *redfishiDracVirtualMediaAccessDetails) Driver() string { + return "idrac" +} + +func (a *redfishiDracVirtualMediaAccessDetails) BootInterface() string { + return "idrac-redfish-virtual-media" +} + +func (a *redfishiDracVirtualMediaAccessDetails) ManagementInterface() string { + return "idrac-redfish" +} + +func (a *redfishiDracVirtualMediaAccessDetails) PowerInterface() string { + return "idrac-redfish" +} + +func (a *redfishiDracVirtualMediaAccessDetails) RAIDInterface() string { + return "no-raid" +} + +func (a *redfishiDracVirtualMediaAccessDetails) VendorInterface() string { + return "no-vendor" +} diff --git a/vendor/github.com/metal3-io/baremetal-operator/pkg/controller/baremetalhost/action_result.go b/vendor/github.com/metal3-io/baremetal-operator/pkg/controller/baremetalhost/action_result.go new file mode 100644 index 000000000..f01a2455a --- /dev/null +++ b/vendor/github.com/metal3-io/baremetal-operator/pkg/controller/baremetalhost/action_result.go @@ -0,0 +1,92 @@ +package baremetalhost + +import ( + metal3 "github.com/metal3-io/baremetal-operator/pkg/apis/metal3/v1alpha1" + + "sigs.k8s.io/controller-runtime/pkg/reconcile" + "time" +) + +// actionResult is an interface that encapsulates the result of a Reconcile +// call, as returned by the action corresponding to the current state. +type actionResult interface { + Result() (reconcile.Result, error) + Dirty() bool +} + +// actionContinue is a result indicating that the current action is still +// in progress, and that the resource should remain in the same provisioning +// state. +type actionContinue struct { + delay time.Duration +} + +func (r actionContinue) Result() (result reconcile.Result, err error) { + result.RequeueAfter = r.delay + // Set Requeue true as well as RequeueAfter in case the delay is 0. + result.Requeue = true + return +} + +func (r actionContinue) Dirty() bool { + return true +} + +// actionComplete is a result indicating that the current action has completed, +// and that the resource should transition to the next state. +type actionComplete struct { +} + +func (r actionComplete) Result() (result reconcile.Result, err error) { + result.Requeue = true + return +} + +func (r actionComplete) Dirty() bool { + return true +} + +// deleteComplete is a result indicating that the deletion action has +// completed, and that the resource has now been deleted. +type deleteComplete struct { + actionComplete +} + +func (r deleteComplete) Result() (result reconcile.Result, err error) { + // Don't requeue, since the CR has been successfully deleted + return +} + +func (r deleteComplete) Dirty() bool { + return false +} + +// actionError is a result indicating that an error occurred while attempting +// to advance the current action, and that reconciliation should be retried. +type actionError struct { + err error +} + +func (r actionError) Result() (result reconcile.Result, err error) { + err = r.err + return +} + +func (r actionError) Dirty() bool { + return false +} + +// actionFailed is a result indicating that the current action has failed, +// and that the resource should be marked as in error. +type actionFailed struct { + dirty bool + ErrorType metal3.ErrorType +} + +func (r actionFailed) Result() (result reconcile.Result, err error) { + return +} + +func (r actionFailed) Dirty() bool { + return r.dirty +} diff --git a/vendor/github.com/metal3-io/baremetal-operator/pkg/controller/baremetalhost/baremetalhost_controller.go b/vendor/github.com/metal3-io/baremetal-operator/pkg/controller/baremetalhost/baremetalhost_controller.go index 706d24419..3634a8509 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/pkg/controller/baremetalhost/baremetalhost_controller.go +++ b/vendor/github.com/metal3-io/baremetal-operator/pkg/controller/baremetalhost/baremetalhost_controller.go @@ -31,9 +31,9 @@ import ( "sigs.k8s.io/controller-runtime/pkg/controller" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" "sigs.k8s.io/controller-runtime/pkg/handler" + logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/reconcile" - logf "sigs.k8s.io/controller-runtime/pkg/runtime/log" "sigs.k8s.io/controller-runtime/pkg/source" ) @@ -119,12 +119,13 @@ type ReconcileBareMetalHost struct { // Instead of passing a zillion arguments to the action of a phase, // hold them in a context type reconcileInfo struct { - log logr.Logger - host *metal3v1alpha1.BareMetalHost - request reconcile.Request - bmcCredsSecret *corev1.Secret - events []corev1.Event - errorMessage string + log logr.Logger + host *metal3v1alpha1.BareMetalHost + request reconcile.Request + bmcCredsSecret *corev1.Secret + events []corev1.Event + errorMessage string + postSaveCallbacks []func() } // match the provisioner.EventPublisher interface @@ -132,19 +133,6 @@ func (info *reconcileInfo) publishEvent(reason, message string) { info.events = append(info.events, info.host.NewEvent(reason, message)) } -// Action for one step of reconciliation. -// -// - Return a result if the host should be saved and requeued without error. -// - Return error if there was an error. -// - Return double nil if nothing was done and processing should continue. -type reconcileAction func(info *reconcileInfo) (*reconcile.Result, error) - -// One step of reconciliation -type reconcilePhase struct { - name string - action reconcileAction -} - // Reconcile reads that state of the cluster for a BareMetalHost // object and makes changes based on the state read and what is in the // BareMetalHost.Spec TODO(user): Modify this Reconcile function to @@ -154,6 +142,12 @@ type reconcilePhase struct { // is true, otherwise upon completion it will remove the work from the // queue. func (r *ReconcileBareMetalHost) Reconcile(request reconcile.Request) (result reconcile.Result, err error) { + reconcileCounters.With(hostMetricLabels(request)).Inc() + defer func() { + if err != nil { + reconcileErrorCounter.Inc() + } + }() reqLogger := log.WithValues("Request.Namespace", request.Namespace, "Request.Name", request.Name) @@ -195,107 +189,23 @@ func (r *ReconcileBareMetalHost) Reconcile(request reconcile.Request) (result re return reconcile.Result{Requeue: true}, nil } - // Handle delete operations - if !host.DeletionTimestamp.IsZero() { - result, err := r.deleteHost(request, host) - return result, err - } - // Retrieve the BMC details from the host spec and validate host // BMC details and build the credentials for talking to the // management controller. bmcCreds, bmcCredsSecret, err := r.buildAndValidateBMCCredentials(request, host) - if err != nil { - switch err.(type) { - // We treat an empty bmc address and empty bmc credentials fields as a - // trigger the host needs to be put into a discovered status. We also set - // an error message (but not an error state) on the host so we can understand - // what we may be waiting on. Editing the host to set these values will - // cause the host to be reconciled again so we do not Requeue. - case *EmptyBMCAddressError, *EmptyBMCSecretError: - dirty := host.SetOperationalStatus(metal3v1alpha1.OperationalStatusDiscovered) - if dirty { - // Set the host error message directly - // as we cannot use SetErrorCondition which - // overwrites our discovered state - host.Status.ErrorMessage = err.Error() - saveErr := r.saveStatus(host) - if saveErr != nil { - return reconcile.Result{Requeue: true}, saveErr - } - // Only publish the event if we do not have an error - // after saving so that we only publish one time. - r.publishEvent(request, - host.NewEvent("Discovered", fmt.Sprintf("Discovered host with unusable BMC details: %s", err.Error()))) - } - return reconcile.Result{}, nil - // In the event a credential secret is defined, but we cannot find it - // we requeue the host as we will not know if they create the secret - // at some point in the future. - case *ResolveBMCSecretRefError: - saveErr := r.setErrorCondition(request, host, err.Error()) - if saveErr != nil { - return reconcile.Result{Requeue: true}, saveErr - } - // Only publish the event if we do not have an error - // after saving so that we only publish one time. - r.publishEvent(request, host.NewEvent("BMCCredentialError", err.Error())) - return reconcile.Result{Requeue: true, RequeueAfter: hostErrorRetryDelay}, nil - // If we have found the secret but it is missing the required fields - // or the BMC address is defined but malformed we set the - // host into an error state but we do not Requeue it - // as fixing the secret or the host BMC info will trigger - // the host to be reconciled again - case *bmc.CredentialsValidationError, *bmc.UnknownBMCTypeError: - saveErr := r.setErrorCondition(request, host, err.Error()) - if saveErr != nil { - return reconcile.Result{Requeue: true}, saveErr - } - // Only publish the event if we do not have an error - // after saving so that we only publish one time. - r.publishEvent(request, host.NewEvent("BMCCredentialError", err.Error())) - return reconcile.Result{}, nil - default: - return reconcile.Result{}, errors.Wrap(err, "An unhandled failure occurred with the BMC secret") - } - } - - // Pick the action to perform - var actionName metal3v1alpha1.ProvisioningState - switch { - case !host.Status.GoodCredentials.Match(*bmcCredsSecret): - actionName = metal3v1alpha1.StateRegistering - case host.Spec.ExternallyProvisioned: - actionName = metal3v1alpha1.StateExternallyProvisioned - case host.NeedsHardwareInspection(): - actionName = metal3v1alpha1.StateInspecting - case host.NeedsHardwareProfile(): - actionName = metal3v1alpha1.StateMatchProfile - case host.NeedsProvisioning(): - actionName = metal3v1alpha1.StateProvisioning - case host.NeedsDeprovisioning(): - actionName = metal3v1alpha1.StateDeprovisioning - case host.WasProvisioned(): - actionName = metal3v1alpha1.StateProvisioned - default: - actionName = metal3v1alpha1.StateReady - } - - if actionName != host.Status.Provisioning.State { - reqLogger.Info("changing provisioning state", - "old", host.Status.Provisioning.State, - "new", actionName, - ) - host.Status.Provisioning.State = actionName - if err := r.saveStatus(host); err != nil { - return reconcile.Result{}, errors.Wrap(err, - fmt.Sprintf("failed to save host status after handling %q", actionName)) + if err != nil || bmcCreds == nil { + if !host.DeletionTimestamp.IsZero() { + // If we are in the process of deletion, try with empty credentials + bmcCreds = &bmc.Credentials{} + bmcCredsSecret = &corev1.Secret{} + } else { + return r.credentialsErrorResult(err, request, host) } - return reconcile.Result{Requeue: true}, nil } + initialState := host.Status.Provisioning.State info := &reconcileInfo{ - log: reqLogger.WithValues("provisioningState", actionName), + log: reqLogger.WithValues("provisioningState", initialState), host: host, request: request, bmcCredsSecret: bmcCredsSecret, @@ -305,43 +215,30 @@ func (r *ReconcileBareMetalHost) Reconcile(request reconcile.Request) (result re return reconcile.Result{}, errors.Wrap(err, "failed to create provisioner") } - switch actionName { - case metal3v1alpha1.StateRegistering: - result, err = r.actionRegistering(prov, info) - case metal3v1alpha1.StateInspecting: - result, err = r.actionInspecting(prov, info) - case metal3v1alpha1.StateMatchProfile: - result, err = r.actionMatchProfile(prov, info) - case metal3v1alpha1.StateProvisioning: - result, err = r.actionProvisioning(prov, info) - case metal3v1alpha1.StateDeprovisioning: - result, err = r.actionDeprovisioning(prov, info) - case metal3v1alpha1.StateProvisioned: - result, err = r.actionManageSteadyState(prov, info) - case metal3v1alpha1.StateReady: - result, err = r.actionManageReady(prov, info) - case metal3v1alpha1.StateExternallyProvisioned: - result, err = r.actionManageSteadyState(prov, info) - default: - // Probably a provisioning error state? - return reconcile.Result{}, fmt.Errorf("Unrecognized action %q", actionName) - } + stateMachine := newHostStateMachine(host, r, prov) + actResult := stateMachine.ReconcileState(info) + result, err = actResult.Result() if err != nil { - return reconcile.Result{}, errors.Wrap(err, fmt.Sprintf("action %q failed", actionName)) + err = errors.Wrap(err, fmt.Sprintf("action %q failed", initialState)) + return } - // Only save status when we're told to requeue, otherwise we + // Only save status when we're told to, otherwise we // introduce an infinite loop reconciling the same object over and // over when there is an unrecoverable error (tracked through the // error state of the host). - if result.Requeue { + if actResult.Dirty() { info.log.Info("saving host status", "operational status", host.OperationalStatus(), "provisioning state", host.Status.Provisioning.State) if err = r.saveStatus(host); err != nil { return reconcile.Result{}, errors.Wrap(err, - fmt.Sprintf("failed to save host status after %q", actionName)) + fmt.Sprintf("failed to save host status after %q", initialState)) + } + + for _, cb := range info.postSaveCallbacks { + cb() } } @@ -349,106 +246,142 @@ func (r *ReconcileBareMetalHost) Reconcile(request reconcile.Request) (result re r.publishEvent(request, e) } - if host.HasError() { - // We have tried to do something that failed in a way we - // assume is not retryable, so do not proceed to any other - // steps. - info.log.Info("stopping on host error", "message", host.Status.ErrorMessage) - return reconcile.Result{}, nil - } - - info.log.Info("done", - "requeue", result.Requeue, - "after", result.RequeueAfter, - ) - return result, nil + logResult(info, result) + return } -// Handle all delete cases -func (r *ReconcileBareMetalHost) deleteHost(request reconcile.Request, host *metal3v1alpha1.BareMetalHost) (result reconcile.Result, err error) { - - reqLogger := log.WithValues("Request.Namespace", - request.Namespace, "Request.Name", request.Name) - - reqLogger.Info( - "marked to be deleted", - "timestamp", host.DeletionTimestamp, - ) - - // no-op if finalizer has been removed. - if !utils.StringInList(host.Finalizers, metal3v1alpha1.BareMetalHostFinalizer) { - reqLogger.Info("ready to be deleted") - // There is nothing to save and no reason to requeue since we - // are being deleted. - return reconcile.Result{}, nil +func logResult(info *reconcileInfo, result reconcile.Result) { + if result.Requeue || result.RequeueAfter != 0 || + !utils.StringInList(info.host.Finalizers, + metal3v1alpha1.BareMetalHostFinalizer) { + info.log.Info("done", + "requeue", result.Requeue, + "after", result.RequeueAfter) + } else { + info.log.Info("stopping on host error", + "message", info.host.Status.ErrorMessage) } +} - // Retrieve the BMC secret from Kubernetes for this host and - // try and build credentials. If we fail, resort to an empty - // credentials object to give the provisioner - bmcCreds, _, err := r.buildAndValidateBMCCredentials(request, host) - if err != nil || bmcCreds == nil { - bmcCreds = &bmc.Credentials{} - } +func recordActionFailure(info *reconcileInfo, errorType metal3v1alpha1.ErrorType, errorMessage string) actionFailed { + dirty := info.host.SetErrorMessage(errorType, errorMessage) + if dirty { + eventType := map[metal3v1alpha1.ErrorType]string{ + metal3v1alpha1.RegistrationError: "RegistrationError", + metal3v1alpha1.InspectionError: "InspectionError", + metal3v1alpha1.ProvisioningError: "ProvisioningError", + metal3v1alpha1.PowerManagementError: "PowerManagementError", + }[errorType] - eventPublisher := func(reason, message string) { - r.publishEvent(request, host.NewEvent(reason, message)) - } + counter := actionFailureCounters.WithLabelValues(eventType) + info.postSaveCallbacks = append(info.postSaveCallbacks, counter.Inc) - prov, err := r.provisionerFactory(host, *bmcCreds, eventPublisher) - if err != nil { - return result, errors.Wrap(err, "failed to create provisioner") + info.publishEvent(eventType, errorMessage) } + return actionFailed{dirty: dirty, ErrorType: errorType} +} - if host.NeedsDeprovisioning() { - reqLogger.Info("deprovisioning before deleting") - provResult, err := prov.Deprovision() - if err != nil { - return result, errors.Wrap(err, "failed to deprovision") - } - if provResult.Dirty { - err = r.saveStatus(host) - if err != nil { - return result, errors.Wrap(err, "failed to save host after deprovisioning") +func (r *ReconcileBareMetalHost) credentialsErrorResult(err error, request reconcile.Request, host *metal3v1alpha1.BareMetalHost) (reconcile.Result, error) { + switch err.(type) { + // We treat an empty bmc address and empty bmc credentials fields as a + // trigger the host needs to be put into a discovered status. We also set + // an error message (but not an error state) on the host so we can understand + // what we may be waiting on. Editing the host to set these values will + // cause the host to be reconciled again so we do not Requeue. + case *EmptyBMCAddressError, *EmptyBMCSecretError: + credentialsInvalid.Inc() + dirty := host.SetOperationalStatus(metal3v1alpha1.OperationalStatusDiscovered) + if dirty { + // Set the host error message directly + // as we cannot use SetErrorCondition which + // overwrites our discovered state + host.Status.ErrorMessage = err.Error() + host.Status.ErrorType = "" + saveErr := r.saveStatus(host) + if saveErr != nil { + return reconcile.Result{Requeue: true}, saveErr } - result.Requeue = true - result.RequeueAfter = provResult.RequeueAfter - return result, nil + // Only publish the event if we do not have an error + // after saving so that we only publish one time. + r.publishEvent(request, + host.NewEvent("Discovered", fmt.Sprintf("Discovered host with unusable BMC details: %s", err.Error()))) } - } else { - reqLogger.Info("no need to deprovision before deleting") + return reconcile.Result{}, nil + // In the event a credential secret is defined, but we cannot find it + // we requeue the host as we will not know if they create the secret + // at some point in the future. + case *ResolveBMCSecretRefError: + credentialsMissing.Inc() + changed, saveErr := r.setErrorCondition(request, host, metal3v1alpha1.RegistrationError, err.Error()) + if saveErr != nil { + return reconcile.Result{Requeue: true}, saveErr + } + if changed { + // Only publish the event if we do not have an error + // after saving so that we only publish one time. + r.publishEvent(request, host.NewEvent("BMCCredentialError", err.Error())) + } + return reconcile.Result{Requeue: true, RequeueAfter: hostErrorRetryDelay}, nil + // If we have found the secret but it is missing the required fields + // or the BMC address is defined but malformed we set the + // host into an error state but we do not Requeue it + // as fixing the secret or the host BMC info will trigger + // the host to be reconciled again + case *bmc.CredentialsValidationError, *bmc.UnknownBMCTypeError: + credentialsInvalid.Inc() + _, saveErr := r.setErrorCondition(request, host, metal3v1alpha1.RegistrationError, err.Error()) + if saveErr != nil { + return reconcile.Result{Requeue: true}, saveErr + } + // Only publish the event if we do not have an error + // after saving so that we only publish one time. + r.publishEvent(request, host.NewEvent("BMCCredentialError", err.Error())) + return reconcile.Result{}, nil + default: + unhandledCredentialsError.Inc() + return reconcile.Result{}, errors.Wrap(err, "An unhandled failure occurred with the BMC secret") + } +} + +// Manage deletion of the host +func (r *ReconcileBareMetalHost) actionDeleting(prov provisioner.Provisioner, info *reconcileInfo) actionResult { + info.log.Info( + "marked to be deleted", + "timestamp", info.host.DeletionTimestamp, + ) + + // no-op if finalizer has been removed. + if !utils.StringInList(info.host.Finalizers, metal3v1alpha1.BareMetalHostFinalizer) { + info.log.Info("ready to be deleted") + return deleteComplete{} } provResult, err := prov.Delete() if err != nil { - return result, errors.Wrap(err, "failed to delete") + return actionError{errors.Wrap(err, "failed to delete")} } if provResult.Dirty { - err = r.saveStatus(host) + err = r.saveStatus(info.host) if err != nil { - return result, errors.Wrap(err, "failed to save host after deleting") + return actionError{errors.Wrap(err, "failed to save host after deleting")} } - result.Requeue = true - result.RequeueAfter = provResult.RequeueAfter - return result, nil + return actionContinue{provResult.RequeueAfter} } // Remove finalizer to allow deletion - host.Finalizers = utils.FilterStringFromList( - host.Finalizers, metal3v1alpha1.BareMetalHostFinalizer) - reqLogger.Info("cleanup is complete, removed finalizer", - "remaining", host.Finalizers) - if err := r.client.Update(context.Background(), host); err != nil { - return result, errors.Wrap(err, "failed to remove finalizer") + info.host.Finalizers = utils.FilterStringFromList( + info.host.Finalizers, metal3v1alpha1.BareMetalHostFinalizer) + info.log.Info("cleanup is complete, removed finalizer", + "remaining", info.host.Finalizers) + if err := r.client.Update(context.Background(), info.host); err != nil { + return actionError{errors.Wrap(err, "failed to remove finalizer")} } - return result, nil + return deleteComplete{} } // Test the credentials by connecting to the management controller. -func (r *ReconcileBareMetalHost) actionRegistering(prov provisioner.Provisioner, info *reconcileInfo) (result reconcile.Result, err error) { - var provResult provisioner.Result - +func (r *ReconcileBareMetalHost) actionRegistering(prov provisioner.Provisioner, info *reconcileInfo) actionResult { info.log.Info("registering and validating access to management controller", "credentials", info.host.Status.TriedCredentials) @@ -456,32 +389,25 @@ func (r *ReconcileBareMetalHost) actionRegistering(prov provisioner.Provisioner, if credsChanged { info.log.Info("new credentials") info.host.UpdateTriedCredentials(*info.bmcCredsSecret) + info.postSaveCallbacks = append(info.postSaveCallbacks, updatedCredentials.Inc) } - provResult, err = prov.ValidateManagementAccess(credsChanged) + provResult, err := prov.ValidateManagementAccess(credsChanged) if err != nil { - return result, errors.Wrap(err, "failed to validate BMC access") + noManagementAccess.Inc() + return actionError{errors.Wrap(err, "failed to validate BMC access")} } info.log.Info("response from validate", "provResult", provResult) if provResult.ErrorMessage != "" { - info.host.Status.Provisioning.State = metal3v1alpha1.StateRegistrationError - if info.host.SetErrorMessage(provResult.ErrorMessage) { - info.publishEvent("RegistrationError", provResult.ErrorMessage) - result.Requeue = true - } - return result, nil + return recordActionFailure(info, metal3v1alpha1.RegistrationError, provResult.ErrorMessage) } if provResult.Dirty { - // Set Requeue true as well as RequeueAfter in case the delay - // is 0. info.log.Info("host not ready", "wait", provResult.RequeueAfter) info.host.ClearError() - result.Requeue = true - result.RequeueAfter = provResult.RequeueAfter - return result, nil + return actionContinue{provResult.RequeueAfter} } // Reaching this point means the credentials are valid and worked, @@ -499,46 +425,36 @@ func (r *ReconcileBareMetalHost) actionRegistering(prov provisioner.Provisioner, "Registered host that was externally provisioned") } - result.Requeue = true - result.RequeueAfter = provResult.RequeueAfter - return result, nil + return actionComplete{} } // Ensure we have the information about the hardware on the host. -func (r *ReconcileBareMetalHost) actionInspecting(prov provisioner.Provisioner, info *reconcileInfo) (result reconcile.Result, err error) { - var provResult provisioner.Result - var details *metal3v1alpha1.HardwareDetails - +func (r *ReconcileBareMetalHost) actionInspecting(prov provisioner.Provisioner, info *reconcileInfo) actionResult { info.log.Info("inspecting hardware") - provResult, details, err = prov.InspectHardware() + provResult, details, err := prov.InspectHardware() if err != nil { - return result, errors.Wrap(err, "hardware inspection failed") + return actionError{errors.Wrap(err, "hardware inspection failed")} } if provResult.ErrorMessage != "" { - info.host.Status.Provisioning.State = metal3v1alpha1.StateRegistrationError - info.host.SetErrorMessage(provResult.ErrorMessage) - info.publishEvent("RegistrationError", provResult.ErrorMessage) - return result, nil + return recordActionFailure(info, metal3v1alpha1.InspectionError, provResult.ErrorMessage) } if details != nil { info.host.Status.HardwareDetails = details - result.Requeue = true - return result, nil + return actionComplete{} } if provResult.Dirty { info.host.ClearError() - result.Requeue = true - result.RequeueAfter = provResult.RequeueAfter + return actionContinue{provResult.RequeueAfter} } - return result, nil + return actionFailed{} } -func (r *ReconcileBareMetalHost) actionMatchProfile(prov provisioner.Provisioner, info *reconcileInfo) (result reconcile.Result, err error) { +func (r *ReconcileBareMetalHost) actionMatchProfile(prov provisioner.Provisioner, info *reconcileInfo) actionResult { var hardwareProfile string @@ -549,10 +465,10 @@ func (r *ReconcileBareMetalHost) actionMatchProfile(prov provisioner.Provisioner info.log.Info("using spec value for profile name", "name", info.host.Spec.HardwareProfile) hardwareProfile = info.host.Spec.HardwareProfile - _, err = hardware.GetProfile(hardwareProfile) + _, err := hardware.GetProfile(hardwareProfile) if err != nil { info.log.Info("invalid hardware profile", "profile", hardwareProfile) - return result, err + return actionError{err} } } @@ -576,21 +492,13 @@ func (r *ReconcileBareMetalHost) actionMatchProfile(prov provisioner.Provisioner if info.host.SetHardwareProfile(hardwareProfile) { info.log.Info("updating hardware profile", "profile", hardwareProfile) info.publishEvent("ProfileSet", fmt.Sprintf("Hardware profile set: %s", hardwareProfile)) - info.host.ClearError() - result.Requeue = true - return result, nil } - - // Line up a requeue if we could provision - result.Requeue = info.host.NeedsProvisioning() - - return result, nil + info.host.ClearError() + return actionComplete{} } // Start/continue provisioning if we need to. -func (r *ReconcileBareMetalHost) actionProvisioning(prov provisioner.Provisioner, info *reconcileInfo) (result reconcile.Result, err error) { - var provResult provisioner.Result - +func (r *ReconcileBareMetalHost) actionProvisioning(prov provisioner.Provisioner, info *reconcileInfo) actionResult { getUserData := func() (string, error) { if info.host.Spec.UserData == nil { info.log.Info("no user data for host") @@ -602,7 +510,7 @@ func (r *ReconcileBareMetalHost) actionProvisioning(prov provisioner.Provisioner Name: info.host.Spec.UserData.Name, Namespace: info.host.Spec.UserData.Namespace, } - err = r.client.Get(context.TODO(), key, userDataSecret) + err := r.client.Get(context.TODO(), key, userDataSecret) if err != nil { return "", errors.Wrap(err, "failed to fetch user data from secret reference") @@ -612,19 +520,14 @@ func (r *ReconcileBareMetalHost) actionProvisioning(prov provisioner.Provisioner info.log.Info("provisioning") - provResult, err = prov.Provision(getUserData) + provResult, err := prov.Provision(getUserData) if err != nil { - return result, errors.Wrap(err, "failed to provision") + return actionError{errors.Wrap(err, "failed to provision")} } if provResult.ErrorMessage != "" { info.log.Info("handling provisioning error in controller") - info.host.Status.Provisioning.State = metal3v1alpha1.StateProvisioningError - if info.host.SetErrorMessage(provResult.ErrorMessage) { - info.publishEvent("ProvisioningError", provResult.ErrorMessage) - result.Requeue = true - } - return result, nil + return recordActionFailure(info, metal3v1alpha1.ProvisioningError, provResult.ErrorMessage) } if provResult.Dirty { @@ -632,9 +535,7 @@ func (r *ReconcileBareMetalHost) actionProvisioning(prov provisioner.Provisioner // to return false, indicating that it has no more work to // do. info.host.ClearError() - result.Requeue = true - result.RequeueAfter = provResult.RequeueAfter - return result, nil + return actionContinue{provResult.RequeueAfter} } // If the provisioner had no work, ensure the image settings match. @@ -645,79 +546,58 @@ func (r *ReconcileBareMetalHost) actionProvisioning(prov provisioner.Provisioner // After provisioning we always requeue to ensure we enter the // "provisioned" state and start monitoring power status. - result.Requeue = true - - return result, nil + return actionComplete{} } -func (r *ReconcileBareMetalHost) actionDeprovisioning(prov provisioner.Provisioner, info *reconcileInfo) (result reconcile.Result, err error) { - var provResult provisioner.Result - +func (r *ReconcileBareMetalHost) actionDeprovisioning(prov provisioner.Provisioner, info *reconcileInfo) actionResult { info.log.Info("deprovisioning") - if provResult, err = prov.Deprovision(); err != nil { - return result, errors.Wrap(err, "failed to deprovision") + provResult, err := prov.Deprovision() + if err != nil { + return actionError{errors.Wrap(err, "failed to deprovision")} } if provResult.ErrorMessage != "" { - info.host.Status.Provisioning.State = metal3v1alpha1.StateProvisioningError - if info.host.SetErrorMessage(provResult.ErrorMessage) { - info.publishEvent("ProvisioningError", provResult.ErrorMessage) - result.Requeue = true - } - return result, nil + return recordActionFailure(info, metal3v1alpha1.ProvisioningError, provResult.ErrorMessage) } if provResult.Dirty { info.host.ClearError() - result.Requeue = true - result.RequeueAfter = provResult.RequeueAfter - return result, nil + return actionContinue{provResult.RequeueAfter} } // After the provisioner is done, clear the image settings so we // transition to the next state. info.host.Status.Provisioning.Image = metal3v1alpha1.Image{} - // After deprovisioning we always requeue to ensure we enter the - // "ready" state and start monitoring power status. - result.Requeue = true - - return result, nil + return actionComplete{} } // Check the current power status against the desired power status. -func (r *ReconcileBareMetalHost) manageHostPower(prov provisioner.Provisioner, info *reconcileInfo) (result reconcile.Result, err error) { +func (r *ReconcileBareMetalHost) manageHostPower(prov provisioner.Provisioner, info *reconcileInfo) actionResult { var provResult provisioner.Result // Check the current status and save it before trying to update it. - if provResult, err = prov.UpdateHardwareState(); err != nil { - return result, errors.Wrap(err, "failed to update the host power status") + provResult, err := prov.UpdateHardwareState() + if err != nil { + return actionError{errors.Wrap(err, "failed to update the host power status")} } if provResult.ErrorMessage != "" { - info.host.Status.Provisioning.State = metal3v1alpha1.StatePowerManagementError - if info.host.SetErrorMessage(provResult.ErrorMessage) { - info.publishEvent("PowerManagementError", provResult.ErrorMessage) - result.Requeue = true - } - return result, nil + return recordActionFailure(info, metal3v1alpha1.PowerManagementError, provResult.ErrorMessage) } if provResult.Dirty { info.host.ClearError() - result.Requeue = true - result.RequeueAfter = provResult.RequeueAfter - return result, nil + return actionContinue{provResult.RequeueAfter} } // Power state needs to be monitored regularly, so if we leave // this function without an error we always want to requeue after // a delay. - result.RequeueAfter = time.Second * 60 - + steadyStateResult := actionContinue{time.Second * 60} if info.host.Status.PoweredOn == info.host.Spec.Online { - return result, nil + return steadyStateResult } info.log.Info("power state change needed", @@ -730,33 +610,32 @@ func (r *ReconcileBareMetalHost) manageHostPower(prov provisioner.Provisioner, i provResult, err = prov.PowerOff() } if err != nil { - return result, errors.Wrap(err, "failed to manage power state of host") + return actionError{errors.Wrap(err, "failed to manage power state of host")} } if provResult.ErrorMessage != "" { - info.host.Status.Provisioning.State = metal3v1alpha1.StatePowerManagementError - if info.host.SetErrorMessage(provResult.ErrorMessage) { - info.publishEvent("PowerManagementError", provResult.ErrorMessage) - result.Requeue = true - } - return result, nil + return recordActionFailure(info, metal3v1alpha1.PowerManagementError, provResult.ErrorMessage) } if provResult.Dirty { + info.postSaveCallbacks = append(info.postSaveCallbacks, func() { + metricLabels := hostMetricLabels(info.request) + if info.host.Spec.Online { + metricLabels[labelPowerOnOff] = "on" + } else { + metricLabels[labelPowerOnOff] = "off" + } + powerChangeAttempts.With(metricLabels).Inc() + }) info.host.ClearError() - result.Requeue = true - result.RequeueAfter = provResult.RequeueAfter - return result, nil + return actionContinue{provResult.RequeueAfter} } // The provisioner did not have to do anything to change the power // state and there were no errors, so reflect the new state in the // host status field. info.host.Status.PoweredOn = info.host.Spec.Online - result.Requeue = true - - return result, nil - + return steadyStateResult } // A host reaching this action handler should be provisioned or @@ -764,25 +643,18 @@ func (r *ReconcileBareMetalHost) manageHostPower(prov provisioner.Provisioner, i // user takes further action. Both of those states mean that it has // been registered with the provisioner once, so we use the Adopt() // API to ensure that is still true. Then we monitor its power status. -func (r *ReconcileBareMetalHost) actionManageSteadyState(prov provisioner.Provisioner, info *reconcileInfo) (result reconcile.Result, err error) { +func (r *ReconcileBareMetalHost) actionManageSteadyState(prov provisioner.Provisioner, info *reconcileInfo) actionResult { provResult, err := prov.Adopt() if err != nil { - return + return actionError{err} } if provResult.ErrorMessage != "" { - info.host.Status.Provisioning.State = metal3v1alpha1.StateRegistrationError - if info.host.SetErrorMessage(provResult.ErrorMessage) { - info.publishEvent("RegistrationError", provResult.ErrorMessage) - result.Requeue = true - } - return result, nil + return recordActionFailure(info, metal3v1alpha1.RegistrationError, provResult.ErrorMessage) } if provResult.Dirty { info.host.ClearError() - result.Requeue = true - result.RequeueAfter = provResult.RequeueAfter - return result, nil + return actionContinue{provResult.RequeueAfter} } return r.manageHostPower(prov, info) @@ -794,30 +666,27 @@ func (r *ReconcileBareMetalHost) actionManageSteadyState(prov provisioner.Provis // ValidateManagementAccess() to ensure that is still true. We don't // use Adopt() because we don't want Ironic to treat the host as // having been provisioned. Then we monitor its power status. -func (r *ReconcileBareMetalHost) actionManageReady(prov provisioner.Provisioner, info *reconcileInfo) (result reconcile.Result, err error) { +func (r *ReconcileBareMetalHost) actionManageReady(prov provisioner.Provisioner, info *reconcileInfo) actionResult { // We always pass false for credentialsChanged because if they had // changed we would have ended up in actionRegister() instead of // here. provResult, err := prov.ValidateManagementAccess(false) if err != nil { - return + return actionError{err} } if provResult.ErrorMessage != "" { - info.host.Status.Provisioning.State = metal3v1alpha1.StateRegistrationError - if info.host.SetErrorMessage(provResult.ErrorMessage) { - info.publishEvent("RegistrationError", provResult.ErrorMessage) - result.Requeue = true - } - return result, nil + return recordActionFailure(info, metal3v1alpha1.RegistrationError, provResult.ErrorMessage) } if provResult.Dirty { info.host.ClearError() - result.Requeue = true - result.RequeueAfter = provResult.RequeueAfter - return result, nil + return actionContinue{provResult.RequeueAfter} } + if info.host.NeedsProvisioning() { + info.host.ClearError() + return actionComplete{} + } return r.manageHostPower(prov, info) } @@ -827,21 +696,23 @@ func (r *ReconcileBareMetalHost) saveStatus(host *metal3v1alpha1.BareMetalHost) return r.client.Status().Update(context.TODO(), host) } -func (r *ReconcileBareMetalHost) setErrorCondition(request reconcile.Request, host *metal3v1alpha1.BareMetalHost, message string) error { +func (r *ReconcileBareMetalHost) setErrorCondition(request reconcile.Request, host *metal3v1alpha1.BareMetalHost, errType metal3v1alpha1.ErrorType, message string) (changed bool, err error) { reqLogger := log.WithValues("Request.Namespace", request.Namespace, "Request.Name", request.Name) - if host.SetErrorMessage(message) { + changed = host.SetErrorMessage(errType, message) + if changed { reqLogger.Info( "adding error message", "message", message, ) - if err := r.saveStatus(host); err != nil { - return errors.Wrap(err, "failed to update error message") + err = r.saveStatus(host) + if err != nil { + err = errors.Wrap(err, "failed to update error message") } } - return nil + return } // Retrieve the secret containing the credentials for talking to the BMC. @@ -893,7 +764,7 @@ func (r *ReconcileBareMetalHost) buildAndValidateBMCCredentials(request reconcil // more in-depth checking on the url to ensure it is // a valid bmc address, returning a bmc.UnknownBMCTypeError // if it is not conformant - _, err = bmc.NewAccessDetails(host.Spec.BMC.Address) + _, err = bmc.NewAccessDetails(host.Spec.BMC.Address, host.Spec.BMC.DisableCertificateVerification) if err != nil { return nil, nil, err } diff --git a/vendor/github.com/metal3-io/baremetal-operator/pkg/controller/baremetalhost/host_state_machine.go b/vendor/github.com/metal3-io/baremetal-operator/pkg/controller/baremetalhost/host_state_machine.go new file mode 100644 index 000000000..891ef31f6 --- /dev/null +++ b/vendor/github.com/metal3-io/baremetal-operator/pkg/controller/baremetalhost/host_state_machine.go @@ -0,0 +1,346 @@ +package baremetalhost + +import ( + "fmt" + + metal3v1alpha1 "github.com/metal3-io/baremetal-operator/pkg/apis/metal3/v1alpha1" + "github.com/metal3-io/baremetal-operator/pkg/provisioner" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// hostStateMachine is a finite state machine that manages transitions between +// the states of a BareMetalHost. +type hostStateMachine struct { + Host *metal3v1alpha1.BareMetalHost + NextState metal3v1alpha1.ProvisioningState + Reconciler *ReconcileBareMetalHost + Provisioner provisioner.Provisioner +} + +func newHostStateMachine(host *metal3v1alpha1.BareMetalHost, + reconciler *ReconcileBareMetalHost, + provisioner provisioner.Provisioner) *hostStateMachine { + currentState := host.Status.Provisioning.State + r := hostStateMachine{ + Host: host, + NextState: currentState, // Remain in current state by default + Reconciler: reconciler, + Provisioner: provisioner, + } + return &r +} + +type stateHandler func(*reconcileInfo) actionResult + +func (hsm *hostStateMachine) handlers() map[metal3v1alpha1.ProvisioningState]stateHandler { + return map[metal3v1alpha1.ProvisioningState]stateHandler{ + metal3v1alpha1.StateNone: hsm.handleNone, + metal3v1alpha1.StateRegistering: hsm.handleRegistering, + metal3v1alpha1.StateRegistrationError: hsm.handleRegistrationError, + metal3v1alpha1.StateInspecting: hsm.handleInspecting, + metal3v1alpha1.StateExternallyProvisioned: hsm.handleExternallyProvisioned, + metal3v1alpha1.StateMatchProfile: hsm.handleMatchProfile, + metal3v1alpha1.StateReady: hsm.handleReady, + metal3v1alpha1.StateProvisioning: hsm.handleProvisioning, + metal3v1alpha1.StateProvisioningError: hsm.handleProvisioningError, + metal3v1alpha1.StateProvisioned: hsm.handleProvisioned, + metal3v1alpha1.StatePowerManagementError: hsm.handlePowerManagementError, + metal3v1alpha1.StateDeprovisioning: hsm.handleDeprovisioning, + metal3v1alpha1.StateDeleting: hsm.handleDeleting, + } +} + +func recordStateBegin(host *metal3v1alpha1.BareMetalHost, state metal3v1alpha1.ProvisioningState, time metav1.Time) { + if nextMetric := host.OperationMetricForState(state); nextMetric != nil { + if nextMetric.Start.IsZero() || !nextMetric.End.IsZero() { + *nextMetric = metal3v1alpha1.OperationMetric{ + Start: time, + } + } + } +} + +func recordStateEnd(info *reconcileInfo, host *metal3v1alpha1.BareMetalHost, state metal3v1alpha1.ProvisioningState, time metav1.Time) { + if prevMetric := host.OperationMetricForState(state); prevMetric != nil { + if !prevMetric.Start.IsZero() { + prevMetric.End = time + info.postSaveCallbacks = append(info.postSaveCallbacks, func() { + observer := stateTime[state].With(hostMetricLabels(info.request)) + observer.Observe(prevMetric.Duration().Seconds()) + }) + } + } +} + +func (hsm *hostStateMachine) updateHostStateFrom(initialState metal3v1alpha1.ProvisioningState, + info *reconcileInfo) { + if hsm.NextState != initialState { + info.log.Info("changing provisioning state", + "old", initialState, + "new", hsm.NextState) + now := metav1.Now() + recordStateEnd(info, hsm.Host, initialState, now) + recordStateBegin(hsm.Host, hsm.NextState, now) + info.postSaveCallbacks = append(info.postSaveCallbacks, func() { + stateChanges.With(stateChangeMetricLabels(initialState, hsm.NextState)).Inc() + }) + hsm.Host.Status.Provisioning.State = hsm.NextState + } +} + +func (hsm *hostStateMachine) ReconcileState(info *reconcileInfo) actionResult { + initialState := hsm.Host.Status.Provisioning.State + defer hsm.updateHostStateFrom(initialState, info) + + if hsm.checkInitiateDelete() { + info.log.Info("Initiating host deletion") + return actionComplete{} + } + // TODO: In future we should always re-register the host if required, + // rather than initiate a transistion back to the Registering state. + if hsm.shouldInitiateRegister(info) { + info.log.Info("Initiating host registration") + hostRegistrationRequired.Inc() + return actionComplete{} + } + + if stateHandler, found := hsm.handlers()[initialState]; found { + return stateHandler(info) + } + + info.log.Info("No handler found for state", "state", initialState) + return actionError{fmt.Errorf("No handler found for state \"%s\"", initialState)} +} + +func (hsm *hostStateMachine) checkInitiateDelete() bool { + if hsm.Host.DeletionTimestamp.IsZero() { + // Delete not requested + return false + } + + switch hsm.NextState { + default: + hsm.NextState = metal3v1alpha1.StateDeleting + case metal3v1alpha1.StateProvisioning, metal3v1alpha1.StateProvisioningError, metal3v1alpha1.StateProvisioned: + hsm.NextState = metal3v1alpha1.StateDeprovisioning + case metal3v1alpha1.StateDeprovisioning: + // Allow state machine to run to continue deprovisioning. + return false + case metal3v1alpha1.StateDeleting: + // Already in deleting state. Allow state machine to run. + return false + } + return true +} + +func (hsm *hostStateMachine) shouldInitiateRegister(info *reconcileInfo) bool { + changeState := false + if hsm.Host.DeletionTimestamp.IsZero() { + switch hsm.NextState { + default: + changeState = !hsm.Host.Status.GoodCredentials.Match(*info.bmcCredsSecret) + case metal3v1alpha1.StateNone: + case metal3v1alpha1.StateRegistering, metal3v1alpha1.StateRegistrationError: + case metal3v1alpha1.StateDeleting: + } + } + if changeState { + hsm.NextState = metal3v1alpha1.StateRegistering + } + return changeState +} + +func (hsm *hostStateMachine) handleNone(info *reconcileInfo) actionResult { + // Running the state machine at all means we have successfully validated + // the BMC credentials once, so we can move to the Registering state. + hsm.Host.ClearError() + hsm.NextState = metal3v1alpha1.StateRegistering + return actionComplete{} +} + +func (hsm *hostStateMachine) handleRegistering(info *reconcileInfo) actionResult { + actResult := hsm.Reconciler.actionRegistering(hsm.Provisioner, info) + + switch actResult.(type) { + case actionComplete: + // TODO: In future this state should only occur before the host is + // registered the first time (though we must always check and + // re-register the host regardless of the current state). That will + // eliminate the need to determine which state we came from here. + switch { + case hsm.Host.Spec.ExternallyProvisioned: + hsm.NextState = metal3v1alpha1.StateExternallyProvisioned + case hsm.Host.WasProvisioned(): + hsm.NextState = metal3v1alpha1.StateProvisioned + case hsm.Host.NeedsHardwareInspection(): + hsm.NextState = metal3v1alpha1.StateInspecting + case hsm.Host.NeedsHardwareProfile(): + hsm.NextState = metal3v1alpha1.StateMatchProfile + default: + hsm.NextState = metal3v1alpha1.StateReady + } + case actionFailed: + hsm.NextState = metal3v1alpha1.StateRegistrationError + } + return actResult +} + +func (hsm *hostStateMachine) handleRegistrationError(info *reconcileInfo) actionResult { + if !hsm.Host.Status.TriedCredentials.Match(*info.bmcCredsSecret) { + info.log.Info("Modified credentials detected; will retry registration") + hsm.NextState = metal3v1alpha1.StateRegistering + return actionComplete{} + } + return actionFailed{} +} + +func (hsm *hostStateMachine) handleInspecting(info *reconcileInfo) actionResult { + actResult := hsm.Reconciler.actionInspecting(hsm.Provisioner, info) + if _, complete := actResult.(actionComplete); complete { + hsm.NextState = metal3v1alpha1.StateMatchProfile + } + return actResult +} + +func (hsm *hostStateMachine) handleMatchProfile(info *reconcileInfo) actionResult { + actResult := hsm.Reconciler.actionMatchProfile(hsm.Provisioner, info) + if _, complete := actResult.(actionComplete); complete { + hsm.NextState = metal3v1alpha1.StateReady + } + return actResult +} + +func (hsm *hostStateMachine) handleExternallyProvisioned(info *reconcileInfo) actionResult { + if hsm.Host.Spec.ExternallyProvisioned { + actResult := hsm.Reconciler.actionManageSteadyState(hsm.Provisioner, info) + if r, f := actResult.(actionFailed); f { + switch r.ErrorType { + case metal3v1alpha1.PowerManagementError: + hsm.NextState = metal3v1alpha1.StatePowerManagementError + case metal3v1alpha1.RegistrationError: + hsm.NextState = metal3v1alpha1.StateRegistrationError + } + } + return actResult + } + + switch { + case hsm.Host.NeedsHardwareInspection(): + hsm.NextState = metal3v1alpha1.StateInspecting + case hsm.Host.NeedsHardwareProfile(): + hsm.NextState = metal3v1alpha1.StateMatchProfile + default: + hsm.NextState = metal3v1alpha1.StateReady + } + return actionComplete{} +} + +func (hsm *hostStateMachine) handleReady(info *reconcileInfo) actionResult { + if hsm.Host.Spec.ExternallyProvisioned { + hsm.NextState = metal3v1alpha1.StateExternallyProvisioned + return actionComplete{} + } + + actResult := hsm.Reconciler.actionManageReady(hsm.Provisioner, info) + + switch r := actResult.(type) { + case actionComplete: + hsm.NextState = metal3v1alpha1.StateProvisioning + case actionFailed: + switch r.ErrorType { + case metal3v1alpha1.PowerManagementError: + hsm.NextState = metal3v1alpha1.StatePowerManagementError + case metal3v1alpha1.RegistrationError: + hsm.NextState = metal3v1alpha1.StateRegistrationError + } + } + return actResult +} + +func (hsm *hostStateMachine) handleProvisioning(info *reconcileInfo) actionResult { + if hsm.Host.NeedsDeprovisioning() { + hsm.NextState = metal3v1alpha1.StateDeprovisioning + return actionComplete{} + } + + actResult := hsm.Reconciler.actionProvisioning(hsm.Provisioner, info) + switch actResult.(type) { + case actionComplete: + hsm.NextState = metal3v1alpha1.StateProvisioned + case actionFailed: + hsm.NextState = metal3v1alpha1.StateProvisioningError + } + return actResult +} + +func (hsm *hostStateMachine) handleProvisioningError(info *reconcileInfo) actionResult { + switch { + case hsm.Host.Spec.ExternallyProvisioned: + hsm.NextState = metal3v1alpha1.StateExternallyProvisioned + default: + hsm.NextState = metal3v1alpha1.StateDeprovisioning + } + return actionComplete{} +} + +func (hsm *hostStateMachine) handleProvisioned(info *reconcileInfo) actionResult { + if hsm.Host.NeedsDeprovisioning() { + hsm.NextState = metal3v1alpha1.StateDeprovisioning + return actionComplete{} + } + + actResult := hsm.Reconciler.actionManageSteadyState(hsm.Provisioner, info) + if r, f := actResult.(actionFailed); f { + switch r.ErrorType { + case metal3v1alpha1.PowerManagementError: + hsm.NextState = metal3v1alpha1.StatePowerManagementError + case metal3v1alpha1.RegistrationError: + hsm.NextState = metal3v1alpha1.StateRegistrationError + } + } + return actResult +} + +func (hsm *hostStateMachine) handlePowerManagementError(info *reconcileInfo) actionResult { + switch { + case hsm.Host.Spec.ExternallyProvisioned: + hsm.NextState = metal3v1alpha1.StateExternallyProvisioned + case hsm.Host.WasProvisioned(): + hsm.NextState = metal3v1alpha1.StateProvisioned + default: + hsm.NextState = metal3v1alpha1.StateReady + } + return actionComplete{} +} + +func (hsm *hostStateMachine) handleDeprovisioning(info *reconcileInfo) actionResult { + actResult := hsm.Reconciler.actionDeprovisioning(hsm.Provisioner, info) + + switch actResult.(type) { + case actionComplete: + if !hsm.Host.DeletionTimestamp.IsZero() { + hsm.NextState = metal3v1alpha1.StateDeleting + } else { + hsm.NextState = metal3v1alpha1.StateReady + } + case actionFailed: + if !hsm.Host.DeletionTimestamp.IsZero() { + // If the provisioner gives up deprovisioning and + // deletion has been requested, continue to delete. + // Note that this is entirely theoretical, as the + // Ironic provisioner currently never gives up + // trying to deprovision. + hsm.NextState = metal3v1alpha1.StateDeleting + info.postSaveCallbacks = append(info.postSaveCallbacks, deleteWithoutDeprov.Inc) + actResult = actionComplete{} + } else { + hsm.NextState = metal3v1alpha1.StateProvisioningError + } + } + return actResult +} + +func (hsm *hostStateMachine) handleDeleting(info *reconcileInfo) actionResult { + return hsm.Reconciler.actionDeleting(hsm.Provisioner, info) +} diff --git a/vendor/github.com/metal3-io/baremetal-operator/pkg/controller/baremetalhost/metrics.go b/vendor/github.com/metal3-io/baremetal-operator/pkg/controller/baremetalhost/metrics.go new file mode 100644 index 000000000..a2b680c5e --- /dev/null +++ b/vendor/github.com/metal3-io/baremetal-operator/pkg/controller/baremetalhost/metrics.go @@ -0,0 +1,135 @@ +package baremetalhost + +import ( + "github.com/prometheus/client_golang/prometheus" + + "sigs.k8s.io/controller-runtime/pkg/metrics" + "sigs.k8s.io/controller-runtime/pkg/reconcile" + + metal3v1alpha1 "github.com/metal3-io/baremetal-operator/pkg/apis/metal3/v1alpha1" +) + +const ( + labelHostNamespace = "namespace" + labelHostName = "host" + labelErrorType = "error_type" + labelPowerOnOff = "on_off" + labelPrevState = "prev_state" + labelNewState = "new_state" +) + +var reconcileCounters = prometheus.NewCounterVec(prometheus.CounterOpts{ + Name: "metal3_reconcile_total", + Help: "The number of times hosts have been reconciled", +}, []string{labelHostNamespace, labelHostName}) +var reconcileErrorCounter = prometheus.NewCounter(prometheus.CounterOpts{ + Name: "metal3_reconcile_error_total", + Help: "The number of times the operator has failed to reconcile a host", +}) +var actionFailureCounters = prometheus.NewCounterVec(prometheus.CounterOpts{ + Name: "metal3_host_error_total", + Help: "The number of times hosts have entered an error state", +}, []string{labelErrorType}) + +var powerChangeAttempts = prometheus.NewCounterVec(prometheus.CounterOpts{ + Name: "metal3_operation_power_change_total", + Help: "Number of times a host has been powered on or off", +}, []string{labelHostNamespace, labelHostName, labelPowerOnOff}) + +var credentialsMissing = prometheus.NewCounter(prometheus.CounterOpts{ + Name: "metal3_credentials_missing_total", + Help: "Number of times a host's credentials are found to be missing", +}) +var credentialsInvalid = prometheus.NewCounter(prometheus.CounterOpts{ + Name: "metal3_credentials_invalid_total", + Help: "Number of times a host's credentials are found to be invalid", +}) +var unhandledCredentialsError = prometheus.NewCounter(prometheus.CounterOpts{ + Name: "metal3_credentials_unhandled_error_total", + Help: "Number of times getting a host's credentials fails in an unexpected way", +}) +var updatedCredentials = prometheus.NewCounter(prometheus.CounterOpts{ + Name: "metal3_credentials_updated_total", + Help: "Number of times a host's credentials change", +}) +var noManagementAccess = prometheus.NewCounter(prometheus.CounterOpts{ + Name: "metal3_credentials_no_management_access_total", + Help: "Number of times a host management interface is unavailable", +}) + +var slowOperationBuckets = []float64{30, 90, 180, 360, 720, 1440} + +var stateTime = map[metal3v1alpha1.ProvisioningState]*prometheus.HistogramVec{ + metal3v1alpha1.StateRegistering: prometheus.NewHistogramVec(prometheus.HistogramOpts{ + Name: "metal3_operation_register_duration_seconds", + Help: "Length of time per registration per host", + }, []string{labelHostNamespace, labelHostName}), + metal3v1alpha1.StateInspecting: prometheus.NewHistogramVec(prometheus.HistogramOpts{ + Name: "metal3_operation_inspect_duration_seconds", + Help: "Length of time per hardware inspection per host", + Buckets: slowOperationBuckets, + }, []string{labelHostNamespace, labelHostName}), + metal3v1alpha1.StateProvisioning: prometheus.NewHistogramVec(prometheus.HistogramOpts{ + Name: "metal3_operation_provision_duration_seconds", + Help: "Length of time per hardware provision operation per host", + Buckets: slowOperationBuckets, + }, []string{labelHostNamespace, labelHostName}), + metal3v1alpha1.StateDeprovisioning: prometheus.NewHistogramVec(prometheus.HistogramOpts{ + Name: "metal3_operation_deprovision_duration_seconds", + Help: "Length of time per hardware deprovision operation per host", + Buckets: slowOperationBuckets, + }, []string{labelHostNamespace, labelHostName}), +} + +var stateChanges = prometheus.NewCounterVec(prometheus.CounterOpts{ + Name: "metal3_provisioning_state_change_total", + Help: "Number of times a state transition has occurred", +}, []string{labelPrevState, labelNewState}) + +var hostRegistrationRequired = prometheus.NewCounter(prometheus.CounterOpts{ + Name: "metal3_host_registration_required_total", + Help: "Number of times a host is found to be unregistered", +}) + +var deleteWithoutDeprov = prometheus.NewCounter(prometheus.CounterOpts{ + Name: "metal3_delete_without_deprovisioning_total", + Help: "Number of times a host is deleted despite deprovisioning failing", +}) + +func init() { + metrics.Registry.MustRegister( + reconcileCounters, + reconcileErrorCounter, + actionFailureCounters, + powerChangeAttempts) + + for _, collector := range stateTime { + metrics.Registry.MustRegister(collector) + } + + metrics.Registry.MustRegister( + credentialsMissing, + credentialsInvalid, + unhandledCredentialsError, + updatedCredentials, + noManagementAccess) + + metrics.Registry.MustRegister( + stateChanges, + hostRegistrationRequired, + deleteWithoutDeprov) +} + +func hostMetricLabels(request reconcile.Request) prometheus.Labels { + return prometheus.Labels{ + labelHostNamespace: request.Namespace, + labelHostName: request.Name, + } +} + +func stateChangeMetricLabels(prevState, newState metal3v1alpha1.ProvisioningState) prometheus.Labels { + return prometheus.Labels{ + labelPrevState: string(prevState), + labelNewState: string(newState), + } +} diff --git a/vendor/github.com/metal3-io/baremetal-operator/pkg/provisioner/ironic/ironic.go b/vendor/github.com/metal3-io/baremetal-operator/pkg/provisioner/ironic/ironic.go index 075c7d7c8..06710f12f 100644 --- a/vendor/github.com/metal3-io/baremetal-operator/pkg/provisioner/ironic/ironic.go +++ b/vendor/github.com/metal3-io/baremetal-operator/pkg/provisioner/ironic/ironic.go @@ -2,9 +2,6 @@ package ironic import ( "fmt" - "io/ioutil" - "net/http" - "net/url" "os" "sort" "strings" @@ -17,8 +14,6 @@ import ( noauthintrospection "github.com/gophercloud/gophercloud/openstack/baremetalintrospection/noauth" "github.com/gophercloud/gophercloud/openstack/baremetalintrospection/v1/introspection" - nodeutils "github.com/gophercloud/utils/openstack/baremetal/v1/nodes" - "github.com/pkg/errors" "github.com/go-logr/logr" @@ -113,7 +108,7 @@ func newProvisioner(host *metal3v1alpha1.BareMetalHost, bmcCreds bmc.Credentials if err != nil { return nil, err } - bmcAccess, err := bmc.NewAccessDetails(host.Spec.BMC.Address) + bmcAccess, err := bmc.NewAccessDetails(host.Spec.BMC.Address, host.Spec.BMC.DisableCertificateVerification) if err != nil { return nil, errors.Wrap(err, "failed to parse BMC address information") } @@ -126,7 +121,7 @@ func newProvisioner(host *metal3v1alpha1.BareMetalHost, bmcCreds bmc.Credentials } // Ensure we have a microversion high enough to get the features // we need. - client.Microversion = "1.50" + client.Microversion = "1.56" p := &ironicProvisioner{ host: host, status: &(host.Status.Provisioning), @@ -242,10 +237,15 @@ func (p *ironicProvisioner) ValidateManagementAccess(credentialsChanged bool) (r ironicNode, err = nodes.Create( p.client, nodes.CreateOpts{ - Driver: p.bmcAccess.Driver(), - BootInterface: p.bmcAccess.BootInterface(), - Name: p.host.Name, - DriverInfo: driverInfo, + Driver: p.bmcAccess.Driver(), + BootInterface: p.bmcAccess.BootInterface(), + Name: p.host.Name, + DriverInfo: driverInfo, + InspectInterface: "inspector", + ManagementInterface: p.bmcAccess.ManagementInterface(), + PowerInterface: p.bmcAccess.PowerInterface(), + RAIDInterface: p.bmcAccess.RAIDInterface(), + VendorInterface: p.bmcAccess.VendorInterface(), }).Extract() // FIXME(dhellmann): Handle 409 and 503? errors here. if err != nil { @@ -278,12 +278,7 @@ func (p *ironicProvisioner) ValidateManagementAccess(credentialsChanged bool) (r } if p.host.Spec.Image != nil && p.host.Spec.Image.URL != "" { - // FIXME(dhellmann): The Stein version of Ironic supports passing - // a URL. When we upgrade, we can stop doing this work ourself. - checksum, err := p.getImageChecksum() - if err != nil { - return result, errors.Wrap(err, "failed to retrieve image checksum") - } + checksum := p.host.Spec.Image.Checksum p.log.Info("setting instance info", "image_source", p.host.Spec.Image.URL, @@ -301,13 +296,10 @@ func (p *ironicProvisioner) ValidateManagementAccess(credentialsChanged bool) (r Path: "/instance_info/image_checksum", Value: checksum, }, - // NOTE(dhellmann): We must fill in *some* value so that - // Ironic will monitor the host. We don't have a nova - // instance at all, so just give the node it's UUID again. nodes.UpdateOperation{ Op: nodes.ReplaceOp, Path: "/instance_uuid", - Value: p.host.Status.Provisioning.ID, + Value: string(p.host.ObjectMeta.UID), }, } _, err = nodes.Update(p.client, ironicNode.UUID, updates).Extract() @@ -316,6 +308,7 @@ func (p *ironicProvisioner) ValidateManagementAccess(credentialsChanged bool) (r case gophercloud.ErrDefault409: p.log.Info("could not update host settings in ironic, busy") result.Dirty = true + result.RequeueAfter = provisionRequeueDelay return result, nil default: return result, errors.Wrap(err, "failed to update host settings in ironic") @@ -349,6 +342,7 @@ func (p *ironicProvisioner) ValidateManagementAccess(credentialsChanged bool) (r case nil: case gophercloud.ErrDefault409: p.log.Info("could not update host driver settings, busy") + result.Dirty = true result.RequeueAfter = provisionRequeueDelay return result, nil default: @@ -668,42 +662,6 @@ func (p *ironicProvisioner) UpdateHardwareState() (result provisioner.Result, er return result, nil } -func checksumIsURL(checksumURL string) (bool, error) { - parsedChecksumURL, err := url.Parse(checksumURL) - if err != nil { - return false, errors.Wrap(err, "Could not parse image checksum") - } - return parsedChecksumURL.Scheme != "", nil -} - -func (p *ironicProvisioner) getImageChecksum() (string, error) { - checksum := p.host.Spec.Image.Checksum - isURL, err := checksumIsURL(checksum) - if err != nil { - return "", errors.Wrap(err, "Could not understand image checksum") - } - if isURL { - p.log.Info("looking for checksum for image", "URL", checksum) - // #nosec - // TODO: Are there more ways to constraint the URL that's given here? - resp, err := http.Get(checksum) - if err != nil { - return "", errors.Wrap(err, "Could not fetch image checksum") - } - defer resp.Body.Close() - if resp.StatusCode != 200 { - return "", fmt.Errorf("Failed to fetch image checksum from %s: [%d] %s", - checksum, resp.StatusCode, resp.Status) - } - checksumBody, err := ioutil.ReadAll(resp.Body) - if err != nil { - return "", errors.Wrap(err, "Could not read image checksum") - } - checksum = strings.TrimSpace(string(checksumBody)) - } - return checksum, nil -} - func (p *ironicProvisioner) getUpdateOptsForNode(ironicNode *nodes.Node, checksum string) (updates nodes.UpdateOpts, err error) { hwProf, err := hardware.GetProfile(p.host.HardwareProfile()) @@ -749,17 +707,13 @@ func (p *ironicProvisioner) getUpdateOptsForNode(ironicNode *nodes.Node, checksu ) // instance_uuid - // - // NOTE(dhellmann): We must fill in *some* value so that Ironic - // will monitor the host. We don't have a nova instance at all, so - // just give the node it's UUID again. p.log.Info("setting instance_uuid") updates = append( updates, nodes.UpdateOperation{ Op: nodes.ReplaceOp, Path: "/instance_uuid", - Value: p.host.Status.Provisioning.ID, + Value: string(p.host.ObjectMeta.UID), }, ) @@ -927,11 +881,6 @@ func (p *ironicProvisioner) Adopt() (result provisioner.Result, err error) { return p.ValidateManagementAccess(true) } - p.log.Info("waiting for adoption to complete", - "current", ironicNode.ProvisionState, - "target", ironicNode.TargetProvisionState, - ) - switch nodes.ProvisionState(ironicNode.ProvisionState) { case nodes.Enroll: err = fmt.Errorf("Invalid state for adopt: %s", @@ -970,12 +919,7 @@ func (p *ironicProvisioner) Provision(getUserData provisioner.UserDataSource) (r p.log.Info("provisioning image to host", "state", ironicNode.ProvisionState) - // FIXME(dhellmann): The Stein version of Ironic supports passing - // a URL. When we upgrade, we can stop doing this work ourself. - checksum, err := p.getImageChecksum() - if err != nil { - return result, errors.Wrap(err, "failed to retrieve image checksum") - } + checksum := p.host.Spec.Image.Checksum // Local variable to make it easier to test if ironic is // configured with the same image we are trying to provision to @@ -1023,26 +967,24 @@ func (p *ironicProvisioner) Provision(getUserData provisioner.UserDataSource) (r // setting the state to "active". p.log.Info("making host active") - // Build the config drive image using the userData we've been - // given so we can pass it to Ironic. - // - // FIXME(dhellmann): The Stein version of Ironic should be - // able to accept the user data string directly, without - // building the ISO image first. - var configDriveData string userData, err := getUserData() if err != nil { return result, errors.Wrap(err, "could not retrieve user data") } + + var configDrive nodes.ConfigDrive if userData != "" { - configDrive := nodeutils.ConfigDrive{ - UserData: nodeutils.UserDataString(userData), + configDrive = nodes.ConfigDrive{ + UserData: userData, // cloud-init requires that meta_data.json exists and // that the "uuid" field is present to process // any of the config drive contents. - MetaData: map[string]interface{}{"uuid": p.host.Status.Provisioning.ID}, + MetaData: map[string]interface{}{ + "uuid": string(p.host.ObjectMeta.UID), + "metal3-namespace": p.host.ObjectMeta.Namespace, + "metal3-name": p.host.ObjectMeta.Name, + }, } - configDriveData, err = configDrive.ToConfigDrive() if err != nil { return result, errors.Wrap(err, "failed to build config drive") } @@ -1055,7 +997,7 @@ func (p *ironicProvisioner) Provision(getUserData provisioner.UserDataSource) (r ironicNode, nodes.ProvisionStateOpts{ Target: nodes.TargetActive, - ConfigDrive: configDriveData, + ConfigDrive: configDrive, }, ) @@ -1312,6 +1254,7 @@ func (p *ironicProvisioner) PowerOn() (result provisioner.Result, err error) { if ironicNode.TargetPowerState == powerOn { p.log.Info("waiting for power status to change") result.RequeueAfter = powerRequeueDelay + result.Dirty = true return result, nil } result, err = p.changePower(ironicNode, nodes.PowerOn) @@ -1339,6 +1282,7 @@ func (p *ironicProvisioner) PowerOff() (result provisioner.Result, err error) { if ironicNode.TargetPowerState == powerOff { p.log.Info("waiting for power status to change") result.RequeueAfter = powerRequeueDelay + result.Dirty = true return result, nil } result, err = p.changePower(ironicNode, nodes.PowerOff) diff --git a/vendor/github.com/metal3-io/baremetal-operator/tools/clean_host.sh b/vendor/github.com/metal3-io/baremetal-operator/tools/clean_host.sh index 61248b0b6..2581d5278 100755 --- a/vendor/github.com/metal3-io/baremetal-operator/tools/clean_host.sh +++ b/vendor/github.com/metal3-io/baremetal-operator/tools/clean_host.sh @@ -6,7 +6,7 @@ openstack baremetal node list sudo virsh list --all oc get baremetalhosts -openstack baremetal node maintenance set openshift-worker-${num} -openstack baremetal node delete openshift-worker-${num} -sudo virsh shutdown openshift_worker_${num} -oc delete baremetalhost openshift-worker-${num} +openstack baremetal node maintenance set "openshift-worker-${num}" +openstack baremetal node delete "openshift-worker-${num}" +sudo virsh shutdown "openshift_worker_${num}" +oc delete baremetalhost "openshift-worker-${num}" diff --git a/vendor/github.com/metal3-io/baremetal-operator/tools/run_local_ironic.sh b/vendor/github.com/metal3-io/baremetal-operator/tools/run_local_ironic.sh index d981c03f7..310fcbbab 100755 --- a/vendor/github.com/metal3-io/baremetal-operator/tools/run_local_ironic.sh +++ b/vendor/github.com/metal3-io/baremetal-operator/tools/run_local_ironic.sh @@ -2,59 +2,87 @@ set -ex +SCRIPTPATH="$(dirname "$(readlink -f "${0}")")" + IRONIC_IMAGE=${IRONIC_IMAGE:-"quay.io/metal3-io/ironic:master"} IRONIC_INSPECTOR_IMAGE=${IRONIC_INSPECTOR_IMAGE:-"quay.io/metal3-io/ironic-inspector"} -IRONIC_DATA_DIR="$PWD/ironic" +IPA_DOWNLOADER_IMAGE=${IPA_DOWNLOADER_IMAGE:-"quay.io/metal3-io/ironic-ipa-downloader:master"} +IRONIC_DATA_DIR=${IRONIC_DATA_DIR:-"/opt/metal3-dev-env/ironic"} +CONTAINER_RUNTIME="${CONTAINER_RUNTIME:-podman}" -sudo podman pull $IRONIC_IMAGE -sudo podman pull $IRONIC_INSPECTOR_IMAGE +sudo "${CONTAINER_RUNTIME}" pull "$IRONIC_IMAGE" +sudo "${CONTAINER_RUNTIME}" pull "$IRONIC_INSPECTOR_IMAGE" mkdir -p "$IRONIC_DATA_DIR/html/images" -pushd $IRONIC_DATA_DIR/html/images +pushd "$IRONIC_DATA_DIR/html/images" # The images directory should contain images and an associated md5sum. # - image.qcow2 # - image.qcow2.md5sum +# By default, image directory points to dir having needed images when metal3-dev-env environment in use. +# In other cases user has to store images beforehand. -for name in ironic ironic-inspector dnsmasq httpd mariadb; do - sudo podman ps | grep -w "$name$" && sudo podman kill $name - sudo podman ps --all | grep -w "$name$" && sudo podman rm $name -f +for name in ironic ironic-inspector dnsmasq httpd mariadb ipa-downloader; do + sudo "${CONTAINER_RUNTIME}" ps | grep -w "$name$" && sudo "${CONTAINER_RUNTIME}" kill "$name" + sudo "${CONTAINER_RUNTIME}" ps --all | grep -w "$name$" && sudo "${CONTAINER_RUNTIME}" rm "$name" -f done -# Remove existing pod -if sudo podman pod exists ironic-pod ; then - sudo podman pod rm ironic-pod -f +# set password for mariadb +mariadb_password=$(echo "$(date;hostname)"|sha256sum |cut -c-20) + +POD="" + +if [[ "${CONTAINER_RUNTIME}" == "podman" ]]; then + # Remove existing pod + if sudo "${CONTAINER_RUNTIME}" pod exists ironic-pod ; then + sudo "${CONTAINER_RUNTIME}" pod rm ironic-pod -f + fi + # Create pod + sudo "${CONTAINER_RUNTIME}" pod create -n ironic-pod + POD="--pod ironic-pod " fi -# set password for mariadb -mariadb_password=$(echo $(date;hostname)|sha256sum |cut -c-20) +# Start image downloader container +# shellcheck disable=SC2086 +sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name ipa-downloader \ + ${POD} --env-file "${SCRIPTPATH}/../deploy/ironic_ci.env" \ + -v "$IRONIC_DATA_DIR:/shared" "${IPA_DOWNLOADER_IMAGE}" /usr/local/bin/get-resource.sh -# Create pod -sudo podman pod create -n ironic-pod +sudo "${CONTAINER_RUNTIME}" wait ipa-downloader # Start dnsmasq, http, mariadb, and ironic containers using same image # See this file for env vars you can set, like IP, DHCP_RANGE, INTERFACE # https://github.com/metal3-io/ironic/blob/master/rundnsmasq.sh -sudo podman run -d --net host --privileged --name dnsmasq --pod ironic-pod \ - -v $IRONIC_DATA_DIR:/shared --entrypoint /bin/rundnsmasq ${IRONIC_IMAGE} +# shellcheck disable=SC2086 +sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name dnsmasq \ + ${POD} --env-file "${SCRIPTPATH}/../deploy/ironic_ci.env" \ + -v "$IRONIC_DATA_DIR:/shared" --entrypoint /bin/rundnsmasq "${IRONIC_IMAGE}" # For available env vars, see: # https://github.com/metal3-io/ironic/blob/master/runhttpd.sh -sudo podman run -d --net host --privileged --name httpd --pod ironic-pod \ - -v $IRONIC_DATA_DIR:/shared --entrypoint /bin/runhttpd ${IRONIC_IMAGE} +# shellcheck disable=SC2086 +sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name httpd \ + ${POD} --env-file "${SCRIPTPATH}/../deploy/ironic_ci.env" \ + -v "$IRONIC_DATA_DIR:/shared" --entrypoint /bin/runhttpd "${IRONIC_IMAGE}" # https://github.com/metal3-io/ironic/blob/master/runmariadb.sh -sudo podman run -d --net host --privileged --name mariadb --pod ironic-pod \ - -v $IRONIC_DATA_DIR:/shared --entrypoint /bin/runmariadb \ - --env MARIADB_PASSWORD=$mariadb_password ${IRONIC_IMAGE} +# shellcheck disable=SC2086 +sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name mariadb \ + ${POD} --env-file "${SCRIPTPATH}/../deploy/ironic_ci.env" \ + -v "$IRONIC_DATA_DIR:/shared" --entrypoint /bin/runmariadb \ + --env "MARIADB_PASSWORD=$mariadb_password" "${IRONIC_IMAGE}" # See this file for additional env vars you may want to pass, like IP and INTERFACE # https://github.com/metal3-io/ironic/blob/master/runironic.sh -sudo podman run -d --net host --privileged --name ironic --pod ironic-pod \ - --env MARIADB_PASSWORD=$mariadb_password \ - -v $IRONIC_DATA_DIR:/shared ${IRONIC_IMAGE} +# shellcheck disable=SC2086 +sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name ironic \ + ${POD} --env-file "${SCRIPTPATH}/../deploy/ironic_ci.env" \ + --env "MARIADB_PASSWORD=$mariadb_password" \ + -v "$IRONIC_DATA_DIR:/shared" "${IRONIC_IMAGE}" # Start Ironic Inspector -sudo podman run -d --net host --privileged --name ironic-inspector --pod ironic-pod \ - -v $IRONIC_DATA_DIR:/shared "${IRONIC_INSPECTOR_IMAGE}" +# shellcheck disable=SC2086 +sudo "${CONTAINER_RUNTIME}" run -d --net host --privileged --name ironic-inspector \ + ${POD} --env-file "${SCRIPTPATH}/../deploy/ironic_ci.env" \ + -v "$IRONIC_DATA_DIR:/shared" "${IRONIC_INSPECTOR_IMAGE}" From 716e448347c9463e7755fde4807601f6c9299ec4 Mon Sep 17 00:00:00 2001 From: Doug Hellmann Date: Tue, 18 Feb 2020 13:28:36 -0500 Subject: [PATCH 2/2] update host state references for deleting There is no longer a ValidationError state, so remove that. We do have a ProvisioningError state that was not being handled, so add that. Signed-off-by: Doug Hellmann --- pkg/cloud/baremetal/actuators/machine/actuator.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/cloud/baremetal/actuators/machine/actuator.go b/pkg/cloud/baremetal/actuators/machine/actuator.go index a1070f0c1..e0727f210 100644 --- a/pkg/cloud/baremetal/actuators/machine/actuator.go +++ b/pkg/cloud/baremetal/actuators/machine/actuator.go @@ -166,7 +166,7 @@ func (a *Actuator) Delete(ctx context.Context, cluster *clusterv1.Cluster, machi switch host.Status.Provisioning.State { case bmh.StateRegistrationError, bmh.StateRegistering, bmh.StateMatchProfile, bmh.StateInspecting, - bmh.StateReady, bmh.StateValidationError: + bmh.StateReady, bmh.StateProvisioningError: // Host is not provisioned waiting = false case bmh.StateExternallyProvisioned: