1.2)Ansible可以完成哪些功能呢?
1.3)Ansible特点
2.1)ansible安装三、Ansible Inventory
4.4)使用ad-hoc执行一次远程命令,注意观察返回结果的颜色
1、Ansible基础概述
Ansible是一个IT自动化的配置管理工具,自动化主要体现在Ansible集成了丰富模块,丰富的功能的组件,可以通过一个命令行完成一系列的操作。进而能减少我们重复性的工作和降低维护成本(降低出错率),以提高工作的效率。
1.2)Ansible可以完成哪些功能呢?
1)批量执行远程命令,可以对N多台主机同时进行命令的执行。
2)批量配置软件服务,可以以自动化的方式进行配置和管理服务。
3)实现软件开发功能,jumpserver底层使用ansible来实现自动化管理。
4)编排高级的IT任务,Ansible的Playbook是一门编程语言,可以用来描绘一套IT架构。
5)事件驱动
通过Ansible的模块,对服务进行不同的事件驱动
比如:
1)修改配置后重启
2)只修改配置文件,不重启
3)修改配置文件后,重新加载
4)远程启停服管理
6)管理公有云
通过API接口的方式管理公有云,不过这方面做的不如saltstack
。saltstack
本身可以通过saltcloud
管理各大云厂商的云平台。
7)二次开发
因为语法是Python,所以便于运维进行二次开阿发。
8)任务编排
可以通过playbook的方式来统一管理服务,并且可以使用一条命令,实现一套架构的部署。
跨平台、跨系统
几乎不受到平台和系统的限制,比如安装apache
和启动服务。
在Ubuntu
上安装apache服务名字叫apache2
在CentOS
安装apache服务名字叫httpd
在CentOS6
上启动服务器使用命令:/etc/init.d/nginx start
在CentOS7
上启动服务器使用命令:systemctl start nginx
1.3)Ansible特点
1)容易学习,无代理模式,不像saltstack既要学客户端与服务端,还要学客户端与服务端中间通讯协议;
2)操作灵活,体现在Ansible有较多的模块,提供了丰富的功能,playbook则提供类似于编程语言的复杂功能;
3)简单易用,体现在Ansible一个命令可以完成很多事情;
4)安全可靠,因为Ansible使用了SSH协议进行通讯,既稳定又安全;
5)移植性高,可以将写好的playbook拷贝至任意机器进行执行。
1.4)Ansible基础架构(有必要了解,是知识要点)
Ansible的架构中的控制节点,被控制节点,inventroy、ad-hoc、playbook、连接协议这些是什么?
Ansible的执行流程
1、Ansible读取playbook剧本,剧本中会记录对哪些主机执行哪些任务。
2、首先Ansible通过主机清单找到要执行的主机,然后调用具体的模块。
3、其次Ansible会通过连接插件连接对应的主机并推送对应的任务列表。
4、最后被管理的主机会将Ansible发送过来的任务解析为本地Shell命令执行。
二、ansible安装
2.1)ansible安装
#安装ansible的前提是要有epel源
[root@m01 ~]# vim /etc/yum.repos.d/epel.repo
[root@m01 ~]# yum install ansible
#检查ansible版本
[root@m01 ~]# ansible --version
ansible 2.8.4
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
ansible配置文件存在优先级的问题
# nearly all parameters can be overridden in ansible-playbook
# or with command line flags. ansible will read ANSIBLE_CONFIG,
# ansible.cfg in the current working directory, .ansible.cfg in
# the home directory or /etc/ansible/ansible.cfg, whichever it
# finds first
[root@m01 ~]# rpm -ql ansible
[root@m01 ~]# zcat /usr/share/man/man1/ansible-config.1.gz
#要查看完整列表,请访问https://docs.ansible.com/或使用ansible-config命令。
For a full list check fI\%https://docs.ansible.com/fP&. or use the fIansible-configfP command.
#/etc/ansible/ansible.cfg配置文件,如果存在则使用。
/etc/ansible/ansible.cfg -- Config file, used if present
#~/.ansible.cfg用户配置文件,覆盖默认配置(如果存在)
~/.ansible.cfg -- User config file, overrides the default config if present
#&./ansible.cfg本地配置文件(在当前工作目录中)假定为(aqproject specific)(aq,如果存在,则重写其余文件)。
&./ansible.cfg -- Local config file (in current working directory) assumed to be (aqproject specific(aq and overrides the rest if present.
#入上所述,ANSIBLE_CONFIG环境变量将覆盖所有其他环境变量。
As mentioned above, the ANSIBLE_CONFIG environment variable will override all others.
1)ANSIBLE_CONFIG
2)ansible.cfg #当前项目目录
3).ansible.cfg #当前用户的家目录
4)/etc/ansible/ansible.cfg #如果都没有,则读取/etc/ansible/ansible.cfg,它优先级最低
ansible配置文件详解
[root@m01 ~]# cat /etc/ansible/ansible.cfg
#inventory = /etc/ansible/hosts #主机列表配置文件
#library = /usr/share/my_modules/ #库文件存放目录
#remote_tmp = ~/.ansible/tmp #临时py文件存放在远程主机目录
#local_tmp = ~/.ansible/tmp #本机的临时执行目录
#forks = 5 #默认并发数
#sudo_user = root #默认sudo用户
#ask_sudo_pass = True #每次执行是否询问sudo的ssh密码
#ask_pass = True #每次执行是否询问ssh密码
#remote_port = 22 #远程主机端口
host_key_checking = False #跳过检查主机指纹
log_path = /var/log/ansible.log #ansible日志
[privilege_escalation] #如果是普通用户则需要配置提权
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False
三、Ansible Inventory
Inventory文件中填写需要被管理主机与主机组信息(逻辑上定义)。默认Inventory文件在/etc/ansible/hosts。当然也可以自定义,然后使用-i指定Inventory文件位置。下面通过几个场景演示如何配置Inventory文件。
3.1)场景一:基于密码连接
3.2、场景二:基于密钥连接,需要先创建公钥和私钥,并下发公钥至被控端
1)ansible管理机下发公钥
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8
#检查是否存在公钥,若已存在则不必更新了
[root@m01 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:KPOcbRCXTz7GXhjysaEJXaABJpZKSI+7xfQaPtjiJVY root@m01
The key's randomart image is:
+---[RSA 2048]----+
|o.o.o.. ... |
|.o+o + o |
|.o o + = = |
|. + . = X * |
| . Eo.o S X . |
| B o= + o o |
| * * + o . |
|o + . . |
| . |
+----[SHA256]-----+
#表示公钥已存在
[root@m01 ~]# ls ~/.ssh/
id_rsa id_rsa.pub
#ansible管理机下发公钥至web01
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@172.16.1.7'"
and check to make sure that only the key(s) you wanted were added.
#通过公钥方式连接一下web02,连接成功后使用exit命令断开连接
[root@m01 ~]# ssh 'root@172.16.1.8'
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@172.16.1.8'"
and check to make sure that only the key(s) you wanted were added.
#方式1:主机+端口+密钥
#创建主机目录
[root@m01 ~]# mkdir project1/
[root@m01 ~]# cd project1/
#在project1目录下创建并配置hosts主机清单
[root@m01 project1]# vim hosts
[oldboy]
172.16.1.7
172.16.1.8
保存并退出
[root@m01 project1]# ansible oldboy -m ping -i hosts
#配置成功
172.16.1.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
172.16.1.8 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
=====================================================
##方式2:别名+主机+端口+密钥
#在project1目录下创建并配置hosts主机清单
[root@m01 project1]# vim hosts
[oldboy]
web01 ansible_ssh_host=172.16.1.7
web02 ansible_ssh_host=172.16.1.8
[root@m01 project1]# ansible oldboy -m ping -i hosts
#配置成功
web02 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
web01 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
3)列出每个主机组下面的主机情况
[root@m01 project1]# ansible oldboy -i hosts --list-hosts
hosts (2):
172.16.1.7
172.16.1.8
生产案例1、如果控制端和被控制端第一次通讯,需要确认指纹信息,如果机器特别多少的情况下怎么办?
将 Ansible 配置文件中的 host_key_checking = False 参数注释打开即可。 但要注意ansible.cfg文件的读取顺序。
[root@m01 project1]# vim /etc/ansible/ansible.cfg
将 Ansible 配置文件中的 host_key_checking = False 参数注释打开
#确保读的是如下的配置文件
[root@m01 project1]# ansible --version
ansible 2.8.4
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
四、Ansible Ad-Hoc
4.1)什么是ad-hoc
ad-hoc简而言之就是“临时命令”,执行完即结束,并不会保存。
4.2)ad-hoc模式的使用场景
比如在多台机器上查看某个进程是否启动,或拷贝指定文件到本地等等。
4.3)ad-hoc模式的命令使用,ansible 'oldboy' -m command -a 'df-h',含义如下图
4.4)使用ad-hoc执行一次远程命令,注意观察返回结果的颜色
绿色:代表被管理端主机没有被修改
黄色:代表被管理端主机发生变更
红色:代表出现了故障,注意查看提示
#打印两台主机的磁盘状态信息
[root@m01 project1]# ansible oldboy -m command -a "df -h" -i hosts
172.16.1.8 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.3G 17G 8% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 1014M 127M 888M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.7 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.3G 17G 8% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 1014M 127M 888M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
4.5)Ansible Ad-Hoc常用模块
模块类型 | 模块内容 |
---|---|
命令模块 | command(默认)、shell模块、scripts模块 |
安装模块 | yum |
配置模块 | copy、file、get_url |
启动模块 | service、systemd |
用户模块 | user、group |
任务模块 | cron |
挂载模块 | mount |
防火墙模块 | firewall、selinux |
4.5.1)ad-hoc模式的常用模块有如下:
command #执行shell命令(不支持管道等特殊字符)
shell #执行shell命令
scripts #执行shell命令
yum_repository #配置yum仓库
yum #安装软件
copy #变更配置文件
file #建立目录或文件
service #启动与停止服务
mount #挂载设备
cron #定时任务
firewalld #防火墙
get_url #下载软件
4.5.1.1)使用过程中需要先了解ansible-doc帮助手册
[root@m01 project1]# ansible-doc -l #查看所有模块说明
[root@m01 project1]# ansible-doc copy #表示指定模块方法
[root@m01 project1]# ansible-doc -s copy #表示指定模块参数
#查看yum命令的帮助手册
[root@m01 ~]# ansible-doc yum
推荐直接看EXAMPLES示例
4.5.2)ansible常用模块
1)command
[root@m01 project1]# ansible oldboy -m command -a "ps aux|grep nginx" -i hosts
172.16.1.8 | FAILED | rc=1 >>
error: unsupported option (BSD syntax)
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).non-zero return code
172.16.1.7 | FAILED | rc=1 >>
error: unsupported option (BSD syntax)
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).non-zero return code
2)shell
[root@m01 project1]# ansible oldboy -m shell -a "ps aux|grep nginx" -i hosts
172.16.1.7 | CHANGED | rc=0 >>
root 11433 0.0 0.1 113176 1220 pts/0 S+ 19:53 0:00 /bin/sh -c ps aux|grep nginx
root 11435 0.0 0.0 112708 968 pts/0 S+ 19:53 0:00 grep nginx
172.16.1.8 | CHANGED | rc=0 >>
root 9650 0.0 0.2 47084 2048 ? Ss 07:46 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www 9751 0.0 0.2 47088 2192 ? S 07:56 0:00 nginx: worker process
root 11599 0.0 0.1 113176 1220 pts/0 S+ 19:53 0:00 /bin/sh -c ps aux|grep nginx
root 11601 0.0 0.0 112708 968 pts/0 S+ 19:53 0:00 grep nginx
command不支持管道技术
shell支持管道技术
不指定-m 默认使用的是command模块
3)script
[root@m01 ~]# vim vsftpd.sh
#!/usr/bin/bash
mkdir /tmp/zls
[root@m01 ~]# ansible 'web01' -m script -a '/root/vsftpd.sh'
[root@m01 ~]# ansible 'web01' -m shell -a 'ls -l /tmp'
4)安装---yum模块(安装present 卸载absent 升级latest 排除exclude 指定仓库enablerepo)
[root@m01 ~]# ansible 'web_group' -m yum -a 'name=vsftpd state=present'
#相当于:yum install -y vsftpd
[root@m01 ~]# ansible 'web_group' -m yum -a 'name=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm state=present'
#相当于:yum install -y https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm
[root@m01 ~]# ansible 'web_group' -m yum -a 'name=file:///root/nagios-4.4.3-1.el7.x86_64.rpm state=present'
#相当于:yum localinstall -y nagios-4.4.3-1.el7.x86_64.rpm
[root@m01 ~]# ansible 'web_group' -m yum -a 'name=vsftpd state=absent'
#相当于:yum remove -y vsftpd
name
httpd #指定要安装的软件包名称
file:// #指定本地安装路径(yum localinstall 本地rpm包)
http:// #指定yum源(从远程仓库获取rpm包)
state #指定使用yum的方法
installed,present #安装软件包
removed,absent #移除软件包
latest #安装最新软件包
EXAMPLES:安装最新版本的Apache
- name: install the latest version of Apache
yum:
name: httpd
state: latest
EXAMPLES:删除Apache
- name: remove the Apache package
yum:
name: httpd
state: absent
EXAMPLES:从testing仓库中安装最新版本的Apache(present正常安装)
- name: install the latest version of Apache from the testing repo
yum:
name: httpd
enablerepo: testing
state: present
EXAMPLES:安装指定版本的Apache
- name: install one specific version of Apache
yum:
name: httpd-2.2.29-1.4.amzn1
state: present
EXAMPLES:更新所有的软件包
- name: upgrade all packages
yum:
name: '*'
state: latest
EXAMPLES: 更新所有的软件包,但排除所有内核包及foo包
- name: upgrade all packages, excluding kernel & foo related packages
yum:
name: '*'
state: latest
exclude: kernel*,foo*
EXAMPLES: 从远程的仓库中安装nginx
- name: install the nginx rpm from a remote repo
yum:
name: http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.
state: present
EXAMPLES: 从本地的仓库中安装nginx
- name: install nginx rpm from a local file
yum:
name: /usr/local/src/nginx-release-centos-6-0.el6.ngx.noarch.rpm
state: present
EXAMPLES: 安装组包
- name: install the 'Development tools' package group
yum:
name: "@Development tools"
state: present
#示例一、安装当前最新的Apache软件,如果存在则更新
[root@m01 project1]# ansible oldboy -m yum -a "name=httpd state=latest" -i hosts
#示例二、安装当前最新的Apache软件,通过epel仓库安装
[root@m01 project1]# ansible oldboy -m yum -a "name=httpd state=latest enablerepo=epel" -i hosts
#示例三、通过公网URL安装rpm软件
[root@m01 project1]# ansible oldboy -m yum -a "name=https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.3-2.el7.x86_64.rpm state=latest" -i hosts
#示例五、更新所有的软件包,但排除和kernel相关的
[root@m01 project1]# ansible oldboy -m yum -a "name=* state=latest exclude=kernel*,foo*" -i hosts
#示例六、删除Apache软件
[root@m01 project1]# ansible oldboy -m yum -a "name=httpd state=absent" -i hosts
5)yum_repository
- name: Add repository
yum_repository:
name: epel
description: EPEL YUM repo
baseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
#添加yum仓库
ansible 'web_group' -m yum_repository -a 'name=zls_epel,zls_base description=EPEL baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/ gpgcheck=no enabled=yes file=zls_epel'
#添加mirrorlist
ansible 'web_group' -m yum_repository -a 'name=zls_epel description=EPEL baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/ gpgcheck=no enabled=yes file=epel mirrorlist=http://mirrorlist.repoforge.org/el7/mirrors-rpmforge'
#删除yum仓库
ansible 'web_group' -m yum_repository -a 'name=zls_epel,zls_base file=zls_epel state=absent'
#修改yum仓库
ansible 'web_group' -m yum_repository -a 'name=epel description=EPEL baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/ gpgcheck=no enabled=no file=epel'
name #指定仓库名字
description #添加描述(repo文件中的name)
baseurl #指定yum仓库的地址
gpgcheck #是否开启校验
yes
no
enabled #是否启用yum仓库
yes
no
file #指定仓库文件名
state
absent #删除yum仓库
present #创建yum仓库
ansible 'web_group' -m yum_repository -a 'name=zls_yum description=EPEL baseurl=http://www.driverzeng.com gpgcheck=no enabled=no file=zls'
4.5.3)ansible文件管理
1)copy
- name: Copy file with owner and permissions
copy:
src: /srv/myfiles/foo.conf
dest: /etc/foo.conf
owner: foo
group: foo
mode: '0644'
#推送文件
[root@m01 ~]# ansible 'web_group' -m copy -a 'src=/root/index.html dest=/var/www/html owner=root group=root mode=0644'
#推送文件并备份
[root@m01 ~]# ansible 'web_group' -m copy -a 'src=/root/index.html dest=/var/www/html owner=root group=root mode=0644 backup=yes'
#编辑nfs配置文件
[root@m01 ~]# ansible 'web_group' -m copy -a 'content="/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)" dest=/etc/exports'
src #指定推送的源文件
dest #指定推送的目标位置
owner #指定属主
group #指定属组
mode #指定权限(数字方式)
content #在指定文件中添加内容
backup #是否备份(注意:控制端和被控端,内容不一致才会备份)
yes
no
EXAMPLES: 拷贝文件
- name: Copy file with owner and permissions
copy:
src: /srv/myfiles/foo.conf #拷贝的内容
dest: /etc/foo.conf #拷贝到目标机器上哪个位置
owner: foo #属主
group: foo #属组
mode: '0644' #其权限
2)file
- name: Create an insecure file
file:
path: /work
owner: root
group: root
mode: 0755
#创建目录 mkdir
[root@m01 ~]# ansible 'web_group' -m file -a 'path=/backup state=directory owner=adm group=adm mode=0700'
#递归创建目录并授权chown -R chmod -R
[root@m01 ~]# ansible 'web_group' -m file -a 'path=/zls/mysql/db01 state=directory owner=adm group=adm mode=0700 recurse=yes'
#创建文件(前提条件,上级目录必须存在) touch
[root@m01 ~]# ansible 'web_group' -m file -a 'path=/root/zls.txt state=touch'
#删除目录 rm -fr
[root@m01 ~]# ansible 'web_group' -m file -a 'path=/backup state=absent'
#做软链接 ln -s
[root@m01 ~]# ansible 'web_group' -m file -a 'src=/root/zls.txt dest=/root/zls.txt.ori state=link'
src #指定软链接的源文件
dest #指定软连接的目标文件
path #指定创建目录或文件
state
touch #创建文件
directory #创建目录
absent #删除目录或文件
link #做软链接
owner #指定属主
group #指定属组
mode #指定权限
recurse #递归授权
yes
no
3)get_url
- name: Download foo.conf
get_url:
url: http://example.com/path/file.conf
dest: /etc/foo.conf
mode: '0440'
#下载worldpress代码
[root@m01 ~]# ansible 'web_group' -m get_url -a 'url=http://test.driverzeng.com/Nginx_Code/wordpress-5.0.3-zh_CN.tar.gz dest=/root mode=0777'
#下载并校验MD5
[root@m01 ~]# ansible 'web_group' -m get_url -a 'url=http://test.driverzeng.com/Nginx_Code/test.txt dest=/root mode=0777 checksum=md5:ba1f2511fc30423bdbb183fe33f3dd0f'
url #指定下载文件的url
dest #指定下载的位置
mode #指定下载后的权限
checksum #校验
md5 #md5校验
sha256 #sha256校验
4.5.4)ansible服务管理模块
1)service,systemd
[root@m01 ~]# ansible 'web_group' -m systemd -a 'name=httpd state=stopped enabled=yes'
[root@m01 ~]# ansible 'web_group' -m systemd -a 'name=httpd state=started enabled=yes'
[root@m01 ~]# ansible 'web_group' -m systemd -a 'name=httpd state=restarted enabled=yes'
[root@m01 ~]# ansible 'web_group' -m systemd -a 'name=httpd state=reloaded enabled=yes'
name #指定服务名称
state
started #启动
stopped #停止
restarted #重启
reloaded #重载
enabled #是否开机自启
yes
no
4.5.5)ansible用户管理模块
1)group
- name: Ensure group "somegroup" exists
group:
name: somegroup
state: present
#创建组
[root@m01 ~]# ansible 'web_group' -m group -a 'name=www gid=666 state=present'
#删除组
[root@m01 ~]# ansible 'web_group' -m group -a 'name=www gid=666 state=absent'
name #指定组名
gid #指定gid
state
present #创建
absent #删除
2)user
- name: Create a 2048-bit SSH key for user jsmith in ~jsmith/.ssh/id_rsa
user:
name: jsmith
generate_ssh_key: yes
ssh_key_bits: 2048
ssh_key_file: .ssh/id_rsa
#创建用户
[root@m01 ~]# ansible 'web_group' -m user -a 'name=www uid=666 group=www state=present shell=/sbin/nologin create_home=false'
#删除用户
[root@m01 ~]# ansible 'web_group' -m user -a 'name=www uid=666 state=absent'
#创建用户的同时创建密钥对
[root@m01 ~]# ansible 'web_group' -m user -a 'name=zls generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa'
name #指定用户名
uid #指定uid
group #指定属组
groups #指定附加组
state
present #创建用户
absent #删除用户
shell #指定用户登录的shell
/bin/bash
/sbin/nologin
create_home #是否创建家目录
true
false
comment #添加注释
generate_ssh_key #创建密钥对
ssh_key_bits #指定密钥对长度
ssh_key_file #指定密钥文件