Amazon web services 如何使用AWS实例&x27;在ansible playbook中动态设置IP地址,而不使用ansible playbook将其保存在外部文件中

Amazon web services 如何使用AWS实例&x27;在ansible playbook中动态设置IP地址,而不使用ansible playbook将其保存在外部文件中,amazon-web-services,jenkins,ansible,microservices,Amazon Web Services,Jenkins,Ansible,Microservices,我有两个集群,一个是卡桑德拉集群(4节点集群),另一个是卡夫卡集群(3节点集群)。我有一个在AWS实例上部署我的微服务的playbook,对于该微服务playbook,我维护了一个清单文件,该文件将我的cassandra/kafka主机的IP地址存储在一个变量中,如下所示: cassandra_hosts = 'X.X.X.X:9042,X.X.X.X:9042,X.X.X.X:9042,X.X.X.X:9042' kafka_host = 'X.X.X.X:9092,X.X.X.X:9092,

我有两个集群,一个是卡桑德拉集群(4节点集群),另一个是卡夫卡集群(3节点集群)。我有一个在AWS实例上部署我的微服务的playbook,对于该微服务playbook,我维护了一个清单文件,该文件将我的cassandra/kafka主机的IP地址存储在一个变量中,如下所示:

cassandra_hosts = 'X.X.X.X:9042,X.X.X.X:9042,X.X.X.X:9042,X.X.X.X:9042'
kafka_host = 'X.X.X.X:9092,X.X.X.X:9092,X.X.X.X:9092,X.X.X.X:9092'
- hosts: dynamic_hosts
  become: yes
  become_user: xxxxxx
  become_method: sudo 

  vars:
   ansible_connection: "{{ connection_type }}"
   ansible_ssh_user: "{{ ssh_user_name }}"
   ansible_ssh_private_key_file: "{{ ssh_private_key_file }}"

  tasks:

    - name: Register Service as an Upstart
      shell: chdir="{{dest_location}}" "./{{upstartscript}}.sh" " -p  {{service_port}}  -u  {{service_uri}}  -v  {{service_version}}  -c  {{cassandra_hosts}}  -k  {{kafka_host}}  -l  {{log_level}}"
      register: escript

    - name: Register Service as an Upstart Output
      debug: 
       msg : "{{ escript.stdout }}"
|||                                                           Outputs                                                           
|||
||+---------------------------+-----------------+---------------------------
----------------------------------------------------+||
|||        Description        |    OutputKey    |                                  
OutputValue                                  |||
||+---------------------------+-----------------+---------------------------
----------------------------------------------------+||
|||  IP of Primary Seed Node  |  ZookeeperLink  |  
X.X.X.X:2181,X.X.X.X:2181,X.X.X.X:2181,X.X.X.X:2181     
|||
|||  IP of Primary Seed Node  |  Node2DNSName   |  ip-X-X-X-
X.ec2.internal                                                 |||
|||  IP of Primary Seed Node  |  KafkaLink      |  
X.X.X.X:9092,X.X.X.X:9092,X.X.X.X:9092,X.X.X.X:9092     
|||
|||  IP of Primary Seed Node  |  Node3DNSName   |  ip-X-X-X-
X.ec2.internal                                                |||
|||  IP of Primary Seed Node  |  Node4DNSName   |  ip-X-X-X-
X.ec2.internal                                                |||
|||  IP of Primary Seed Node  |  Node1DNSName   |  ip-X-X-X-
X.ec2.internal  
microservice剧本大致如下:

cassandra_hosts = 'X.X.X.X:9042,X.X.X.X:9042,X.X.X.X:9042,X.X.X.X:9042'
kafka_host = 'X.X.X.X:9092,X.X.X.X:9092,X.X.X.X:9092,X.X.X.X:9092'
- hosts: dynamic_hosts
  become: yes
  become_user: xxxxxx
  become_method: sudo 

  vars:
   ansible_connection: "{{ connection_type }}"
   ansible_ssh_user: "{{ ssh_user_name }}"
   ansible_ssh_private_key_file: "{{ ssh_private_key_file }}"

  tasks:

    - name: Register Service as an Upstart
      shell: chdir="{{dest_location}}" "./{{upstartscript}}.sh" " -p  {{service_port}}  -u  {{service_uri}}  -v  {{service_version}}  -c  {{cassandra_hosts}}  -k  {{kafka_host}}  -l  {{log_level}}"
      register: escript

    - name: Register Service as an Upstart Output
      debug: 
       msg : "{{ escript.stdout }}"
|||                                                           Outputs                                                           
|||
||+---------------------------+-----------------+---------------------------
----------------------------------------------------+||
|||        Description        |    OutputKey    |                                  
OutputValue                                  |||
||+---------------------------+-----------------+---------------------------
----------------------------------------------------+||
|||  IP of Primary Seed Node  |  ZookeeperLink  |  
X.X.X.X:2181,X.X.X.X:2181,X.X.X.X:2181,X.X.X.X:2181     
|||
|||  IP of Primary Seed Node  |  Node2DNSName   |  ip-X-X-X-
X.ec2.internal                                                 |||
|||  IP of Primary Seed Node  |  KafkaLink      |  
X.X.X.X:9092,X.X.X.X:9092,X.X.X.X:9092,X.X.X.X:9092     
|||
|||  IP of Primary Seed Node  |  Node3DNSName   |  ip-X-X-X-
X.ec2.internal                                                |||
|||  IP of Primary Seed Node  |  Node4DNSName   |  ip-X-X-X-
X.ec2.internal                                                |||
|||  IP of Primary Seed Node  |  Node1DNSName   |  ip-X-X-X-
X.ec2.internal  
上面的代码是我检索我在清单文件中硬编码的IP地址的方式(在代码的第一部分中提到)

我试图实现的是,如何在playbook中动态存储AWS实例的IP地址,并在microservices playbook中使用它,而不将IP地址存储在清单文件中,有什么建议吗

另外,如果需要的话,我请求你提出任何问题,这是我在这里的第一个问题,提前谢谢

嗨, 我还需要获取kafka集群的输出,但是kafka集群在AWS控制台中以不同的方式输出它,如下所示:

cassandra_hosts = 'X.X.X.X:9042,X.X.X.X:9042,X.X.X.X:9042,X.X.X.X:9042'
kafka_host = 'X.X.X.X:9092,X.X.X.X:9092,X.X.X.X:9092,X.X.X.X:9092'
- hosts: dynamic_hosts
  become: yes
  become_user: xxxxxx
  become_method: sudo 

  vars:
   ansible_connection: "{{ connection_type }}"
   ansible_ssh_user: "{{ ssh_user_name }}"
   ansible_ssh_private_key_file: "{{ ssh_private_key_file }}"

  tasks:

    - name: Register Service as an Upstart
      shell: chdir="{{dest_location}}" "./{{upstartscript}}.sh" " -p  {{service_port}}  -u  {{service_uri}}  -v  {{service_version}}  -c  {{cassandra_hosts}}  -k  {{kafka_host}}  -l  {{log_level}}"
      register: escript

    - name: Register Service as an Upstart Output
      debug: 
       msg : "{{ escript.stdout }}"
|||                                                           Outputs                                                           
|||
||+---------------------------+-----------------+---------------------------
----------------------------------------------------+||
|||        Description        |    OutputKey    |                                  
OutputValue                                  |||
||+---------------------------+-----------------+---------------------------
----------------------------------------------------+||
|||  IP of Primary Seed Node  |  ZookeeperLink  |  
X.X.X.X:2181,X.X.X.X:2181,X.X.X.X:2181,X.X.X.X:2181     
|||
|||  IP of Primary Seed Node  |  Node2DNSName   |  ip-X-X-X-
X.ec2.internal                                                 |||
|||  IP of Primary Seed Node  |  KafkaLink      |  
X.X.X.X:9092,X.X.X.X:9092,X.X.X.X:9092,X.X.X.X:9092     
|||
|||  IP of Primary Seed Node  |  Node3DNSName   |  ip-X-X-X-
X.ec2.internal                                                |||
|||  IP of Primary Seed Node  |  Node4DNSName   |  ip-X-X-X-
X.ec2.internal                                                |||
|||  IP of Primary Seed Node  |  Node1DNSName   |  ip-X-X-X-
X.ec2.internal  
我只想输出卡夫卡林克角色的IP,有什么帮助吗:

    X.X.X.X:9092,X.X.X.X:9092,X.X.X.X:9092,X.X.X.X:9092
我尝试了以下命令,但它不起作用:

 aws cloudformation describe-stacks --stack-name IngKafkaCluster --query 'Stacks[].Outputs[].OutputValue' --output text
我在上面的命令上得到以下输出,这没有错,但不完全是我想要的:

X.X.X.X:2181,X.X.X.X:2181,X.X.X.X:2181,X.X.X.X:2181        ip-X-X-X-X.ec2.internal    X.X.X.X:9092,X.X.X.X:9092,X.X.X.X:9092,X.X.X.X:9092        ip-X-X-X-X.ec2.internal   ip-X-X-X-X.ec2.internal   ip-X-X-X-X.ec2.internal

要获取AWS EC2的Ip地址,您可以尝试以下命令,该命令将AWS输出提取到所需的文件中:

 aws cloudformation describe-stacks --stack-name IngCassandraCluster --query 'Stacks[].Outputs[].OutputValue' --output text --> kunaltest.text

您可以在playbook中的以下位置添加这一行:shell:“让它做您想做的事。

要获取AWS EC2的Ip地址,您可以尝试以下命令,该命令将AWS输出提取到您想要的文件中:

 aws cloudformation describe-stacks --stack-name IngCassandraCluster --query 'Stacks[].Outputs[].OutputValue' --output text --> kunaltest.text

你可以在剧本中添加以下内容:shell:“让它做你想做的事。

我已经编辑了问题的范围,你能为我讲解卡夫卡部分吗?我已经编辑了问题的范围,你能为我讲解卡夫卡部分吗?