ansible是自动化的运维工具,可以实现自动化的批量部署。
案例信息:
控制节点:master:192.168.178.144
被控制节点:slave:192.168.178.128
[yiki@ ~] yum -y install ansible
[yiki@ ~] ansible --version #检查版本信息,这里是ansible 2.9.1
主配置文件:/etc/ansible/ansible.cfg
1.forks:最大并发连接数。在这里插入代码片
2.inventory:存放资源清单的路径。
3.sudo_user:默认执行命令的用户。
4.remote_port:指定连接控制节点的端口。
5.log_path:日志存放路径。
6.host_key_checking:是否检查主机密钥。
将被控制主机加入主机清单(/etc/ansible/hosts)
[yiki@ ~] vim /etc/ansible/hosts
*在结尾添加被控制的主机
*方式一:添加没有猪祭祖的单个主机们
slave(或ip)
*方式二:添加主机组
[test]
slave(或ip地址)
[yiki@ ~] ansible test -m ping
或
[yiki@ ~] ansible slave -m ping
结果为绿色则没有问题哦
*一次指定多台主机
[yiki@ ~] ansible slave1,slave2,slave3 -m ping
[yiki@ ~] ansible slave* -m ping
*一次指定多个主机组
[yiki@ ~] ansible test1:test2:test3 -m ping
[yiki@ ~] ansible 【被控制端】 -m 【模块名】 -a 【传递给模块的参数】
*参数信息
1.默认模块的commond
例:
[yiki@ ~] ansible test -a date
slave | CHANGED | rc=0 >>
2019年 11月 22日 星期五 21:37:08 CST
[yiki@ ~] ansible test -a "cat /etc/hosts" > ./a.txt
*将被控制节点的信息输出到本地的文件中。
[group-1]
slave-1
slave-1
[group-2]
slave-3
slave-4
[group] //group组包含两个子组
group-1
group-2
[yiki@ ~] ansible test --list-hosts
hosts (1):
slave
[yiki@ ~] vim /testhosts
[test]
slave
[yiki@ ~] ansible -i /testhosts test -a "date"
slave | CHANGED | rc=0 >>
2019年 11月 22日 星期五 21:37:08 CST
Ad-Hoc组件相当于快速的执行一条命令
[yiki@ ~] ansible-doc -l
[yiki@ ~] ansible test -m copy -a 'src=/a.txt dest=/ owner=root group=root mode=777'
1.src:源文件地址。
2.dest:目标文件地址
3.owner,group,mode:目标文件被创建后的属组,属主和权限。
4.backup=yes/no:在被控制节点上创建的同时备份。
[yiki@ ~] ansible test -m user -a "name=yiki password=`echo 123|openssl passwd -1 -stdin` "
1.password:设置用户密码
2.openssl:将密码交给ssl加密
3.后面的“-1”:设置加密模式未md5
[yiki@ ~] ansible test -m user -a "name=susu state=absent"
删除用户
[yiki@ ~] ansible test -m yum -a "name=httpd state=latest"
1.state=状态动作
absent:即remove
latest:安装最新版或更新
removed:卸载
[yiki@ ~] ansible test -m service -a "name=httpd state=started enabled=yes"
1.started:启动
2.stopped:停止
3.restarted:重启
4.enabled=yes:开机启动
5.enabled=no:开机关闭
[yiki@ ~] ansible test -m file -a "path=/ mode=777 state=touch"
1.state=表示操作
touch:创建一个文件
directory:创建一个目录
[yiki@ ~] ansible test -m setup //收集ansible所有的信息
[yiki@ ~] ansible test -m setup -a "filter=ansible_all_ipv4-addresses"
// 查询ipv4地址
1.filter:过滤
[yiki@ ~] ansible test -m cron -a "cron_file=/a.txt "
1.backup=yes/no 修改内容前是否备份。
2.cron_file:应该文件替文件换被控制端的计划任务文件。
当配置一台设备,比如初始化时,往往不只要做一件事,这时候用剧本更合适。playbook用yaml语言编写。
案例一
[yiki@ ~] vim /etc/ansible/test.yml
---
- hosts: test #被控制主机名或组名
user: root #执行操作的用户
tasks:
- name: playbook_test
file: path=/a.txt state=touch #file模块
案例二:handler条件判断
---
- hosts: test
user: root
tasks:
- name: test
file: "path=/b.txt state=touch"
notify: handler_test #在上面的tast之后,才能执行这个handler
handlers:
- name: handler_test #handler名要与上面notify的一致。
shell: "echo 123 > /b.txt"
案例三:循环
---
- hosts: test
user: root
tasks:
- name: test
user: "name={{ item }}" #需要重复执行的任务
with_items:
- susu1
- susu2
- susu3
案例4:tags
tags:给tasks的一个name打上标识,可以在执行时只执行他或跳过他或
从他开始执行
---
- hosts: test
user: root
tasks:
- name: touch file
file: path=/root/nihao.txt state=touch
tags: nihao
- name: mkdir file
file: path=/root/xingdian state=directory
tags: yiki
[yiki@ ~] ansible-playbook test -t yiki //只执行yiki标签的task
[yiki@ ~] ansible-playbook test --skip-tags=yiki //只不执行yiki
标签的task
[yiki@ ~] ansible-playbook test --start-at-task yiki
role使ansible的playbook的目录组织结构,每个目录下存放各自功能的文件。
案例:安装nginx并配置虚拟主机
[yiki@ roles]ls
nginx site.yml
[yiki@ nginx]ls
files tasks handlers templates vars
[yiki@ tasks]vim main.yml
---
- name: install nginx
yum: "name=nginx state=latest"
- name: html
shell: "mv /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.bak"
- name: html2
copy: "src=/etc/ansible/roles/nginx/files/index.html dest=/usr/share/nginx/html"
- name: conf
copy: "src=/etc/ansible/roles/nginx/files/test.conf dest=/etc/nginx/conf.d/"
- name: nginx start
service: "name=nginx state=started"
- name: enable nginx
service: "name=nginx enabled=yes"
notify: start nginx //执行完上面的task,执行start nginx的
handler模块
[yiki@ handlers] vim main.yml
---
- name: start nginx
service: "name=nginx state=started"
[yiki@ roles] vim site.yml
---
- hosts: test
user: root
roles:
- nginx //nginx使同roles目录下的项目目录名。
[yiki@ roles] ansible-playbook site.yml --syntax-check
[yiki@ roles] ansible-playbook site.yml
在主配置文件/etc/ansible/ansible.cfg中
#accelerate_port = 5099
#accelerate_timeout = 30
#accelerate_connect_timeout = 5.0
#accelerate_daemon_timeout = 30
#accelerate_multi_key = yes