From 39060382a1a0eb6233460775b8b03d641a6f6638 Mon Sep 17 00:00:00 2001 From: aarifullin Date: Tue, 5 Dec 2023 12:11:28 +0300 Subject: [PATCH] [#842] control: Recieve target in gRPC methods for APE managing * Introduce Target type and pass it to all gRPC methods for APE chain managing instead CID. Signed-off-by: Airat Arifullin --- cmd/frostfs-cli/modules/control/add_rule.go | 11 +++- cmd/frostfs-cli/modules/control/get_rule.go | 11 +++- cmd/frostfs-cli/modules/control/list_rules.go | 9 ++- .../modules/control/remove_rule.go | 11 +++- pkg/services/control/server/policy_engine.go | 56 +++++++++++++++--- pkg/services/control/service.pb.go | Bin 194092 -> 194862 bytes pkg/services/control/service.proto | 22 ++++--- pkg/services/control/service_frostfs.pb.go | Bin 89775 -> 89815 bytes pkg/services/control/types.pb.go | Bin 29563 -> 33771 bytes pkg/services/control/types.proto | 17 ++++++ pkg/services/control/types_frostfs.pb.go | Bin 7097 -> 8071 bytes 11 files changed, 112 insertions(+), 25 deletions(-) diff --git a/cmd/frostfs-cli/modules/control/add_rule.go b/cmd/frostfs-cli/modules/control/add_rule.go index f57823ed..ca922000 100644 --- a/cmd/frostfs-cli/modules/control/add_rule.go +++ b/cmd/frostfs-cli/modules/control/add_rule.go @@ -4,6 +4,7 @@ import ( "bytes" "crypto/sha256" "encoding/json" + "fmt" "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client" "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" @@ -13,6 +14,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/control" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" apechain "git.frostfs.info/TrueCloudLab/policy-engine/pkg/chain" + nativeschema "git.frostfs.info/TrueCloudLab/policy-engine/schema/native" "github.com/spf13/cobra" ) @@ -60,10 +62,15 @@ func addRule(cmd *cobra.Command, _ []string) { cmd.Println("Container ID: " + cidStr) cmd.Println("Parsed chain:\n" + prettyJSONFormat(cmd, serializedChain)) + name := fmt.Sprintf(nativeschema.ResourceFormatRootContainerObjects, cidStr) + req := &control.AddChainLocalOverrideRequest{ Body: &control.AddChainLocalOverrideRequest_Body{ - ContainerId: rawCID, - Chain: serializedChain, + Target: &control.ChainTarget{ + Type: control.ChainTarget_CONTAINER, + Name: name, + }, + Chain: serializedChain, }, } diff --git a/cmd/frostfs-cli/modules/control/get_rule.go b/cmd/frostfs-cli/modules/control/get_rule.go index 0c34a696..962ef179 100644 --- a/cmd/frostfs-cli/modules/control/get_rule.go +++ b/cmd/frostfs-cli/modules/control/get_rule.go @@ -2,6 +2,7 @@ package control import ( "crypto/sha256" + "fmt" "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client" "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" @@ -10,6 +11,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/control" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" apechain "git.frostfs.info/TrueCloudLab/policy-engine/pkg/chain" + nativeschema "git.frostfs.info/TrueCloudLab/policy-engine/schema/native" "github.com/spf13/cobra" ) @@ -32,10 +34,15 @@ func getRule(cmd *cobra.Command, _ []string) { chainID, _ := cmd.Flags().GetString(chainIDFlag) + name := fmt.Sprintf(nativeschema.ResourceFormatRootContainerObjects, cidStr) + req := &control.GetChainLocalOverrideRequest{ Body: &control.GetChainLocalOverrideRequest_Body{ - ContainerId: rawCID, - ChainId: chainID, + Target: &control.ChainTarget{ + Name: name, + Type: control.ChainTarget_CONTAINER, + }, + ChainId: chainID, }, } diff --git a/cmd/frostfs-cli/modules/control/list_rules.go b/cmd/frostfs-cli/modules/control/list_rules.go index 6a0879d0..c1e47f48 100644 --- a/cmd/frostfs-cli/modules/control/list_rules.go +++ b/cmd/frostfs-cli/modules/control/list_rules.go @@ -2,6 +2,7 @@ package control import ( "crypto/sha256" + "fmt" "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client" "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" @@ -10,6 +11,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/control" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" apechain "git.frostfs.info/TrueCloudLab/policy-engine/pkg/chain" + nativeschema "git.frostfs.info/TrueCloudLab/policy-engine/schema/native" "github.com/spf13/cobra" ) @@ -30,9 +32,14 @@ func listRules(cmd *cobra.Command, _ []string) { rawCID := make([]byte, sha256.Size) cnr.Encode(rawCID) + name := fmt.Sprintf(nativeschema.ResourceFormatRootContainerObjects, cidStr) + req := &control.ListChainLocalOverridesRequest{ Body: &control.ListChainLocalOverridesRequest_Body{ - ContainerId: rawCID, + Target: &control.ChainTarget{ + Name: name, + Type: control.ChainTarget_CONTAINER, + }, }, } diff --git a/cmd/frostfs-cli/modules/control/remove_rule.go b/cmd/frostfs-cli/modules/control/remove_rule.go index de064536..c3f4aeb0 100644 --- a/cmd/frostfs-cli/modules/control/remove_rule.go +++ b/cmd/frostfs-cli/modules/control/remove_rule.go @@ -2,6 +2,7 @@ package control import ( "crypto/sha256" + "fmt" "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client" "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-cli/internal/commonflags" @@ -9,6 +10,7 @@ import ( commonCmd "git.frostfs.info/TrueCloudLab/frostfs-node/cmd/internal/common" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/control" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" + nativeschema "git.frostfs.info/TrueCloudLab/policy-engine/schema/native" "github.com/spf13/cobra" ) @@ -35,10 +37,15 @@ func removeRule(cmd *cobra.Command, _ []string) { chainID, _ := cmd.Flags().GetString(chainIDFlag) + name := fmt.Sprintf(nativeschema.ResourceFormatRootContainerObjects, cidStr) + req := &control.RemoveChainLocalOverrideRequest{ Body: &control.RemoveChainLocalOverrideRequest_Body{ - ContainerId: rawCID, - ChainId: chainID, + Target: &control.ChainTarget{ + Name: name, + Type: control.ChainTarget_CONTAINER, + }, + ChainId: chainID, }, } diff --git a/pkg/services/control/server/policy_engine.go b/pkg/services/control/server/policy_engine.go index 8565cd9c..1c09de91 100644 --- a/pkg/services/control/server/policy_engine.go +++ b/pkg/services/control/server/policy_engine.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "strings" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/services/control" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" @@ -14,13 +15,36 @@ import ( "google.golang.org/grpc/status" ) +// extractCID extracts CID from the schema's pattern. +// TODO (aarifullin): This is temporary solution should be replaced by +// resource name validation. +func extractCID(resource string) (cid.ID, error) { + var cidStr string + + // Sscanf requires to make tokens delimited by spaces. + pattern := strings.Replace(nativeschema.ResourceFormatRootContainerObjects, "/", " ", -1) + resource = strings.Replace(resource, "/", " ", -1) + + if _, err := fmt.Sscanf(resource, pattern, &cidStr); err != nil { + err = fmt.Errorf("could not parse the target name '%s' to CID: %w", resource, err) + return cid.ID{}, err + } + var cid cid.ID + err := cid.DecodeString(cidStr) + return cid, err +} + func (s *Server) AddChainLocalOverride(_ context.Context, req *control.AddChainLocalOverrideRequest) (*control.AddChainLocalOverrideResponse, error) { if err := s.isValidRequest(req); err != nil { return nil, status.Error(codes.PermissionDenied, err.Error()) } - var cid cid.ID - err := cid.Decode(req.GetBody().GetContainerId()) + target := req.GetBody().GetTarget() + if target.Type != control.ChainTarget_CONTAINER { + return nil, status.Error(codes.Internal, fmt.Errorf("target type is not supported: %s", target.Type.String()).Error()) + } + + cid, err := extractCID(target.GetName()) if err != nil { return nil, status.Error(codes.InvalidArgument, err.Error()) } @@ -37,7 +61,9 @@ func (s *Server) AddChainLocalOverride(_ context.Context, req *control.AddChainL s.apeChainCounter.Add(1) // TODO (aarifullin): the such chain id is not well-designed yet. - chain.ID = apechain.ID(fmt.Sprintf("%s:%d", apechain.Ingress, s.apeChainCounter.Load())) + if chain.ID == "" { + chain.ID = apechain.ID(fmt.Sprintf("%s:%d", apechain.Ingress, s.apeChainCounter.Load())) + } resource := fmt.Sprintf(nativeschema.ResourceFormatRootContainerObjects, cid.EncodeToString()) if _, err = src.LocalStorage().AddOverride(apechain.Ingress, resource, &chain); err != nil { @@ -61,8 +87,12 @@ func (s *Server) GetChainLocalOverride(_ context.Context, req *control.GetChainL return nil, status.Error(codes.PermissionDenied, err.Error()) } - var cid cid.ID - err := cid.Decode(req.GetBody().GetContainerId()) + target := req.GetBody().GetTarget() + if target.Type != control.ChainTarget_CONTAINER { + return nil, status.Error(codes.Internal, fmt.Errorf("target type is not supported: %s", target.Type.String()).Error()) + } + + cid, err := extractCID(target.GetName()) if err != nil { return nil, status.Error(codes.InvalidArgument, err.Error()) } @@ -95,8 +125,12 @@ func (s *Server) ListChainLocalOverrides(_ context.Context, req *control.ListCha return nil, status.Error(codes.PermissionDenied, err.Error()) } - var cid cid.ID - err := cid.Decode(req.GetBody().GetContainerId()) + target := req.GetBody().GetTarget() + if target.Type != control.ChainTarget_CONTAINER { + return nil, status.Error(codes.Internal, fmt.Errorf("target type is not supported: %s", target.Type.String()).Error()) + } + + cid, err := extractCID(target.GetName()) if err != nil { return nil, status.Error(codes.InvalidArgument, err.Error()) } @@ -133,8 +167,12 @@ func (s *Server) RemoveChainLocalOverride(_ context.Context, req *control.Remove return nil, status.Error(codes.PermissionDenied, err.Error()) } - var cid cid.ID - err := cid.Decode(req.GetBody().GetContainerId()) + target := req.GetBody().GetTarget() + if target.Type != control.ChainTarget_CONTAINER { + return nil, status.Error(codes.Internal, fmt.Errorf("target type is not supported: %s", target.Type.String()).Error()) + } + + cid, err := extractCID(target.GetName()) if err != nil { return nil, status.Error(codes.InvalidArgument, err.Error()) } diff --git a/pkg/services/control/service.pb.go b/pkg/services/control/service.pb.go index 346a43664023680604fca2d370c5be16e7562346..8b8739aba9da08599e07b164935b98ac3fa63783 100644 GIT binary patch delta 4560 zcmbtXdsLKV8b9wNgU*031Plx?>^G+3h08a?FvG>mpm<9~KnT*!L>$T@K*YT45>)#~ z#a0#@Po$uTyY9M1Xx5zCC9(CK)ppx7tKCzc1#^$5la=gtvE9=4_kJJ4CGB!f|9t1Y zKhN*?{GR81zk?r!bpI!$>4>PQ4K6OPyWLmMKdTitGx?NdPsZ_{K%91=~!zQK5S6Q$4?yjxhW-_LwDHyN6 z!>6xEmd$EqL%p(PLsgZs&Zpe&tM=8E*ZbBh<<;wzI$!>&?MUsm==+f(6aVm44XHLP`~RQVHG#Qi*NNY;9s3@<7VHcdfh|a z{&l?MLk;3a9(+KUdGJZ$Z5iBeYw0;-@b_;KSAu>lo&I|o#5+F#VeS(@Vf7axN{9HD z`$bdmk2T%0vB}z^UI}U`cqN+EW)aGL3x&C*;T5awnfR-4vD$y=Ve!zo?+pMy{-AL1 z*H4HL&c91+ZwX&v@H-w8e#4LTkwH(lUu_k6KY$~sfY-E(IE^C)NBMs5PH}vTsPG#i zY5O>GmGgZTN@L?m5n@-}$%?ww#q+vE{LyG9Pp(2rBytbQsimTMO{oXHA1t|F+L(JrUpxo(<|BWj99`oFClCxR%~Cef--nb z6g6|Nizai^F%iyt-V~}o<};Bcct<>?@PLPcIOIJM5#mnQ5NApog)tPx(RQ+O+G!EX zS58A0X$cf2-4m-Qnzz^~BFd)`2Ct-VVX-G8goUU{0~&wA#xe zk-s>OB)Z>53M&QxXiT8}od2?j_aDBIZWZLJ8d>ID#pC!@1uh5OW!%9X;LAu1e#IBE+ zBycAWPJ-VBlPI3=?H687wvt_!#Zeo`MnvNLUtbjW2?8ITe-zXC)cc?z{i?V@2078- z&`G{1;>X50I=VumahOsG%i-hl5-MSJ6$Q(Xr*cmc0=Kqb1Z#13siWe4X=)(u$w{E! zoJM7Gxsmy}nC1u7TLs_W2S2?3gmJ@35iWVYH<)6s<#|Z)k^HfdOsx|Uue?%9w0{T9 z(p`^hgy*1nIgnUG31vxiH*jqkAPyu@g7i635;>h*4t_M0in-^q z2;;^)EEsmjJQwMK-F7aHrDgh_>ni<93N6(#OUimpDlL`7n8G}o;&qRF9_i5%4qr)Y zhNWxZwlqrDRU5EBgH@zVkW6cSHx&s6q0EqRDU(Vz`Y%2wY6NOUlLfYFo`>QP{P9|~ zxvr$GtYlC^K+UFaB%$&hY-`#bAv=7SY&{IE?}-HdTtTu1q-^J{pNWX!Y|h~EE(+H) zC}Mb4Hqsc2V!68r8FeHZxjg%@h?Tg`9T0PP(>y(=6S(ggWXcN6ar*%z z&c3%mVbeijVD%u9`qUCi;>`I-j#Cyg@$0=o$s9k9MvTh&R_R}p!RU&*x+2` z%xiN{GQ6|VeQ7RKuH;gjgt|B%A?%w;_SRnE)bfo}ykyigp;oYZ81h|nT)6o`FV4h$ z0$t~V7;`9vww?e7e?B2>t*?v8s?$^U5^3Z8~ z8@yjyhzQ)72f3P$L3^2Jaj90mEh@+BcatXH9679EuYOx#;d!A*w=OJ@nhyo-&QFlM zjX~h7aUl?BlKJ?zNTu#&G@ff`QE=-g;41uM5iBG&6QL^aLUQxmAdqW3FH|YANdDJyiqhgaAg1!3<1*K3hbQChg(jcF7aeBFGALZXWL}g~`hWFj=qZqRaw? zZ!I2`yH>eAnQtovw_9%}FJqmZ*PKBbz+yTN&cyA2!{bM?6LGNXyorBr32aoVUqSw3_Z$Q;;C zF)x3wdV z%bA?QqYtz(Ekwk%$@mUT8lHkOyV_6~3ZJ4JOo8*&lS7S5<8)n zGqP2>6F10$cC^lRB2E7wCpLDXyL7MKweaj+G^MozRvLCu3B;zk^3g6T<->9m=;l(^ zkl7d8aWiOUfy;|32#hw~)#Yh=vD!uM7L^{2ugITbpeAZT~rj7r3-6ymNVO- zX7VFlG&2N0ozU89k2@Rq_JQDcx+p4iWYpv4|8-IFH6sca?W1Vn_TRCOju-wPQlW^v delta 3607 zcmbtWYfzNu6`pg1mE8q)mD_T40fRS?1@^`rQ9)E-yw_?&Uo&4yZo&CP|eb4)x z=RD6jU&lXuH$ehtfLvtd62($YvTSMcXLa zYo2M8nr)Qnz0)2gch*s`x9~l)Y~4WGlR@_Fpeiw~r9j_LR?~(7(iKLty$g?Mt0p=7 zQ<~tdX^Z!Ey{nVT<+RajstlBS^;GWdF&KRVH&9LBGeF{lYHF7PSj}k34W;$IyY=*T zfEHMe{>Xo?$>;hZ)$6|H=nGP`0f23f0=%Bn5n_Fjg5_ihnPqeXa>S#-2l&@C(3KLh zof2fXmyA-eoHqGZ?WSYjj_uW#=-Lx(^P4C}F=P^8o8+tBOJ~+ohA%0MHx1ydrLyQv z8ZDpnP@<$xV}rbs$b%*2BDPPDA#yB;Lm98f zq_9i5?EyGM^M$yc)$or z2Eu}H4w6se*&=m$948AWBG&CVU@1)Cq4G{Lmx`@~6MTOS;q_#++qKw>6hm}{QWTZh zVzzKVkW)+Dl_}+M?C`Twcag%s#wrFb5sQizaU>EPd&$XU{7$4%O!B?*t$;{XP? z2WxTV*Wp|xo-!UO_mgl8+zplQnUQuyGD@Lw2he(%l*H{%xf|@elEBp@lRku_PV|yN zu10}HQwr;3!bKXYxcf&GC(8m08^V@8Ls+fQaf*|KDqbmVuThwoyD6FNHfcGD(tmj$ z`pj{1iuBmP`rQKjYi=i{;YQ91^Ur?xQO~s*;SE1+5RCX(9Xam!^ zL~V{$F+6EJN6g_I;M;YR93)pp^CYDzohEG=n~ukYVR%%94s~UzEc|+}St18Mr${-L zj>4g4I)5FPg>h_S8fQWJda3TEB&9l?Y_?&SN1@RQ_!T(M$28oa83-x@peYV6my_X; z;_qkia6}1F1&Eg|y=3xv-l1j0cDwR&wAlUxVc+VZOa00krZPH}$Rm`loG}J{Ki0*X z7nC>szK}u(s8cC@O=Bh}il@*~t(=;}`9awHKQP&RaOwtv9dQTzA?RpNA zglx`~gjPU1@fNhQI-3gzDI|VB+G-UByU;1rnhN7cFu%; z<4)l5vqIRkvm3-gt5M=9f@0Ed!iv^hAlq2UdEzeOGU@sNeclEi%Z0O~GuRhDt?Gg? zTxwKY`x{b*?7l^*;yDL5JS@UpFP{M;4Rd*LkOO)(MlG)iPCq9Bby(l7~q-CPFxT1r*7y+97BzmJi%+sc7bRLZfkB@h>Mh5(y} zGG!{~DuL*vX9DXrcF@hI3;^5Be}SyJ0@0ES262vGWt+;-g_fK}r|G}SE=hf8l|6@X zeYFAQdTt`x%@6)f2bFsh0<@`Noz$=B-Umqgzp&cn!bG6nqF~NH2Hzac2c%(>f%USP zmj}TUs`F&|83)RN@^CT^fVLg7s~nf@K8#l1HyIkL8{khaSUeT%Rs?-~1z1xn5$w+u zfR6c}EPuaBW%9-uFuSJGf7~d+l{`VQ>Yw-5Fv8%ffil8_!ooxjd2|DU(z=>fjxRj^ z__is?tkMIiTW_NLxOPOK)2VdybG5R=!Y{~>sVImxB{1&`<)j6DPI05q>tKEJJ<3&| z0>i$ck9OqpXxTXh-6d)|dH}vU=IgaC0ZJT-lANd0`(-VjY@dNH1WJsufG~FZ$GWq> zt7d8DUZNmwo(YJUDJEGy8yTRLk9;z|MnMpkSwN(HAJ|Tj#lL0MG@h@9TcTe*sCAz5 ztj5~2Ln%+77tJ91o!~uwE_Q3hJtde01YB<;jD& z{yVH0JWUNgt%H3(10_ezlI2(xo3y5%rA>9GOG(D54PF;MUgUZemnt=+&EqKOuVkM8 z@op6|?4IYZWFOWVbKsh|YR*!dJ=I`m+#!na)mL+j)pw_!yJGa1B-ZqFt1Gjyg`=f# z4_w*O1bO{(4`%S=W~4M=FK3cNTdv#-DG%L)<#R1?b3ikCXkQD5iuHN;@%_E%3oe&* z9paeACLTvFS#=Oye?=4YV&98Xe{5opEII(QKDUo&%XRhc>>-GurwP6D?e+M1e;?Z6 z_$F+5ybtsOON{Jng-Pb^2Ri^1BOkWn+CS{)yeFtk2Y8BH+lN@kUO@!!0nTT)O9PzV zhNQ4HQWmsvjCbLif#|9*pi0^8?oT;bmNf(7z5NK`Yld+&h|w)vBo`G}q-~VVE!Z+v z-H+UhHIk4dKG6@d8$+S)AU@R`D)(49-h`AcAHvn;Kg0g?L->H`YQX}sj+PaNxQMeg zn!dx?eh|pjD21(@$=TUJ6(hS^+3AOYY-jjkAkRpd(1t3WYv3raty>pt&}Z3FRWcbi ze*wY399h$DUfTIF`+KqL! j2EFU6RrF2lkCch+s7PEp2M2%S+7R;Z^KEVCjw$~EwWnH| diff --git a/pkg/services/control/service.proto b/pkg/services/control/service.proto index e7d218f2..cbc3aaf5 100644 --- a/pkg/services/control/service.proto +++ b/pkg/services/control/service.proto @@ -421,10 +421,12 @@ message StopShardEvacuationResponse { // AddChainLocalOverride request. message AddChainLocalOverrideRequest { message Body { - // Container id for which the overrides are applied. - bytes container_id = 1; + // Target for which the overrides are applied. + ChainTarget target = 1; - // Serialized rule chain. + // Serialized rule chain. If chain ID is left empty + // in the chain, then it will be generated and returned + // in the response. bytes chain = 2; } @@ -437,6 +439,8 @@ message AddChainLocalOverrideRequest { message AddChainLocalOverrideResponse { message Body { // Chain ID assigned for the added rule chain. + // If chain ID is left empty in the request, then + // it will be generated. string chain_id = 1; } @@ -448,8 +452,8 @@ message AddChainLocalOverrideResponse { // GetChainLocalOverride request. message GetChainLocalOverrideRequest { message Body { - // Container id for which the overrides are defined. - bytes container_id = 1; + // Target for which the overrides are applied. + ChainTarget target = 1; // Chain ID assigned for the added rule chain. string chain_id = 2; @@ -475,8 +479,8 @@ message GetChainLocalOverrideResponse { // ListChainLocalOverrides request. message ListChainLocalOverridesRequest { message Body { - // Container id for which the overrides are defined. - bytes container_id = 1; + // Target for which the overrides are applied. + ChainTarget target = 1; } Body body = 1; @@ -498,8 +502,8 @@ message ListChainLocalOverridesResponse { message RemoveChainLocalOverrideRequest { message Body { - // Container id for which the overrides are defined. - bytes container_id = 1; + // Target for which the overrides are applied. + ChainTarget target = 1; // Chain ID assigned for the added rule chain. string chain_id = 2; diff --git a/pkg/services/control/service_frostfs.pb.go b/pkg/services/control/service_frostfs.pb.go index 852788a307b04620972a3759fffc5432d89a8d9a..e163e54b7a76a87fd9c060b57fa95c29e00a2dc4 100644 GIT binary patch delta 292 zcmZ3#m-YHy)`l&NM(mRvnkCso5{uGPOEjlD$TCW8PiJRLVw!w_O^Xd8Jo#X_$n@9p zj69QfrV3C0@4(2qU5ATNMHr+Ls$^1@;`VM?#(1zcR delta 195 zcmcb!?o zX6B_9d8TYO?3=BObz><+|Q?m-wcA$KQ0E)e{ X8K?7jGU`mP_hy_8a=~_>3nGO88n{BO diff --git a/pkg/services/control/types.pb.go b/pkg/services/control/types.pb.go index f031f8043d87f83ea9725eec9071283be691823e..8f083d69546141facdf8a0778650c9fe9b0d1b7f 100644 GIT binary patch delta 2826 zcmb7GO>7%Q6qb_`>P?z7O|Yvvai?jM+EwbT|JI31QaOq17Bwb6trREq&&D4Aw29Z) zn>H1sLE^xrw|8j8rQA56iWb8GsR(iCjjB{a%>dWn*Wyj&<=kjpu$Cbgdne7aCny&geGE5(XR9D-TD z>|%5>eCAvjj;MnR z5;xA&;ey12h)zMst`^h8v9?R1P7*Gzt~i|JMB_}!tAe>if}=K4q}Lpc*T9q3!>Pigp&5=G$PRhqu1Q)+mkT9TDLb6P`WEGeE)@Q1TR7&8*O%><8I<-Vb_x4> zSI=&IP3`$T{y`#E+q><@W_1)up+e*$QI;;#v`SQkT+0{Id9tjeDO%713GM7;lZh+_6&C#ER_{i@eWe9J)^8q)UvYdYV6ZT zE?1Odun*mom4ZrFO6v8#lwgj^E0k2!a-oefKHswO|ATSXk}jI( zKl9SK2QZs}h^z+?$d80YB+pXd5e%#RAkX)-`!JBCNs@t^^ZoGSRObeI8EthzJem|3 zvL-T0{Vy_NbOdd{7wKyHiWwe8gu970cq4WW-br+x(rEaQq7UspEkTsok2%+@e0SJp zYki)MY{%ZkmFNHO#nDI`9 zpgSIc&lXz2JaY{0UbMok=z&(Zwtd(DAIGgG0$;|Fj6Gpxsqcp~iDAxdBf)LA6KMN} z*`6%gpeuQj+d@fhTS%hqL1F~HN)BMsT92_7dN(x$qp1NTr?p}LDQeBZiNbm+a*$`H z`A8B^KY+F1$-txO9{4?l!G1a8glSpZl3G`z+BHA+UVU4RG?{!bmKlVfd-p<5=7=f4 zMoVxfGXk6J+d*xob*GW;AagoI=OAI1i#JFbTn4V~KMOEG55slZ0dw^DbKJoXH>ikj z61-1c_!fX~se6uFhwE_T%gR!PUBTyySw%2A3{K_1vA?U z?!71lB?#qv;Y5C4t8vb`V{Cy>@`8n5lgT1Guw3Owme3&e2McX%wi&Ug>N42dkM{1^@s6 delta 849 zcmY*XPiWI%6sKXfO{iAZt?Mez+KJklxirn6cB8B?BvV#r5xsa=3#M&qns#l{Rl!Z! zK~UV~-NlQZM3h`Sh~P+-YXR30^0SLJg;cDoza>nlAw}#sv0WFfiHnlIMm7 zyY(2>*UV|ysQE!?PJz=JKO|>yw9&-w*G)RQ)1+%;38|$#jXI4g_NH%9Sfbh`s$HTg zJZq0Um`FllbeilSXC;Tz+Z7&S<}q|HCeg0|VeYz7JjbXAWSSz1{r}-d2_aviu z>6fkov0e_!Q>cux_auYWtb^G@$Z?PO=KZpXGX|Df`TnT-VVcEdm0N0 zJo6A0KHG8FT8Ti>2_TXKUq1pB=aMf6FPtmz+bJ><55@jGqw=uPUxE+)0!Ivz-W&3q z46EzugX!_8VRamP)xO=)Irczj6n59g4|ZdTgQ>yc01^t6FzQ|$eDcG)J3)8hp6!d` ZFUPW%omNTj^{REfH%DA5?#}%r^A}f*^Vk3Y diff --git a/pkg/services/control/types.proto b/pkg/services/control/types.proto index b34988c2..d1bc05e2 100644 --- a/pkg/services/control/types.proto +++ b/pkg/services/control/types.proto @@ -169,3 +169,20 @@ enum ShardMode { // DegradedReadOnly. DEGRADED_READ_ONLY = 4; } + + +// ChainTarget is an object to which local overrides +// are applied. +message ChainTarget { + enum TargetType { + UNDEFINED = 0; + + NAMESPACE = 1; + + CONTAINER = 2; + } + + TargetType type = 1; + + string Name = 2; +} \ No newline at end of file diff --git a/pkg/services/control/types_frostfs.pb.go b/pkg/services/control/types_frostfs.pb.go index ab246dbdc7726557d41c0c2aa2acdad12f7e1fe4..858d85a1c7c141920561716cdfcd819b3a3f1171 100644 GIT binary patch delta 121 zcmdmK-fq8Pr}X3vf}PyX8Ht&BA&EulsU?#Y89gS;aB&J4>L_I9l^7doROp3N7NlxU zUMQr<;+L44x_Lh16h;&+Hq47BTZ{8dRuvSS+`!Ah3Q=DuZ6X3vugS$(lv+|+l&6qX Jn#NVj1pu-!Clvqy delta 7 OcmZp--)X*Kr!)W!NCP_n