Articles of ansible

本地ansible-playbook与angular色的变数运行剧本

我很聪明,所以我可能会设置错误的东西。 我的想法是我有一定的服务器类。 (显示器,networking,数据库为例) 我想对他们运行一个本地的无效的运行,所以我的监视器看起来像这样 — # plays/monitor.yaml – hosts: mongo connection: local hosts: localhost become: yes become_user: root roles: – ../roles/users – ../roles/monitor vars: sensu_install_client: true sensu_install_server: true 我的roles/monitor/tasks/main.yml看起来像 — # roles/monitor/tasks/main.yaml – include: common.yml – include: server.yml when: sensu_install_server – include: client.yml when: sensu_install_client 我希望能够通过变数,所以包括会在angular色中发生。 所以当我设置我的api实例时,我可以做类似的事情 vars: sensu_install_client: true 在这个游戏中,它只包含来自监视器angular色的client.yml。

Ansible – 具有相同variables的多个语句

我是Ansible的新手,所以我可能会错过一些明显的东西。 我有一个剧本做以下几点: – name: Create real users user: name="{{item.user_name}}" comment="{{item.user_description}}" home="/home/{{item.user_name}}" shell="/bin/bash" uid="{{item.user_id}}" with_items: – { user_name: "user1", user_description: "user 1", user_id: "2000" } – { user_name: "user2", user_description: "user 2", user_id: "2001" } – name: Copy SSH keys copy: src: "keys/{{ item.user_name }}.key" dest: "/home/{{ item.user_name }}/.ssh/authorized_keys" owner: "{{ item.user_name }}" group: "{{ item.user_name […]

可以用单个或多个模块调用

当我用with_items设置一个安全的任务来安装软件,如下所示: – name: ensure base packagase are installed apt: name: "{{ item }}" state: latest update_cache: yes with_items: "{{ system_base_packages }}" apt模块会被调用多次以及update_cache吗? 或者这是一个单一的电话模块? 我主要关心的是,我不想为要安装的arrays中的每个软件多次更新caching。

如何在Ansible config(YAML / Jinja2)中循环遍历项目1?

我正在尝试从Ansible中的库存中遍历我的主机,并在命令中使用该迭代的主机名称。 特别是,我试图将我的每个主机的主机名设置为我在主机文件中调用的主机名。 所以,我有我的web服务器的web01,web02,web03等 – 我想在每个问题的服务器上设置这些主机名,即我想循环“所有”主机,当我在web01上(第一次迭代) ,我想将我所在主机的名称传递给主机名模块。 这是我试过的: – hosts: all become: true tasks: – hostname: name: "{{ item }}" with_items: "{{ play_hosts }}" 但是,不是将主机名称设置为主机名称,而是尝试将每个单独的主机从我的configuration文件设置为每台服务器上的主机名称。 所以它试图做到: connect to web01; hostname -> web01; hostname -> web02; hostname -> web03 connect to web02; hostname -> web01; hostname -> web02; hostname -> web03 connect to web03; hostname -> web01; […]

检查python版本通过导致错误的结果

您好我正在检查使用可靠的任务python的版本但是我得到的输出值在stderrvariables而不是标准输出。 这是我的任务检查pthon版本。 — – shell: "python –version" register: python_installed 这是任务的输出: changed: [172.17.0.3] => { "changed": true, "cmd": "python –version", "delta": "0:00:00.259578", "end": "2017-06-30 03:43:44.341772", "invocation": { "module_args": { "_raw_params": "python –version", "_uses_shell": true, "chdir": null, "creates": null, "executable": null, "removes": null, "warn": true } }, "rc": 0, "start": "2017-06-30 03:43:44.082194", "stderr": "Python 2.6.6", "stderr_lines": [ […]

用户模块设置用户密码

我的英语不太好,对不起 我使用可靠的ad-hoc设置一些用户的密码使用: python -c“from passlib.hash import sha512_crypt; import getpass; print sha512_crypt.using(rounds = 5000).hash(getpass.getpass())” 生成encryption的密码,我得到这个: $ 6 $ 3k8DQBapvmIOZu4W $ JMWhRB8kfqttNBI9NuRFZlPFpo6g4cb5v7obrqNaGZepxQ1AFCXdYv5IEU5lJFeHJXouyaQlJADcMtdMCjhXz0 运行可靠的特别的 ansible localhost -m user -a“name = testuser password ='$ 6 $ 3k8DQBapvmIOZu4W $ JMWhRB8kfqttNBI9NuRFZlPFpo6g4cb5v7obrqNaGZepxQ1AFCXdYv5IEU5lJFeHJXouyaQlJADcMtdMCjhXz0'state = present” 运行好,但在/ etc / shadow [root @ localhost roles_test]#grep testuser / etc / shadow testuser:k8DQBapvmIOZu4W:17420:0:99999:7 ::: 糟糕,只有密码的一部分,而不是一个完整的string anonymous localhost […]

我怎样才能设置一个基于文件的存在使用参数文件名的事实?

这是我为单个主机提出的 – name: Check for Let's Encrypt certificate block: – name: Set default for variable set_fact: use_letsencrypt: false – name: Get stat for cert file stat: path: /etc/letsencrypt/live/{{ hostname }}/cert.pem register: certificate_file – name: Set letsencrypt to true if certificate exists set_fact: use_letsencrypt: true when: certificate_file.stat.exists 我怎样才能让这更干? 将它传递给一个主机名,并为variables返回true或false。 编辑:更多信息,使其更清楚。 它已经正常工作。 我希望在不同的剧本中使用上面的代码片段,而不需要每次复制和粘贴代码片段。 我在不同的邮件和webconfiguration文件中使用了variablesuse_letsencrypt,并且想要说我正在为example.com设置一个configuration,我是否拥有一个证书。

如何使sudo -u不需要密码

我使用ansible与vagrant和ansible试图sudo作为postgres用户运行一些postgres命令。 作为stream浪用户运行的Ansible似乎运行sudo -u postgres psql 这将失败,并显示错误消息Missing sudo password 我使用相同的stream浪使用者ssh进入虚拟机,并尝试使用sudo -u postgres psql并确定它提示input密码。 有趣的是, sudo su postgres切换到postgres用户没有密码。 为什么sudo -u不需要密码呢? /etc/sudoers.d/中有一个叫做vagrant的条目,其内容如下: %vagrant ALL=NOPASSWD:ALL

Ansible如何检查现有的系统价值?

我有一个Ansible任务,我设置了我的系统上全局使用的Ruby版本。 – name: Set Ruby global version shell: /usr/local/bin/rbenv global 2.2.1 问题是这个任务总是有变化的状态。 我希望它只在实际changed时才显示更改,否则就显示正确。 这是我能想到的最好的解决scheme: – name: Get current global version Ruby shell: /usr/local/bin/rbenv global" register: current_ruby_version changed_when: False – name: Set Ruby global version shell: /usr/local/bin/rbenv global 2.2.1 changed_when: current_ruby_version.stdout != 2.2.1 这将是一个我将要使用很多的模式(检查现有值,设置值,看看它是否改变),所以这有点繁重。 有一个更好的方法吗?

如何为主机configuration主机文件的主机文件?

我已经开始学习和使用可以configuration我的舞台和生产服务器。 我想要做的一件事是通过库存文件configuration/ etc / hosts。 看来这是可能的。 这里有一个这样的用法: https : //gist.github.com/rothgar/8793800 但是,我对Ansible有点绿色,我不明白。 有人可以用简单的英语解释我在实践中如何使其工作吗? 例如,如果我的库存文件包含。 [compute] 1.2.3.4 5.6.7.8 [db] 2.3.4.5 6.7.8.9 10.11.12.13 [all] compute db [all:vars] … 我想一致地说,我的主机文件运行后的剧本包含 2.3.4.5 db1 6.7.8.9 db2 10.11.12.13 db3 1.2.3.4 compute1 5.6.7.8 compute2 这可能吗?