首页 > 其他分享 >CEL 表达式

CEL 表达式

时间:2023-12-05 17:45:08浏览次数:26  
标签:body testing string CEL 字符串 test 表达式 name

字符串函数

'refs/heads/main'.split('/') // result = list ['refs', 'heads', 'main']
['refs', 'heads', 'main'].join('/') // result = string 'refs/heads/main'
'my place'.replace('my ',' ') // result = string 'place'
'this that another'.replace('th ',' ', 2) // result = 'is at another'

CEL 表达式 数字操作

定义json格式数据

{
  "count": 2,
  "measure": 1.7
}

CEL 转换数据

可以显式转换数字,或添加另一个双精度值
interceptors:
  - cel:
      overlays:
        - key: count_plus_1
          expression: "body.count + 1.0"
        - key: count_plus_2
          expression: "int(body.count) + 2"
        - key: measure_times_3
          expression: "body.measure * 3.0"

返回结果

{
  "count_plus_1": 2,
  "count_plus_2": 3,
  "measure_times_3": 5.1
}

CEL 表达式示例

定义json格式数据

{
  "labels": [
    {
      "name": "test-a"
    },
    {
      "name":"test-b"
    }
  ]
}

定义 filter

filter: body.labels.exists(x, x.name == 'test-b') is true
filter: body.labels.exists(x, x.name == 'test-c') is false
filter: body.labels.exists_one(x, x.name.endsWith('-b')) is true
filter: body.labels.exists_one(x, x.name.startsWith('test-')) is false
filter: body.labels.all(x, x.name.startsWith('test-')) is true
filter: body.labels.all(x, x.name.endsWith('-b')) is false

CEL 扩展列表

http.Request 值的正文被解码为 JSON 并公开,并且标头也可用。
Symbol Type Description Example
body map(string, dynamic) 这是来自传入 http.Request 的解码 JSON 正文,公开为字符串键到任何值类型的映射。
body.value == 'test'
header map(string, list(string)) 这是请求标头。
header['X-Test'][0] == 'test-value'
requestURL string 这是传入 HTTP 请求的 URL。
requestURL.parseURL().path

CEL 函数列表

这列出了可从 CEL interceptor中的 CEL 表达式使用的自定义函数。
Symbol Type Description Example
match header.match(string, string) -> bool 使用 Go 的 http.Request 中的规范标头匹配来将标头与值进行匹配。
header.match('x-test', 'test-value')
canonical header.canonical(string) -> string 使用 Go 的 http.Request 中匹配的规范标头来获取提供的标头名称。
header.canonical('x-test')
truncate
<string>.truncate(uint) -> string
将字符串截断为不超过指定长度。
body.commit.sha.truncate(5)
split
<string>.split(string) -> list(string)
根据提供的分隔符值拆分字符串。
body.ref.split('/')
join
<list(string)>.join(string) -> string
在提供的分隔符值上连接字符串列表。
['body', 'refs', 'main'].join('/')
decodeb64 **deprecated: please use base64.decode**
<string>.decodeb64() -> string
解码 Base64 编码的字符串。
body.message.data.decodeb64()
compareSecret
<string>.compareSecret(string, string, string) -> bool
Constant-time comparison of strings against secrets, this will fetch the secret using the combination of namespace/name and compare the token key to the string using a cryptographic constant-time comparison..

The event-listener service account must have access to the secret. The parameters to the function are 1. the key within the secret, 2. the secret name, and 3. the namespace for the secret (optional, defaults to the namespace of the EventListener).

header.canonical('X-Secret-Token').compareSecret('', 'secret-name', 'namespace')
compareSecret
<string>.compareSecret(string, string) -> bool
This is almost identical to the version above, but only requires two arguments, the namespace is assumed to be the namespace for the event-listener.
header.canonical('X-Secret-Token').compareSecret('key', 'secret-name')
parseJSON()
<string>.parseJSON() -> map<string, dyn>
这会将包含 JSON 主体的字符串解析为随后可在其他表达式中使用的映射。
'{"testing":"value"}'.parseJSON().testing == "value"
parseYAML()
<string>.parseYAML() -> map<string, dyn>
这会将包含 YAML 正文的字符串解析为随后可在其他表达式中使用的映射。
'key1: value1\nkey2: value2\n'.parseYAML().key1 == "value"
parseURL()
<string>.parseURL() -> map<string, dyn>
这会将包含 URL 的字符串解析为包含 URL 元素键的映射。 生成的映射将包含此 URL "https://user:[email protected]/test/path?s=testing#first"
Field Example
scheme https
host example.com
path /test/path
rawQuery s=testing
fragment first
query {"s": "testing"}
queryStrings {"s": ["testing"]}
auth {"username": "user", "password": "pass"}
请注意查询和查询字符串之间的区别,在查询中,具有相同名称的多个查询参数将以逗号分隔,对于提供单个字符串的情况,这将只是单个字符串值。对于 queryString,查询参数值以列表形式提供,可以通过索引进行访问。
'https://example.com/test?query=testing'.parseURL().query['query'] == "testing"
marshalJSON()
<jsonObjectOrList>.marshalJSON() -> <string>
以字符串形式返回“jsonObjectOrList”的 JSON 编码。
{"testing":"value"}.marshalJSON() == "{\"testing\": \"value\"}"

参考文档

https://tekton.dev/docs/triggers/cel_expressions/

https://github.com/google/cel-spec/

标签:body,testing,string,CEL,字符串,test,表达式,name
From: https://www.cnblogs.com/wangguishe/p/17877714.html

相关文章

  • Salesforce LWC学习(四十六) 自定义Datatable实现cell onclick功能
    本篇参考:https://developer.salesforce.com/docs/component-library/bundle/lightning-datatable背景:我们有时会有这种类似的需求,显示Account列表,Account列除了需要显示Account信息,还需要显示其他的内容,比如当前Account有多少Opportunity,有多少Contact数量。点击数量信息,可以显示......
  • 动手写一个正则表达式引擎
    曾经有人开玩笑:当碰到棘手问题的时候,可以考虑使用正则表达式当考虑正则表达式的时候,又多了一个棘手的问题日常工作中,正则表达式是一个非常强大的工具,编写编译器/解释器的时候,正则表达式是必须的工具。自己动手写一个正则表达式,有利于使用者以正则表达式的方式思考,也是一个非常好......
  • Java登陆第十七天——Java8之Lambda表达式
    在实例化Thread类时,需要传入一个Runnable接口的实现类。publicThread(Runnabletarget)实际开发中,通常是使用匿名内部类实现Runnable接口。栗子:publicclassTest27{publicstaticvoidmain(String[]args){Threadt=newThread(newRunnable(){//匿名......
  • Excel判断日期是否是工作日的实现(排除节假日,加上补班日)
     实现思路:工作日= 【周一到周五(排除节假日)或者补班日】公式编写:1.周一到周五判断WEEKDAY(A2,2) 获取该日期是星期几(返回:1-7),那么周一到周五就是<62.非节假日判断COUNTIF($G$2:$G$398,A2)=0统计该日期在指定区域$G$2:$G$398中出现的次数,非节假日就是未出现,出现......
  • Java登陆第十七天——正则表达式
    在java.util.regex包下,提供了正则表达式对字符串进行约束规范匹配正则表达式必须依靠Pattern类和Matcher类。PatternPattern类的主要作用是编写正则规范。常用方法如下:方法类型描述publicstaticPatterncompile(Stringregex)静态方法传入正则表达式规则,并返回......
  • 基础lucksheet实现前端导出excel文件
    文章参考:https://blog.csdn.net/csdn_lsy/article/details/1071797081.引入两个插件,其中exceljs负责将lucksheet的数据格式转化成excel的buffer流,file-saver负责将buffer转成blob文件流导出。npminstallexceljsnpminstallfile-saver2.代码实现constExcel=require('......
  • 发现一个很好用的excel的php扩展
    废话不多,直接给文档地址:xlswrite导出时不容易超出内存,号称最大使用内存为最后一行数据大小。导出速度也很6.  插入内容:使用 Spreadsheet时,可以切换使用存储方式,默认是内存,如果切换了其他的比如文件,可以减少内存压力。Settings::setCache需要传入实现接口CacheInte......
  • Excel -- 基本操作
    自定义序列导入CSVCtrl+S就不会弹错误了......
  • 98、swift--- tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPat
    作用:复用cell.可以用标识符从表视图中获得可重用单元格.for:indexPath通过指定单元格位置获得可重用单元格,不需要判断.用于dequeue(出队)一个可复用的cell,用于在UITableView或UICollectionView中显示。这个方法接收两个参数:withIdentifier:一个字符串,表示要dequeue的......
  • Java实现Excel导入和导出
    1.功能测试1.1测试准备在做测试前,我们需要將【2.环境准备】中的四个文件拷贝在工程里(如:我这里均放在了com.zyq.util.excel包下)。1.2数据导入1.2.1导入解析为JSON比如,我们有下面一个表格:Controller代码:@PostMapping("/import")publicJSONArrayimportUser(@Requ......