1.安装部署ansible
安装包:
ansible-2.7.8-1.el7.noarch.rpm
ansible-tower-setup-bundle-3.4.2-1.el7.tar.gz
libtomcrypt-1.17-25.el7.x86_64.rpm
libtommath-0.42.0-5.el7.x86_64.rpm
python2-crypto-2.6.1-13.el7.x86_64.rpm
python2-jmespath-0.9.0-1.el7.noarch.rpm
python-httplib2-0.9.2-0.1.el7.noarch.rpm
python-keyczar-0.71c-2.el7.noarch.rpm
python-paramiko-2.1.1-0.9.el7.noarch.rpm
sshpass-1.06-1.el7.x86_64.rpm
[root@server1 ~]# yum install -y ansible*
####创建普通用户,在普通用户创建配置目录:
[root@server1 roles]# useradd devops
[root@server1 roles]# su - devops
[devops@server1 ~]$ ls
[devops@server1 ~]$ mkdir ansible
[devops@server1 ~]$ cd ansible/
[devops@server1 ansible]$ vim absible.cfg
####
[defaults]
inventory = ./inventory
####编写inventory配置文件
[devops@server1 ansible]$ vim inventory
####server1的devops用户对server2和server3的devops普通用户做免密操作:
[devops@server1 ansible]$ ssh-keygen
#####在server2和server3创建devops用户并设置密码:
[root@server2 ~]# useradd devops
[root@server2 ~]# passwd devops
[devops@server1 .ssh]$ ssh-copy-id server3:
[devops@server1 ansible]$ ssh-copy-id server2
### -m后加操作命令
[devops@server1 ansible]$ ansible test -m ping
[devops@server1 ansible]$ ansible all -m ping
ansible常用模块
- copy模块
###-a加操作内容
[devops@server1 ansible]$ ansible test -m copy -a "src=/etc/passwd dest=/tmp/passwd"
[devops@server1 ansible]$ ansible test -a "ls /tmp"
###没有权限
[devops@server1 ansible]$ ansible test -a "rm /tmp"
[devops@server1 ansible]$ ansible test -m copy -a "src=/etc/passwd dest=/mnt/passwd"
###在server2和server3上给root用户下目录权限
[root@server2 .ssh]# vim /etc/sudoers
### - b指目标为root用户
[devops@server1 ansible]$ ansible test -m copy -a "src=/etc/passwd dest=/mnt/passwd" -b
####管理目标主机,在目标主机上添加相关sudo策略,如果对远程主机一些配置做修改,但是没有权限操作主机相关文件,则需要授予sudo权限
[devops@server1 ansible]$ vim ansible.cfg
#####
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
###此时不需要root用户也可以控制远程主机
[devops@server1 ansible]$ ansible test -m copy -a "src=/etc/passwd dest=/mnt/passwd"
ansible与正则
[devops@server1 ansible]$ vim inventory
[devops@server1 ansible]$ ansible '!test:prod' -m ping###在prod组不在test组,用!表示
[devops@server1 ansible]$ ansible '*' -m ping#### *号与all功能相同
[devops@server1 ansible]$ ansible “test:prod” -m ping######对多台主机或多个组同时进行操作,相互之间用冒号分隔:
[devops@server1 ansible]$ ansible “&test:prod” -m ping###在test和prod 组同时存在的用&表示:
==
Ansible常用模块
-
yum模块
[devops@server1 ansible]$ ansible test -m yum -a “name=httpd state=present”###安装httpd
[devops@server1 ansible]$ ansible test -m yum -a “name=httpd state=absent”###卸载httpd
-
file模块:
[root@server2 mnt]# ll passwd
-rw-r–r-- 1 root root 1051 Aug 14 23:44 passwd
[devops@server1 ansible]$ ansible test -m file -a “dest=/mnt/passwd mode=777 owner=devops”##修改文件权限和属性
[root@server2 mnt]# ll passwd
-rwxrwxrwx 1 devops root 1051 Aug 14 23:44 passwd
[devops@server1 ansible]$ ansible test -m file -a “dest=/tmp/dirl1/dir2 mode=755 owner=root group=root state=directory” ##递归创建
[root@server2 dir2]# pwd
/tmp/dirl1/dir2
[devops@server1 ansible]$ ansible test -m file -a “dest=/tmp/dirl1/dir2 state=absent”###删除目录
[root@server2 dirl1]# pwd
/tmp/dirl1
[root@server2 dirl1]# ls
[root@server2 dirl1]#
-
service模块
[devops@server1 ansible]$ ansible test -m service -a “name=httpd state=started”
[root@server2 dirl1]# systemctl status httpd##在server2上查看服务状态是否开启
-
user模块
[devops@server1 ansible]$ ansible test -m user -a “name=db password={{ ‘westos’|password_hash(‘sha512’) }}”
-
mysql_user模块
[devops@server1 ansible]$ ansible test -m mysql_user -a “name=db password=westos priv=.:select host=’%’ state=present”