我什至不确定这是否可能。
我知道你可以有一个剧本来调用其他剧本..
IE:
---
# MasterPlaybook.yml
- include: playbook1.yml
when: some_var == "true"
- include: playbook2.yml
when: someother_var == "true"
Run Code Online (Sandbox Code Playgroud)
如果我调用 MasterPlaybook.yml 并传入 Vars,这将起作用。
但是我想包括来自其他一些 yml 的变量,例如这里是 myvars.yml
some_var: "true"
someother_var: "false"
Other_var: "Foo"
Run Code Online (Sandbox Code Playgroud)
因此,如果我希望将其包含在 playbook1.yml 中,我只需添加..
---
- name: Script Play use variables to get and push out the code
hosts: somegroup
remote_user: "some user"
vars:
url: 'The url of the build'
buildNumber: 'the build number'
jobName: 'passed in job name'
vars_files:
- ~/myvars.yml
serial: 1
Run Code Online (Sandbox Code Playgroud)
它会拉入 vars..
我的问题是如何在 …
Ansible 1.9.2/最新版本。操作系统:CentOS 6.7/更高版本 JAVA_HOME、PATH 变量和所有其他设置都正确。
我的 perf_tests/tasks/main.yml 中有以下剧本运行。为了仅运行此剧本,我正在使用 Ansible 标签。
# Run JMeter tests
- name: Run JMeter test(s)
# command: "export PATH={{ jdk_install_dir }}/bin:$PATH && export JAVA_HOME={{ jdk_install_dir }} && {{ jmeter_install_dir }}/bin/jmeter -n -t {{ common_download_dir}}/perf_tests/ProjectTest1.jmx -l {{ common_download_dir}}/perf_tests/log_jmeter_ProjectTest1.jtl"
command: export PATH={{ jdk_install_dir }}/bin:$PATH && export JAVA_HOME={{ jdk_install_dir }} && /apps/jmeter/apache-jmeter-2.13/bin/jmeter -n -t /tmp/perf_tests/ProjectTest1.jmx -l /tmp/perf_tests/log_jmeter_ProjectTest1.jtl
become_user: "{{ common_user }}"
tags:
- giga
Run Code Online (Sandbox Code Playgroud)
JMeter 可执行文件所需的文件存在于目标机器上,我在 ansible 中使用“命令”模块来启动 JMeter。
[appuser@jmeter01 ~]$ ls -l /apps/jmeter/apache-jmeter-2.13/bin/jmeter /tmp/perf_tests/ProjectTest1.jmx
-rwxr-xr-x. 1 appuser appgroup …Run Code Online (Sandbox Code Playgroud) jmeter file-not-found performance-testing ansible ansible-playbook
我的主机没有稳定的主机名,但具有预定义的 ip 范围。如何设置 ansible 清单文件的 IP 范围?我正在尝试设置这样的东西:
test.ini:
[database]
db ansible_ssh_host=1.1.1.[20:25] ansible_ssh_port=22
[lemp]
lemp ansible_ssh_host=1.1.1.[10:15] ansible_ssh_port=22
Run Code Online (Sandbox Code Playgroud)
现在我在运行 ansible-playbook -i test.ini 后收到此错误:
fatal: [db] => SSH Error: ssh: Could not resolve hostname 1.1.1.[20:25]: Name or service not known
Run Code Online (Sandbox Code Playgroud)
谢谢你。
我正在开发一个Ansible playbook,我用它ec2_vpc_subnet_facts在VPC中注册有关子网的事实,如:
- ec2_vpc_subnet_facts:
region: "{{ ec2_region }}"
filters:
vpc-id: "{{ vpc.vpc.id }}"
register: vpc_subnet_facts
Run Code Online (Sandbox Code Playgroud)
从而得到一个像(删除不相关的属性)的结构:
"vpc_subnet_facts": {
"changed": false,
"subnets": [
{
...
"id": "subnet-0bb50753",
...
"tags": {
"Name": "mytag1"
},
...
},
{
...
"id": "subnet-0bb50754",
...
"tags": {
"Name": "mytag2"
},
...
}
]
}
Run Code Online (Sandbox Code Playgroud)
稍后在剧本中,当创建EC2实例时,想法是基于ec2模块vpc_subnet_id属性的标签值查找子网ID ,即mytag1查找关联的子网ID subnet-0bb50753.
我目前的方法是tag => subnet-ID使用结果创建一个字典set_facts,ec2_vpc_subnet_facts但我对替代品感兴趣.
问候,奥拉
amazon-ec2 amazon-web-services amazon-vpc ansible ansible-playbook
我想使用下面的 Ansible 脚本将我的 workspace3 文件夹移动到 /usr/share 目录。但我无法移动它。
- name: Move workspace3 directory to /usr/share/ Folder
command: mv /tmp/workspace3/ /usr/share
Run Code Online (Sandbox Code Playgroud)
我也试过用 shell 模块
shell: mv /tmp/workspace3 /usr/share
Run Code Online (Sandbox Code Playgroud)
我相信这是一个权限问题,我如何通过 ansible 定义权限?
我写了一个ansible任务来创建ec2实例并将主机添加为动态主机.该任务完美地工作并创建了实例,但我无法检索实例信息.
My Ansible版本:2.2.0.0/Ubuntu 14.04
这是我的代码
- name: launch ec2 instance for QA
local_action:
module: ec2
key_name: "{{ ec2_keypair }}"
group: "{{ ec2_security_group }}"
instance_type: "{{ ec2_instance_type }}"
image: "{{ ec2_image }}"
vpc_subnet_id: "{{ ec2_subnet_ids }}"
region: "{{ ec2_region }}"
instance_tags: '{"Name":"{{ec2_tag_Name}}","Type":"{{ec2_tag_Type}}","Environment":"{{ec2_tag_Environment}}"}'
assign_public_ip: yes
wait: true
count: 1
register: ec2
- debug: var=item
with_items: ec2.instances
- add_host: name={{ item.public_ip }} >
groups=dynamically_created_hosts
with_items: ec2.instances
- name: Wait for the instances to boot by checking the ssh port
wait_for: host={{item.public_ip}} port=22 delay=60 …Run Code Online (Sandbox Code Playgroud) 如果我想使用例如apt安装一些东西我可以创建playbook:
- hosts: xxx
roles:
- my-role
Run Code Online (Sandbox Code Playgroud)
并且在角色的tasks/main.yml中:
- name: install something
sudo: yes
apt: "name=something state=installed"
Run Code Online (Sandbox Code Playgroud)
但是,我可以在剧本中添加sudo:
- hosts: xxx
sudo: yes
roles:
- my-role
Run Code Online (Sandbox Code Playgroud)
并从任务中删除它:
- name: install something
apt: "name=something state=installed"
Run Code Online (Sandbox Code Playgroud)
两种解决方案都有效,但哪种解决方案更好?这个解决方案有区别吗?优点?缺点?
我试图在ansible中的when语句中使用变量,我的代码片段如下所示:
- name: git repo for non prod env
git:
repo=http://url/repo.git
dest=/opt/dest
version={{ bld_env }}
when: ( "{{ bld_env }}" == "rc" ) or ( "{{ bld_env }}" == "sandbox" ) or ( "{{ bld_env }}" == "dev" ) or ( "{{ bld_env }}" == "qa" )
Run Code Online (Sandbox Code Playgroud)
这不起作用,并给出一个错误:
The offending line appears to be:
version={{ bld_env }}
when: "{{ bld_env }}" == "rc"
^ here
We could be wrong, but this one looks like it might be an issue with …Run Code Online (Sandbox Code Playgroud) 我正在遍历yml文件并过滤并将那些微服务元数据保留在传递的命令行参数中的列表中
ansible-playbook -i inventory/inventory sp-deployer.yml --ask-vault-pass --extra-vars '{"microservices_list":[iwan,csrservice]}'
Run Code Online (Sandbox Code Playgroud)
最后,根据上述标准,我需要从yml文件中获得这三个值。为此我创建了一个ansible sp-deployer.yml。我使用set_facts创建了动态列表。第一个列表可以正常工作,但是当我创建第二个列表时它失败。请帮助我。其他建议对我也很好。
name: "ms_service"
port: "830"
streams: "noti,jk-noti"
Run Code Online (Sandbox Code Playgroud)
version: 1
name: user
jobs:
ns1:
ip: "1.1.1.1"
ns_version: "4.2"
f_packs:
- f-pack-1:
name: "pack1"
microservices:
- microservice-1:
name: "ms_service"
port: "830"
streams: "noti,jk-noti"
- microservice-2:
name: "ms_service1"
port: "830"
streams: "noti1,jk-noti1"
- f-pack-2:
name: "pack4"
microservices:
- microservice-1:
name: "ms_service3"
port: "830"
streams: "noti,jk-noti3"
- microservice-2:
name: "ms_service4"
port: "830"
streams: "noti,jk-noti4"
- microservice-3:
name: "ms_service5"
port: "830"
streams: "noti,jk-noti5"
Run Code Online (Sandbox Code Playgroud)
脚本:sp-deployer.yml
--- …Run Code Online (Sandbox Code Playgroud) 我为我们的Web服务创建了部署手册。每个Web服务都位于其自己的目录中,例如:
/webapps/service-one/
/webapps/service-two/
/webapps/service-three/
Run Code Online (Sandbox Code Playgroud)
我想检查服务目录是否存在,如果存在,我想运行一个shell脚本来优雅地停止服务。目前,我可以使用来完成此步骤ignore_errors: yes。
- name: Stop services
with_items: services_to_stop
shell: "/webapps/scripts/stopService.sh {{item}}"
ignore_errors: yes
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果其中一个目录不存在或第一次部署服务,则输出将非常混乱。我实际上想要这样的东西之一:
这个:
- name: Stop services
with_items: services_to_stop
shell: "/webapps/scripts/stopService.sh {{item}}"
when: shell: [ -d /webapps/{{item}} ]
Run Code Online (Sandbox Code Playgroud)
或这个:
- name: Stop services
with_items: services_to_stop
shell: "/webapps/scripts/stopService.sh {{item}}"
stat:
path: /webapps/{{item}}
register: path
when: path.stat.exists == True
Run Code Online (Sandbox Code Playgroud)