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

文章目录

1. ansible的安装

  1. 配置虚拟机可以上网
    自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

  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* 
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

2)直接手动编写epel源

vim epel.repo [epel] name=epel baseurl=https://mirrors.aliyun.com/epel/8/Everything/x86_64/ gpgcheck=0 
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
  1. 安装ansible
yum install -y ansible 
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
  1. 查看ansible版本
ansible --version 
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

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 
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

在server2和server3中:

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

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

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

ssh-keygen生成密钥 cd ~/.ssh/ ssh-copy-id server2 ssh-copy-id server3 
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

在server1中:切换到devops用户

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

ssh-keygen cd /home/devops/.ssh ssh-copy-id server2 ssh-copy-id server3(注意此时输入的密码是上面创建devops用户时设置的密码) 
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

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可以管理的地址

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

4.测试连通

ansible all -m ping -i ./hosts 加-i ./hosts 的作用是怕系统找不到hosts文件,指定一下路径
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

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

2.1.1 查看hosts列表

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

再编写一个文件vim ansible/lists

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

2.1.2 群组整合

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

[test] server2  [prod] server3  [devops:children] test prod 

2.1.3 变量分群组

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

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

2.1.4 组合调用

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

2.1.5 在hosts中使用正则表达

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

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

2.2 ansible的配置文件优先级

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

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 包含关于与受管主机的连接-doc -l命令可以列出系统上安装的所有模块 ansible-doc来按照名称查看特定模块的文档 自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

3.2 ansible自带的模块

文件模块
copy:将本地文件复制到受管主机
file:设置文件的权限和其他属性
lineinfile:确保特定行是否在文件中
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

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

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

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

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

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(二)--- 安装、配置、ad-hoc、playbook

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

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

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

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

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

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

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

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

参数 解释
attributes 属性
backup 备份
content 以内容生成文件
dest 目的地
group 所有组
mode 权限
owner 所有者
src
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

ad-hoc命令练习

  • 使用ad-hoc命令修改apache默认发布页面
  • 前提:已经提前在server3安装好apache,并设定好火墙和selinux
  • ansible server3 -m copy -a 'src=/root/ansible/srver3index.html dest=/var/www/html/index.html'
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

3.8 yum模块管理安装包

  • 前提:受管主机上必须有yum仓库
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

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'
停止服务

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

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'
删除用户及用户家目录

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

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"
    自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

  • playbook

vim user.yml  ---  #开头三个破折号,文档的开始标记 - name: Configure User #可选,但是建议使用   hosts:server2  #运行主机   tasks: #任务    - name: devops user 	 user: #使用模块 	   name:devops 	   uid:1001 	   state:present ...  #结尾三个省略号,标记结束(通常省略) 
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

4.2 使用yum模块安装apache

--- - name: Setup service   hosts: server2   tasks:         - name: Install httpd           yum:               name: httpd               state: latest ... 
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

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 ... 
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

4.4 playook的语法检测和空运行

ansible-playbook --syntax-check service.yml
语法检测
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

ansible-playbook -C service.yml
空运行会报告执行这个playbook将会发生什么,但不会改变目标主机
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、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 
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

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 
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

5. 对playbook加密

5.1 对原有的文件进行加密

ansible-vault encrypt filename 加密文件
(注意:filename参数可以是多个)
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

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

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

5.2 对加密文件进行运行

运行加密的playbook,没有密码则报错
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

  • 方法一:交互式提供密码
    ansible-playbook --vault-id @prompt filename
    自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

  • 方法二:使用- -ask-vault-pass提供交互式密码
    ansible-playbook --ask-vault-pass filename
    自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

5.3 对加密文件进行解密

ansible-vault decrypt filename 解密文件
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

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

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

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

ansible-vault rekey filename对加密文件进行改密码
(注意:可以一次更新多个文件密码)
自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook

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

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

5.5 创建新的加密文件

ansible-vault create filename 创建加密文件

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

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

版权声明:玥玥 发表于 2021-03-10 9:45:02。
转载请注明:自动化运维工具ansible(二)--- 安装、配置、ad-hoc、playbook | 女黑客导航