linux部署ansible自动化运维

ansible自动化运维

1 ,编写ansible的仓库(比赛已经安装,无需关注)

1、虚拟机右击---设置---添加---CD/DVD驱动器---完成---确定

2、将ansible.iso的光盘连接上(右下角呈绿色状态)

3、查看光盘挂载信息

df -h

4、挂载光盘(/dev/sr1)

mount /dev/sr1 /opt

df -h

5、编写ansible的仓库

cd /etc/yum.repos.d/

ls

vim ansible.repo

1 [Ansible]

2 name=Ansible

3 baseurl=file:///opt

4 gpgcheck=0

5 enabled=1

yum clean all #清理缓存

yum makecache #建立缓存

yum repolist #刷新

2 ,部署ansible(前面的仓库就是用来部署ansible的)

CentOS7 安装 ansible

更新yum仓库的镜像源

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

安装epel扩展包(扩展包才有ansible软件包)

wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

安装ansible

yum install -y ansible

5、查询ansible是否安装

rpm -q ansible

3,ansible生效配置文件

1、当系统中有多个absible的配置文件时,只能有一个生效,谁的优先级越大谁就生效

2、查看生效的配置文件

ansible --version

3、要求使用普通用户来做ansible,并且ansible的生效文件有要求,例如在用户的家目录

cp /etc/ansible/ansible.cfg .

ls

ansible --version

4、因为当前生效的配置文件为/root/ansible.cfg,所以必须修改/root/ansible.cfg的文件才能往后面做

4 ,清单文件

1、相当于老师手中的花名册,清单文件中有哪些主机就说明这些主机可以被控制节点管理

vim /root/ansible.cfg

14 inventory = /root/inventory 指的清单文件的位置

15 #inventory = /etc/ansible/hosts 默认清单文件存放的位置

2、创建指定的清单文件

vim /root/inventory

[test] #表示主机组的名字

192.168.23.142 #表示主机组下面的主机

3、验证清单文件是否生效,简称:列出清单树

ansible-inventory --graph

备注:带@表示组名

5,ad-hoc临时命令

命令格式:ansible 主机/主机组 [-m 模块] -a "命令"

1、使用临时命令测试ls(报错,原因:因为没有输入密码)

ansible test -a "ls"

2、再次使用临时命令 -k 指定密码

ansible test -a "ls" -k

3、使用临时命令查看对端的当前所在路径

ansible test -a "pwd" -k

4、使用临时命令查看对端的主机名

ansible test -a "hostname" -k

5、使用临时命令在对端主机上的当前所在路径创建文件

ansible test -a "touch 1.txt" -k

6、使用临时命令查看对端的当前所在路径的文件

ansible test -a "ls" -k

6,免密

因为当前是root用户,所以只需要做以下2步

1、在主配置文件中取消指纹验证

vim /root/ansible.cfg

72 host_key_checking = False

73 #host_key_checking = False

2、在清单文件中添加密码

vim /root/inventory

[all:vars]

ansible_password=123456

[test]

192.168.23.142

3、再次测试

ansible test -a "useradd user1"

ansible test -a "id user1"

7.修改tab的缩进-为playbook做准备

vim ~/.vimrc

set number ts=2 sw=2 et

8.帮助

1、统计ansible中有多少个模块有帮助

ansible-doc -l | wc -l

2、在模块中过滤出user

ansible-doc -l | grep user

3、查看user的帮助

ansible-doc user

/EX

9.集中缩进

1、跳转到要缩进的行

2、按ctrl v进入可视化块模式

3、按↑↓键选中要缩进的行

4、按I在行首输入

5、按tab缩进

6、按ecs(两下)

10.编写简单的playbook

Ansible常用模块列表:

|-------------|----------------------------------|
| 模块名称 | 功能描述 |
| ping | 检查指定节点机器是否还能连通。 |
| command | 在远程主机执行命令,不支持管道符和重定向。 |
| raw | 执行原始的命令,不通过模块子系统。 |
| shell | 类似于command模块,但支持更全面的功能,包括管道和重定向。 |
| script | 在远程主机上执行本地脚本。 |
| template | 将模板文件复制到远程主机并支持变量替换。 |
| yum | 管理RedHat/CentOS系统的软件包。 |
| apt | 管理Ubuntu/Debian系统的软件包。 |
| copy | 复制文件到远程主机。 |
| fetch | 从远程主机获取文件到本地。 |
| file | 管理文件和目录的属性。 |
| unarchive | 解压归档文件到远程主机。 |
| user | 管理用户账户。 |
| group | 管理用户组。 |
| service | 管理系统服务。 |
| firewalld | 管理firewalld防火墙规则。 |
| cron | 管理定时任务。 |
| dnf | 管理Fedora系统的软件包(类似于yum)。 |
| synchronize | 同步本地和远程主机之间的文件和目录。 |
| wait_for | 等待某个条件满足后再继续执行。 |
| pause | 暂停执行一段时间。 |
| fail | 人为地使任务失败,并显示错误信息。 |
| debug | 输出变量的值,用于调试。 |

创建用户

vim user.yml

  1. --- #表示playbook的开头(可省,但不建议省)
    • name: useradd # - name:表示解释说明,解释此playbook的功能
  1. hosts: test #表示此playbook应该到哪些主机组和主机上,如果有多个用,隔开
  2. tasks: #接下来具体要实施的任务
    • name: Add the user 'johnd' #- name:解释说明,对此任务的解释说明
  3. user: #模块名
  4. name: qq1 #创建用户的名
  5. uid: 1010 #用户的uid

ansible-playbook user.yml

备注:红色表示错误,黄色表示更改,绿色表示没有更改

根据红色报错信息修正错误之后

验证实验效果

ansible test -a "grep qq1 /etc/passwd"

创建组

1、在模块中过滤出group

ansible-doc -l | grep group

2、查看user的帮助

ansible-doc group

/EX

3,编写playbook vim group.yml


  • name: groupadd

hosts: test

tasks:

  • name: Ensure group "somegroup" exists

group:

name: group1

state: present

4,根据检查排错 ansible-playbook group.yml

5,验证实验效果 ansible test -a "tail -n 1 /etc/group"

安装软件包+开启服务

管理软件包的模块

ansible-doc -l | grep yum

ansible-doc yum

/EX

管理服务的模块

ansible-doc -l | grep service

ansible-doc service

/EX

编写vim httpd.yml

1 ---

2 - name: web

3 hosts: test

4 tasks:

5 - name: install the latset version of Apache

6 yum:

7 name: httpd

8 state: latest

9 - name: Start service httpd, if not started

10 service:

11 name: httpd

12 state: started

13 enabled: yes

验证playbook是否配置成功 ansible-playbook httpd.yml

验证实验效果 ansible test -a "systemctl status httpd"

修改 httpd 的端口号(默认 80 端口)

替换配置文件中某一行的模块

ansible-doc -l | grep line

ansible-doc lineinfile

/EX

编辑playbook vim apache.yml


  • name: listen

hosts: test

tasks:

  • name: Ensure the default Apache port is 8080

lineinfile:

path: /etc/httpd/conf/httpd.conf

regexp: '^Listen '

insertafter: '^#Listen '

line: 'Listen 8080'

state: present

backup: yes

检验配置是否成功:ansible-playbook apache.yml

验证配置效果

ansible test -a "grep ^Listen /etc/httpd/conf/httpd.conf"

复制文件

查找复制文件的模块

ansible-doc -l | grep copy

ansible-doc copy

/EX

编辑playbook vim copy.yml


  • name: copy

hosts: test

tasks:

  • name: Copy file with owner and permissions

copy:

src: /etc/fstab

dest: /var/tmp/fstab

排查错误 ansible-playbook copy.yml

验证实验结果 ansible test -a "ls -ld /var/tmp/fstab"

11.循环(loop)

1,批量创建用户(未循环操作)vim useradd.yml


  • name: loop useradd

hosts: test

tasks:

  • name: Add the user

user:

name: qq10

  • name: Add the user

user:

name: qq11

  • name: Add the user

user:

name: qq12

排查错误 ansible-playbook useradd.yml

验证实验结果 ansible test -a "tail -n 3 /etc/passwd"

2,批量创建用户(使用循环操作)vim useradd1.yml


  • name: loop

hosts: test

tasks:

  • name: Add the user

user:

name: "{{ item }}"

loop:

  • wx1

  • wx2

  • wx3

#"{{ item }}"跟loop是固定搭配

#loop下面就行你要循环的名字

ansible-playbook useradd1.yml

ansible test -a "tail -n 3 /etc/passwd"

3,通过循环批量创建组 vim group1.yml


  • name: groupadd loop

hosts: test

tasks:

  • name: Ensure group "somegroup" exists

group:

name: "{{ item }}"

state: present

loop:

  • group10

  • group20

  • group30

ansible-playbook group1.yml

ansible test -a "tail -n 3 /etc/group"

12 ,利用变量实现模板复制

查看帮助

ansible-doc -l |grep setup

ansible-doc setup

/EX

使用临时命令找变量

查找ipv4相关的变量 ansible test -m setup -a "filter=*ipv4*"

查找bios相关的变量 ansible test -m setup -a "filter=*bios*"

查找cpu相关的变量 ansible test -m setup -a "filter=*cpu*"

1、编写模板,需求内容如下:

被控节点的ipv4地址

被控节点的bios版本

被控节点的CPU颗数

2、编写模板

vim test.j2

{{ ansible_default_ipv4.address }} {{ ansible_bios_version }} {{ ansible_processor_vcpus }}

3、编写playbook将test.j2的模板复制到被控节点并显示具体值

复制带有变量的模板

ansible-doc -l | grep temp

ansible-doc template

编写playbook vim template.yml


  • name: template

hosts: test

tasks:

  • name: Template a file to /etc/files.conf

template:

src: test.j2

dest: /tmp/test.txt

ansible-playbook template.yml

ansible test -a "cat /tmp/test.txt"

使用普通用户

要求使用user1用户部署ansible,生效的配置文件为/home/user1/ansible.cfg,清单文件路径为/home/user1/inventory

1、查看当前生效的配置文件

ansible --version

2、修改生效的配置文件

cp /etc/ansible/ansible.cfg .

ls

3、修改清单文件

vim ansible.cfg

inventory = /home/user1/inventory

inventory = /etc/ansible/hosts

4、修改清单文件内容

vim /home/user1/inventory

[dev]

192.168.23.142

图形化的方式显示 Ansible 库存(inventory)的结构 ansible-inventory --graph

5、使用临时命令做测试(报错)

ansible dev -a "ls"

这个错误信息表明,Ansible 尝试通过 SSH 连接到目标主机,但被拒绝了。拒绝的原因可能是以下几种情况之一:

  1. SSH 密钥问题:目标主机拒绝了你的 SSH 密钥。这可能是因为你使用的密钥没有被添加到目标主机的 ~/.ssh/authorized_keys 文件中。
  2. 用户名或密码错误:如果你使用的是密码认证方式,那么可能是用户名或密码错误。
  3. SSH 配置问题:目标主机的 SSH 配置可能不允许你使用的认证方式。
  4. 防火墙或网络问题:目标主机的防火墙可能阻止了 SSH 连接,或者存在其他网络问题。

为了进一步排查这个问题,你可以尝试以下步骤:

  1. 检查 SSH 密钥:确保你使用的 SSH 密钥已经被添加到目标主机的 ~/.ssh/authorized_keys 文件中。
  2. 检查用户名和密码:如果你使用的是密码认证方式,确保你输入的用户名和密码是正确的。
  3. 检查 SSH 配置:查看目标主机的 SSH 配置文件(通常是 /etc/ssh/sshd_config),确保配置允许你使用的认证方式。
  4. 检查防火墙和网络配置:确保目标主机的防火墙没有阻止 SSH 连接,并且网络配置正确。

ansible dev -a "ls" -k

SSH password: 被控节点的密码

ansible dev -a "touch 1.txt" -k

SSH password: 被控节点的密码

ansible dev -a "ls" -k

SSH password: 被控节点的密码

6、免密

vim ansible.cfg

#取消指纹验证

72 host_key_checking = False

73 #host_key_checking = False

#远程用户使用root身份执行

109 remote_user = root

110 #remote_user = root

设置密码 vim inventory

1 [all:vars]

2 ansible_password=123456

3 [dev]

4 192.168.23.142

测试验证实验结果

ansible dev -a "useradd stu1"

ansible dev -a "id stu1"

7,loop循环-未 vim loop.yml


  • name: loop

hosts: dev

tasks:

  • name: Add the user

user:

name: student1

  • name: Add the user

user:

name: student2

验证实验效果

ansible-playbook loop.yml

ansible dev -a "tail -n 2 /etc/passwd"

8,loop循环

vim loop.yml


  • name: loop

hosts: dev

tasks:

  • name: Add the user

user:

name: "{{ item }}"

loop:

  • stu10

  • stu11

  • stu12

ansible-playbook loop.yml

ansible dev -a "tail -n 3 /etc/passwd"

9,创建组 vim group.yml


  • name: groupadd

hosts: dev

tasks:

  • name: Ensure group "somegroup" exists

group:

name: "{{ item }}"

state: present

loop:

  • group10

  • group20

  • group30

ansible-playbook group.yml

ansible dev -a "tail -n 3 /etc/group"

10,item.name、item.uid、item.groups

vim loop.yml


  • name: loop

hosts: dev

tasks:

  • name: Add the user

user:

name: "{{ item.name }}"

uid: "{{ item.uid }}"

group: "{{ item.group }}"

loop:

  • name: userq1

uid: 1050

group: group10

  • name: userq2

uid: 1040

group: group20

  • name: userq3

uid: 1030

group: group30

ansible-playbook loop.yml

ansible dev -a "tail -n 3 /etc/passwd"

ansible dev -a "id userq1"

ansible dev -a "id userq2"

ansible dev -a "id userq3"

相关推荐
都适、隶仁ミ几秒前
【密码学】SM4算法
linux·运维·服务器·算法·网络安全·密码学·网络攻击模型
君逸~~36 分钟前
RK3568(二)——字符设备驱动开发
linux·驱动开发·笔记·学习·rk3568
牛奔1 小时前
解决 Mac(M1/M2)芯片,使用node 14版本
linux·macos·编辑器·vim
wmxz5201 小时前
Linux环境安装Jenkins
linux·ci/cd·jenkins·持续部署·持续集成
黑蛋同志1 小时前
CentOS 上下载特定的安装包及其所有依赖包
linux·运维·centos
是程序喵呀2 小时前
部署GitLab服务器
运维·服务器·gitlab
●VON2 小时前
go语言的成神之路-标准库篇-os标准库
linux·运维·服务器·开发语言·后端·学习·golang
TracyGC2 小时前
ubuntu 新建脚本shell并增加图标 双击应用实现python运行
linux·运维·ubuntu
怡雪~2 小时前
k8s的Pod亲和性
linux·容器·kubernetes
清风 0012 小时前
一、使用 mdadm 工具在 Ubuntu 上创建 RAID 1(镜像)
运维·服务器·数据库