我可以从Ansible导航CICS资源之间的关系吗?
我已经开始研究Ansible星系了。我一直在使用它来做一些事情,比如请求单个资源,但我看不到一种像在CICS的CMCI GraphQLAPI中那样遍历关系的方法我可以从Ansible导航CICS资源之间的关系吗?,ansible,graphql,cics,Ansible,Graphql,Cics,我已经开始研究Ansible星系了。我一直在使用它来做一些事情,比如请求单个资源,但我看不到一种像在CICS的CMCI GraphQLAPI中那样遍历关系的方法 集合是否具有该功能?否,CICS集合不具有使用CMCI GraphQL API的功能。它纯粹使用CMCI REST API,该API在一个类型上只处理一种资源类型 但是,这并不意味着您不能从Ansible使用CMCI GraphQL API到CICS!该API通常更易于理解,您可以使用GraphiQL构建查询,而无需特殊的集合。然后,您
集合是否具有该功能?否,CICS集合不具有使用CMCI GraphQL API的功能。它纯粹使用CMCI REST API,该API在一个类型上只处理一种资源类型 但是,这并不意味着您不能从Ansible使用CMCI GraphQL API到CICS!该API通常更易于理解,您可以使用GraphiQL构建查询,而无需特殊的集合。然后,您可以使用Ansible内置的
uri
模块发送GraphQL请求并从响应中获取信息
简单查询
例如,这里有一个简单的剧本和附带的GraphQL查询,用于获取CICSplex及其CICS区域的结构,并打印出结果。重要的部分是添加到请求的正文
中的查询
键
playbook1.yml
:
-hosts:localhost
任务:
-名称:从CICS获取数据
寄存器:结果
uri:
网址:https://my.cicsplex:12345/graphql/
方法:邮寄
body_格式:json
正文:
查询:{{lookup(“file”,“/querys/topology_query.graphql”)}}}{graphql查询在这里传递
-名称:打印响应
调试:
msg:“{result.json}}”
querys/topology\u query.graphql
:
{
cicsplexes {
name
regions {
name
}
}
}
query searchForRegion ($regionName: String!) { # query declares used variables
cicsplexes {
name
region(name: $regionName) { # GraphQL expands the variable here at query execution time
name
}
}
}
向查询中添加变量 当然,您可能希望参数化查询。您可以使用Ansible中的Jinja模板来实现这一点。这里有一个剧本和附带的GraphQL查询,用于在所有连接的CICSplex中查找特定的区域名称(名为
MYREGION
,位于vars
)
playbook2.yml
:
-hosts:localhost
变量:
regionName:MYREGION
任务:
-名称:从CICS获取数据
寄存器:结果
uri:
网址:https://my.cicsplex:12345/graphql/
方法:邮寄
body_格式:json
正文:
查询:{{lookup(“template”,“/templates/single_region_query.graphql.j2”)}}}模板而不是普通文件
-名称:打印响应
调试:
msg:“{result.json}}”
templates/single\u region\u query.graphql.j2
:
{
cicsplexes {
name
region(name: "{{ regionName }}") { # this variable will be expanded by Ansible
name
}
}
}
向查询中添加变量-更好的方法 然而,我对模板制作有点怀疑。当VAR从其他地方进入时,似乎很容易出现注入问题,无论是恶意的还是偶然的!即使写了上面的例子,我也没有正确地引用。所以我更喜欢使用GraphQL的内置变量支持来更好地清理变量 在CICS的CMCI GraphQL API中,您可以使用发送到CICS的请求主体中的
变量
键以及现有的查询
键来提供变量
在这里,您可以看到主体中提供了regionName
变量,然后在GraphQL查询中看到相同的变量(称为$regionName
)
playbook3.yml
:
-hosts:localhost
变量:
regionName:MYREGION
任务:
-名称:从丛中获取数据
寄存器:结果
uri:
网址:https://my.cicsplex:12345/graphql/
方法:邮寄
body_格式:json
正文:
查询:{{lookup(“file”,“/querys/single_region_query.graphql”)}}}}普通文件,而不是模板
变量:
regionName:“{{regionName}}”#变量将被传递到CICS
-名称:打印响应
调试:
msg:“{result.json}}”
querys/single\u region\u query.graphql
:
{
cicsplexes {
name
regions {
name
}
}
}
query searchForRegion ($regionName: String!) { # query declares used variables
cicsplexes {
name
region(name: $regionName) { # GraphQL expands the variable here at query execution time
name
}
}
}
不,CICS集合不能使用CMCI GraphQL API。它纯粹使用CMCI REST API,该API在一个类型上只处理一种资源类型 但是,这并不意味着您不能从Ansible使用CMCI GraphQL API到CICS!该API通常更易于理解,您可以使用GraphiQL构建查询,而无需特殊的集合。然后,您可以使用Ansible内置的
uri
模块发送GraphQL请求并从响应中获取信息
简单查询
例如,这里有一个简单的剧本和附带的GraphQL查询,用于获取CICSplex及其CICS区域的结构,并打印出结果。重要的部分是添加到请求的正文
中的查询
键
playbook1.yml
:
-hosts:localhost
任务:
-名称:从CICS获取数据
寄存器:结果
uri:
网址:https://my.cicsplex:12345/graphql/
方法:邮寄
body_格式:json
正文:
查询:{{lookup(“file”,“/querys/topology_query.graphql”)}}}{graphql查询在这里传递
-名称:打印响应
调试:
msg:“{result.json}}”
querys/topology\u query.graphql
:
{
cicsplexes {
name
regions {
name
}
}
}
query searchForRegion ($regionName: String!) { # query declares used variables
cicsplexes {
name
region(name: $regionName) { # GraphQL expands the variable here at query execution time
name
}
}
}
向查询中添加变量 当然,您可能希望参数化查询。您可以使用Ansible中的Jinja模板来实现这一点。这里有一个剧本和附带的GraphQL查询,用于在所有连接的CICSplex中查找特定的区域名称(名为
MYREGION
,位于vars
)
playbook2.yml
:
-hosts:localhost
变量:
regionName:MYREGION
任务:
-名称:从CICS获取数据
寄存器:结果
uri:
网址:https://my.cicsplex:12345/graphql/
方法:邮寄
body_格式:json
正文:
查询:{{lookup(“template”,“/templates/single_region_query.graphql.j2”)}}}模板而不是普通文件
-名称:打印响应
调试:
msg:“{result.json}}”
templates/single\u region\u query.graphql.j2
:
{
cicsplexes {
name
region(name: "{{ regionName }}") { # this variable will be expanded by Ansible
name
}
}
}
向查询中添加变量-更好的方法 然而,我对模板制作有点怀疑。看来