【问题标题】:how to use AWS instance's IP address dynamically in an ansible playbook without saving it in an external file using ansible playbook如何在 ansible playbook 中动态使用 AWS 实例的 IP 地址,而不使用 ansible playbook 将其保存在外部文件中
【发布时间】:2017-04-28 19:31:54
【问题描述】:

我有 2 个集群,1 个 Cassandra(4 节点集群)和其他 Kafka(3 节点集群)在 EC2 上。我有一个在 AWS 实例上部署我的微服务的剧本,对于那个微服务剧本,我维护了一个清单文件,它将我的 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 }}"

上面的代码是我检索我在库存文件中硬编码的 IP 地址的方式(在代码的第一部分中提到)。

我想要实现的是,如何将我的 AWS 实例的 IP 地址动态存储在我的剧本中并在我的微服务剧本中使用它而不将 IP 地址存储在清单文件中,任何建议

附:如果需要,请您提出任何问题,这是我在这里的第一个问题,提前谢谢

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

|||                                                           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  

我只想输出 KafkaLink 部分的 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

【问题讨论】:

    标签: amazon-web-services jenkins ansible microservices


    【解决方案1】:

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

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

    你可以在你的剧本中添加这一行:shell:" 让它做你想做的事。

    【讨论】:

    • 我已经编辑了问题的范围,请您指导我了解 kafka 部分吗?
    猜你喜欢
    • 2017-01-02
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    相关资源
    最近更新 更多