如何在ansible playbook中动态使用AWS实例的IP地址而不使用ansible playbook将其保存在外部文件中
how to use AWS instance's IP address dynamically in an ansible playbook without saving it in an external file using ansible playbook
我在 EC2 上有 2 个集群,1 个是 Cassandra(4 节点集群),另一个是 Kafka(3 节点集群)。我有一个在 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 地址存储在清单文件中,任何建议
P.S。如果需要,请您提出任何问题,这是我的第一个问题,在此先感谢
你好,
我还需要获取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
要获取 AWS EC2 的 IP 地址,您可以尝试以下命令,它将 AWS 输出提取到您想要的文件中:
aws cloudformation describe-stacks --stack-name IngCassandraCluster --query 'Stacks[].Outputs[].OutputValue' --output text --> kunaltest.text
您可以在 :shell:" 下将此行添加到您的剧本中,以使其执行您想要的操作。
我在 EC2 上有 2 个集群,1 个是 Cassandra(4 节点集群),另一个是 Kafka(3 节点集群)。我有一个在 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 地址存储在清单文件中,任何建议
P.S。如果需要,请您提出任何问题,这是我的第一个问题,在此先感谢
你好, 我还需要获取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
要获取 AWS EC2 的 IP 地址,您可以尝试以下命令,它将 AWS 输出提取到您想要的文件中:
aws cloudformation describe-stacks --stack-name IngCassandraCluster --query 'Stacks[].Outputs[].OutputValue' --output text --> kunaltest.text
您可以在 :shell:" 下将此行添加到您的剧本中,以使其执行您想要的操作。