[自动化] 部署Ansible服务及其常用的命令模块

Ansible简介:

Ansible基于Python开发,默认通过SSH协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,可同时支持多台主机进行管理。ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署的是ansible所运行的模块,能够实现批量运行命令、部署程序、配置系统等功能。

Ansible的基本架构主要包括:

(1)Ansible core核心引擎。
(2)Host inventory 主机清单:用来定义Ansible管理的主机,默认是在Ansible配置文件中定义被管理主机,同时也支持自定义动态主机清单。
(3)Comecton pugins连接插件:负责和被管理主机实现通信。除支持使用SSH连接被管理主机外,Ansible还支持其他的连接方式,所以需要有连接插件将各个主机用连接插件连接到Ansible。
(4)Core modules核心模块:是Ansible自带的模块,使用这些模块将资源分发到被管理主机,使其执行特定任务或匹配特定的状态。
(5)Custom meodle自定义模块:用于完成模块功能的补充,可借助相关插件完成记
录日志、发送邮件等功能。
(6)Playbooks (yaml, jinja2) 剧本:用来集中定义Ansible任务的配置文件,即将多个任务定义在一个剧本中由Ansible自动执行,可以由控制主机针对多台被管理主机同时运行多个任务。

系统环境

主机 操作系统 IP地址 组名
控制主机 CentOS 7.4 x86_64 192.168.100.138
被管理主机 CentOS 7.4 x86_64 192.168.100.131 webserver
被管理主机 CentOS 7.4 x86_64 192.168.100.132 mysql

安装部署Ansible服务

1.安装Ansible

准备yum源,直接使用yum命令安装Ansible

yum install -y epel-release  #安装epel源
yum install ansible -y

查看ansible软件的版本信息

ansible --version 


Ansible主要相关配置文件在/etc/ansible目录下。

[[email protected] ~]# cd /etc/ansible/
[[email protected] ansible]# pwd
/etc/ansible
[[email protected] ansible]# ll
总用量 24
-rw-r--r--. 1 root root 19549 7月   6 23:53 ansible.cfg  #配置文件
-rw-r--r--. 1 root root  1016 7月   6 23:53 hosts  #管控主机文件
drwxr-xr-x. 2 root root     6 7月   6 23:53 roles

2.配置主机清单

修改主机与组配置后,可同时连接到多个被管理主机上执行任务。

cd /etc/ansible
vim hosts
    [webserver]       #被管理主机分类
    192.168.100.131
    [mysql]
    192.168.100.132   #被管理主机分类

3.设置SSH无密码登录

使用ssh-keygen产生一对密钥,使用ssh-copy-id来下发生成的公钥。

ssh-keygen -t rsa       #基于ssh密钥的连接
ssh-copy-id [email protected]
ssh-copy-id [email protected]    #配置密钥对验证


为了实现免交互代理,可以输入以下命令:

ssh-agent bash
ssh-add

Ansible命令应用

Ansible可以使用命令行方式进行自动化管理,它的命令行管理工具都是由一系列模块、参数所支持的,基本语法如下:

ansible [主机] [-m 模块] [-a args]

Ansible自带了很多模块,能够下发执行Ansible的各种管理任务。不过查看模块帮助信息可以用ansible-doc工具。

ansible-doc -l     #列出所有已安装的模块 注:按q退出
ansible-doc -s yum   #-s列出yum模块描述信息和操作动作


1.command模块

-m选项指定使用模块,默认使用command模块,用于在被管理主机上运行命令。

(1)使用IP地址指定运行主机

ansible 192.168.100.131 -m command -a ‘date‘ 


(2)使用被管理主机的分类运行

ansible mysql -m command -a ‘date‘


(3)在所有主机清单中的主机运行

ansible all -m command -a ‘date‘


(4)不加-m选项,默认运行command模块

ansible all -a ‘tail -1 /etc/passwd‘

2.cron模块

cron模块用于定义任务计划。其中有两种状态(state ):present表示添加(省略状态默认使用),absent表示移除。

(1)添加任务计划

ansible webserver -m cron -a ‘minute="*/1" job="/bin/echo heihei" name="test cron job"‘

#查看计划是否添加成功
ansible webserver -a ‘crontab -l‘


进webserver组的主机查看


(2)移除任务计划

ansible webserver -m cron -a ‘name="test cron job" state=absent‘

3.user模块

user模块用于创建新用户和更改、删除已存在的用户。其中name选项用来指明创建的用户名称。请求的是useradd, userdel, usermod三个指令
(1)创建用户

ansible mysql -m user -a ‘name="test01"‘

#查看用户是否添加成功
ansible mysql -m command -a ‘tail /etc/passwd‘


(2)删除用户

ansible mysql -m user -a ‘name="test01" state=absent‘

4.group模块

group模块用于对用户组进行管理。请求的是groupadd, groupdel, groupmod 三个指令。

例如:创建mysql组,将已创建好的用户test01添加到mysql组中。

#创建mysql组
ansible mysql -m group -a ‘name=mysql gid=306 system=yes‘  

 #查看组是否添加
ansible mysql -a ‘tail /etc/group‘

#将用户mysql添加到mysql组中
ansible mysql -m user -a ‘name=mysql uid=306 system=yes group=mysql‘

#查看用户mysql是否添加到mysql组中
ansible mysql -a ‘tail -1 /etc/passwd‘

5.copy模块

copy模块用于实现文件复制和批量下发文件。其中使用src来定义本地源文件路径,使用dest定义被管理主机文件路径,使用content则是通过指定信息内容来生成目标文件。

(1)将本地文件/etc/fstab复制到被管理主机上的/opt/fstab.back,将所有者设置为root,权限设置为640.

ansible mysql -m copy -a ‘src=/etc/fstab dest=/opt/fstab.back owner=root mode=640‘

#查看是否存在复制的文件
ansible mysql -a ‘ls -l /opt‘


(2)将hello heihei!写入/opt/fstab.back。

ansible mysql -m copy -a ‘content="hello heihei!"
dest=/opt/fstab.back‘

#查看内容是否写入
ansible mysql -a ‘cat /opt/fstab.back‘ 

6.file模块

file模块来设置文件属性。其中使用path指定文件路径,使用src定义源文件路径,使用name或dest来替换创建文件的符号链接。

(1)设置文件/opt/fstab.back的所属主为mysql,所属组为mysql,权限为644.

ansible mysql -m file -a ‘owner=mysql group=mysql mode=644 path=/opt/fstab.back‘

#查看文件的属性
ansible mysql -a ‘ls -l /opt/‘


(2)设置/opt/fstab.link为/opt/fstab.back的链接文件。

ansible mysql -m file -a ‘path=/opt/fstab.link src=/opt/fstab.back state=link‘ 

#查看链接文件
ansible mysql -a ‘ls -l /opt/‘


(3)删除文件/opt/fstab.back

ansible mysql -m file -a "path=/opt/fstab.back state=absent" 


(4)创建文件/opt/test。

ansible mysql -m file -a "path=/opt/test state=touch"

7.ping模块

ping,模块是用来检测指定主机的连通性。

ansible all -m ping

8.shell模块

shell模块可以在被管理主机上运行命令,并支持像管道符等功能的复杂命令。

例如,创建用户使用无交互模式给用户设置密码。

#创建用户user1
ansible mysql -m user -a ‘name=user1‘
#无交互给用户user1设置密码
ansible mysql -m shell -a ‘echo abc123|passwd --stdin user1‘

9.script模块

script模块可以将本地脚本复制到被管理主机上进行运行。需要注意的是,使用相对路径来指定脚本。

例如,编辑一个本地脚本test.sh,复制到被管理主机上运行。

vi /opt/test.sh
#!/bin/bash
echo "hello ansible from script"> /opt/script.txt

chmod +x /opt/test.sh

ansible mysql -m script -a ‘/opt/test.sh‘

#查看脚本实现
ansible mysql -a ‘cat /opt/script.txt‘

10.yum模块

yum模块复责在被管理主机上安装与卸载软件包,其中使用name指定要安装的软件包,使用state指定安装软件包的状态,present、latest用来表示安装,absent表示卸载。

(1)安装zsh软件包

ansible mysql -m yum -a ‘name=zsh‘ 

#查看是否安装
ansible mysql -a ‘rpm -q zsh‘


(2)卸载zsh软件包

ansible mysql -m yum -a ‘name=zsh state=absent‘


(3)安装httpd软件包

ansible webserver -m yum -a ‘name=httpd‘ 

11.service模块

service模块用来控制管理服务的运行状态。其中enabled表示是否开机自启动,取值为true或false,使用name定义服务名称,使用state指定服务状态,取值分别为started、stoped、restarted.

(1)启动httpd服务并设置开机自启动。

ansible webserver -m service -a ‘enabled=true name=httpd state=started‘

(2)查看httpd服务的状态

ansible webserver -a ‘systemctl status httpd‘

12.setup模块

setup模块收集、查看被管理主机的facts。每个被管理主机在接并运行管理命令之前,都会将自己的相关信息(操作系统、IP地址)发送给控制主机。

例如,查看mysql组的facts信息。

ansible mysql -m setup 


以上皆是Ansible常用的模块,如果用到其他模块可以使用ansible-doc工具。

原文地址:http://blog.51cto.com/11134648/2153774

时间: 2024-08-01 09:51:47

[自动化] 部署Ansible服务及其常用的命令模块的相关文章

jenkins实现自动化部署及服务重启-初级

jenkins实现自动化部署及服务重启-初级 一.说明 部署jenkins 主要用于web界面化的代码上传.生产服务重启.还未涉及到svn中的代码打包,后期会配合开发同事一起完成此功能.使用jenkins而不是脚本执行主要作用是为了方便版本控制.减少人为失误导致.而jenkins主要是作为可视化的一个框架使用,核心还是各类脚本的执行.而此篇内容主要是讲解如果搭建jenkins,脚本内容将在后续逐个展示,因为作者运用jenkins比较粗浅,也在不断摸索中,此篇文章也是为菜鸟朋友们准备的,希望借鉴此

Linux 自动化部署Rsyslog服务

源码如下: #/bin/bash #该脚本用于自动化部署Ryslog服务配置 #作者:雨中落叶 #博客:https://www.cnblogs.com/yuzly/ echo "**************************** 1.部署Rsyslog服务器 2.部署Rsyslog客户端 ****************************" read -p "请输入部署选项:" Num case $Num in 1) #部署服务端 echo "

ansible安装和常用的命令

1.建立ssh无秘钥认证的关系 yum  -y install  expect 1.1cat auto_deploy.sh #!/bin/sh . /etc/init.d/functions #1.product key pair ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1  if [ $? -eq 0 ];then   action "create dsa success" /bin/true

自动化工具-ansible服务部署与使用

1.前言 1.1ansible软件介绍 python 语言是运维人员必须会的语言 ansible 是一个基于python 开发的自动化运维工具 其功能实现基于ssh远程连接服务 ansible 可以实现批量系统配置,批量软件部署,批量文件拷贝,批量运行命令等功能 除了ansible之外,还有saltstack 等批量管理软件 1.2ansible软件特点: 不需要单独安装客户端(no agents),基于系统自带的sshd服务,sshd就相当于ansible的客户端 不需要服务端(no seve

用shell脚本自动化部署dhcp服务,加图文验证

自动化dhcp服务shell脚本如下: #vim auto_dhcp.sh #!/bin/bash read -p "please input your ip: " IP     #设置dhcp服务器ip read -p "please input your gw: " GW     #设置dhcp服务器网关 IPNET=$(echo $IP |awk -F. '{print $1"."$2"."$3}')  #取网段号  I

Dell服务器之常用管理命令

具体信息    指令 查看机器型号    # dmidecode | grep "Product" 查看厂商    # dmidecode| grep  "Manufacturer" 查看序列号    # dmidecode | grep  "Serial Number" 查看CPU信息    # dmidecode | grep  "CPU" 查看CPU个数    # dmidecode | grep  "Sock

走进自动化运维之Ansible服务部署,附带(参数及模块)详解!

何为Ansible: 简单的自动化运维管理工具,不需要配置代理工具,基于Python研发. Ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架. 自动化运维工具"三剑客": 工具 开发语言 结构 配置文件格式 运行任务 Ansible Python 无 YAML 支持命令行 SaltStack Python C/S YAML 支持命令行 Puppet Ruby C/S Ruby语法格式 通过模块实现 a

详解Ansible服务常用命令模块

ansible可以使用命令行方式进行自动化管理,基本语法如下: ansible 主机名 -m 模块名称 -a 模块特有参数 ansible的命令行管理工具都是由一系列模块.参数所支持的,可以在命令后面加上-h或--help获取帮助.如使用ansible-doc -h或者ansible-doc --help查看其帮助信息ansible-doc是用来查看模块帮助信息的工具,最主要的选项 -l用来列出可使用的模块, -s用来列出某个模块的描述信息和使用示例. 以下是我列出yum模块的描述信息和操作动作

自动化运维之Ansible服务部署

Ansible简介 Ansible使用Python语言开发,巧妙的设计.实现了简单易用.功能强大的自动化管理工具.目前它已经广泛应用于各种规模.各个领域的企业. Ansible应用领域 Ansible的编排引擎可以出色地完成配置管理.流程控制.资源部署等工作,与其他IT自动化产品比较,Ansible提供了一种不需要安装客户端软件.管理简便.功能强大的基础架构配置.维护工具. 安装部署过程特别简单,学习曲线很平坦: 管理主机便捷,支持多台主机并行管理: 避免在被管理主机上安装客户代理,打开额外端口