file模块:
选项
path:必选项,定义文件/目录的路径
state:
file:查看文件状态,默认选项,若文件不存在,也不会被创建,会报错文件不存在
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新时间戳
absent:删除目录、文件或者取消链接文件
directory:如果目录不存在,创建目录
link:创建软链接
hard:创建硬链接
owner:定义文件/目录的属主
group:定义文件/目录的属组
mode:定义文件/目录的权限
src:要被链接的源文件的路径,只应用于state=link和hard的情况
dest:被链接到的路径,只应用于state=link和hard的情况
recurse:yes表示递归修改文件权限,path后面必须时目录,默认为no
#使用示例
ansible 192.168.8.120 -m file -a ‘path=/tmp/test.txt state=file’
ansible 192.168.8.120 -m file -a ‘path=/tmp/test.txt state=touch owner=root group=root mode=644’
ansible 192.168.8.120 -m file -a ‘src=/tmp/test.txt dest=/root/test.txt state=link’
ansible 192.168.8.120 -m file -a ‘path=/tmp/test state=directory owner=root group=root mode=755’
ansible 192.168.8.120 -m file -a ‘path=/tmp/test2/test3/aaa/bbb state=directory owner=root group=root mode=755’
ansible 192.168.8.120 -m file -a ‘path=/tmp/test2 state=absent’
copy模块
选项
src: 源文件,在主控端
dest: 目标文件,在被控端,/tmp/ansible/
backup:值为yes时,表示覆盖前备份
force:force=yes时,如果目标文件已存在,内容不同,会被覆盖;如果force=no,文件一样是不会被覆盖的
content:用于替代“src”,可以直接设定指定文件的内容
remote_src=yes:表示源文件时被控端的文件,默认值no,默认是复制主控端的文件
owner:定义文件/目录的属主
group:定义文件/目录的属组
mode:定义文件/目录的权限
#使用示例:
ansible 192.168.8.120 -m copy -a ‘src=/data dest=/usr/local/src/‘
ansible 192.168.8.120 -m copy -a ‘src=/data/ dest=/usr/local/src/‘
ansible 192.168.8.120 -m copy -a ‘src=/etc/ansible/ansible.cfg dest=/usr/local/src/ owner=root group=root mode=644’
ansible 192.168.8.120 -m copy -a ‘backup=yes src=/etc/fstab dest=/usr/local/src/ansible.cfg owner=root group=root mode=644’
ansible 192.168.8.120 -m copy -a ‘content=”just a test!” dest=/usr/local/src/test.txt’
yum_repository模块:
选项
file=rhel8 仓库配置文件的名字,自动会加上.repo
name=BaseOS 仓库的名字,是全局唯一的
description=BASEOS 仓库描述信息
baseurl=file:///media/BaseOS yum源的url地址
enabled=yes 开启仓库
gpgcheck=yes 要检查软件包
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release 密钥的路径
state=present 创建和修改仓库,absent表示删除仓库
#使用示例:
ansible node1 -m yum_repository -a ‘file=rhel8 name=BaseOS description=BASEOS baseurl=file:///media/BaseOS enabled=yes gpgcheck=yes gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release’
ansible node1 -m yum_repository -a ‘file=rhel8 name=AppStream description=”rhel8 AppStream” baseurl=file:///media/AppStream enabled=yes gpgcheck=yes gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release’
#yum模块
选型:
name: 安装的软件包的名字 包组前面加@<br /> state: present表示安装,absent表示删除,latest更新到最新
#使用示例:
ansible node1 -m yum -a ‘name=httpd state=present’
ansible node1 -m yum -a ‘name=httpd state=absent’
ansible node1 -m yum -a ‘name=”@Development Tools” state=present’
#service模块
rhel6以前
name:要启动的服务名
state:启动,关闭还是重启 started stopped restarted
enabled: yes 开机启动
#systemd模块
rhel7以后
name:要启动的服务名
state:启动,关闭还是重启 started stopped restarted
enabled: yes 开机启动
daemon-reload:yes 当服务配置文件发生变更时重载服务
#cron管理计划任务
选项:
name:该任务的描述 <br /> state:确认该任务计划是创建还是删除,present创建,absent删除<br /> user:以哪个用户的身份执行<br /> day:日(1-31,,/2,……)<br /> hour:小时(0-23,,/2,……)<br /> minute:分钟(0-59,,/2,……)<br /> month:月(1-12,,/2,……)<br /> weekday:周(0-7,*,……)<br /> job:要执行的任务,依赖于state=present<br /> cron_file:指定配置文件,例如/etc/crontab,/etc/cron.d/*
#使用示例:
ansible test -m cron -a ‘name=”a job for reboot” hour=12 minute=0 job=”reboot”‘
ansible test -m cron -a ‘name=”yum autoupdate” weekday=”2” minute=0 hour=12 user=”root”‘
ansible test -m cron -a ‘name=”test” minute=”0” hour=”5,2” job=”ls -alh > /dev/null”‘
ansible test -m cron -a ‘name=”testcron minute” minute=”*/10” job=”echo test >> /tmp/test”‘
ansible test -m cron -a ‘name=”testcron minute” state=absent’
ansible node1 -m cron -a ‘name=”testcron minute” user=root state=present job=”echo test >> /tmp/test” cron_file=/etc/crontab’
#user模块
请求的是useradd, userdel, usermod 三个指令:
选项
state:是创建还是删除<br /> name:指定用户名<br /> uid:指定用的uid<br /> group:指定用户属组<br /> groups:指定用户的附加组<br /> comment:定义用户描述信息<br /> create_home:是否创建家目录 yes|no<br /> home:指定用户的家目录,需要与createhome配合使用<br /> shell:指定用户的shell环境<br /> password:指定用户的密码<br /> remove:当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r
#使用示例:
ansible test -m user -a ‘name=johnd comment=”John Doe” uid=1040 group=admin’
ansible test -m user -a ‘name=james shell=/bin/bash groups=admins,developers append=yes ’
ansible test -m user -a ‘name=johnd state=absent remove=yes’
ansible node1 -m user -a ‘name=harry home=/home/harry move_home=yes’ 修改家目录
#goup模块
请求的是groupadd, groupdel, groupmod 三个指令:
选项
gid:指定组id<br /> name:指定组名<br /> state:创建还是删除组,选项:present|absent
#使用示例:
ansible test -m group -a ‘name=test gid=1001 state=present’
#fetch模块
选项
src:被控端要复制的文件地址,只能是文件,不能是目录<br /> dest:主控端存放文件的地址<br /> flat:默认为no,表示在主控端目录下以被控端主机名的形式来组织目录结构。yes表示不会以被控端主机名的形式来组织目录结构,dest必须以/结尾。
#使用示例
ansible node1 -m fetch -a ‘src=/etc/httpd/conf/httpd.conf dest=/home/admin/ansible/ flat=yes’
#get_url模块
主要用于从http、ftp、https服务器上下载文件(类似于wget),主要有如下选项:
选项:
url:下载的URL<br /> url_password、url_username:主要用于需要用户名密码进行验证的情况<br /> dest:目标目录<br /> mode:权限<br /> owner:拥有人<br /> group:拥有组
#unarchive模块:
选项
用于解压文件,模块包含如下选项:
src:则需要指定压缩文件的源路径
dest:远程主机上的一个路径,即文件解压的路径
remote_src:如果为yes,则文件会从主控端端复制到被控端。否则会直接尝试从被控端查找文件。默认为yes。
owner:解压后文件或目录的属主
group:解压后的目录或文件的属组
mode:解决后文件的权限
creates:指定一个被控端的文件名,当该文件存在时,则解压指令不执行
list_files:如果为yes,则会列出压缩包里的文件,默认为no
#synchronize模块(对应rsync)
选项
其参数如下:
src:要复制的文件,目录以/结尾表示包含目录本身,目录不以/结尾表示不包含目录本身
dest:目录路径
archive: 归档,相当于同时开启recursive(递归)、links、perms、times、owner、group、-D选项都为yes ,默认该项为开启
compress:是否开启压缩
rsync_opts:rsync的选项,选项之间用逗号隔开,例如-a,-v,-z等等
delete: 删除不存在的文件,默认no
dest_port:默认目录主机上的端口 ,默认是22,走的ssh协议
mode: push或pull 模块,push模式的话,一般用于从本机向远程主机上传文件,pull 模式用于从远程主机上取文件,默认是push。
ansible node1 -m synchronize -a ‘src=/home/admin/ansible/test dest=/tmp archive=no rsync_opts=-avz,—delete’
使用示例:
ansible node1 -m synchronize -a ‘src=/etc dest=/tmp/’
ansible node1 -m synchronize -a ‘src=/etc dest=/tmp/ archive=no rsync_opts=-r links=yes’
push 在主控端执行
ansible node1 -m synchronize -a ‘archive=yes compress=yes dest=/data/ src=/data/ rsync_opts=-vz mode=push’
以上等同于rsync -avz /data/ 192.168.40.131:/data/
push 在被控端执行
ansible node1 -m synchronize -a ‘archive=yes compress=yes dest=/data/ src=/data/ rsync_opts=-vz mode=pull’
以上等同于rsync -avz 192.168.40.130:/data/ /data/
总体例子
在node2节点配置httpd服务
1.配置yum仓库
ansible node2 -m yum_repository -a ‘file=rhel8 name=BaseOS description=BASEOS baseurl=file:///media/BaseOS enabled=yes gpgcheck=yes gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release’
ansible node2 -m yum_repository -a ‘file=rhel8 name=AppStream description=”rhel8 AppStream” baseurl=file:///media/AppStream enabled=yes gpgcheck=yes gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release’
2.安装httpd软件包
ansible node2 -m yum -a ‘name=httpd state=present’
3.修改配置文件
ansible node2 -m fetch -a ‘src=/etc/httpd/conf/httpd.conf dest=/home/admin/ansible/ flat=yes’
ansible node2 -m copy -a ‘src=/home/admin/ansible/httpd.conf dest=/etc/httpd/conf/httpd.conf’
4.启动服务,设置开机自启
ansible node2 -m systemd -a ‘name=httpd state=started enabled=yes’
ansible node2 -m systemd -a ‘name=firewalld state=stopped enabled=no’
5.配置网页内容
ansible node2 -m copy -a ‘content=”hello yutian” dest=/var/www/html/index.html’
