我可以从Ansible导航CICS资源之间的关系吗?

我可以从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构建查询,而无需特殊的集合。然后,您

我已经开始研究Ansible星系了。我一直在使用它来做一些事情,比如请求单个资源,但我看不到一种像在CICS的CMCI GraphQLAPI中那样遍历关系的方法


集合是否具有该功能?

否,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
    }
  }
}

向查询中添加变量-更好的方法 然而,我对模板制作有点怀疑。看来