ansible自动化运维入门
什么是ansible
Ansible是自动化运维的工具,基于Python开发,实现了批量系统配置、批量程序部署、批量运行命令等功能。
Ansible是基于模块工作的,ansible提供一个框架,通过模块实现批量部署。
ansible安装、使用
2.1 安装Ansible
使用epel的源安装,添加epel源此处不详述。
[root@zcy-ansible ~]# yum install ansible --enablerepo=epel
2.2 设置密钥登录
生成SSH公钥密钥对
[root@zcy-ansible ~]# ssh-keygen -t rsa -P ''
拷贝公钥到被管理端的服务器
[root@zcy-ansible ~]# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
[root@zcy-ansible ~]# chmod 600 /root/.ssh/authorized_keys
确认可以用密钥连接到管理端的服务器
2.3 配置Ansible
定义主机组,可以使用主机名或IP,在管理端编辑配置,加入被控端的ip和名字
我先自己创建一个配置文件的目录
[root@zcy-ansible ansible]# mkdir -p /home/zcy/ansible/
[root@zcy-ansible ansible]# vim invenroty
[zcy]
192.168.180.131
192.168.180.132
[tt:children]
zcy
再配置一下ansible的配置文件
[root@zcy-ansible ansible]# vim ansible.cfg
[defaults]
inventory = /home/zcy/ansible/inventory
remote_user = root
roles_path = /home/zcy/ansible/roles
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
~
~
因为ansible是用的ssh协议,我们要用ssh生成个秘钥配对上要管理的节点,从而实现免交互
[root@zcy-ansible ansible]# ssh-keygen -t rsa
#生成秘钥对
[root@zcy-ansible ansible]# ssh-copy-id root@192.168.180.131
#将秘钥对发送到被控端主机
一路回车下去
2.4 使用Ansible
2.4.1 Ping模块
[root@zcy-ansible ansible]# ansible all -m ping
出现success说明连接成功,就可以对主机进行操作了。
2.4.2 执行命令,command、shell模块
[root@zcy-ansible ansible]# ansible zcy -m command -a 'uptime'
[root@zcy-ansible ansible]# ansible zcy -m shell -a 'date'
[root@zcy-ansible ansible]# ansible zcy -m command -a 'ls /etc/passwd'
2.4.3 查看配置,setup模块
[root@zcy-ansible ansible]# ansible zcy -m setup
2.4.4 拷贝文件,copy模块
ansible zcy -m copy -a 'src=/home/zcy/ansible/zcy.txt dest=/tmp/zcy.txt mode=0644'
¥
2.4.5 添加用户,user模块
[root@zcy-ansible ansible]# ansible zcy -m user -a 'name=test comment="test user" uid=1000 password="crypted-password"'
密码生成方法:
[root@zcy-ansible ansible]# yum install python-pip
[root@zcy-ansible ansible]# pip install passlib
[root@zcy-ansible ansible]# python -c "from passlib.hash import sha512_crypt; import getpass; print sha512_crypt.encrypt(getpass.getpass())"
2.4.6 安装软件,yum模块
[root@zcy-ansible ansible]# ansible zcy -m yum -a 'name=vsftpd state=present'
2.4.7 启动服务,设置开机自启动,service模块
[root@zcy-ansible ansible]# ansible zcy -m service -a 'name=vsftpd state=started enabled=yes'
查看
[root@zcy-ansible ansible]# ansible zcy -m shell -a 'ps -ef| grep ftp'
[root@zcy-ansible ansible]# ansible zcy -m shell -a 'ss -tln| grep 21'
2.4.8 支持管道,raw,shell模块
[root@zcy-ansible ansible]# ansible zcy -m raw -a 'ss -tln| grep 21'
2.5 其他命令
2.5.1 查看帮助
列出所有已安装模块
[root@zcy-ansible ansible]# ansible-doc -l
查看某模块的简介
[root@zcy-ansible ansible]# ansible-doc -s ping
3. Playbook文件
Playbook是由一个或多个“play”组成的列表,可以让它们联同起来按事先编排的机制执行
# ansible-playbook test.yml
Playbook文件的格式,YAML是一个可读性高的标记语言。
Role可以把playbook分成一个一个模块,使结构更清晰。
3.1 Role的构造
包括 tasks, defaults, vars, files, templates, mata, handlers 各目录,其中 tasks 是必需的。
3.2 Role的例子
本例子是最基本的构成,只包括tasks
3.2.1 创建目录 roles/apache2/tasks
# mkdir -p roles/apache2/tasks
3.2.2 创建 tasks/main.yml
[root@zcy-ansible ansible]# mkdir -p roles/apache2/tasks
[root@zcy-ansible ansible]# cd roles/apache2/tasks/
[root@zcy-ansible tasks]# vim main.yml
3.2.3 创建 Playbook (site.yml)
[root@zcy-ansible ansible]# pwd
/home/zcy/ansible
[root@zcy-ansible ansible]# vim site.yml
---
- name: Install Apache2
hosts: zcy
remote_user: root
roles:
- apache2
执行该playbook
[root@zcy-ansible ansible]# ansible-playbook site.yml
3.3 官方的playbook例子
https://github.com/ansible/ansible-examples
3.4 playbook文件加密
ansible-vault 对配置文件(比如playbooks),进行基于密码的加密,防止敏感信息泄露
3.4.1 加密已存在文件
[root@zcy-ansible ansible]# ansible-vault encrypt ./site.yml
加密后的playbook
3.4.3 执行加密后的playbook
[root@zcy-ansible ansible]# ansible-playbook ./site.yml --ask-vault-pass
3.4.4 解密
[root@zcy-ansible ansible]# ansible-vault decrypt ./site.yml