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:指定登录远程主机的端口号

相关推荐
在野靡生.19 小时前
Ansible(4)—— Playbook
linux·运维·ansible
rocksun1 天前
如何使用Semaphore在Ansible上添加GUI
ansible
千航@abc4 天前
深度剖析 ansible:从部署基础到模块运用及剧本编写
运维·centos·ansible
一只栖枝4 天前
RHCA核心课程技术解析3:Ansible 自动化平台深度实践指南
linux·服务器·自动化·ansible·运维工程师·红帽认证·rhce认证
chairon5 天前
Ansible:playbook实战案例
运维·服务器·网络·ansible
leo·Thomas8 天前
什么是 Ansible Playbook?
ansible·playbook
luojiaao9 天前
【CICD】Ansible知识库
ansible
hhzz10 天前
从零开始使用 Ansible 自动化部署 SpringBoot Web 应用(含 MySQL、Redis、Vue、Nginx)
前端·自动化·ansible
zxnbmk15 天前
ansible速查手册
linux·服务器·ansible
book012115 天前
Ansible 自动化运维
运维·自动化·ansible