标签: ansible-playbook

如何在Ansible playbook中编写动态变量

基于extra vars参数I需要写入变量值ansible playbook

ansible-playbook playbook.yml -e "param1=value1 param2=value2 param3=value3"
Run Code Online (Sandbox Code Playgroud)

如果只通过了param1

myvariable: 'param1'  
Run Code Online (Sandbox Code Playgroud)

如果只有param1,则param2通过

myvariable: 'param1,param2' 
Run Code Online (Sandbox Code Playgroud)

如果传递了param1,param2,param3,那么变量值将是

myvariable: 'param1,param2,param3' 
Run Code Online (Sandbox Code Playgroud)

当我尝试通过模板动态创建变量时,我的playbook总是采用先前的变量值.但在 dest=roles/myrole/vars/main.yml其写作正确的价值.

我在这里尝试一下

- hosts: local
  user: roop
  gather_facts: yes
  connection: local

  tasks: 

  - template: src=roles/myrole/templates/myvar.j2 dest=roles/myrole/vars/main.yml

  - debug: var=myvariable

  roles:
        - { role: myrole }
Run Code Online (Sandbox Code Playgroud)

所以里面myrole目录我创建templatevars

- roles
  - myrole
    - vars/main.yml
    - templates/myvar.j2 
Run Code Online (Sandbox Code Playgroud)

模板/ myvar.j2

{% if param1 is defined and param2 is defined and param3 …
Run Code Online (Sandbox Code Playgroud)

jinja2 ansible ansible-playbook

33
推荐指数
3
解决办法
11万
查看次数

如何使用Ansible重新启动Jenkins并等待它回来?

我正在尝试使用Ansible重新启动Jenkins服务:

- name: Restart Jenkins to make the plugin data available
  service: name=jenkins state=restarted

- name: Wait for Jenkins to restart
  wait_for:
    host=localhost
    port=8080
    delay=20
    timeout=300

- name: Install Jenkins plugins
  command:
    java -jar {{ jenkins_cli_jar }} -s {{ jenkins_dashboard_url }} install-plugin {{ item }}
    creates=/var/lib/jenkins/plugins/{{ item }}.jpi
  with_items: jenkins_plugins
Run Code Online (Sandbox Code Playgroud)

但是在第一次运行时,第三个任务会抛出大量的Java错误,包括:Suppressed: java.io.IOException: Server returned HTTP response code: 503 for URL这让我觉得Web服务器(完全由Jenkins处理)还没准备好.有时当我使用我的浏览器访问Jenkins仪表板时,它表示Jenkins尚未就绪,并且它会重新加载,而且确实如此,它工作正常.但我不确定访问该页面是启动服务器的原因,还是什么.

所以我想我需要多次卷曲直到http代码为200?还有其他方法吗?

无论哪种方式,我该怎么做?

你通常如何重启詹金斯?

jenkins jenkins-plugins ansible ansible-playbook

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

在ansible的单个任务中使用"when"检查多个条件

我想在ansible中使用when评估多个条件,这里是我的剧本:

- name: Check that the SSH Key exists
   local_action:
     module: stat
     path: "/home/{{ login_user.stdout }}/{{ ssh_key_location }}"
   register: sshkey_result

 - name: Generating a new SSH key for the current user it's not exists already
   local_action:
      module: user
      name: "{{ login_user.stdout }}"
      generate_ssh_key: yes 
      ssh_key_bits: 2048
   when: sshkey_result.rc == 1 and  ( github_username is undefined or github_username |lower == 'none' )
Run Code Online (Sandbox Code Playgroud)

这是我的var文件供参考:

---
vpc_region: eu-west-1
key_name: my_github_key
ssh_key_location: .ssh/id_rsa.pub
Run Code Online (Sandbox Code Playgroud)

当我尝试执行此剧本时,我收到此错误:

TASK: [test | Check that the SSH Key exists] ********************************** …
Run Code Online (Sandbox Code Playgroud)

ansible ansible-playbook

33
推荐指数
4
解决办法
11万
查看次数

使用Ansible在Docker容器内部运行命令

我想要完成的是在Docker容器中运行命令,该容器已经使用Ansible在Digital Ocean Ubuntu/Docker Droplet上创建.

似乎无法找到任何东西,或者我主要缺少一些东西.这是我的剧本中的Ansible任务.我对Ansible很新,所以任何建议或智慧都会受到高度赞赏.

- name: Test Deploy
    hosts: [my-cluster-of-servers]

tasks: 
  - name: Go Into Docker Container And Run Multiple Commands
    docker:
      name: [container-name]
      image: [image-ive-created-container-with-on-server]
      state: present
      command: docker exec -it [container-name] bash
Run Code Online (Sandbox Code Playgroud)

ansible docker ansible-playbook

32
推荐指数
4
解决办法
3万
查看次数

通过ansible playbook从git克隆一个特定的分支

我正在使用ansible来部署我的应用程序.我正在使用以下内容从github克隆应用程序:

- name: Deploy site files from Github repository
  sudo: yes
  git: repo=git@github.com:xyz/abc.git dest=/home/{{deploy_user}}/{{app_name}} key_file=/home/ubuntu/.ssh/id_rsa accept_hostkey=yes force=yes
Run Code Online (Sandbox Code Playgroud)

我想从存储库中克隆一个特定的分支.我阅读了ansible的文档,但找不到克隆特定分支的任何选项.它可以选择克隆版本但不支持分支.

github ansible ansible-playbook

32
推荐指数
2
解决办法
3万
查看次数

Ansible:读取远程文件

我在远程主机上生成带有ansible的文件,在这一代之后,我想在另一个任务中读取这些文件.

我找不到任何模块用ansible读取远程文件(查找似乎只在本地主机上).

你知道这样的模块吗?

谢谢

编辑:

这是我的用例:

我生成ssh密钥,然后将其添加到github.这些键是由var文件中的对象设置的,所以我像这样循环生成它:

    tasks:
  - name: Create ssh key
    user:
      name: "{{sshConfigFile.user}}"
      generate_ssh_key: yes
      ssh_key_file: ".ssh/{{item.value.file}}"
      state: present
    with_dict: "{{sshConfiguration}}"
Run Code Online (Sandbox Code Playgroud)

它工作得很好但是如何读取这些键通过API将其发送到github?

ansible ansible-playbook

32
推荐指数
3
解决办法
4万
查看次数

Docker容器和Ansible Playbook有什么区别?

在我看来,这两个工具都用于轻松安装和自动配置应用程序.

但是,我限制使用Docker并且根本没有使用Ansible.所以我有点困惑.

每当我搜索这两种技术之间的比较时,我都会找到有关如何组合使用这些技术的详细信息.

installation configuration ansible docker ansible-playbook

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

如何只使用多个标签运行ansible任务?

想象一下这个ansible剧本:

- name: debug foo
  debug: msg=foo
  tags:
     - foo

- name: debug bar
  debug: msg=bar
  tags:
     - bar

- name: debug baz
  debug: msg=baz
  tags:
     - foo
     - bar
Run Code Online (Sandbox Code Playgroud)

我怎么才能只运行debug baz任务?我想说只运行用fooAND 标记的任务bar.那可能吗?

我尝试了这个,但它将运行所有3个任务:

ansible-playbook foo.yml -t foo,bar
Run Code Online (Sandbox Code Playgroud)

ansible ansible-playbook

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

仅当文件或目录不存在时,如何运行ansible任务?

在Ansible剧本我想,如果目录并运行的任务存在.

- name: Check for java exists in /opt     
  stat: path=/opt/jdk1.8.0_71
  register: p
  when: p.stat.isdir is defined and p.stat.isdir
Run Code Online (Sandbox Code Playgroud)

但是,我必须做些什么来确保只有在这个目录不存在的情况下才能运行以下任务?

- name: Extract java if dir not existing
  command: tar xzf /tmp/jdk1.8.0_71 chdir=/opt
Run Code Online (Sandbox Code Playgroud)

ansible ansible-playbook

30
推荐指数
2
解决办法
4万
查看次数

字符串不匹配时的Ansible条件

我正在尝试编写一个只能编译Nginx的Ansible剧本,如果它还没有出现并且在当前版本中.然而,它每次编译都是不可取的.

这就是我所拥有的:

- shell: /usr/local/nginx/sbin/nginx -v 2>&1
  register: nginxVersion
- debug:
  var=nginxVersion

- name: install nginx
  shell: /var/local/ansible/nginx/makenginx.sh
  when: "not nginxVersion == 'nginx version: nginx/1.8.0'"
  become: yes
Run Code Online (Sandbox Code Playgroud)

该脚本除了每次运行shell脚本以编译Nginx之外都是有效的.nginxVersion的调试输出是:

ok: [server] => {
    "var": {
        "nginxVersion": {
            "changed": true,
            "cmd": "/usr/local/nginx/sbin/nginx -v 2>&1",
            "delta": "0:00:00.003752",
            "end": "2015-09-25 16:45:26.500409",
            "invocation": {
                "module_args": "/usr/local/nginx/sbin/nginx -v 2>&1",
                "module_name": "shell"
            },
            "rc": 0,
            "start": "2015-09-25 16:45:26.496657",
            "stderr": "",
            "stdout": "nginx version: nginx/1.8.0",
            "stdout_lines": [
                "nginx version: nginx/1.8.0"
            ],
            "warnings": []
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

根据文档我在正确的方面,我错过了什么简单的技巧?

ansible ansible-playbook

28
推荐指数
2
解决办法
6万
查看次数