Ansible入门系列--模块
作者:@skyflask
转载本文请注明出处:https://www.cnblogs.com/skyflask/p/15451444.html
目录
一、Ansible常用模块
1、Command
2、Shell
3、Script
4、Copy
5、Fetch
6、File
8、archive
9、Hostname
10、Cron
11、Yum
12、Service
13、User
14、Group
一、Ansible常用模块
1、Command
在远程主机执行命令,默认模块,可忽略-m选项。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [root@ansible ~]# ansible-doc -s command - name: Execute commands on targets command: argv: # Passes the command as a list rather than a string . Use `argv' to avoid quoting values that would otherwise be interpreted incorrectly ( for example "user name" ). Only the string or the list form can be provided, not both. One or the other must be provided. chdir: # Change into this directory before running the command. cmd: # The command to run. creates: # A filename or (since 2.0) glob pattern. If it already exists, this step *won't* be run. free_form: # The command module takes a free form command to run. There is no actual parameter named 'free form' . removes: # A filename or (since 2.0) glob pattern. If it already exists, this step *will* be run. stdin: # Set the stdin of the command directly to the specified value. stdin_add_newline: # If set to `yes', append a newline to stdin data. strip_empty_ends: # Strip empty lines from the end of stdout/stderr in result. warn: # Enable or disable task warnings. [root@ansible ~]# |
此命令不支持 $VARNAME < > | ; & 等,用shell模块实现
chdir: 进入到被管理主机目录
creates: 如果有一个目录是存在的,步骤将不会运行Command命令
ansible all -a "chdir=/var/log ls -al"
例如,执行以下命令,使用command命令不正确:
1 | ansible all -m command -a "netstat -ntpl|grep ssh" |
改成shell模块则正常。
2、Shell
在远程主机上执行命令,和command类似,但是比command应用广泛。
1 2 3 | ansible all -m shell -a 'getenforce' 查看SELINUX状态 ansible all -m shell -a "sed -i 's/SELINUX=.*/SELINUX=disabled' /etc/selinux/config" ansible srv -m shell -a 'echo magedu |passwd –stdin wang' |
1 2 3 4 5 6 7 | 调用bash执行命令 类似 cat /tmp/stanley.md | awk -F '|' '{print $1,$2}' &> /tmp/example.txt 这些复杂命令,即使使用shell也可能会失败, 解决办法:写到脚本时,copy到远程执行,再把需要的结果拉回执行命令的机器 修改配置文件,使shell作为默认模块 vim /etc/ansible/ansible.cfg module_name = shell |
3、Script
Script:在远程主机上运行ansible服务器上的脚本
1 | ansible websrvs -m script -a /data/test.sh |
4、Copy
从主控端复制文件到远程主机
1 2 3 4 5 6 7 8 9 10 | src : 源文件 指定拷贝文件的本地路径 (如果有/ 则拷贝目录内容,比拷贝目录本身) dest: 指定目标路径 mode: 设置权限 backup: 备份源文件 content: 代替src 指定本机文件内容,生成目标主机文件 > ansible websrvs -m copy -a "src=/root/test1.sh dest=/tmp/test2.showner=wang mode=600 backup=yes" 如果目标存在,默认覆盖,此处指定先备份 > ansible websrvs -m copy -a "content='test content\nxxx' dest=/tmp/test.txt" 指定内容,直接生成目标文件 |
5、Fetch
从远程主机提取文件至主控端,copy相反,目前不支持目录,可以先打包,再提取文件
1 2 3 4 5 | > ansible websrvs -m fetch -a 'src=/root/test.sh dest=/data/scripts' 会生成每个被管理主机不同编号的目录,不会发生文件名冲突 > ansible all -m shell -a 'tar jxvf test.tar.gz /root/test.sh' > ansible all -m fetch -a 'src=/root/test.tar.gz dest=/data/' |
6、File
设置文件属性
1 2 3 4 5 6 7 8 9 10 | path: 要管理的文件路径 (强制添加) recurse: 递归,文件夹要用递归 src: 创建硬链接,软链接时,指定源目标,配合 'state=link' 'state=hard' 设置软链接,硬链接 state: 状态 absent 缺席,删除 > ansible websrvs -m file -a 'path=/app/test.txt state=touch' 创建文件 > ansible websrvs -m file -a "path=/data/testdir state=directory" 创建目录 > ansible websrvs -m file -a "path=/root/test.sh owner=wang mode=755" 设置权限755 > ansible websrvs -m file -a 'src=/data/testfile dest=/data/testfile-link state=link' 创建软链接 |
7、unarchive
解包解压缩
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 有两种用法: 1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes. 2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no 常见参数: copy:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上, 如果设置为copy=no,会在远程主机上寻找src源文件 src: 源路径,可以是ansible主机上的路径,也可以是远程主机上的路径, 如果是远程主机上的路径,则需要设置copy=no dest:远程主机上的目标路径 mode:设置解压缩后的文件权限 示例: ansible websrvs -m unarchive -a 'src=foo.tgz dest=/var/lib/foo' #默认copy为yes ,将本机目录文件解压到目标主机对应目录下 ansible websrvs -m unarchive -a 'src=/tmp/foo.zip dest=/data copy=no mode=0777' # 解压被管理主机的foo.zip到data目录下, 并设置权限777 ansible websrvs -m unarchive -a 'src=https://example.com/example.zip dest=/data copy=no' |
8、archive
打包压缩
1 2 3 4 5 6 7 | ansible all -m archive -a 'path=/etc/sysconfig dest=/data/sysconfig.tar.bz2 format=bz2 owner=wang mode=0777' 将远程主机目录打包 path: 指定路径 dest: 指定目标文件 format: 指定打包格式 owner: 指定所属者 mode: 设置权限 |
9、Hostname
管理主机名
1 2 | ansible appsrvs -m hostname -a "name=app.adong.com" 更改一组的主机名 ansible 192.168.38.103 -m hostname -a "name=app2.adong.com" 更改单个主机名 |
10、Cron
计划任务
1 2 3 4 5 6 7 8 9 | 支持时间:minute,hour,day,month,weekday ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.16.0.1 &>/dev/null' name=Synctime" 创建任务 > ansible websrvs -m cron -a 'state=absent name=Synctime' 禁用任务 > ansible websrvs -m cron -a 'minute=*/10 job=' /usr/sbin/ntpdate 172.30.0.100" name=synctime disabled= true ' 删除任务 >ansible websrvs -m cron -a 'minute=*/10 job=' /usr/sbin/ntpdate 172.30.0.100" name=synctime state=absent' job和name必须有。disabled= true 或disabled=yes |
11、Yum
包管理
1 2 3 4 | ansible websrvs -m yum -a 'list=httpd' 查看程序列表 ansible websrvs -m yum -a 'name=httpd state=present' 安装 ansible websrvs -m yum -a 'name=httpd state=absent' 删除 可以同时安装多个程序包 |
12、Service
管理服务
1 2 3 4 | ansible srv -m service -a 'name=httpd state=stopped' 停止服务 ansible srv -m service -a 'name=httpd state=started enabled=yes' 启动服务,并设为开机自启 ansible srv -m service -a 'name=httpd state=reloaded' 重新加载 ansible srv -m service -a 'name=httpd state=restarted' 重启服务 |
13、User
管理用户
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | home 指定家目录路径 system 指定系统账号 group 指定组 remove 清除账户 shell 指定shell类型 ansible websrvs -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root' ansible websrvs -m user -a 'name=sysuser1 system=yes home=/app/sysuser1' ansible websrvs -m user -a 'name=user1 state=absent remove=yes' 清空用户所有数据 ansible websrvs -m user -a 'name=app uid=88 system=yes home=/app groups=root shell=/sbin/nologin password="$1$zfVojmPy$ZILcvxnXljvTI2PhP2Iqv1"' 创建用户 ansible websrvs -m user -a 'name=app state=absent' 不会删除家目录,remove= true 删除家目录 安装mkpasswd yum insatll expect mkpasswd 生成口令 openssl passwd -1 生成加密口令 |
14、Group
管理组
1 2 | ansible srv -m group -a "name=testgroup system=yes" 创建组 ansible srv -m group -a "name=testgroup state=absent" 删除组 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步