一、前言
ansible实现管理的方式分为3种
1、ansible实现管理的方式
Ad-Hoc
2、利用ansible命令直接完成管理,主要用于临时命令使用场景
playbook
3、ansible脚本,主要用于大型项目场景,需要前期的规划
二、查看ansible实现管理的方式
1、ansible-doc shell
2、ansible-doc -s shell
简要命令
三、常用参数
常用参数 | 解释 |
---|---|
–version | 显示版本 |
-m module | 指定模块,默认为command模块 |
-v | 详细过程 -vv -vvv更详细过程 |
–list | 显示主机列表,也可以用–list-hosts |
-k | 提示输入ssh连接密码,默认key认证 |
-C | 预执行检测 |
-u | 指定远程执行的用户 |
-b | 执行sudo切换身份操作 |
-become-user=USERNAME | 指定sudo的用户 |
-K | 提示输入sudo密码 |
1、–version | |
![]() | |
2、–m | |
![]() | |
3、-v | |
![]() | |
4、–list | |
![]() | |
5、-k | |
![]() | |
6、-C | |
![]() | |
7、-T | |
![]() | |
8、-u | |
![]() | |
![]() | |
9、-become | |
加上become后能sudo执行 | |
![]() | |
10、-become-user=USERNAME | |
![]() | |
11、-K | |
![]() |
四、ansible的基本颜色代表信
绿色 | 执行成功但为对远程主机做任何改变 |
---|---|
黄色 | 执行成功并对远程主机做改变 |
红色 | 执行失败 |
五、ansible中常用的模块
一、command模块
chadir | 执行命令前先进入到指定目录 |
---|---|
creates | 不存在则运行 |
removes | 如果文件存在在将运行 |
cmd | 运行命令指定 |
先开启默认sudo权力 | |
![]() |
[ck@ansible ansible]$ ansible all -m command -a 'useradd westoslinux' 图1
[ck@ansible ansible]$ ansible all -m command -a 'chdir=/mnt touch file file1' 图2
[ck@ansible ansible]$ ansible all -m command -a 'removes=/mnt/file chdir=/mnt rm -fr file file1 ' 图3
[ck@ansible ansible]$ ansible all -m command -a 'creates=/mnt/file chdir=/mnt touch file file1 ' 图4
图1
图2
图3、文件存在执行
图4、此时两台终端都有文件
creates是文件不存在才执行,故creates不执行
注意,*等通配符不适用于command命令
二、shell模块
chadir | 执行命令前先进入到指定目录 |
---|---|
creates | 不存在则运行 |
removes | 如果文件存在在将运行 |
cmd | 运行命令指定 |
executable | 指定执行环境,默认为sh |
[ck@ansible ansible]$ ansible all -m shell -a 'ps ax |grep $$' 图1
[ck@ansible ansible]$ ansible all -m shell -a 'chdir=/mnt/ touch file{11..13}' 图2
图1
图2
三、copy
1、拷贝当前文件到受控主机端,给予权限
[ck@ansible ansible] ansible 172.25.42.200 -m copy -a "src=/home/ck/ansible/test.sh owner=westos mode=755 dest=/mnt/test.sh"
2、修改本机的test.sh后,进行拷贝备份
[ck@ansible ansible]$ ansible 172.25.42.200 -m copy -a "src=/home/ck/ansible/test.sh owner=westos mode=755 dest=/mnt/test.sh backup=yes"
3、生成文件及内容
[ck@ansible ansible]$ ansible 172.25.42.200 -m copy -a 'content="hello westos" dest=/mnt/westos backup=yes'
四、fetch
ansible-doc -s fetch
查看使用方法
采集受控主机的文件
1、采集受控主机网卡信息
[ck@ansible ansible]$ ansible 172.25.42.200 -m fetch -a 'src=/etc/sysconfig/network-scripts/ifcfg-Ethernet_connection_1 dest=/home/ck/ansible/ifcfg-Ethernet_connection_1 flat=yes'
五、file
1、建立文件
[ck@ansible ansible]$ ansible 172.25.42.200 -m file -a 'path=/mnt/westosfile state=touch'
2、建立目录
[ck@ansible ~]$ ansible 172.25.42.200 -m file -a 'path=/mnt/westosfile2 owner=devops state=directory'
3、删除文件
ansible 172.25.42.200 -m file -a 'path=/mnt/westosfile2 state=absent'
六、archive打包压缩
[ck@ansible ~]$ ansible 172.25.42.200 -m archive -a 'path=/usr/local/bin dest=/mnt/bin.tar.gz format=bz2'
七、解压缩
1、压缩文件在控制端时,解压到受控端
[ck@ansible ~]$ sudo tar zcf etc.tar /etc
[ck@ansible ~]$ ansible 172.25.42.200 -m unarchive -a 'src=etc.tar dest=/mnt owner=devops'
2、压缩文件在受控端时、解压缩
压缩文件在受控端的/media,用远程命令remote_src=yes
控制端进行解压缩
结果,nod端在/media中压缩的文件,被成功远程解压到nod的/mnt
八、cron定时任务
1、定时任务
[ck@ansible ~]$ ansible 172.25.42.200 -m cron -a 'job="echo hello westos" name=test minute=*/2'
2、删除定时任务
[ck@ansible ~]$ ansible 172.25.42.200 -m cron -a 'job="echo hello westos " name=test minute=*/2 state=absent'
九、yum_repository仓库建立
1建立westos1仓库
因为分两个模块,所以两次导入
[ck@ansible ~]$ ansible 172.25.42.200 -m yum_repository -a "file=westos1 name=AppStream baseurl=http://172.25.42.250/rhel8/AppStream description=AppStream_westos gpgcheck=no "
[ck@ansible ~]$ ansible 172.25.42.200 -m yum_repository -a "file=westos1 name=BaseOS baseurl=http://172.25.42.250/rhel8/BaseOS gpgcheck=no description=BaseOS"
十、dnf下载命令
1、下载安装gcc
2、卸载安装包且,移除依赖性
[ck@ansible ~]$ ansible 172.25.42.200 -m dnf -a 'name="gcc" state=absent autoremove=no'
十一、service
[ck@ansible ~]$ ansible 172.25.42.200 -m dnf -a 'name="httpd" '
[ck@ansible ~]$ ansible 172.25.42.200 -m service -a 'name=httpd state=started'
十二、firewalld
1、将防火墙允许http服务
[ck@ansible ~]$ ansible 172.25.42.200 -m firewalld -a 'zone=public service=http permanent=yes state=enabled immediate=yes'
十三、group 组的管理
1、建立组
[ck@ansible ~]$ ansible 172.25.42.200 -m group -a 'name=testgroup gid=666 state=present'
2、删除
[ck@ansible ~]$ ansible 172.25.42.200 -m group -a 'name=testgroup gid=666 state=absent'
十四、user 用户的管理
1、生成用户,给予gid、group、groups、解释、shell方式
[ck@ansible ~]$ ansible 172.25.42.200 -m user -a 'name=ck group=1002 groups=apache append=yes comment="testuser ck" shell=/bin/sh uid=666'
监控
[root@nod yum.repos.d] watch -n 1 " tail -n3 /etc/passwd /etc/group;echo============;ls -l /home "
2、加密方式给予密码
[ck@ansible ~]$ openssl passwd -6
[ck@ansible ~]$ ansible 172.25.42.200 -m user -a 'name=ck group=1002 groups=apache
append=yes comment="testuser ck" shell=/bin/sh uid=666 password="$6$Ri.TJ6nhuBf4CU2L$HLpIzE7yMBDbr4ukBD6qjHjWm3df9YaPjxCtYyGJNvAO5zrsmBmX8uSiVZngNTsivsDakj.Bd1bKOEJQy3zp3"'
监控
[root@nod yum.repos.d] watch -n 1 " tail -n3 /etc/passwd /etc/group;echo============;ls -l /home "
[root@nod yum.repos.d] tail /etc/shadow
十五、lineinfile 文件内容管理
1创建文件并书写内容
[ck@ansible ~]$ ansible 172.25.42.200 -m lineinfile -a 'path=/mnt/westosfile line="hello westos" create=yes'
2、替换以hello开头的行
[ck@ansible ~]$ ansible 172.25.42.200 -m lineinfile -a 'path=/mnt/westosfile regexp="^hello" line="hello linux" create=yes'
3、匹配更换
先将文件内容改为如下
[ck@ansible ~]$ ansible 172.25.42.200 -m lineinfile -a 'path=/mnt/westosfile regexp="(h.{4}).*(l.{4})" line="\1" backrefs=yes'
4、头尾插入
[ck@ansible ~]$ ansible 172.25.42.200 -m lineinfile -a 'path=/mnt/westosfile line="###########westos begin#######" insertbefore=BOF'
[ck@ansible ~]$ ansible 172.25.42.200 -m lineinfile -a 'path=/mnt/westosfile line="###########westos end#######" insertafter=EOF'
添加成功
十六、replace 替换
将westos替换为WESTOS
[ck@ansible ~]$ ansible 172.25.42.200 -m replace -a 'path=/mnt/westosfile regexp="westos" replace="WESTOS" backup=yes'
十七、setup收集信息
setup模块用于收集远程主机的一些基本信息
[ck@ansible ~]$ ansible 172.25.42.200 -m setup -a 'filter=ansible_all_ipv4_addresses'
获取到信息
十八、dubug
调试模块,用于在调试中输出信息
1、dubug显示信息
[ck@ansible ~]$ ansible 172.25.42.200 -m debug -a 'msg="hello westos"'
2、playbok文件
[ck@ansible ansible]$ cat test.yml
---
- name: test
hosts: 172.25.42.200
vars:
test: westos
tasks:
- name: make westosfile
shell: /usr/bin/uptime
register: info
- debug:
var: info
[ck@ansible ansible]$ ansible-playbook test.yml 应用testyml文件
得到输出