ansible安装及基本配置

一、linux上安装ansible

1.安装ansible

先安装epel源再安装Ansible,因为Redhat/Centos Linux上,Ansible放在epel源里面

yum -y install epel-release
yum -y install ansible 
2.配置管理节点和远程主机的连接【互通,免密登录】

就是配置管理节点到远程主机SSH无密钥连接(没密码就可以连接对方的电脑)

ssh-keygen -t rsa   [三个回车,生成公钥]
ssh-copy-id [email protected]     //复制ssh密钥到远端主机
ssh [email protected]   //测试,是否能免密登录
ansible使用格式

1.命令行格式(doc)

ansible <host-pattern> [option]
# host-pattern:是目标主机的模式,可以是一个主机名、多个主机名、主机组名或者通配符等。
# options:是可选的命令行选项,用于指定要执行的操作、远程登录用户名、清单文件位置、并行操作数量、sudo权限等。

常用选项包括
ansible安装及基本配置_第1张图片
ansible-doc命令
ansible-doc命令用于查看Ansible模块的文档,可以了解模块的参数、用法和示例等信息。
常用选项:
ansible安装及基本配置_第2张图片

  1. 主机清单配置文件
    在Ansible中,/etc/ansible/hosts文件是默认的主机清单文件,用于定义要管理的主机列表和主机组。下面是/etc/ansible/hosts文件的配置详解:
    定义主机组
vim  /etc/ansible/hosts
[test1]   //主机组,下面组内主机
192.16.10.1
192.168.10.2

测试连通性:

ansible test1 -m ping    //返回为绿色字体,说明可以ping通

例子:

ansible test1 -m yum -a "name=httpd state=present"

.yml劇本如下:
---
- name: install add start http
  hosts: test1
  tasks:
  - name: install httpd
    yum:                #模块的名字
     name: httpd        #调用的参数
     state: present     #调用的参数
  - name: start httpd
    service:
      name: httpd
      state: started     

二、ansible常用模块
文件类模块:
copy:将文件从本地复制到远程主机【copy模块则是直接将源文件复制到目标文件中】
常见字段:
src :源文件路径(本地文件路径)
dest:目标文件路径
group:指定目标文件的属组
owner:指定目标文件的属主
mode:指定目标文件的权限(可以是数字也可以是字符)
backup:是否备份目标文件
validate:指定验证目标文件的命令或脚本 [复制后的验证, validate: ‘visudo -cf %s’]
content:要写入目标文件的内容,可以是字符串或者文件内容
设置文件权限

ansible test1 -m copy -a "src=/home/csq.txt dest=/tmp/csq.txt owner=csq group=csq mode=0644"

上面内容转化为playbook如下:

- hosts:server
  tasks:
  - name:设置文件权限
    copy:
     src: /home/csq.txt
     dest: /tmp/csq.txt
     backup: yes
     owner: csq
     group: csq
     mode: 0644
     validate: 'visudo -cf %s'

template:将本地文件复制到远端主机,并进行变量替换【template模块是先将模板文件中的变量替换为具体的值,然后再将生成的目标文件复制到目标路径中。】
写好一个模板,然后把模板里的变量替换为实际的值,最后生成一个新的文件。
ansible安装及基本配置_第3张图片
(变量的表示法为:{{ }})
例如:
我们设置了两个变量一个表示主机名,一个表示IP,Ansible会替我们搜索,可以直接在Playbook中使用,当然也可也直接在template中使用

ansible test1 -m template -a "src=index.html.j2 dest=/var/www/html/index.html" -e "localhost=centos hostIP=192.168.124.3"

转化为playbook如下:

---
- hosts:test
  vars:
   localhost: centos
   hostIP:192.168.124.3
  tasks:
  - name: 将变量的文件复制到远程主机
    template:
     src:index.html.j2
     dest: /var/www/html/index.html

file:管理文件和目录,如创建(state=touch)、删除(state=absent、修改等操作
ansible安装及基本配置_第4张图片
例如:改变文件的权限

ansible test1 -m file -a "path=/etc/foo.conf owner=foo group=foo mode=0644"

转化成playbook:

---
- hosts: test1
  task:
  - name: 改变文件权限
    file:
    path: /etc/fooo.conf
    owner: foo
    group: foo
    mode:0644

创建文件的软链接

ansible server -m file -a "src=/home/n3 dest=/home/n4 owner=foo group=foo state=link"
ansible server -a "ls -al /home/n3 /home/n4"  #测试
将上面的例子转为Playbook为
- hosts: server
  tasks:
  - name: 创建符号链接
    file:
     src: /home/n3
     dest: /home/n4
     owner: foo
     group: foo
     state: link

fetch:从远程主机上获取

系统模块
command:在远程主机上执行命令
shell:咱也坦承主机上执行shell命令

包管理模块:
yum:管理centos和redhat等linux系统上的软件包
ansible安装及基本配置_第5张图片

ansible test1 -m yum -a "name=httpd state=latest"
使用playbook如下:
---
- hosts: test1
  tasks:
   - name: 安装httpd,如果暗账了更新到最新版本
     yum:
     name: httpd
     state: latest

服务模块
service:管理系统服务,如启动(started)、停止(stopped)、重启(restarted)、修改等操作
ansible安装及基本配置_第6张图片
例如:

ansible test1 -m service -a "name=httpd state=started/stopped/restarted"

使用playbook如下:
---
- hosts:test1
  task:
  - name: 开启httpd服务
    service:
     name: httpd
     state: started/stopped/restarted
     enable: yes   //开启开机自启

firewalld:管理防火墙在中的服务和端口
Ansible的firewall模块用于配置Linux系统的防火墙规则,它可以根据指定的参数来添加、修改或删除防火墙规则
ansible安装及基本配置_第7张图片

用户模块
user:管理系统用户和用户组,如创建、删除、修改等操作
user模块是用于管理远程主机上面的用户账号
ansible安装及基本配置_第8张图片
例如:

针对test2这台主机,添加一个名为http的服务到public区域,并设置该防火墙规则为永久生效状态
- host: test2
  tasks:
  - name: 为服务添加firewalld规则
    firewalld:
      service: http
      permanent: true
      state: enable

针对test2这台主机,添加一个名为http的服务到dmz区域,并设置防火墙规则永久生效状态
- hosts: test2
  task:
  - name: 为服务添加firewalld规则
    firewalld:
     zone: dmz
     service: http
     permanent: true
     state: enabled
 添加端口号 8081 的防火墙规则,并设置规则为永久生效状态,同时将该规则设置为禁用状态
 - hosts: test2
   task:
   - name: 为端口号添加firewalld规则
     firewalld:
      port:8081/tcp
      permanent: true
      state:disabled
添加 UDP 协议的 161-162 端口范围的防火墙规则,并设置规则为永久生效状态,同时将该规则设置为启用状态
- hosts: test2
  task:
  - name:为端口161-162添加firewalld规则
    firewalld:
     port: 161-162/udp
     permanent: true
     state: enabled
    
test2 主机执行一个任务,该任务是添加一个复杂的防火墙规则,该规则允许允许 ftp 服务通过该防火墙,并限制每分钟只能匹配一次该规则,同时生成审计日志,并将该规则设置为永久生效状态,同时将该规则设置为启用状态==
- host: test2
  task:
  - name: 复杂的firwalld规则
    firewalld:
     rich_rule: 'rule service name="ftp" audit limit value="1/m" accept'
     permanent: true
     state: enabled
对 test2 主机执行一个任务,该任务是添加一个允许来自 192.168.200.0/24 网络的数据包通过 internal 区域的防火墙规则,并将该规则设置为启用状态和永久生效状态
- hosts: test2
  task:
  - name: 其他复杂的firewalld规则
    firewalld:
      source: 192.168.200.0/24
      zone:internal
      state: enbaledd
      permanent: true

对 test2 主机执行一个任务,该任务是添加一个允许通过 ens33 网卡的数据包通过 trusted 区域的防火墙规则,并将该规则设置为启用状态和永久生效状态
- host: test2
  task:
  - name: 其他复杂的firewalld规则
    firwalld:
     interface: ens33
     zone: trusted
     permanent: true
     state: enabled

group:管理系统用户组, 如创建、删除、修改等操作

调试和测试类模块
ping:ping 一下你的远程主机,如果可以通过Ansible连接成功,那就范围 pong。
debug:用于调试的模块,只是打印一些简单消息,有点像Linux的 echo命令

三、playbook剧本概念
Ansible Playbook 包含了多个关键字,用于定义任务、变量、条件、循环等。以下是 Ansible Playbook 中常见的关键字列表及其作用:
hosts:定义要管理的主机列表或主机IP,或关键字all。
remote_user:以某个用户身份执行
vars:定义 Playbook 作用域的变量。
tasks:定义一组有序的任务列表,Playbook的核心,定义执行顺序。

四、ansible配置:
配置文件: /etc/ansible/ansible.cfg
Ansible常用的配置文件参数及其含义:
1.inventory:指定主机清单文件的路径,默认为/etc/ansible/hosts。

inventory = /etc/ansible/hosts

2.library:用于指定自定义模块的路径。

library = /usr/share/my_modules/

3.remote_tmp:指定了远程主机上用于存储临时文件的目录路径。

remote_tmp = ~/.ansible/tmp

4.local_tmp:指定了本地主机上用于存储临时文件的目录路径。

local_tmp = ~/.ansible/tmp

5.remote_user:指定 Ansible 在远程主机上执行任务时所使用的用户名。默认情况下,Ansible 会使用当前登录用户的用户名。

remote_user = root

6.private_key_file:指定 Ansible 在远程主机上执行任务时所使用的私钥文件路径。可以使用 SSH 密钥对进行身份验证。

private_key_file = /path/to/file

7.host_key_checking:指定是否检查远程主机的 SSH 主机密钥。默认情况下,该参数值为 true,表示检查主机密钥;可以将其修改为 False 来关闭主机密钥检查。
host_key_checking = False

8.forks:指定 Ansible 在同时执行任务时所使用的进程数。默认情况下,该参数值为 5。
forks = 5

9.become 和 become_method:用于在远程主机上以管理员身份执行任务。become 参数用于指定是否启用管理员身份执行任务,可以将其设置为 true 或 false;become_method 参数用于指定管理员身份的获取方式,常用的取值包括 sudo、su 等。
become=True
become_method=sudo
10.log_path:指定 Ansible 的日志文件路径。可以在该文件中查看 Ansible 的执行日志和错误信息。
log_path = /var/log/ansible.log

五、Playbook的文件格式YAML
以下是一些常见的 YAML 语法:
1.注释 :YAML 文件支持注释注释使用 # 标记
2.键值对:在 YAML 文件中,键值对使用冒号 : 分隔,键和值之间使用空格进行缩进,例如:key: vlaue
3.数组list:数组中的每个元素都是以-开始
4.需要注意的地方
变量里有冒号(:)时要加引号 foo: "ansibleLinuxdocker:i like"
变量以 {开头时要加引号 foo: "{{chenshiren}}"

5.执行Playbook的基本方法

ansible-playbook playbook.yml
# playbook.yml 是要执行的 Ansible Playbook 文件名

使用--syntax-check参数检测脚本的语法
ansible-playbook  playbook.yml --syntax-check

使用--verbose查看输出的细节
ansible-playbook playbook.yml --verbose

使用 --list-hosts 查看该脚本影响哪些主机(host)
ansible-playbook playbook.yml --list-hosts

并行执行脚本
ansible-playbook playbook.yml -f 10

变量
1.在Playbook中用户自定义的变量
用户可以在 Playbook中,通过vars关键字自定义变量,使用时用{{}}引用起来即可

[root@localhost ceshi]# vim ansible.yaml 
- hosts: server
  vars:
   stdin: "hello,word"   //定义变量sdin
  tasks:
  - name: 输出hello,word
    command: echo {{stdin}}   //调用变量stdin

2.把变量放在单独的文件中
在 Ansible 中,当变量较多或需要在多个 Playbook 中重用时,可以将变量放置在一个单独的文件中,然后在 Playbook 中通过 var_files 关键字来引用这个文件中定义的变量。 例如,我们可以在 vars.yml 文件中定义一些变量
例如,我们可以在 vars.yml 文件中定义一些变量:

[root@localhost ceshi]# mkdir vars
[root@localhost ceshi]# vim vars/vars.yaml 
#定义数据库的连接信息
files: /home/csq/csq.txt

然后,在 Playbook 中使用 var_files 来引用这些变量:

[root@localhost ceshi]# vim ansible.yaml 
---

- hosts: server
  vars_files:
   - vars/vars.yaml
  tasks:
  - name: 创建两个文件 /home/csq/csq.txt /home/zhw/zhw.txt
    file:
     path: "{{files}}"
     state: touch
     mode: 0600

3.文件模板中使用的变量
在 Ansible 中,template 模块用于将本地的 Jinja2 模板文件渲染后,将结果写入到远程主机上的某个文件中。在 template 模块中,可以使用多种方式来传递模板文件中需要使用的变量。下面是几种常见的方式:

使用 vars 参数来传递变量
可以在 template 模块中使用 vars 参数来传递变量。

你可能感兴趣的:(ansible)