标签: ansible-playbook

带有变量的剧本的 ansible 剧本

我什至不确定这是否可能。

我知道你可以有一个剧本来调用其他剧本..

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

我的问题是如何在 …

variables ansible ansible-playbook

1
推荐指数
1
解决办法
9620
查看次数

ansible 命令模块:JMeter msg:[Errno 2] 没有那个文件或目录

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

1
推荐指数
1
解决办法
3900
查看次数

Ansible:ssh_host 包含 IP 范围

我的主机没有稳定的主机名,但具有预定义的 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 ansible-playbook

1
推荐指数
1
解决办法
4842
查看次数

来自复杂结构的Ansible查找值?

我正在开发一个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

1
推荐指数
1
解决办法
1066
查看次数

使用外壳命令“mv”使用 ansible 将文件夹从一个移动到另一个

我想使用下面的 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 ansible-playbook

1
推荐指数
1
解决办法
1万
查看次数

Ansible EC2模块未检索实例信息

我写了一个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)

amazon-ec2 amazon-web-services ansible ansible-playbook

1
推荐指数
1
解决办法
469
查看次数

在剧本和任务中使用sudo有什么区别?

如果我想使用例如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)

两种解决方案都有效,但哪种解决方案更好?这个解决方案有区别吗?优点?缺点?

sudo ansible ansible-playbook

0
推荐指数
1
解决办法
283
查看次数

如何在ansible中的"when"语句中使用变量?

我试图在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)

ansible ansible-playbook

0
推荐指数
1
解决办法
5761
查看次数

错误是:“字典对象”没有属性“ ansible_facts”

我正在遍历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)

vars.yml

    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)

ansible ansible-playbook

0
推荐指数
1
解决办法
5313
查看次数

Ansible-检查是否存在多个目录-如果存在,请在每个目录上运行脚本-如何?

我为我们的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)

ansible ansible-playbook

0
推荐指数
1
解决办法
3983
查看次数