经常在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] 的内容描述了如何访问关于其他主机的信息的特殊变量。