修改Ansible hosts文件
Ansible的hosts文件在/etc/ansible目录下,在hosts中添加你需要管理的远程主机的信息后,ansible才可以顺利的管理这些机器。
添加一台机器:
[host1]
192.168.1.104
添加一个机器组:
[host2]
192.168.1.101
192.168.3.44
192.168.5.201
添加一台带参数的机器:
[host3]
192.168.5.67 ansible_sudo_pass='123'
修改ansible.cfg
ansible.cfg是Ansible的配置文件,保存在/etc/ansible目录下。如果需要使用become进行权限切换,或者生成日志等功能,就需要修改ansible.cfg中的设置。
设置切换用户时询问密码:
[privilege_escalation]
#become=True
#become_method=sudo
#become_user=root
become_ask_pass=True
设置生成日志:
log_path = /etc/ansible/log/ansible.log
编写Ansible-playbook
Playbook是yaml格式文件。
---
- name: say 'hello world'
hosts: host1 #要执行playbook的机器或机器组,在hosts文件中设置
tasks:
- name: echo 'hello world' #Task的名称
command: echo 'hello world' #Task执行的Module,除command外还可以是shell,copy,apt等
register: result
- name: print stdout
debug:
msg: ""
显示playbook中命令结果
ansible-playbook默认不显示执行的输出,如果需要获取命令执行的结果,可以使用以下方法。
方法一:
ansible-playbook -v test.yaml
使用"-v"参数使playbook输出全部的运行结果,但这样输出会非常多,格式也比较乱。
方法二:
tasks:
-name: test
shell: echo "just test"
register: test_output
-name: show output
debug: var=test_output.stdout verbosity=0
使用register将命令的输出结果保存为变量,然后使用debug module将变量输出。这种方法可以方便的获取命令的运行结果。
使用become切换用户
在使用become可以在playbook切换用户来执行命令。比如需要在root下执行某一个命令,就可以使用become功能。
tasks:
-name: change to root user
become: yes
become_user: root
become_method: sudo
shell: echo "test"
关于become有几个注意事项:
- 如果become的某个选项没有配置的话,会使用ansible.cfg中的设置。比如默认become_user是test,那么在不指定become_user,但是become: yes的话,会默认切换到test用户。
- 在ansible.cfg中将become_ask_pass设置为True,这样在执行playbook前需要输入要切换的用户的密码。比如要切换到root用户,就需要输入root用户的密码。如果不这样设置,会切换不成功导致执行失败,且失败信息是等待超时。
- 在become完成后必须要有操作module,也就是说不能只执行become,否则会报错“ERROR! no action detected in task”
- 切换只在这一个Task中生效,下一个Task也需要切换用户执行的话,需要重新执行become操作
使用Ansible与Slack交互
首先需要去slack中申请一个App,然后记下生成的token。在yaml文件中只需要加入下面一段代码就可以向slack发送信息。
- name: send notification to slack
slack:
token: 'AAAAAA/BBBBBBB/CCCCCCCC' #申请的App的token
msg: 'just test'
username: 'test_user'
delegate_to: localhost #指派给localhost执行这段代码
delegate_to可以将一个task分配给特定的主机执行,通过delegate_to可以在一个playbook让不同的机器执行不同的task。