linux中ansible整理笔记

一、工作模式

1. adhoc临时命令

语法: ansible 主机或者组列表 -m 模块 -a "参数"

2. playbook

语法:

ansible-playbook xxx.yml

二、模块

  1. ping

2.command:默认模块(不支持重定向,管道)

3.shell:类似command,但是支持shell特性,如管道,重定向

4.script:用于在远程主机上执行脚本

5.file:可以创建文件,目录,链接等,还可以修改权限,属性等

6.copy:用于将文件从控制端拷贝到被控制端

7.fetch:与copy模块相反,copy是上传,fetch是下载

8.lineinfile:用于确保目标文件中有一行内容

9.replace:inlinefile会替换一行,replace可以替换关键词

10.user:实现linux用户管理

11.group:创建、删除组

12.yum_repository:用于配置yum

13.yum:用于rpm软件包管理,如安装、升级、卸载

14.service:用于控制服务

15.lvg:创建,删除卷组,修改卷大小

16.lvol:创建,删除逻辑卷,修改逻辑卷大小

17.filesystem:格式化,也就是创建文件系统

18.mount:挂载文件系统

19.parted:硬盘分区管理

20.setup:facts变量

21.debug:打印指定内容

22.firewalld:防火墙配置

23.template:可以上传具有特定格式的文件(如文件中包含变更)

三、变量

1.预定义变量(facts)

1.1 通过setup模块获取

1.2 常用变量

ansible_hostname:主机名
ansible_all_ipv4_addresses:所有的ipv4地址
ansible_bios_version:BIOS版本信息
ansible_memtotal_mb:总内存大小
ansible_eth0.ipv4.address:eth0的ip地址

2.自定义变量

2.1 用户自己定义的变量

2.2定义位置

2.2.1 主机清单文件中定义

2.2.2 playbook中定义

2.2.3 专门的变量文件中定义

2.2.4 在角色的defaults目录和vars目录中定义

四、错误处理

1.使用ignore_errors忽略错误

2.在task级别忽略,只针对某一任务

3.在play级别定义,针对play中所有任务

五、触发执行的任务

1.通过handlers定义触发执行的任务

2.handlers中定义的任务,不是一定会执行的

3.在tasks中定义的任务,通过notify关键通知handlers中哪个任务要执行

4.只有tasks中的任务状态是changed才会进行通知

六、条件执行

1.使用when关键字进行条件判断

2.常用操作符:

==,!=,>, <, >= ,<=

3.多条件:and, or

4.取反:not关键字

七、注册变量

1.使用register关键字

2.用于捕获和保存任务执行结果

八、任务块

1.通过block关键字,将多个任务组合到一起

2.将整个block任务组,一起控制是否要执行

3.与rescue,always连用

3.1 block中的任务都成功,rescue的任务不执行

3.2 block中的任务出现失败(failed),rescue的任务执行

3.1 block中的任务不论如何,always的任务总是执行

九、循环

1.使用loop关键字

2.相当于shell中的for循环

3.循环用到的变量名是固定的,叫item

十、角色role

1.主要目的:代码重用

2.创建命令: ansible-galaxy init

3.角色目录说明:

3.1 README.md

3.2 tasks

3.3 handlers

3.4 files

3.5 templates

3.6 vars

3.7 defaults

3.8 meta:包含一个main.yml文件,用于描述角色元信息,例如作者、依赖等

3.9 tests:存放一些测试代码和测试用例文件

随着ansible模块越来越多,每次把ansible程序和模块打包在一起,软件的更新就特别麻烦,

软件更新了,模块可能跟不上,或者模块更新了,而软件更新又跟不上模块的更新,所以

目前发展的方向是"软件和模块分离"

ansible软件包为ansible-core(该软件包中包含ansible核心命令和核心模块),其他更多模块单独发布。

而模块和插件等都单独发布,也比较乱,所以设计了新的collection概念,一个collection目录中可以把某一类的模块,角色,插件都封装在一起,下载collection就可以一次性下载所有相关的模块,角色,插件。

红帽会不定期发布一个容器,将ansible核心软件和更多collection封装的模块都一起放到一个容器中,简直是新手的福音,用户不用关心软件的安装,也不用关心模块从哪儿下载。

用户只要启动一个容器就可以搞定一切,然后通过ansible-navigator管理这个容器。

可以参考以下网站:

github地址:

GitHub - ansible/ansible-navigator: A text-based user interface (TUI) for Ansible.

配置文档网址:Configuration - Ansible Navigator Documentation

在nginx中使用:

#适用于RHEL9
1)sudo yum -y install ansible-core ansible-navigator
2) mkdir ~/ansible && cd ~/ansible #目录名称并不限制必须为ansible,要视情况而定,但是目录下的ansible.cfg和inventory文件是不可或缺的
3) vim ansible.cfg
[defaults]
inventory=inventory #清单文件
role_path=roles #角色目录
remote_user=xxx #远程用户
[privilege_escalation] #sudo提权
become=True #是否提权
become_method=sudo #提权方式
become_user=root #提权用户
become_ask_pass=False #是否需要密码

4)vim inventory
略。。。
5) mkdir roles # 创建角色目录
6)ansible all -m ping #测试是否能够ping通所有inventory记录的主机
7)vim ~/.ansible-navigator.yml
--- 
ansible-navigator: 
  execution-environment: 
    image: registry.lab.example.com:5000/ee-supported-rhel8:latest 
    pull: 
      policy: missing 



8) sudo vim /etc/containers/registries.conf #修改容器配置

。。。略
[registries.search] 
registries = ['registry.lab.example.com:5000'] 
[registries.insecure] 
registries = ['registry.lab.example.com:5000'] 
9)podman login registry.lab.example.com
按照题目提示输入用户名,密码
10)ansible-navigator images #下载镜像
11)podman images #查看镜像

注意:image的值看考题给的是什么,不要照抄

例题1-自定义角色:

根据下列要求,在/home/alice/ansible/roles 中创建名为httpd的角色:

1)安装 httpd 软件,并能够开机自动运行

2)开启防火墙,并允许 httpd 通过

3)使用模板 index.html.j2,用来创建/var/www/html/index.html 网页, 内容如下(HOSTNAME是受管理节点的完全域名,IPADDRESS是IP地址):

Welcome to HOSTNAME on IPADDRESS

然后创建剧本 /home/alice/ansible/myrole.yml,为webtest主机组启用httpd角色。

ansible目录下的ansible.cfg文件(注意要定义roles_path)和inventory文件,略。。。
1) cd ~/ansible
2) mkdir roles
3) cd roles
4) ansible-galaxy init httpd
5) ls httpd
6) vim httpd/templates/index.html.j2
Welcome to {{ansible_fqdn}} on {{ansible_enp1s0.ipv4.address}} 
7) vim httod/tasks/main.yml #编辑任务文件
---  
- yum:
    name: httpd
- service:
    name: httpd
    state: started
    enabled: yes
- template:
    src: index.html.j2
    dest: /var/www/html/index.html
8) cd ~/ansible
9) vim myrole.yml
---  
- hosts: webtest
  roles:
    - httpd  
10) ansible-playbook myrole.yml #执行剧本

如果是从网络资源下载角色:

网址:Ansible Galaxy

#1.通过galaxy 安装角色与collection 
创建剧本~/ansible/roles/down.yml,用来从以下 URL 下载角色, 
并安装到~/ansible/roles 目录下: 
http://server1.lab0.example.com/roles/haproxy.tar 此角色名为 haproxy 
http://server1.lab0.example.com/roles/myphp.tar 此角色名为 myphp 

从http://server1.lab0.example.com/materials/下载如下 collection 并安装到
~/ansible/collections 目录下(仅适用于 RHEL9): 
ansible-posix-1.5.1.tar.gz 
community-general-6.3.0.tar.gz 


解题参考: 
# ~/ansible目录下
1) vim  roles/down.yml 
- src: http://server1.lab0.example.com/roles/haproxy.tar 
  name: haproxy 
- src: http://server1.lab0.example.com/roles/myphp.tar 
  name: myphp 

2) ansible-galaxy  install -r  roles/down.yml 

#从上图可知,ansible-galaxy collection install 网络角色,且有下载路径要求的使用下方命令,注意使用"-p"参数
3) ansible-galaxy collection install \ 
http://server1.lab0.example.com/materials/ansible-posix-1.5.1.tar.gz \ 
-p ~/ansible/collections 

4)ansible-galaxy collection install \ 
http://server1.lab0.example.com/materials/community-general-6.3.0.tar.gz \ 
-p ~/ansible/collections 

注意:http://server1.lab0.example.com为假设场景中的linux真机

#使用上述通过galaxy下载的角色 
1)vim web.yml
--- 
- hosts: test05                          
  roles: 
    - haproxy                            
- hosts: webtest                         
  roles: 
    - myphp                              
2) ansible-playbook web.yml 
3)使用curl命令查看效果

4.在playbook,通过role引入要使用的模块

十一、加解密

1.加密:

ansible-vault encrypt 文件

2.解密:

ansible-vault decrypt 文件

3.改密码:

ansible-vault rekey 文件

4.执行加密的playbook:

ansible-playbook --ask-vault-password 文件

十二、特殊主机清单变量

1.ansible_ssh_user:指定登录远程主机的用户名

2.ansible_ssh_pass:指定登录远程主机的密码

3.ansible_ssh_port:指定登录远程主机的端口号

相关推荐
学Linux的语莫4 小时前
Ansible Playbook剧本用法
linux·服务器·云计算·ansible
Nightwish55 小时前
ansible操作随记(一)
ansible
qq_383139849 小时前
ansible playbook安装nacos
ansible
Aimyon_364 天前
⾃动化运维利器 Ansible-Jinja2
运维·ansible
柒月VII5 天前
【Ansible常用命令+模块+Playbook+Roles】
linux·服务器·ansible
Linux运维技术栈5 天前
生产环境centos8 & Red Hat8部署ansible and 一键部署mysql两主两从ansible脚本预告
运维·数据库·mysql·自动化·ansible
Aimyon_365 天前
⾃动化运维利器 Ansible-最佳实战
linux·运维·ansible
饭桶也得吃饭5 天前
运维工具Ansible部署、配置
运维·服务器·ansible
陪小七许个愿5 天前
Ansible一键部署Kubernetes集群
容器·kubernetes·ansible
Aimyon_366 天前
⾃动化运维利器 Ansible-变量
运维·ansible