自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

1. ansible的安装

  1. 配置虚拟机可以上网
    在这里插入图片描述

  2. 配置yum源

1)可以通过epel镜像配置方法编写

安装epel配置包(默认无其他epel源)
yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm

将 repo 配置中的地址替换为阿里云镜像站地址
sed -i 's|^#baseurl=https://download.fedoraproject.org/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*

在这里插入图片描述

2)直接手动编写epel源

vim epel.repo
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/8/Everything/x86_64/
gpgcheck=0

在这里插入图片描述

  1. 安装ansible
yum install -y ansible

在这里插入图片描述

  1. 查看ansible版本
ansible --version

在这里插入图片描述


2. ansible的配置

实验环境:
server1:192.168.43.11
server2:192.168.43.22
server3:192.168.43.33

2.1 hosts的写法

1.在三台主机上创建用户,并且给用户授权

在server1、2、3上:

useradd devops
echo westos | passwd --stdin devops

在这里插入图片描述

在server2和server3中:

visudo
在这里插入图片描述

visudo的目的是让devops用户可以有全部权限,可以自己设定权限,因为这里是实验环境,所以给了全部权限

2.使三台主机之间互相免密

ssh-keygen生成密钥
cd ~/.ssh/
ssh-copy-id server2
ssh-copy-id server3

在这里插入图片描述
在这里插入图片描述

在server1中:切换到devops用户

在devops用户下,将免密动作再做一遍,因为上面的免密是在root用户下做的,所以默认免密的是root用户

ssh-keygen
cd /home/devops/.ssh
ssh-copy-id server2
ssh-copy-id server3(注意此时输入的密码是上面创建devops用户时设置的密码)

在这里插入图片描述

3.创建ansible配置文件

1.
[root@server1 ~]# su - devops ##切换到devops用户
[devops@server1 root]$ cd 
[devops@server1 ~]$ mkdir ansible
[devops@server1 ~]$ cd ansible/
[devops@server1 ansible]$ pwd
/home/devops/ansible


2.
vim ansible/hosts    ##创建hosts文件,内容自定义

[test]
192.168.43.22

[prod]
192.168.43.33

3.
vim ansible/ansible.cfg  创建配置文件

[defaults]
inventory = ./hosts

[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

hosts:
其中括号中的名字代表组名
主机(hosts)部分可以使用域名、主机名、IP地址表示;一般此类配置中多使用IP地址;
组名下的主机地址就是ansible可以管理的地址

在这里插入图片描述

4.测试连通

ansible all -m ping -i ./hosts 加-i ./hosts 的作用是怕系统找不到hosts文件,指定一下路径
在这里插入图片描述
在这里插入图片描述

  • 因为我们在ansible/中自定义了hosts文件,其实也可以通过 /etc/ansible/hosts/中定义全局变量,但是为了安全,好控制,就重新创建了一个目录
  • 配置文件是系统自己寻找的,如果本目录下没有,就默认~/.ansible

2.1.1 查看hosts列表

默认情况下ansible all --list-hosts

再编写一个文件vim ansible/lists

在这里插入图片描述

2.1.2 群组整合

对其进行分组,群组整合,children底下为父群组test的子群组,调用方式为ansible test -m ping

[test]
server2

[prod]
server3

[devops:children]
test
prod

2.1.3 变量分群组

加入变量 port的两种方法,vars底下为群组共同便变量

方法1:
在这里插入图片描述
方法2:
在这里插入图片描述

2.1.4 组合调用

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.1.5 在hosts中使用正则表达

vim ansible/lists
在这里插入图片描述

在这里插入图片描述

2.2 ansible的配置文件优先级

在这里插入图片描述


3. ansible的常用模块

执行状态:
绿色:执行成功并且没有对目标主机有修改
黄色:执行成功并且对受管主机做更改
红色:执行失败

3.1 运行临时命令的格式与帮助

ansible host-pattern -m module [-a 'module arguments'] 

host-pattern参数用于指定应用在临时命令的受管主机
-m选项将ansible应在目标主机上运行的module的名称作为参数
-a选项以带引号字符串的形式取这些参数的列表
ansible的参数 用途
- -version 显示版本
- m module 指定模块(默认command)
-v 详细过程,显示任务结果
-vv 显示任务结果和任务配置
-vvv 包含关于与受管主机的连接信息
-vvvv 增加连接插件相关的额外详细程度选项(包括受管主机上用于执行脚本的用户及所 执行的脚本)
- -list-all 显示主机列表
-k ,- - ask-pass 提示输入ssh连接密码,默认key验证
-K ,- - ask-become-pass 提示输入sudo时的口令
-C ,- -check 检查,并不执行
-T, - - timeout 执行命令的超时时间,默认10s
-u, - -user=REMOTE_USER 执行远程执行的用户
-b ,- -become sudo切换
ansible-doc -l命令可以列出系统上安装的所有模块
ansible-doc来按照名称查看特定模块的文档

在这里插入图片描述在这里插入图片描述

3.2 ansible自带的模块

文件模块
copy:将本地文件复制到受管主机
file:设置文件的权限和其他属性
lineinfile:确保特定行是否在文件中
synchronize:使用rsync同步内容

软件包模块
package:使用操作系统本机的自动检测包管理器管理软件
yum:使用yum软件包管理器管理软件包
apt:使用apt软件包管理器管理软件包
dnf:使用dnf软件包管理器管理软件包
gem:管理Ruby gem
pip:从PyPi管理python软件包

系统模块
firewalld:使用firewalld管理任意端口和服务
reboot:重启计算机服务
service:管理服务
user:添加、删除、管理用户账户

Net Tools模块

get_url:通过HTTP、HTTPS或FTP下载文件
nmcli:管理网络
uri:与web服务交互

在这里插入图片描述

3.3 ping模块检查能否和受管主机联通

在这里插入图片描述

在这里插入图片描述

3.4 user模块查询用户是否存在受管主机

在这里插入图片描述
在这里插入图片描述

3.5 command模块在受管主机说运行命令

command是ansible上的默认模块,可以忽略-m

ansible webserver -m command -a /usr/bin/hostname
在受管主机server3上运行hostname命令

ansible webserver - m command -a /usr/bin/hostname -o
加上-o参数,单行显示

在这里插入图片描述

ansible localhost -m command -a 'id'
查看本机当前用户的ID

ansible localhost -m command -a 'id' -u devops
通过-u选项使用devops进行连接并执行id命令

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.6 shell模块在受管主机运行命令

ansible localhost -m shell -a set
在这里插入图片描述

使用shell和command的区别:
command模块允许执行远程命令,但这些命令不是shell处理,所以无法访问shell环境变量,所以不能执行重定向、传送等操作

3.7 copy模块将本地文件复制到受管主机

copy从服务器复制文件到客户端,与fetch(从客户端取文件到服务器)相反

参数 解释
attributes 属性
backup 备份
content 以内容生成文件
dest 目的地
group 所有组
mode 权限
owner 所有者
src

在这里插入图片描述
在这里插入图片描述

ad-hoc命令练习

  • 使用ad-hoc命令修改apache默认发布页面
  • 前提:已经提前在server3安装好apache,并设定好火墙和selinux
  • ansible server3 -m copy -a 'src=/root/ansible/srver3index.html dest=/var/www/html/index.html'

在这里插入图片描述
在这里插入图片描述

3.8 yum模块管理安装包

  • 前提:受管主机上必须有yum仓库

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.9 service模块管理服务

ansible webserver -m service -a 'name=vsftpd state=started enabled=true'
启动服务

ansible webserver -m service -a 'name=vsftpd state=restarted '
重启服务

ansible webserver -m service -a 'name=vsftpd state=stopped enabled=no'
停止服务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.10 user模块管理用户

ansible dbserver -m user -a 'name=nginx shell=/sbin/nologin system=yes home=/var/nginx groups=root,bin uid=1999 comment="nginx service"'
创建指定用户

ansible dbserver -m user -a 'name=nginx state=absent remove=yes'
删除用户及用户家目录

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


4. 编写和运行playbook

  • 1.剧本(Playbook):是利用YAML标记语言编写的可重复执行的任务的列表。

  • 2.yaml格式通常以 .yml为扩展名 ansible-play xxx.yml 运行playbook(要求环境中有inventory和ansible.cfg)注意:playbook里任务和任务间要有-,play和play间要有-

  • 3.ansible-playbook默认输出不提供详细任务执行信息。
    -v参数提供,共四个级别:
    -v(显示任务结果)
    -vv (显示任务结果和任务配置)
    -vvv (包含关于与受管主机的连接信息)
    -vvvv (增加连接插件相关的额外详细程度选项)(包括受管主机上用于执行脚本的用户及所 执行的脚本)

  • 4.执行playbool前最好进行语法验证 ansible-playbook --syntax-check webserver.yml 有语法错误,会提示错误位置 ERROR!S

  • 5.yaml对于缩进量没有严格要求,但是有两个基本原则:
    1).处于同一层次结构中同一级别的数据元素必须具有相同的缩进量(play本身是一个键值对集合,同一play中的键应当使用相同的缩进量)
    2).如果项目属于其他项目的子项,其缩进量必须大于父项’

4.1 查看指定用户的命令

  • ad-hoc临时命令
    ansible server2 -m user "name=devops uid=1001 state=present"
    在这里插入图片描述

  • playbook

vim user.yml

---  #开头三个破折号,文档的开始标记
- name: Configure User #可选,但是建议使用
  hosts:server2  #运行主机
  tasks: #任务
   - name: devops user
	 user: #使用模块
	   name:devops
	   uid:1001
	   state:present
...  #结尾三个省略号,标记结束(通常省略)

在这里插入图片描述

4.2 使用yum模块安装apache

---
- name: Setup service
  hosts: server2
  tasks:
        - name: Install httpd
          yum:
              name: httpd
              state: latest
...

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 确保服务开机启动

---
- name: Setup Webserver
  hosts: server2
  tasks:
  - name: Apache is enabled
    service:
       name: httpd
       enabled: true

  - name: Install vsftpd
    yum:
       name: vsftpd
       state: latest

  - name: vsftpd is enabled
    service:
       name: vsftpd
       enabled: true
...

在这里插入图片描述
在这里插入图片描述

4.4 playook的语法检测和空运行

ansible-playbook --syntax-check service.yml
语法检测
在这里插入图片描述

ansible-playbook -C service.yml
空运行会报告执行这个playbook将会发生什么,但不会改变目标主机
在这里插入图片描述

4.5 安装、配置默认发布页面并启动apache

---
- name: Install and Start Apache
  hosts: server2
  tasks:
          - name: Apache is Installed
            yum:
                    name: httpd
                    state: present

          - name: Change index.html
            copy:
                    content: "welcome to server2!"
                    dest: /var/www/html/index.html

          - name: Start Apache
            service:
                    name: httpd
                    state: started
                    enabled: true

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

4.6 多剧本

--- 
- name: web
  hosts: server2
  become: yes
  tasks:
    - name: Apache and firewalld Installed
      yum:
         name: 
          - httpd
          - firewalld
         state: present

    - name: Configure index.html
      copy:
         content: "welcome to apache_firewalld'test page!!!"
         dest: /var/www/html/index.html
 
    - name: Firewalld enabled and running
      service:
        name: firewalld
        enabled: true
        state: started
 
    - name: Firewalld permits httpd
      firewalld:
         service: http
         state: enabled
         permanent: yes
         immediate: yes
 
    - name: httpd enabled and running
      service:
         name: httpd
         enabled: true
         state: started

- name: Test webserver
  hosts: localhost
  become: no
  tasks:
     - name: connect webserver
       uri:
          url: http://server2
          return_content: yes
          state_code: 200

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


5. 对playbook加密

5.1 对原有的文件进行加密

ansible-vault encrypt filename 加密文件
(注意:filename参数可以是多个)
在这里插入图片描述
在这里插入图片描述

ansible-vault view filename 查看加密文件
原理:将文件解密为一个临时文件,并编辑;保存时,复制内容并删除临时文件 ‘edit命令始终重写文件,因此只有在更改文件时使用,查看尽量使用view’

在这里插入图片描述

5.2 对加密文件进行运行

运行加密的playbook,没有密码则报错
在这里插入图片描述

  • 方法一:交互式提供密码
    ansible-playbook --vault-id @prompt filename
    在这里插入图片描述

  • 方法二:使用- -ask-vault-pass提供交互式密码
    ansible-playbook --ask-vault-pass filename
    在这里插入图片描述

5.3 对加密文件进行解密

ansible-vault decrypt filename 解密文件
在这里插入图片描述

ansible-vault decrypt filename1 --output=filename2 解密的同时改名
可以使用- -output=filename2将加密文件保存为新的名称,使用此参数时输入文件只能是一个

在这里插入图片描述
在这里插入图片描述

5.4 对加密文件进行密码修改

ansible-vault rekey filename对加密文件进行改密码
(注意:可以一次更新多个文件密码)
在这里插入图片描述

使用vault密码文件时,最好使用--new-vault-password-file

在这里插入图片描述

5.5 创建新的加密文件

ansible-vault create filename 创建加密文件

ansible-vaultcreate --vault-password-file=secret filename创建加密文件同时将密码保存
注意:secret文件中必须先写入密码

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46074899/article/details/111769540