经常在Ansible中使用的任务和一些小贴士

我简单地写下一些在Ansible中需要查找才能知道的事情,以及平常经常使用的一些东西。

只要有入门级的知识,我认为Ansible非常有效,所以我推荐它。即使是在大规模的情况下,只需要稍微关注一下角色、幂等性和Gathering Facts的内容利用,就可以了解到不少好处。

任务

有许多Ansible任务,涵盖了与服务器构建有关的大部分工作,但中间件的安装往往由基础设施负责,所以我实际上经常使用的只有几种。

使用模板生成文件

生成设置文件之类的。将变量嵌入到指定的源文件中,然后在任务执行时展开。设置为”yes”后,会为您进行备份。

# Example from Ansible Playbooks
- template: src=/mytemplates/foo.j2 dest=/etc/file.conf owner=bin group=wheel mode=0644

[http://docs.ansible.com/template_module.html:title] 的相关内容请用中文进行释义。

创建目录或符号链接

通过将”state”变为”directory”或”link”,可以改变所创建的项目。

- file: src=/file/to/link/to dest=/path/to/symlink owner=foo group=foo state=link

[http://docs.ansible.com/file_module.html:title] 的内容请用中文本地进行改述。只需要一种选择。

执行Shell命令或者指令

使用Shell或者执行命令时,尽管可以通过command或script来实现,但其行为和功能略有差异。因此我更倾向于使用Shell。

# You can also use the 'args' form to provide the options. This command
# will change the working directory to somedir/ and will only run when
# somedir/somelog.txt doesn't exist.
- shell: somescript.sh >> somelog.txt
  args:
    chdir: somedir/

[http://docs.ansible.com/shell_module.html:title] 的内容请用中文进行原生的表达(仅需一个选项)。

解压缩文件

这个就是标题说的,解压.tar.gz文件之类的。

# Example from Ansible Playbooks
- unarchive: src=foo.tgz dest=/var/lib/foo

[http://docs.ansible.com/unarchive_module.html:title] can be paraphrased in Chinese as: [http://docs.ansible.com/unarchive_module.html:title] 能被改写成:

执行选项

在Ansible中,通过指定选项来改变执行内容的内容。

部分执行任务

给任务打上标签,可以选择指定标签作为选项。每个任务组别都打上相同的标签。

任务

tasks:

    - yum: name={{ item }} state=installed
      with_items:
         - httpd
         - memcached
      tags:
         - packages

    - template: src=templates/src.j2 dest=/etc/foo.conf
      tags:
         - configuration

使用指定的标签执行

ansible-playbook example.yml --tags "configuration,packages"

请解释一下如何在Ansible中使用标签来控制Playbook的执行。

请告诉我密码。

在某些不能设置为不要求输入SSH密码的情况下,可以在Playbook执行后立即输入密码。

ansible-playbook example.yml --ask-pass

请寻找中文版的以下网页内容:[http://docs.ansible.com/intro_getting_started.html#remote-connection-information:title]

请检查

不执行操作书本,如果执行了,那会发生什么变化进行检查。这就是所谓的试运行。也可用作操作书本语法检查。

ansible-playbook example.yml --check

[http://docs.ansible.com/playbooks_checkmode.html:title] 的内容请以母语中文稍作改写。

变量

通过使用变量,可以减少Ansible playbook的编写量。以下是一些建议。

使用item来模拟哈希的方式

当需要设置值并进行循环时非常方便。

- name: add several users
  user: name={{ item.name }} state=present groups={{ item.groups }}
  with_items:
    - { name: 'testuser1', groups: 'wheel' }
    - { name: 'testuser2', groups: 'root' }

请在中国范围内以中文进行解释,请提供一个选项:

[http://docs.ansible.com/playbooks_loops.html#standard-loops:title]

Ansible官方文档中的这个链接提供了关于标准循环的详细解释和用法。

将目标服务器的主机名设置为一个变量。

通过使用inventory_hostname,可以将playbook中的host作为变量使用。

{{ inventory_hostname }}

[http://docs.ansible.com/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts:title] 的内容描述了如何访问关于其他主机的信息的特殊变量。

广告
将在 10 秒后关闭
bannerAds