Skip variables substitution in clusterctl integration
This commit overrides default components interface behavior by allowing to inject SkipVariables parameter, see L#37 at components_client.go. To do this, we pass new Repository Client interface which is built on top of the clusterctl implementation with one simple injection of SkipVariables Please see related issue for more details Relates-To: #201 Closes: #201 Change-Id: If068caa8308e39c9ee23d07f189bad26be04d5cf
This commit is contained in:
parent
391525a165
commit
5f920fe9be
2
go.mod
2
go.mod
@ -33,7 +33,7 @@ require (
|
||||
k8s.io/kubectl v0.17.3
|
||||
opendev.org/airship/go-redfish v0.0.0-20200318103738-db034d1d753a
|
||||
opendev.org/airship/go-redfish/client v0.0.0-20200318103738-db034d1d753a
|
||||
sigs.k8s.io/cluster-api v0.3.3
|
||||
sigs.k8s.io/cluster-api v0.3.5
|
||||
sigs.k8s.io/kustomize/api v0.3.1
|
||||
sigs.k8s.io/yaml v1.2.0
|
||||
)
|
||||
|
32
go.sum
32
go.sum
@ -238,14 +238,12 @@ github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJA
|
||||
github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
|
||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
|
||||
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I=
|
||||
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
|
||||
github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
|
||||
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef h1:veQD95Isof8w9/WXiA+pa3tz3fJXkt5B7QaRBrM62gk=
|
||||
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
|
||||
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
@ -278,7 +276,6 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z
|
||||
github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo=
|
||||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
|
||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
|
||||
@ -288,7 +285,6 @@ github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+u
|
||||
github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
|
||||
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
|
||||
github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
|
||||
github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
|
||||
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
@ -301,7 +297,6 @@ github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
|
||||
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
|
||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
||||
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d h1:7XGaL1e6bYS1yIonGp9761ExpPPV1ui0SAC59Yube9k=
|
||||
github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
|
||||
github.com/googleapis/gnostic v0.3.1 h1:WeAefnSUHlBb0iJKwxFDZdbfGwkd7xRNuV+IpXMJhYk=
|
||||
github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU=
|
||||
@ -325,7 +320,6 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t
|
||||
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
|
||||
github.com/hashicorp/golang-lru v0.0.0-20180201235237-0fb14efe8c47/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
|
||||
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
|
||||
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
|
||||
@ -350,7 +344,6 @@ github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22
|
||||
github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
|
||||
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
|
||||
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
@ -445,14 +438,12 @@ github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:v
|
||||
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.10.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo=
|
||||
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU=
|
||||
github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg=
|
||||
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
|
||||
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||
github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
|
||||
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
||||
github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA=
|
||||
@ -469,7 +460,6 @@ github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
@ -599,6 +589,7 @@ golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACk
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
@ -633,6 +624,7 @@ golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn
|
||||
golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20190812203447-cdfb69ac37fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
@ -644,7 +636,6 @@ golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3ob
|
||||
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
|
||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
|
||||
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
@ -671,6 +662,7 @@ golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
@ -686,7 +678,6 @@ golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
|
||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
|
||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
@ -709,6 +700,7 @@ golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3
|
||||
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20190521203540-521d6ed310dd/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||
golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||
golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||
@ -729,19 +721,18 @@ gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmK
|
||||
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
|
||||
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I=
|
||||
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
|
||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873 h1:nfPFGzJkUDX6uBmpN/pSw7MbOAWegH5QDQuoXFHedLg=
|
||||
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE=
|
||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.23.1 h1:q4XQuHFC6I28BKZpo6IYyb3mNO+l7lSOxRuYTCiDfXk=
|
||||
google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg=
|
||||
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||
@ -797,7 +788,6 @@ k8s.io/apimachinery v0.17.2/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZ
|
||||
k8s.io/apimachinery v0.17.3 h1:f+uZV6rm4/tHE7xXgLyToprg6xWairaClGVkm2t8omg=
|
||||
k8s.io/apimachinery v0.17.3/go.mod h1:gxLnyZcGNdZTCLnq3fgzyg2A5BVCHTNDFrw8AmuJ+0g=
|
||||
k8s.io/apiserver v0.17.2/go.mod h1:lBmw/TtQdtxvrTk0e2cgtOxHizXI+d0mmGQURIHQZlo=
|
||||
k8s.io/apiserver v0.17.3 h1:faZbSuFtJ4dx09vctKZGHms/7bp3qFtbqb10Swswqfs=
|
||||
k8s.io/apiserver v0.17.3/go.mod h1:iJtsPpu1ZpEnHaNawpSV0nYTGBhhX2dUlnn7/QS7QiY=
|
||||
k8s.io/cli-runtime v0.17.3 h1:0ZlDdJgJBKsu77trRUynNiWsRuAvAVPBNaQfnt/1qtc=
|
||||
k8s.io/cli-runtime v0.17.3/go.mod h1:X7idckYphH4SZflgNpOOViSxetiMj6xI0viMAjM81TA=
|
||||
@ -818,13 +808,13 @@ k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
|
||||
k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
|
||||
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
|
||||
k8s.io/kube-openapi v0.0.0-20190816220812-743ec37842bf/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
|
||||
k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a h1:UcxjrRMyNx/i/y8G7kPvLyy7rfbeuf1PYyBf973pgyU=
|
||||
k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E=
|
||||
k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c h1:/KUFqjjqAcY4Us6luF5RDNZ16KJtb49HfR3ZHB9qYXM=
|
||||
k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E=
|
||||
k8s.io/kubectl v0.17.3 h1:9HHYj07kuFkM+sMJMOyQX29CKWq4lvKAG1UIPxNPMQ4=
|
||||
k8s.io/kubectl v0.17.3/go.mod h1:NUn4IBY7f7yCMwSop2HCXlw/MVYP4HJBiUmOR3n9w28=
|
||||
k8s.io/metrics v0.17.3/go.mod h1:HEJGy1fhHOjHggW9rMDBJBD3YuGroH3Y1pnIRw9FFaI=
|
||||
k8s.io/utils v0.0.0-20190801114015-581e00157fb1/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
|
||||
k8s.io/utils v0.0.0-20191114184206-e782cd3c129f h1:GiPwtSzdP43eI1hpPCbROQCCIgCuiMMNF8YUVLF3vJo=
|
||||
k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
|
||||
k8s.io/utils v0.0.0-20200229041039-0a110f9eb7ab h1:I3f2hcBrepGRXI1z4sukzAb8w1R4eqbsHrAsx06LGYM=
|
||||
k8s.io/utils v0.0.0-20200229041039-0a110f9eb7ab/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
|
||||
@ -840,8 +830,8 @@ opendev.org/airship/go-redfish v0.0.0-20200318103738-db034d1d753a h1:4ggAMTwpfu/
|
||||
opendev.org/airship/go-redfish v0.0.0-20200318103738-db034d1d753a/go.mod h1:FEjYcb3bYBWGpQIqtvVM0NrT5eyjlCOCj5JNf4lI+6s=
|
||||
opendev.org/airship/go-redfish/client v0.0.0-20200318103738-db034d1d753a h1:S1dmsP5Cc6OQjAd6OgIKMcNPBiGjh5TDbijVjNE/VGU=
|
||||
opendev.org/airship/go-redfish/client v0.0.0-20200318103738-db034d1d753a/go.mod h1:s0hwuUpBsRXOrhN0NR+fNVivXGyWgHKpqtyq7qYjpew=
|
||||
sigs.k8s.io/cluster-api v0.3.3 h1:pNuvC6cm67SbxOaPriK8ZfLl1RSjmu/KX2GJiNQH3dU=
|
||||
sigs.k8s.io/cluster-api v0.3.3/go.mod h1:lgztyeCWCve8YB4DN6QeLR0blNYBvFX9+ATHrxs+zKU=
|
||||
sigs.k8s.io/cluster-api v0.3.5 h1:XPCuwrGL73x82a6spCHwkHHeGiQF+L4zntaoDg2qMzo=
|
||||
sigs.k8s.io/cluster-api v0.3.5/go.mod h1:IoP66q4g92I/2f/9hltbE/FWG3RakIwRdYpY+6mqvtE=
|
||||
sigs.k8s.io/controller-runtime v0.5.2 h1:pyXbUfoTo+HA3jeIfr0vgi+1WtmNh0CwlcnQGLXwsSw=
|
||||
sigs.k8s.io/controller-runtime v0.5.2/go.mod h1:JZUwSMVbxDupo0lTJSSFP5pimEyxGynROImSsqIOx1A=
|
||||
sigs.k8s.io/kind v0.7.1-0.20200303021537-981bd80d3802/go.mod h1:HIZ3PWUezpklcjkqpFbnYOqaqsAE1JeCTEwkgvPLXjk=
|
||||
@ -851,7 +841,7 @@ sigs.k8s.io/kustomize/api v0.3.1 h1:oqMIXvS6tFEUVuKIRUKDa05eC4Hh+cb9JYg8Zhp2d24=
|
||||
sigs.k8s.io/kustomize/api v0.3.1/go.mod h1:A+ATnlHqzictQfQC1q3KB/T6MSr0UWQsrrLxMWkge2E=
|
||||
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
|
||||
sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18=
|
||||
sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs=
|
||||
sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
|
||||
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
|
||||
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
|
||||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
|
||||
|
@ -33,7 +33,7 @@ var _ Interface = &Client{}
|
||||
|
||||
// Interface is abstraction to Clusterctl
|
||||
type Interface interface {
|
||||
Init(kubeconfigPath string) error
|
||||
Init(kubeconfigPath, kubeconfigContext string) error
|
||||
}
|
||||
|
||||
// Client Implements interface to Clusterctl
|
||||
@ -66,9 +66,12 @@ func NewClient(root string, debug bool, options *airshipv1.Clusterctl) (Interfac
|
||||
}
|
||||
|
||||
// Init implements interface to Clusterctl
|
||||
func (c *Client) Init(kubeconfigPath string) error {
|
||||
func (c *Client) Init(kubeconfigPath, kubeconfigContext string) error {
|
||||
log.Print("Starting cluster-api initiation")
|
||||
c.initOptions.Kubeconfig = kubeconfigPath
|
||||
c.initOptions.Kubeconfig = clusterctlclient.Kubeconfig{
|
||||
Path: kubeconfigPath,
|
||||
Context: kubeconfigContext,
|
||||
}
|
||||
_, err := c.clusterctlClient.Init(c.initOptions)
|
||||
return err
|
||||
}
|
||||
|
@ -34,9 +34,11 @@ type RepositoryFactory struct {
|
||||
|
||||
// ClusterClientFactory returns cluster factory function for clusterctl client
|
||||
func (f RepositoryFactory) ClusterClientFactory() client.ClusterClientFactory {
|
||||
return func(kubeconfig string) (cluster.Client, error) {
|
||||
return func(kubeconfig client.Kubeconfig) (cluster.Client, error) {
|
||||
o := cluster.InjectRepositoryFactory(f.repoFactoryClusterClient())
|
||||
return cluster.New(kubeconfig, f.ConfigClient, o), nil
|
||||
return cluster.New(cluster.Kubeconfig{
|
||||
Path: kubeconfig.Path,
|
||||
Context: kubeconfig.Context}, f.ConfigClient, o), nil
|
||||
}
|
||||
}
|
||||
|
||||
@ -77,13 +79,21 @@ func (f RepositoryFactory) repoFactory(provider config.Provider) (repository.Cli
|
||||
// inject repository into repository client
|
||||
o := repository.InjectRepository(repo)
|
||||
log.Printf("Creating arishipctl repository implementation interface for provider %s of type %s\n",
|
||||
provider.Name(),
|
||||
provider.Type())
|
||||
return repository.New(provider, f.ConfigClient, o)
|
||||
name,
|
||||
repoType)
|
||||
|
||||
repoClient, err := repository.New(provider, f.ConfigClient, o)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &implementations.RepositoryClient{
|
||||
Client: repoClient,
|
||||
ProviderType: string(repoType),
|
||||
ProviderName: name}, nil
|
||||
}
|
||||
log.Printf("Creating clusterctl repository implementation interface for provider %s of type %s\n",
|
||||
provider.Name(),
|
||||
provider.Type())
|
||||
name,
|
||||
repoType)
|
||||
// if repository is clusterctl pass, simply use default clusterctl repository interface
|
||||
return repository.New(provider, f.ConfigClient)
|
||||
}
|
||||
|
@ -22,7 +22,9 @@ import (
|
||||
"github.com/stretchr/testify/require"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
clusterctlv1 "sigs.k8s.io/cluster-api/cmd/clusterctl/api/v1alpha3"
|
||||
clusterctlclient "sigs.k8s.io/cluster-api/cmd/clusterctl/client"
|
||||
clusterctlconfig "sigs.k8s.io/cluster-api/cmd/clusterctl/client/config"
|
||||
"sigs.k8s.io/cluster-api/cmd/clusterctl/client/repository"
|
||||
"sigs.k8s.io/yaml"
|
||||
|
||||
airshipv1 "opendev.org/airship/airshipctl/pkg/clusterctl/api/v1alpha1"
|
||||
@ -77,14 +79,15 @@ func testNewConfig(t *testing.T, o *airshipv1.Clusterctl) clusterctlconfig.Clien
|
||||
func TestFactory(t *testing.T) {
|
||||
o := testOptions(t, testConfigFactory)
|
||||
configClient := testNewConfig(t, o)
|
||||
|
||||
factory := RepositoryFactory{
|
||||
root: testDataDir,
|
||||
Options: o,
|
||||
ConfigClient: configClient,
|
||||
}
|
||||
repoFactory := factory.ClientRepositoryFactory()
|
||||
require.NotNil(t, repoFactory)
|
||||
pclient := configClient.Providers()
|
||||
require.NotNil(t, pclient)
|
||||
tests := []struct {
|
||||
name string
|
||||
expectedVersions []string
|
||||
@ -136,7 +139,9 @@ func TestFactory(t *testing.T) {
|
||||
components := repo.Components()
|
||||
require.NotNil(t, components)
|
||||
// namespaces are left blank, since namespace is provided in the document set
|
||||
component, err := components.Get(useVersion, "", "")
|
||||
component, err := components.Get(repository.ComponentsOptions{
|
||||
Version: useVersion,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, component)
|
||||
|
||||
@ -157,14 +162,15 @@ func TestFactory(t *testing.T) {
|
||||
func TestClientRepositoryFactory(t *testing.T) {
|
||||
o := testOptions(t, testConfigFactory)
|
||||
configClient := testNewConfig(t, o)
|
||||
|
||||
factory := RepositoryFactory{
|
||||
root: testDataDir,
|
||||
Options: o,
|
||||
ConfigClient: configClient,
|
||||
}
|
||||
clusterclientFactory := factory.ClusterClientFactory()
|
||||
clusterClient, err := clusterclientFactory("testdata/kubeconfig.yaml")
|
||||
clusterClient, err := clusterclientFactory(clusterctlclient.Kubeconfig{
|
||||
Path: "testdata/kubeconfig.yaml",
|
||||
Context: ""})
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, clusterClient)
|
||||
}
|
||||
@ -178,14 +184,13 @@ func TestRepoFactoryFunction(t *testing.T) {
|
||||
Options: o,
|
||||
ConfigClient: configClient,
|
||||
}
|
||||
|
||||
pclient := configClient.Providers()
|
||||
require.NotNil(t, pclient)
|
||||
provider, err := pclient.Get("custom-airship-infra", "InfrastructureProvider")
|
||||
require.NoError(t, err)
|
||||
repoClient, err := factory.repoFactory(provider)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, repoClient)
|
||||
|
||||
versions, err := repoClient.GetVersions()
|
||||
expectedVersions := []string{"v0.3.1", "v0.3.2"}
|
||||
sort.Strings(versions)
|
||||
@ -197,22 +202,87 @@ func TestRepoFactoryFunction(t *testing.T) {
|
||||
func TestClusterctlRepoFactoryFunction(t *testing.T) {
|
||||
o := testOptions(t, testConfigFactory)
|
||||
configClient := testNewConfig(t, o)
|
||||
|
||||
factory := RepositoryFactory{
|
||||
root: testDataDir,
|
||||
Options: o,
|
||||
ConfigClient: configClient,
|
||||
}
|
||||
|
||||
pclient := configClient.Providers()
|
||||
provider, err := pclient.Get("aws", "InfrastructureProvider")
|
||||
require.NoError(t, err)
|
||||
repoClient, err := factory.repoFactory(provider)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, repoClient)
|
||||
// try to read directory list defined by repoClient.URL() and fail
|
||||
_, err = repoClient.GetVersions()
|
||||
assert.Error(t, err)
|
||||
// Verify clusterctl failed during reading file, note: os.IsNotExist doesn't work here
|
||||
assert.Contains(t, err.Error(), "no such file or directory")
|
||||
}
|
||||
|
||||
// Test error cases
|
||||
func TestRepositoryFactoryErrors(t *testing.T) {
|
||||
// set one default provider clusterctl is properly initialized
|
||||
defProv := &airshipv1.Provider{
|
||||
Name: "aws",
|
||||
Type: "InfrastructureProvider",
|
||||
Versions: map[string]string{
|
||||
"v0.3.3": testConfig + "/functions/capi/v0.3.3",
|
||||
},
|
||||
}
|
||||
o := &airshipv1.Clusterctl{
|
||||
Providers: []*airshipv1.Provider{defProv},
|
||||
}
|
||||
configClient := testNewConfig(t, o)
|
||||
require.NotNil(t, configClient)
|
||||
factory := RepositoryFactory{
|
||||
root: testDataDir,
|
||||
Options: o,
|
||||
ConfigClient: configClient,
|
||||
}
|
||||
rf := factory.ClientRepositoryFactory()
|
||||
require.NotNil(t, rf)
|
||||
pclient := configClient.Providers()
|
||||
require.NotNil(t, pclient)
|
||||
// save provider so then we can run tests against it, while modifying original airship clustetrctl conf
|
||||
provider, err := pclient.Get("aws", "InfrastructureProvider")
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, provider)
|
||||
tests := []struct {
|
||||
name string
|
||||
airProvs []*airshipv1.Provider
|
||||
}{
|
||||
{
|
||||
name: "providers are nil",
|
||||
airProvs: nil,
|
||||
},
|
||||
{
|
||||
name: "versions are nil",
|
||||
airProvs: []*airshipv1.Provider{
|
||||
{
|
||||
Name: "aws",
|
||||
Type: "InfrastructureProvider",
|
||||
Versions: nil,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "versions can't be parsed",
|
||||
airProvs: []*airshipv1.Provider{
|
||||
{
|
||||
Name: "aws",
|
||||
Type: "InfrastructureProvider",
|
||||
Versions: map[string]string{
|
||||
"can't parse version": "wrong path",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
airProvs := tt.airProvs
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
// set airship providers so it does not correspond to clusterctl provider
|
||||
o.Providers = airProvs
|
||||
crc, err := factory.repoFactory(provider)
|
||||
// expect error since we have mismatch of airship providers vs clusterctl providers
|
||||
require.Nil(t, crc)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ import (
|
||||
// Command adds a layer to clusterctl interface with airshipctl context
|
||||
type Command struct {
|
||||
kubeconfigPath string
|
||||
kubeconfigContext string
|
||||
documentRoot string
|
||||
client client.Interface
|
||||
options *airshipv1.Clusterctl
|
||||
@ -56,12 +57,13 @@ func NewCommand(rs *environment.AirshipCTLSettings) (*Command, error) {
|
||||
documentRoot: root,
|
||||
client: client,
|
||||
options: options,
|
||||
kubeconfigContext: rs.Config.CurrentContext,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Init runs clusterctl init
|
||||
func (c *Command) Init() error {
|
||||
return c.client.Init(c.kubeconfigPath)
|
||||
return c.client.Init(c.kubeconfigPath, c.kubeconfigContext)
|
||||
}
|
||||
|
||||
func clusterctlOptions(bundle document.Bundle) (*airshipv1.Clusterctl, error) {
|
||||
|
41
pkg/clusterctl/implementations/components_client.go
Normal file
41
pkg/clusterctl/implementations/components_client.go
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package implementations
|
||||
|
||||
import (
|
||||
"sigs.k8s.io/cluster-api/cmd/clusterctl/client/repository"
|
||||
|
||||
"opendev.org/airship/airshipctl/pkg/log"
|
||||
)
|
||||
|
||||
var _ repository.ComponentsClient = &ComponentsClient{}
|
||||
|
||||
// ComponentsClient override Get() method to return same components,
|
||||
// but in our implementation we skip variable substitution.
|
||||
type ComponentsClient struct {
|
||||
client repository.ComponentsClient
|
||||
providerType string
|
||||
providerName string
|
||||
}
|
||||
|
||||
// Get returns the components from a repository but without variable substitution
|
||||
func (cc *ComponentsClient) Get(options repository.ComponentsOptions) (repository.Components, error) {
|
||||
// This removes variable substitution in components.yaml
|
||||
// TODO we may consider making this configurable
|
||||
options.SkipVariables = true
|
||||
log.Debugf("Getting airshipctl provider components, setting skipping variable substitution.\n"+
|
||||
"Provider type: %s, name: %s\n", cc.providerType, cc.providerName)
|
||||
return cc.client.Get(options)
|
||||
}
|
43
pkg/clusterctl/implementations/repository_client.go
Normal file
43
pkg/clusterctl/implementations/repository_client.go
Normal file
@ -0,0 +1,43 @@
|
||||
/*
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package implementations
|
||||
|
||||
import (
|
||||
"sigs.k8s.io/cluster-api/cmd/clusterctl/client/config"
|
||||
"sigs.k8s.io/cluster-api/cmd/clusterctl/client/repository"
|
||||
|
||||
"opendev.org/airship/airshipctl/pkg/log"
|
||||
)
|
||||
|
||||
var _ config.Provider = &RepositoryClient{}
|
||||
|
||||
// RepositoryClient override Components() method to return same components client,
|
||||
// but in our implementation we skip variable substitution.
|
||||
type RepositoryClient struct {
|
||||
repository.Client
|
||||
ProviderType string
|
||||
ProviderName string
|
||||
}
|
||||
|
||||
// Components provide access to YAML file for creating provider components.
|
||||
func (rc *RepositoryClient) Components() repository.ComponentsClient {
|
||||
log.Debugf("Setting up airshipctl provider Components client\n"+
|
||||
"Provider type: %s, name: %s\n", rc.ProviderType, rc.ProviderName)
|
||||
return &ComponentsClient{
|
||||
client: rc.Client.Components(),
|
||||
providerName: rc.ProviderName,
|
||||
providerType: rc.ProviderType,
|
||||
}
|
||||
}
|
84
pkg/clusterctl/implementations/repository_client_test.go
Normal file
84
pkg/clusterctl/implementations/repository_client_test.go
Normal file
@ -0,0 +1,84 @@
|
||||
/*
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package implementations
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
clusterctlv1 "sigs.k8s.io/cluster-api/cmd/clusterctl/api/v1alpha3"
|
||||
clusterctlconfig "sigs.k8s.io/cluster-api/cmd/clusterctl/client/config"
|
||||
"sigs.k8s.io/cluster-api/cmd/clusterctl/client/repository"
|
||||
|
||||
airshipv1 "opendev.org/airship/airshipctl/pkg/clusterctl/api/v1alpha1"
|
||||
)
|
||||
|
||||
func TestRepositoryClient(t *testing.T) {
|
||||
providerName := "metal3"
|
||||
providerType := "InfrastructureProvider"
|
||||
// this version contains a variable that is suppose to be substituted by clusterctl
|
||||
// and we will test if the variable is found and not substituted
|
||||
versions := map[string]string{
|
||||
"v0.2.3": "functions/4",
|
||||
}
|
||||
options := &airshipv1.Clusterctl{
|
||||
Providers: []*airshipv1.Provider{
|
||||
{
|
||||
Name: providerName,
|
||||
Type: providerType,
|
||||
URL: "/dummy/path/v0.3.2/components.yaml",
|
||||
Versions: versions,
|
||||
},
|
||||
},
|
||||
}
|
||||
// create instance of airship reader interface implementation for clusterctl and inject it
|
||||
reader, err := NewAirshipReader(options)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, reader)
|
||||
optionReader := clusterctlconfig.InjectReader(reader)
|
||||
require.NotNil(t, optionReader)
|
||||
configClient, err := clusterctlconfig.New("", optionReader)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, configClient)
|
||||
// get the provider from configuration client, in which we injected our reader
|
||||
provider, err := configClient.Providers().Get(providerName, clusterctlv1.ProviderType(providerType))
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, provider)
|
||||
// Create instance of airship repository interface implementation for clusterctl
|
||||
repo, err := NewRepository("testdata", versions)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, repo)
|
||||
// Inject the repository in repository client
|
||||
optionsRepo := repository.InjectRepository(repo)
|
||||
repoClient, err := repository.New(provider, configClient, optionsRepo)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, repoClient)
|
||||
// create airship implementation of clusterctl repository client
|
||||
airRepoClient := RepositoryClient{
|
||||
Client: repoClient,
|
||||
}
|
||||
// get the components of the repository with empty options, all defaults should work
|
||||
c, err := airRepoClient.Components().Get(repository.ComponentsOptions{})
|
||||
require.NoError(t, err)
|
||||
// No errors must be returned since there is are no variables that need to be substituted
|
||||
assert.NotNil(t, c)
|
||||
// Make sure that target namespace is the same as defined by repository implementation bundle
|
||||
assert.Equal(t, "newnamespace", c.TargetNamespace())
|
||||
// Make sure that variables for substitution are actually found
|
||||
require.Len(t, c.Variables(), 1)
|
||||
// make sure that variable name is correct
|
||||
assert.Equal(t, "PROVISIONING_IP", c.Variables()[0])
|
||||
}
|
1
pkg/clusterctl/implementations/testdata/functions/4/dnsmasq.conf
vendored
Normal file
1
pkg/clusterctl/implementations/testdata/functions/4/dnsmasq.conf
vendored
Normal file
@ -0,0 +1 @@
|
||||
dhcp-boot=tag:ipxe,http://${PROVISIONING_IP}:80/dualboot.ipxe
|
12
pkg/clusterctl/implementations/testdata/functions/4/kustomization.yaml
vendored
Normal file
12
pkg/clusterctl/implementations/testdata/functions/4/kustomization.yaml
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
resources:
|
||||
- resources.yaml
|
||||
|
||||
generatorOptions:
|
||||
disableNameSuffixHash: true
|
||||
|
||||
## this contains a variable that matches a regexp for clusterctl variable subsitution
|
||||
## check the regexp here https://github.com/kubernetes-sigs/cluster-api/blob/v0.3.5/cmd/clusterctl/client/repository/components.go#L55
|
||||
configMapGenerator:
|
||||
- name: ironic-config-files
|
||||
files:
|
||||
- dnsmasq.conf
|
17
pkg/clusterctl/implementations/testdata/functions/4/resources.yaml
vendored
Normal file
17
pkg/clusterctl/implementations/testdata/functions/4/resources.yaml
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
## contains a namespace that should be idenitifed by components interface,
|
||||
---
|
||||
apiVersion: clusterctl.cluster.x-k8s.io/v1alpha3
|
||||
kind: Metadata
|
||||
metadata:
|
||||
name: repository-metadata
|
||||
releaseSeries:
|
||||
- major: 0
|
||||
minor: 3
|
||||
contract: v1alpha3
|
||||
- major: 0
|
||||
minor: 2
|
||||
contract: v1alpha2
|
||||
---
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: newnamespace
|
Loading…
Reference in New Issue
Block a user