Ansible入门(一)

2,728 阅读2分钟

修改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。