ansible入门级

 

知识了解:

Ansible 是给 Linux 系统管理员使用的出色自动化工具。它是一种开源配置工具,能让系统管理员可以从一个中心节点(即 Ansible 服务器)管理数百台服务器。将 Ansible 与 Puppet、Chef 和 Salt 等类似工具进行比较时,它是首选的配置工具,因为它不需要任何代理,并且可以工作在 SSH 和 python 上。

在本教程中,我们将学习如何在 CentOS 8 系统上安装 Ansible。

ansible安装:https://blog.csdn.net/dp340823/article/details/112167139

一、ansible用法

ansible通过ssh实现配置管理、应用部署、任务执行等功能。

语法:

ansible <host-patten> [-m module_name] [-a args]

选项

说明

--version

显示版本

-m module

指定模块,默认为command,可以通过修改配置文件进行修改

-v

显示详细过程 -vv -vvv可以显示更加详细的内容

--list-hosts

显示主机列表,可以缩写--list

-k

提示输入ssh连接密码,默认KEY验证

-C

检查不执行

-T,--timeout=TIMEOUT

执行命令的超时时长

-u,--user=REMOTE_USER

指定远程执行的用户

-b,--become

代替旧版的sudo其替换

--become-user=USERNAME

指定sudo的runas用户,默认为root

-K,--ask-become-pass

提示输入sudo时的口令

二、ansible模块

1.ping模块

ping 用来测试主机的连通性

查看ping模块用法,-s可以简单的查看简单相关用法

ansible-doc -s ping

测试主机的连通性

ansible webserver -m ping

2.shell模块

shell模块用于执行shell命令

查看shell用法

ansible-doc -s shell


1.使用shell来修改用户口令

ansible webserver -m shell -a 'echo 123456 |passwd --stdin cib'

Ps:cib是192.168.137.134和192.168.137.135的普通用户名

2.在shell模块中使用变量时参数需要使用单引号,若使用双引号则变量指向的是本机的值

在192.168.137.134设置临时环境变量

export HOSTNAME="LINUX系统环境变量设置"

ansible webserver -m shell -a 'echo $HOSTNAME'

ansible webserver -m shell -a "echo $HOSTNAME"

1.shell重定向

ansible webserver -m shell -a 'dp=/root echo 欢迎来到英雄联盟 > test.log'

ansible webserver -m shell -a 'dp=/root cat test.log'

2.sed对文件进行修改

ansible webserver -m shell -a 'sed -i "s/欢迎来到英雄联盟/提莫队长正在送 命/" /root/test.log'

验证是否修改成功

ansible webserver -m shell -a 'cat /root/test.log'

警告不用管

3.script模块

script 模块是在远程主机上运行ansible服务器上的脚本 

写个helloword.sh

vim helloword.sh

赋权

chmod 775 helloword.sh

执行

ansible webserver -m script -a '/root/helloword.sh'

4.copy模块

copy 从主控端复制文件到远程主机

参数

说明

src

本机的源文件位置

dest

目标主机存放文件位置

owner

修改属主

group

修改属组

mode

修改权限

backup

备份,copy时文件若是存在会直接覆盖

content

指定生成文件的内容

 

 

 

 

 

 

 

 

 

1.复制本机文件到远程主机,并修改属主,修改权限

ansible webserver -m copy -a 'src=/root/helloword.sh dest=/home/cib owner=cib mode=755 backup=yes'

(ansible命令执行两次命令会显示成功绿绿的哦)

验证

在192.168.137.135从机上

2.使用content直接生成文件

ansible webserver -m copy -a 'content="欢迎来到英雄联盟\n提莫队长正在送命\n" dest=/root/test1'

验证

5.fetch模块

fetch 从远程主机提取文件至主控端,只能提取文件,若要提取目录可以将目录先打包

参数

说明

dest

在主控端存放文件的位置

src

远程主机所要提取的文件

将远程/etc/目录抓取至本地的/data

ansible webserver -m fetch -a'dest=/data src=/etc/fstab'

验证

6.File模块

File模块可以设置文件的属性

参数

说明

access_time

访问时间

access_time_format

时间格式

attributes

attr格式

force

当软连接的源文件不存在时使用

group

设置文件的属组

mode

设置文件的权限

modification_time

文件修改时间

modification_time_format

文件修改时间格式

owner

设置文件的属主

path

被管理的文件路径

src

指定软硬链接的源文件位置

state

设置文件的类型,file:文件不存在时不会被创建,link:创建软连接,hard:创建硬连接,absent:删除文件,touch:创建空文件

1.修改文件的属主,权限

ansible webserver -m file -a 'path=/root/test1 owner=cib mode=755'

验证

2.创建硬连接,state=hard

ansible webserver -m file -a 'src=/root/test1 name=/root/test1.log state=hard'

验证

2.创建软连接,state=link

ansible webserver -m file -a 'src=/root/test1 name=/root/123 state=link'

验证

7.hostname 模块

hostname 管理主机名

参数

说明

name

设置主机名

修改主机名

ansible webserver -m hostname -a 'name=dp'

验证

8.cron 模块

corn 计划任务模块

参数

说明

backup

在计划任务创建前先备份

day

hour

小时

minute

分钟

month

weekday

星期

name

计划任务的名称

reboot

重启后执行

state

absent:删除

job

计划任务的内容

disabled

启用和禁用

1.创建计划任务,每天1点备份/etc/目录

ansible webserver -m cron -a 'name=backupetc hour=1 job="/usr/bin/cp -a /etc /data/`date +%F`"'

验证

2.计划任务的禁用,disabled=true

ansible webserver -m cron -a 'name=backupetc day=* hour=1 job="/usr/bin/cp -a /etc /data/`date +%F`" disabled=true'

验证

3.计划任务的启用,disabled=false

ansible webserver -m cron -a 'name=backupetc day=* hour=1 job="/usr/bin/cp -a /etc /data/`date +%F`" disabled=false'

验证

4.删除计划任务,state=absent

ansible webserver -m cron -a 'name=backupetc day=* hour=1 job="/usr/bin/cp -a /etc /data/`date +%F`" state=absent'

验证

9.yum 模块

yum 包管理

参数

说明

name

包的名字

state

present:安装(可缺省),absent:卸载

安装lrzsz

ansible webserver -m yum -a 'name=lrzsz'

卸载lrzsz

ansible webserver -m yum -a 'name=lrzsz state=absent'

10.service 模块

service 用来管理服务

参数

说明

enabled

是否开机启动

name

服务名称

runlevel

运行在哪个级别上

state

started:启动,stopped:停止,reloaded:重读配置文件,restarted:重启服务

启动httpd服务

ansible webserver -m service -a 'name=httpd state=started'

验证

11.user 模块

user 用户管理模块

参数

说明

name

指定用户名

system

系统用户

create_home

创建家目录

shell

指定shell类型

group

指定主组

groups

指定附加组

remove

删除用户是删除家目录

state

absent:删除用户

uid

指定Uid号

1.创建mysql用户,为系统用户,shell类型为/sbin/nologin

ansible webserver -m user -a 'name=mysql system=yes shell=/sbin/nologin'

验证

2.删除账号,删除账号时需要带上remove参数,默认不会删除用户的家目录

ansible webserver -m user -a 'name=mysql remove=yes state=absent'

三、ansible-console

ansible-console为可交互的ansible工具

#all:为当前的所有主机,切换组可以使用cd + 组名 的方式

#2:主机数

#f:5 并行执行数,设置并发数 fork + NUM

四、ansible的playbook

ansible playbook 为ansible的脚本,其是由yaml语言构成,这种语言对格式的要求非常高。

1.yaml语言格式要求

1.在单一档案中,可以用连续三个连字号(---)区分多个档案,另外,还有选择性的连续三个点号_(...)来表示档案的结尾 
2.此行开始正常写playbook的内容,一般建议写明该playbook的功能
3.使用#注释代码 
4.缩进必须统一的,不能空格和tab混用 
5.缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行来实现的 
6.YAML文件内容是区分大小写的,k/v的值均需大小写敏感 
7.多个k/v可以同行写也可以换行写,同行使用,分割 
8.v可以是个字符串,也可以是另一个列表 
9.一个完整的代码块功能需最少元素包括name和task 
10.一个name只能包括一个task 
11.YAML文件扩展名通常为yaml或yml

1.playbook写hello world

vim hello.yaml
- hosts: webserver
  remote_user: root
  tasks:
     - name: hello world
       shell: /usr/bin/wall hello world

​

检测是否存在语法错误

ansible-playbook -C hello.yaml

执行

ansible-playbook hello.yaml

2.Playbook 卸载并安装httpd

准备httpd.yml剧本

vim httpd.yml
- hosts: webserver
  remote_user: root
  tasks:
    - name: remove
      yum: name=httpd


    - name: install
      yum: name=httpd

检测是否存在语法错误

ansible-playbook -C httpd.yml

执行

ansible-playbook httpd.yml

3.创建mysql用户

准备剧本

vim user.yml
- hosts: webserver
  remote_user: root
  tasks:
  - name: create group
    group: name=mysql gid=3306
  - name: create user
    user: name=mysql uid=3306 shell=/sbin/nologlin system=yes group=mysql create_home=no

检测是否存在语法错误

ansible-playbook -C user.yml

执行

ansible-playbook user.yml

验证mysql用户是否创建成功(两种方法都可以)

2.playbook中的变量

变量命名规则:仅能由字母、数字和下划线组成,且只能以字母开头 

1.ansible setup facts 远程主机的所有变量都可直接调用 

此命令可以查看远程主机上所有已存在的各种变量,此处查看hostname的变量名

ansible webserver -m setup -a 'filter=*hostname'

准备剧本

vim var.yaml
- hosts: webserver
  remote_user: root

  tasks:
  - name: file
    file: name={
   
   {ansible_hostname}}.log state=touch

执行 

​ansible-playbook var.yaml

 

验证

ansible webserver -a 'ls  /root'

2.变量可以定义在主机清单中

主机清单中的变量分为两种,普通变量和公共变量 
普通变量:主机组中主机单独定义,优先级高于公共变量 
公共变量:针对主机组中所有主机定义的统一变量 
修改主机清单

vim /etc/ansible/hosts
[webserver]
192.168.137.134 port=80
192.168.137.135 port=8080
[webserver:vars]
mark="-"

准备剧本

vim var2.yaml
- hosts: webserver
  remote_user: root

  tasks:
  - name: file
    file: name={
   
   {ansible_hostname}}{
   
   {mark}}{
   
   {port}}.log state=touch

执行

ansible-playbook var2.yaml

验证

ansible webserver -a 'ls  /root'

3.变量可以通过-e来定义 依旧使用刚才的剧本,直接在命令行添加-e选项

ansible-playbook -e port=1234 var2.yaml

 

验证

ansible webserver -a 'ls  /root'

由此可以发现,通过命令行指定的变量优先级高于主机文件中定义的变量

4.在剧本中定义变量 


vars: 
-var1:value1 
-var2:value2 
示例: 
在playbook中添加变量

准备剧本

vim var3.yaml
- hosts: webserver
  remote_user: root
  vars:
  - port: 4321

  tasks:
  - name: file
    file: name={
   
   {ansible_hostname}}{
   
   {mark}}{
   
   {port}}.log state=touch

执行

ansible-playbook var3.yaml

验证

ansible webserver -a 'ls /root'

5.变量定义在一个专用的变量文件中 
 

创建一个存放变量的文件

vim vars.yml
port: 888

准备剧本

vim var4.yaml
- hosts: webserver
  remote_user: root
  vars_files:
  - vars.yml
  vars:
  - port: 4321

  tasks:
  - name: file
    file: name={
   
   {ansible_hostname}}{
   
   {mark}}{
   
   {port}}.log state=touch

执行

ansible-playbook  var4.yaml

验证

ansible webserver -a 'ls /root'

由此可见使用变量文件定义的变量优先级高于playbook中定义的变量

变量优先级的总结: 
命令-e指定 > 变量文件 > playbook指定 > hosts文件

3.ansible的模板template

template可以根据模块文件动态生成相对应的配置文件。 
template对文件的存放和命名有要求,template文件必须存放在templates目录下,并且以.j2后缀命名。 
yaml文件需要和templates目录平级,目录结构如下。

为主机列表中的主机安装nginx 

准备剧本

vim nginx.yml
- hosts: webserver
  remote_user: root

  tasks:
  - name: install
    yum: name=nginx
  - name: service
    service: name=nginx state=started enabled=yes

 执行

ansible-playbook nginx.yml

 用模板文件实现cpu个数+2的进程数 


1.获取nginx的配置文件,并改名为.j2后缀的文件存放在templates目录下

cp /etc/nginx/nginx.conf /root/yml/templates/nginx.conf.j2

 

获取cpu个数的变量

ansible 192.168.137.134 -m setup | grep cpu

修改模板文件

vim nginx.conf.j2

因为之前安装过nginx,所以要先卸载

ansible webserver -m yum -a'name=nginx state=absent'

执行

ansible-playbook nginx2.yml

 

验证 

ansible webserver -a 'cat /etc/nginx/nginx.conf | grep work'

 

2.修改模板中的端口

vim ./templates/nginx.conf.j2

修改主机文件定义port

vim /etc/ansible/hosts
[webserver]
192.168.137.134 port=80
192.168.137.135 port=8080
[webserver:vars]
mark="-"
~         

重新执行

先卸载

ansible webserver -m yum -a'name=nginx state=absent'

 

ansible-playbook nginx2.yml

验证

ansible webserver -a 'ss -tnl |grep 80'

完成!!!

 

 

 

猜你喜欢

转载自blog.csdn.net/dp340823/article/details/112449394