ansible
一:介绍
Ansible 的 Galaxy 工具,类似程序员使用的 github,docker 镜像仓库,yum仓库和deb仓库等。可以将自己编写的 Role 通过 Galaxy 这个平台进行分享。同样,我们也可以通过 Galaxy 这个平台去获取一些我们想要的 Role
Galaxy 官网:
ansible-galaxy 则是一个使用 Galaxy 命令行的工具。
二进制文件一般不放到角色中管理,因此我们下载的角色基本都是文本文件
galaxy有银河、星系的意思,没啥特殊含义,就是起了这么个名字
1.获取帮助信息
[root@jettoloader test]# ansible-galaxy -h
usage: ansible-galaxy [-h] [--version] [-v] TYPE ...Perform various Role and Collection related operations.positional arguments:TYPEcollection Manage an Ansible Galaxy collection.role Manage an Ansible Galaxy role.optional arguments:--version show program's version number, config file location,configured module search path, module location, executablelocation and exit-h, --help show this help message and exit-v, --verbose verbose mode (-vvv for more, -vvvv to enable connectiondebugging)
1.1 ansible-galaxy role:
[root@jettoloader test]# ansible-galaxy role -h
usage: ansible-galaxy role [-h] ROLE_ACTION ...positional arguments:ROLE_ACTIONinit Initialize new role with the base structure of a role. 初始化新角色的基本结构remove Delete roles from roles_path.从角色路径中删除角色。delete Removes the role from Galaxy. It does not remove or alter theactual GitHub repository. 从Galaxy中删除角色。它不会删除或更改实际的GitHub存储库list Show the name and version of each role installed in theroles_path.查看角色列表search Search the Galaxy database by tags, platforms, author andmultiple keywords.搜索角色import Import a role.导入角色setup Manage the integration between Galaxy and the given source.管理Galaxy和给定源之间的集成info View more details about a specific role.查看有关特定角色的详细信息install Install role(s) from file(s), URL(s) or Ansible Galaxy.从文件、URL或Ansible Galaxy安装角色optional arguments:-h, --help show this help message and exit
1.2 ansible-galaxy collection:
[root@jettoloader test]# ansible-galaxy collection -h
usage: ansible-galaxy collection [-h] COLLECTION_ACTION ...positional arguments:COLLECTION_ACTIONinit Initialize new collection with the base structure of acollection.使用集合的基本结构初始化新集合build Build an Ansible collection artifact that can be publishto Ansible Galaxy.构建一个可发布到Ansible Galaxy的Ansible集合工件publish Publish a collection artifact to Ansible Galaxy.向Ansible Galaxy发布一个集合工件install Install collection(s) from file(s), URL(s) or AnsibleGalaxy.从文件、URL或Ansible Galaxy安装集合optional arguments:-h, --help show this help message and exit
1.3 Collections 和role关系:
Collections是Ansible比较新的版本引入的一个概念,它是roles的集合,比如我们可以把很多相关的roles定义成Collections。以下在galaxy 可以看到
Collections:
roles:
大家执行下载命令的时候也可以看到,基本上都是到github上去下载的,毕竟这些roles只是一组文本文件,文件大小都不大,我们也可以自己去github上下载并解压,不过那样还是有些麻烦。
1.4 常用指令
1.4.1)在 galaxy 上搜索共享的 role
[root@jettoloader test]# ansible-galaxy search nginxFound 1641 roles matching your search. Showing first 1000.Name Description---- -----------0x0i.prometheus Prometheus - a multi-dimensional time-series data monitoring and alerting toolkit0x5a17ed.ansible_role_netbox Installs and configures NetBox, a DCIM suite, in a production setting.1davidmichael.ansible-role-nginx Nginx installation for Linux, FreeBSD and OpenBSD.1it.sudo Ansible role for managing sudoers
1.4.2)安装 galaxy 上共享的 role
[root@jettoloader test]# ansible-galaxy role install -v -p ./ nginx
参考资料
ansible详解之部署简介和使用_码农崛起-CSDN博客
.html
.html
二 案例 nfs
2.1 主机规划
主机名称 | 操作系统版本 | 内网IP | 安装软件 | |
---|---|---|---|---|
172.16.10.21 | CentOS7.5 | 172.16.10.21 | ansible | |
172.16.10.15 | CentOS7.5 | 172.16.10.15 | 不用安装 | |
172.16.10.5 | CentOS7.5 | 172.16.10.5 | 不用安装 |
2.2 添加用户账号
说明:
1、 运维人员使用的登录账号;
2、 所有的业务都放在 /app/jettech 下「jettech用户的家目录」,避免业务数据乱放;
3、 该用户也被 ansible 使用,因为几乎所有的生产环境都是禁止 root 远程登录的(因此该 jettech用户也进行了 sudo 提权)。
# 使用一个专门的用户,避免直接使用root用户
# 添加用户、指定家目录并指定用户密码
# sudo提权
# 让其它普通用户可以进入该目录查看信息[root@jettoloader k3s-ansible-master]# mkdir /app
[root@jettoloader k3s-ansible-master]# useradd -u 1050 -d /app/jettech -m jettech
[root@jettoloader k3s-ansible-master]# echo '123456aA' | /usr/bin/passwd --stdin jettech
Changing password for user jettech.
passwd: all authentication tokens updated successfully.
[root@jettoloader k3s-ansible-master]# echo "jettech ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
[root@jettoloader k3s-ansible-master]# chmod 755 /app
2.3 Ansible 配置清单Inventory
之后文章都是如下主机配置清单
[root@jettoloader jettech]# cd /app/jettech/
[root@jettoloader jettech]# mkdir ansible[root@jettoloader ansible]# pwd
/app/jettech/ansible
[root@jettoloader ansible]# cat hosts.ini
[master]
#172.16.10.5 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
#方式1 别名 + 主机 + 端口 + 密码
#web01 ansible_ssh_host=172.16.1.183 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
#web02 ansible_ssh_host=172.16.1.184 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
#web03 ansible_ssh_host=172.16.1.185 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
# 方式2、主机 + 端口 + 密钥
172.16.10.5:22 #[master:vars][node]
#172.16.10.15 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
172.16.10.15
172.16.10.21[k3s_cluster:children]
master
node[registry]
172.16.10.21
2.4 Ansible Roles 基本概述
前面已经学习了 变量、tasks 和 handlers,那怎样组织 playbook 才是最好的方式呢?
使用 roles。roles 基于一个已知的文件结构,去自动的加载某些 vars_files,tasks 以及 handlers。以便 playbook 更好的调用。相比 playbook,roles 的结构更加的清晰有层次。
2.5 Roles 目录结构
在 roles 目录下,可以使用如下命令创建目录
[root@jettoloader ansible]# mkdir ansible_roles
[root@jettoloader ansible]# cd ansible_roles/
[root@jettoloader ansible_roles]# ansible-galaxy role init roles/nfs[root@jettoloader ansible]# tree
.
├── ansible_roles
│ └── roles
│ └── nfs #角色名称
│ ├── defaults # 角色默认变量(最低优先级)
│ │ └── main.yml
│ ├── files # 文件存放
│ ├── handlers # 触发任务
│ │ └── main.yml
│ ├── meta # 依赖关系
│ │ └── main.yml
│ ├── README.md # 使用说明
│ ├── tasks # 具体任务
│ │ └── main.yml
│ ├── templates # 模板文件
│ ├── tests # 本role测试
│ │ ├── inventory
│ │ └── test.yml
│ └── vars # 角色其他变量
│ └── main.yml
└── hosts.ini # 主机信息
目录说明:
1、首先要有 roles 目录,然后在 roles 目录下创建相应的目录。
2、roles 下的目录名最好见文知意,如 common 目录表示基础目录,是必要的;nfs 目录表示安装 nfs 服务;redis目录表示安装 redis服务;等等。
3、可以根据自身需要创建 roles 下的二级目录,不需要的目录可以不创建,没需要全目录创建。
4、roles 目录下的二级目录中,有些目录必须包含一个 main.yml 文件,以便 ansible 使用。
2.6 Roles 依赖关系
roles 允许在使用 role 时自动引入其他 role。roles 的依赖关系存储在 role 目录中的 meta/main.yml 文件中。
例如:安装 nfs是需要先确保 nginx和 vfstpd 都能正常运行,此时都可以在 nfs的 role 中定义依赖 nginx和vfstpd的 role。
[root@jettoloader ansible]# cat ansible_roles/roles/nfs/meta/main.yml
---
dependencies:- { role: nginx }- { role: vfstpd}
此时 nfs 的 role 会先执行 nginx的 role,然后执行mysql 的 role,最后再执行 nfs 本身的 role。
2.7 Ansible Roles 案例-部署 NFS 服务
2.7.1)整体目录结构
[root@jettoloader ansible_roles]# pwd
/app/jettech/ansible/ansible_roles
[root@jettoloader ansible_roles]# ll
total 4
-rw-r--r-- 1 root root 55 Feb 9 10:39 all.yml
drwxr-xr-x. 2 root root 41 Feb 9 10:31 group_vars
drwxr-xr-x 3 root root 17 Feb 9 10:14 roles
[root@jettoloader ansible_roles]# tree
.
├── all.yml
├── group_vars #全局变量
│ └── all.yml
└── roles├── nfs # 服务端│ ├── defaults│ │ └── main.yml│ ├── files│ ├── handlers│ │ └── main.yml│ ├── meta│ │ └── main.yml│ ├── README.md│ ├── tasks│ │ ├── config.yml│ │ ├── install.yml│ │ ├── main.yml│ │ ├── mkdir.yml│ │ ├── start_NFS.yml│ │ └── start_rpcbind.yml│ ├── templates│ │ └── exports.j2│ ├── tests│ │ ├── inventory│ │ └── test.yml│ └── vars│ └── main.yml└── nfs_client #客户端├── defaults│ └── main.yml├── files├── handlers│ └── main.yml├── meta│ └── main.yml├── README.md├── tasks│ └── main.yml├── templates├── tests│ ├── inventory│ └── test.yml└── vars└── main.yml
2.7.2)整体目录结构服务端信息
目录结构
[root@jettoloader ansible_roles]# tree roles/nfs
roles/nfs
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ ├── config.yml
│ ├── install.yml
│ ├── main.yml
│ ├── mkdir.yml
│ ├── start_NFS.yml
│ └── start_rpcbind.yml
├── templates
│ └── exports.j2
├── tests
│ ├── inventory
│ └── test.yml
└── vars└── main.yml8 directories, 14 files
2.7.2.1)tasks任务目录信息
[root@jettoloader ansible_roles]# cat roles/nfs/tasks/main.yml
---
# tasks file for roles/nfs
- include_tasks: install.yml
- include_tasks: config.yml
- include_tasks: mkdir.yml
- include_tasks: start_rpcbind.yml
- include_tasks: start_NFS.yml[root@jettoloader ansible_roles]# cat roles/nfs/tasks/install.yml
- name: "install package NFS "yum:name:- nfs-utils- rpcbindstate: present
[root@jettoloader ansible_roles]# cat roles/nfs/tasks/config.yml
- name: "NFS server config and edit restart"template:src: exports.j2dest: /etc/exportsowner: rootgroup: rootmode: '644'notify: "reload NFS server"
[root@jettoloader ansible_roles]# cat roles/nfs/tasks/mkdir.yml
- name: "create NFS dir"file:path: "{{ nfs_dir }}"owner: rootgroup: rootstate: directoryrecurse: yes
[root@jettoloader ansible_roles]# cat roles/nfs/tasks/start_rpcbind.yml
- name: "rpcbind server start"systemd:name: rpcbindstate: starteddaemon_reload: yesenabled: yes
[root@jettoloader ansible_roles]# cat roles/nfs/tasks/start_NFS.yml
- name: "NFS server start"systemd:name: nfsstate: starteddaemon_reload: yesenabled: yes
2.7.2.2)handlers任务目录信息
[root@jettoloader ansible_roles]# cat roles/nfs/handlers/main.yml
---
# handlers file for roles/nfs
- name: "reload NFS server"systemd:name: nfsstate: reloaded
2.7.2.2)模板目录信息
[root@jettoloader ansible_roles]# cat roles/nfs/templates/exports.j2
{{ nfs_dir }} *(rw,sync,root_squash,all_squash,anonuid=1050,anongid=1050)
2.7.2.3)变量信息
全局的:
[root@jettoloader ansible_roles]# cat group_vars/all.yml
---
# NFS 服务端目录
nfs_dir: /opt/jettech/work/nfs/data
局部的:
[root@jettoloader ansible_roles]# cat roles/nfs/defaults/main.yml
---
# defaults file for roles/nfs
nfs_dir: /opt/jettech/work/nfs/data[root@jettoloader ansible_roles]# cat roles/nfs/vars/main.yml
---
# vars file for roles/nfs[root@jettoloader ansible_roles]#
nfs_dir: /opt/jettech/work/nfs/data
优先级: group_vars/all.yml > roles/nfs/vars/main.yml > roles/nfs/defaults/main.yml
2.7.3)整体目录结构客户端信息
2.7.3.1)目录结构,客户端就比较简单了,就一个挂载任务
[root@jettoloader ansible_roles]# tree roles/nfs_client/
roles/nfs_client/
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars└── main.yml8 directories, 8 files
2.7.3.2)tasks任务目录信息
# vars file for roles/nfs[root@jettoloader ansible_roles]# cat roles/nfs_client/tasks/main.yml
---
# tasks file for roles/nfs_client
- name: "mount NFS server"mount:src: 172.16.10.21:{{ nfs_dir }}path: /mntfstype: nfsopts: defaultsstate: mounted
2.7.4)playbook 信息
[root@jettoloader ansible_roles]# cat all.yml
---# NFS server
- hosts: registryroles:- nfs- hosts: noderoles:- nfs_client
2.7.5) 任务执行
[root@jettoloader ansible_roles]# ansible-playbook -b -i ../hosts.ini --syntax-check all.yml # 语法检测playbook: all.yml
[root@jettoloader ansible_roles]# ansible-playbook -b -i ../hosts.ini -C all.yml # 预执行,测试执行PLAY [registry] *******************************************************************************************************************************************************************TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/install.yml for 172.16.10.21TASK [nfs : install package NFS] **************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/config.yml for 172.16.10.21TASK [nfs : NFS server config and edit restart] ***********************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/mkdir.yml for 172.16.10.21TASK [nfs : create NFS dir] *******************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/start_rpcbind.yml for 172.16.10.21TASK [nfs : rpcbind server start] *************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/start_NFS.yml for 172.16.10.21TASK [nfs : NFS server start] *****************************************************************************************************************************************************
ok: [172.16.10.21]PLAY [node] ***********************************************************************************************************************************************************************TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [172.16.10.21]
ok: [172.16.10.15]TASK [nfs_client : mount NFS server] ********************************************** ************************************************************************************************
changed: [172.16.10.21]
changed: [172.16.10.15]PLAY RECAP ************************************************************************************************************************************************************************
172.16.10.15 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.16.10.21 : ok=13 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0[root@jettoloader ansible_roles]# ansible-playbook -b -i ../hosts.ini all.yml # 执行PLAY [registry] *******************************************************************************************************************************************************************TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/install.yml for 172.16.10.21TASK [nfs : install package NFS] **************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/config.yml for 172.16.10.21TASK [nfs : NFS server config and edit restart] ***********************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/mkdir.yml for 172.16.10.21TASK [nfs : create NFS dir] *******************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/start_rpcbind.yml for 172.16.10.21TASK [nfs : rpcbind server start] *************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/start_NFS.yml for 172.16.10.21TASK [nfs : NFS server start] *****************************************************************************************************************************************************
ok: [172.16.10.21]PLAY [node] ***********************************************************************************************************************************************************************TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [172.16.10.21]
ok: [172.16.10.15]TASK [nfs_client : mount NFS server] **********************************************************************************************************************************************
changed: [172.16.10.21]
changed: [172.16.10.15]PLAY RECAP ************************************************************************************************************************************************************************
172.16.10.15 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.16.10.21 : ok=13 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
2.7.5) 检查各节点挂载 情况:
[root@jettoloader ~]# mount | grep 172
172.16.10.21:/opt/jettech/work/nfs/data on /mnt type nfs4 (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.10.15,local_lock=none,addr=172.16.10.21)
2.7.6) meta role依赖
nfs的role依赖vsftpd的role
2.7.6.1) 生成vsftpd的role
[root@jettoloader ansible_roles]# ansible-galaxy role init roles/vsftpd
- Role roles/vsftpd was created successfully
2.7.6.2) 编写vsftpd的task
[root@jettoloader ansible_roles]# cat roles/vsftpd/tasks/main.yml
---
# tasks file for roles/vsftpd- name: install testdebug:msg: "test===============================start"- name: "install package vsftpd ==============="yum:name:- vsftpdstate: present- name: "systemctl enable vsftpd --now=================="systemd:name: vsftpdstate: starteddaemon_reload: yesenabled: yes
以下文件不用动
[root@jettoloader ansible_roles]# cat all.yml
---# NFS server
- hosts: registryroles:- nfs- hosts: noderoles:- nfs_client
2.7.6.3)nfs的依赖文件编写:roles/nfs/meta/main.yml
[root@jettoloader ansible_roles]# cat roles/nfs/meta/main.yml
galaxy_info:author: wu bodescription: your role descriptioncompany: jettech# If the issue tracker for your role is not on github, uncomment the# next line and provide a value# issue_tracker_url: Choose a valid license ID from - some suggested licenses:# - BSD-3-Clause (default)# - MIT# - GPL-2.0-or-later# - GPL-3.0-only# - Apache-2.0# - CC-BY-4.0license: license (GPL-2.0-or-later, MIT, etc)min_ansible_version: 2.9# If this a Container Enabled role, provide the minimum Ansible Container version.# min_ansible_container_version:## Provide a list of supported platforms, and for each platform a list of versions.# If you don't wish to enumerate all versions for a particular platform, use 'all'.# To view available platforms and versions (or releases), visit:# platforms:# - name: Fedora# versions:# - all# - 25# - name: SomePlatform# versions:# - all# - 1.0# - 7# - 99.99galaxy_tags: []# List tags for your role here, one per line. A tag is a keyword that describes# and categorizes the role. Users find roles by searching for tags. Be sure to# remove the '[]' above, if you add tags to this list.## NOTE: A tag is limited to a single word comprised of alphanumeric characters.# Maximum 20 tags per role.#dependencies: []
dependencies: - { role: vsftpd }# List your role dependencies here, one per line. Be sure to remove the '[]' above,# if you add dependencies to this list.
主要是:
dependencies: - { role: vsftpd }
2.7.6.4)执行
[root@jettoloader ansible_roles]# ansible-playbook -b -i ../hosts.ini all.yml PLAY [registry] *******************************************************************************************************************************************************************TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [172.16.10.21]TASK [vsftpd : install test] ******************************************************************************************************************************************************
ok: [172.16.10.21] => {"msg": "test===============================start"
}TASK [install package vsftpd ===============] *************************************************************************************************************************************
changed: [172.16.10.21]TASK [systemctl enable vsftpd --now==================] ****************************************************************************************************************************
changed: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/install.yml for 172.16.10.21TASK [nfs : install package NFS] **************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/config.yml for 172.16.10.21TASK [nfs : NFS server config and edit restart] ***********************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/mkdir.yml for 172.16.10.21TASK [nfs : create NFS dir] *******************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/start_rpcbind.yml for 172.16.10.21TASK [nfs : rpcbind server start] *************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/start_NFS.yml for 172.16.10.21TASK [nfs : NFS server start] *****************************************************************************************************************************************************
ok: [172.16.10.21]PLAY [node] ***********************************************************************************************************************************************************************TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [172.16.10.21]
ok: [172.16.10.15]TASK [nfs_client : mount NFS server] **********************************************************************************************************************************************
ok: [172.16.10.21]
ok: [172.16.10.15]PLAY RECAP ************************************************************************************************************************************************************************
172.16.10.15 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.16.10.21 : ok=16 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 [root@jettoloader ansible_roles]#
2.7.6.5)检测:
[root@jettoloader k3s-ansible-master]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemonLoaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)Active: active (running) since Wed 2022-02-09 13:54:18 CST; 28s agoMain PID: 1902 (vsftpd)CGroup: /system.slice/vsftpd.service└─1902 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.confFeb 09 13:54:18 jettoloader systemd[1]: Starting Vsftpd ftp daemon...
Feb 09 13:54:18 jettoloader systemd[1]: Started Vsftpd ftp daemon.
注意:以下文件不用添加vsftpd的role,因为nfs的meta/main.yaml 文件中已经有依赖的会在nfs之前执行vsftpd。而且vsftpd的role执行的主机和nfs的role是相同的主机
[root@jettoloader ansible_roles]# cat all.yml
---# NFS server
- hosts: registry
roles:
- nfs- hosts: node
roles:
- nfs_client
ansible
一:介绍
Ansible 的 Galaxy 工具,类似程序员使用的 github,docker 镜像仓库,yum仓库和deb仓库等。可以将自己编写的 Role 通过 Galaxy 这个平台进行分享。同样,我们也可以通过 Galaxy 这个平台去获取一些我们想要的 Role
Galaxy 官网:
ansible-galaxy 则是一个使用 Galaxy 命令行的工具。
二进制文件一般不放到角色中管理,因此我们下载的角色基本都是文本文件
galaxy有银河、星系的意思,没啥特殊含义,就是起了这么个名字
1.获取帮助信息
[root@jettoloader test]# ansible-galaxy -h
usage: ansible-galaxy [-h] [--version] [-v] TYPE ...Perform various Role and Collection related operations.positional arguments:TYPEcollection Manage an Ansible Galaxy collection.role Manage an Ansible Galaxy role.optional arguments:--version show program's version number, config file location,configured module search path, module location, executablelocation and exit-h, --help show this help message and exit-v, --verbose verbose mode (-vvv for more, -vvvv to enable connectiondebugging)
1.1 ansible-galaxy role:
[root@jettoloader test]# ansible-galaxy role -h
usage: ansible-galaxy role [-h] ROLE_ACTION ...positional arguments:ROLE_ACTIONinit Initialize new role with the base structure of a role. 初始化新角色的基本结构remove Delete roles from roles_path.从角色路径中删除角色。delete Removes the role from Galaxy. It does not remove or alter theactual GitHub repository. 从Galaxy中删除角色。它不会删除或更改实际的GitHub存储库list Show the name and version of each role installed in theroles_path.查看角色列表search Search the Galaxy database by tags, platforms, author andmultiple keywords.搜索角色import Import a role.导入角色setup Manage the integration between Galaxy and the given source.管理Galaxy和给定源之间的集成info View more details about a specific role.查看有关特定角色的详细信息install Install role(s) from file(s), URL(s) or Ansible Galaxy.从文件、URL或Ansible Galaxy安装角色optional arguments:-h, --help show this help message and exit
1.2 ansible-galaxy collection:
[root@jettoloader test]# ansible-galaxy collection -h
usage: ansible-galaxy collection [-h] COLLECTION_ACTION ...positional arguments:COLLECTION_ACTIONinit Initialize new collection with the base structure of acollection.使用集合的基本结构初始化新集合build Build an Ansible collection artifact that can be publishto Ansible Galaxy.构建一个可发布到Ansible Galaxy的Ansible集合工件publish Publish a collection artifact to Ansible Galaxy.向Ansible Galaxy发布一个集合工件install Install collection(s) from file(s), URL(s) or AnsibleGalaxy.从文件、URL或Ansible Galaxy安装集合optional arguments:-h, --help show this help message and exit
1.3 Collections 和role关系:
Collections是Ansible比较新的版本引入的一个概念,它是roles的集合,比如我们可以把很多相关的roles定义成Collections。以下在galaxy 可以看到
Collections:
roles:
大家执行下载命令的时候也可以看到,基本上都是到github上去下载的,毕竟这些roles只是一组文本文件,文件大小都不大,我们也可以自己去github上下载并解压,不过那样还是有些麻烦。
1.4 常用指令
1.4.1)在 galaxy 上搜索共享的 role
[root@jettoloader test]# ansible-galaxy search nginxFound 1641 roles matching your search. Showing first 1000.Name Description---- -----------0x0i.prometheus Prometheus - a multi-dimensional time-series data monitoring and alerting toolkit0x5a17ed.ansible_role_netbox Installs and configures NetBox, a DCIM suite, in a production setting.1davidmichael.ansible-role-nginx Nginx installation for Linux, FreeBSD and OpenBSD.1it.sudo Ansible role for managing sudoers
1.4.2)安装 galaxy 上共享的 role
[root@jettoloader test]# ansible-galaxy role install -v -p ./ nginx
参考资料
ansible详解之部署简介和使用_码农崛起-CSDN博客
.html
.html
二 案例 nfs
2.1 主机规划
主机名称 | 操作系统版本 | 内网IP | 安装软件 | |
---|---|---|---|---|
172.16.10.21 | CentOS7.5 | 172.16.10.21 | ansible | |
172.16.10.15 | CentOS7.5 | 172.16.10.15 | 不用安装 | |
172.16.10.5 | CentOS7.5 | 172.16.10.5 | 不用安装 |
2.2 添加用户账号
说明:
1、 运维人员使用的登录账号;
2、 所有的业务都放在 /app/jettech 下「jettech用户的家目录」,避免业务数据乱放;
3、 该用户也被 ansible 使用,因为几乎所有的生产环境都是禁止 root 远程登录的(因此该 jettech用户也进行了 sudo 提权)。
# 使用一个专门的用户,避免直接使用root用户
# 添加用户、指定家目录并指定用户密码
# sudo提权
# 让其它普通用户可以进入该目录查看信息[root@jettoloader k3s-ansible-master]# mkdir /app
[root@jettoloader k3s-ansible-master]# useradd -u 1050 -d /app/jettech -m jettech
[root@jettoloader k3s-ansible-master]# echo '123456aA' | /usr/bin/passwd --stdin jettech
Changing password for user jettech.
passwd: all authentication tokens updated successfully.
[root@jettoloader k3s-ansible-master]# echo "jettech ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
[root@jettoloader k3s-ansible-master]# chmod 755 /app
2.3 Ansible 配置清单Inventory
之后文章都是如下主机配置清单
[root@jettoloader jettech]# cd /app/jettech/
[root@jettoloader jettech]# mkdir ansible[root@jettoloader ansible]# pwd
/app/jettech/ansible
[root@jettoloader ansible]# cat hosts.ini
[master]
#172.16.10.5 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
#方式1 别名 + 主机 + 端口 + 密码
#web01 ansible_ssh_host=172.16.1.183 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
#web02 ansible_ssh_host=172.16.1.184 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
#web03 ansible_ssh_host=172.16.1.185 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
# 方式2、主机 + 端口 + 密钥
172.16.10.5:22 #[master:vars][node]
#172.16.10.15 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456
172.16.10.15
172.16.10.21[k3s_cluster:children]
master
node[registry]
172.16.10.21
2.4 Ansible Roles 基本概述
前面已经学习了 变量、tasks 和 handlers,那怎样组织 playbook 才是最好的方式呢?
使用 roles。roles 基于一个已知的文件结构,去自动的加载某些 vars_files,tasks 以及 handlers。以便 playbook 更好的调用。相比 playbook,roles 的结构更加的清晰有层次。
2.5 Roles 目录结构
在 roles 目录下,可以使用如下命令创建目录
[root@jettoloader ansible]# mkdir ansible_roles
[root@jettoloader ansible]# cd ansible_roles/
[root@jettoloader ansible_roles]# ansible-galaxy role init roles/nfs[root@jettoloader ansible]# tree
.
├── ansible_roles
│ └── roles
│ └── nfs #角色名称
│ ├── defaults # 角色默认变量(最低优先级)
│ │ └── main.yml
│ ├── files # 文件存放
│ ├── handlers # 触发任务
│ │ └── main.yml
│ ├── meta # 依赖关系
│ │ └── main.yml
│ ├── README.md # 使用说明
│ ├── tasks # 具体任务
│ │ └── main.yml
│ ├── templates # 模板文件
│ ├── tests # 本role测试
│ │ ├── inventory
│ │ └── test.yml
│ └── vars # 角色其他变量
│ └── main.yml
└── hosts.ini # 主机信息
目录说明:
1、首先要有 roles 目录,然后在 roles 目录下创建相应的目录。
2、roles 下的目录名最好见文知意,如 common 目录表示基础目录,是必要的;nfs 目录表示安装 nfs 服务;redis目录表示安装 redis服务;等等。
3、可以根据自身需要创建 roles 下的二级目录,不需要的目录可以不创建,没需要全目录创建。
4、roles 目录下的二级目录中,有些目录必须包含一个 main.yml 文件,以便 ansible 使用。
2.6 Roles 依赖关系
roles 允许在使用 role 时自动引入其他 role。roles 的依赖关系存储在 role 目录中的 meta/main.yml 文件中。
例如:安装 nfs是需要先确保 nginx和 vfstpd 都能正常运行,此时都可以在 nfs的 role 中定义依赖 nginx和vfstpd的 role。
[root@jettoloader ansible]# cat ansible_roles/roles/nfs/meta/main.yml
---
dependencies:- { role: nginx }- { role: vfstpd}
此时 nfs 的 role 会先执行 nginx的 role,然后执行mysql 的 role,最后再执行 nfs 本身的 role。
2.7 Ansible Roles 案例-部署 NFS 服务
2.7.1)整体目录结构
[root@jettoloader ansible_roles]# pwd
/app/jettech/ansible/ansible_roles
[root@jettoloader ansible_roles]# ll
total 4
-rw-r--r-- 1 root root 55 Feb 9 10:39 all.yml
drwxr-xr-x. 2 root root 41 Feb 9 10:31 group_vars
drwxr-xr-x 3 root root 17 Feb 9 10:14 roles
[root@jettoloader ansible_roles]# tree
.
├── all.yml
├── group_vars #全局变量
│ └── all.yml
└── roles├── nfs # 服务端│ ├── defaults│ │ └── main.yml│ ├── files│ ├── handlers│ │ └── main.yml│ ├── meta│ │ └── main.yml│ ├── README.md│ ├── tasks│ │ ├── config.yml│ │ ├── install.yml│ │ ├── main.yml│ │ ├── mkdir.yml│ │ ├── start_NFS.yml│ │ └── start_rpcbind.yml│ ├── templates│ │ └── exports.j2│ ├── tests│ │ ├── inventory│ │ └── test.yml│ └── vars│ └── main.yml└── nfs_client #客户端├── defaults│ └── main.yml├── files├── handlers│ └── main.yml├── meta│ └── main.yml├── README.md├── tasks│ └── main.yml├── templates├── tests│ ├── inventory│ └── test.yml└── vars└── main.yml
2.7.2)整体目录结构服务端信息
目录结构
[root@jettoloader ansible_roles]# tree roles/nfs
roles/nfs
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ ├── config.yml
│ ├── install.yml
│ ├── main.yml
│ ├── mkdir.yml
│ ├── start_NFS.yml
│ └── start_rpcbind.yml
├── templates
│ └── exports.j2
├── tests
│ ├── inventory
│ └── test.yml
└── vars└── main.yml8 directories, 14 files
2.7.2.1)tasks任务目录信息
[root@jettoloader ansible_roles]# cat roles/nfs/tasks/main.yml
---
# tasks file for roles/nfs
- include_tasks: install.yml
- include_tasks: config.yml
- include_tasks: mkdir.yml
- include_tasks: start_rpcbind.yml
- include_tasks: start_NFS.yml[root@jettoloader ansible_roles]# cat roles/nfs/tasks/install.yml
- name: "install package NFS "yum:name:- nfs-utils- rpcbindstate: present
[root@jettoloader ansible_roles]# cat roles/nfs/tasks/config.yml
- name: "NFS server config and edit restart"template:src: exports.j2dest: /etc/exportsowner: rootgroup: rootmode: '644'notify: "reload NFS server"
[root@jettoloader ansible_roles]# cat roles/nfs/tasks/mkdir.yml
- name: "create NFS dir"file:path: "{{ nfs_dir }}"owner: rootgroup: rootstate: directoryrecurse: yes
[root@jettoloader ansible_roles]# cat roles/nfs/tasks/start_rpcbind.yml
- name: "rpcbind server start"systemd:name: rpcbindstate: starteddaemon_reload: yesenabled: yes
[root@jettoloader ansible_roles]# cat roles/nfs/tasks/start_NFS.yml
- name: "NFS server start"systemd:name: nfsstate: starteddaemon_reload: yesenabled: yes
2.7.2.2)handlers任务目录信息
[root@jettoloader ansible_roles]# cat roles/nfs/handlers/main.yml
---
# handlers file for roles/nfs
- name: "reload NFS server"systemd:name: nfsstate: reloaded
2.7.2.2)模板目录信息
[root@jettoloader ansible_roles]# cat roles/nfs/templates/exports.j2
{{ nfs_dir }} *(rw,sync,root_squash,all_squash,anonuid=1050,anongid=1050)
2.7.2.3)变量信息
全局的:
[root@jettoloader ansible_roles]# cat group_vars/all.yml
---
# NFS 服务端目录
nfs_dir: /opt/jettech/work/nfs/data
局部的:
[root@jettoloader ansible_roles]# cat roles/nfs/defaults/main.yml
---
# defaults file for roles/nfs
nfs_dir: /opt/jettech/work/nfs/data[root@jettoloader ansible_roles]# cat roles/nfs/vars/main.yml
---
# vars file for roles/nfs[root@jettoloader ansible_roles]#
nfs_dir: /opt/jettech/work/nfs/data
优先级: group_vars/all.yml > roles/nfs/vars/main.yml > roles/nfs/defaults/main.yml
2.7.3)整体目录结构客户端信息
2.7.3.1)目录结构,客户端就比较简单了,就一个挂载任务
[root@jettoloader ansible_roles]# tree roles/nfs_client/
roles/nfs_client/
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars└── main.yml8 directories, 8 files
2.7.3.2)tasks任务目录信息
# vars file for roles/nfs[root@jettoloader ansible_roles]# cat roles/nfs_client/tasks/main.yml
---
# tasks file for roles/nfs_client
- name: "mount NFS server"mount:src: 172.16.10.21:{{ nfs_dir }}path: /mntfstype: nfsopts: defaultsstate: mounted
2.7.4)playbook 信息
[root@jettoloader ansible_roles]# cat all.yml
---# NFS server
- hosts: registryroles:- nfs- hosts: noderoles:- nfs_client
2.7.5) 任务执行
[root@jettoloader ansible_roles]# ansible-playbook -b -i ../hosts.ini --syntax-check all.yml # 语法检测playbook: all.yml
[root@jettoloader ansible_roles]# ansible-playbook -b -i ../hosts.ini -C all.yml # 预执行,测试执行PLAY [registry] *******************************************************************************************************************************************************************TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/install.yml for 172.16.10.21TASK [nfs : install package NFS] **************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/config.yml for 172.16.10.21TASK [nfs : NFS server config and edit restart] ***********************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/mkdir.yml for 172.16.10.21TASK [nfs : create NFS dir] *******************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/start_rpcbind.yml for 172.16.10.21TASK [nfs : rpcbind server start] *************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/start_NFS.yml for 172.16.10.21TASK [nfs : NFS server start] *****************************************************************************************************************************************************
ok: [172.16.10.21]PLAY [node] ***********************************************************************************************************************************************************************TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [172.16.10.21]
ok: [172.16.10.15]TASK [nfs_client : mount NFS server] ********************************************** ************************************************************************************************
changed: [172.16.10.21]
changed: [172.16.10.15]PLAY RECAP ************************************************************************************************************************************************************************
172.16.10.15 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.16.10.21 : ok=13 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0[root@jettoloader ansible_roles]# ansible-playbook -b -i ../hosts.ini all.yml # 执行PLAY [registry] *******************************************************************************************************************************************************************TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/install.yml for 172.16.10.21TASK [nfs : install package NFS] **************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/config.yml for 172.16.10.21TASK [nfs : NFS server config and edit restart] ***********************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/mkdir.yml for 172.16.10.21TASK [nfs : create NFS dir] *******************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/start_rpcbind.yml for 172.16.10.21TASK [nfs : rpcbind server start] *************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/start_NFS.yml for 172.16.10.21TASK [nfs : NFS server start] *****************************************************************************************************************************************************
ok: [172.16.10.21]PLAY [node] ***********************************************************************************************************************************************************************TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [172.16.10.21]
ok: [172.16.10.15]TASK [nfs_client : mount NFS server] **********************************************************************************************************************************************
changed: [172.16.10.21]
changed: [172.16.10.15]PLAY RECAP ************************************************************************************************************************************************************************
172.16.10.15 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.16.10.21 : ok=13 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
2.7.5) 检查各节点挂载 情况:
[root@jettoloader ~]# mount | grep 172
172.16.10.21:/opt/jettech/work/nfs/data on /mnt type nfs4 (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.16.10.15,local_lock=none,addr=172.16.10.21)
2.7.6) meta role依赖
nfs的role依赖vsftpd的role
2.7.6.1) 生成vsftpd的role
[root@jettoloader ansible_roles]# ansible-galaxy role init roles/vsftpd
- Role roles/vsftpd was created successfully
2.7.6.2) 编写vsftpd的task
[root@jettoloader ansible_roles]# cat roles/vsftpd/tasks/main.yml
---
# tasks file for roles/vsftpd- name: install testdebug:msg: "test===============================start"- name: "install package vsftpd ==============="yum:name:- vsftpdstate: present- name: "systemctl enable vsftpd --now=================="systemd:name: vsftpdstate: starteddaemon_reload: yesenabled: yes
以下文件不用动
[root@jettoloader ansible_roles]# cat all.yml
---# NFS server
- hosts: registryroles:- nfs- hosts: noderoles:- nfs_client
2.7.6.3)nfs的依赖文件编写:roles/nfs/meta/main.yml
[root@jettoloader ansible_roles]# cat roles/nfs/meta/main.yml
galaxy_info:author: wu bodescription: your role descriptioncompany: jettech# If the issue tracker for your role is not on github, uncomment the# next line and provide a value# issue_tracker_url: Choose a valid license ID from - some suggested licenses:# - BSD-3-Clause (default)# - MIT# - GPL-2.0-or-later# - GPL-3.0-only# - Apache-2.0# - CC-BY-4.0license: license (GPL-2.0-or-later, MIT, etc)min_ansible_version: 2.9# If this a Container Enabled role, provide the minimum Ansible Container version.# min_ansible_container_version:## Provide a list of supported platforms, and for each platform a list of versions.# If you don't wish to enumerate all versions for a particular platform, use 'all'.# To view available platforms and versions (or releases), visit:# platforms:# - name: Fedora# versions:# - all# - 25# - name: SomePlatform# versions:# - all# - 1.0# - 7# - 99.99galaxy_tags: []# List tags for your role here, one per line. A tag is a keyword that describes# and categorizes the role. Users find roles by searching for tags. Be sure to# remove the '[]' above, if you add tags to this list.## NOTE: A tag is limited to a single word comprised of alphanumeric characters.# Maximum 20 tags per role.#dependencies: []
dependencies: - { role: vsftpd }# List your role dependencies here, one per line. Be sure to remove the '[]' above,# if you add dependencies to this list.
主要是:
dependencies: - { role: vsftpd }
2.7.6.4)执行
[root@jettoloader ansible_roles]# ansible-playbook -b -i ../hosts.ini all.yml PLAY [registry] *******************************************************************************************************************************************************************TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [172.16.10.21]TASK [vsftpd : install test] ******************************************************************************************************************************************************
ok: [172.16.10.21] => {"msg": "test===============================start"
}TASK [install package vsftpd ===============] *************************************************************************************************************************************
changed: [172.16.10.21]TASK [systemctl enable vsftpd --now==================] ****************************************************************************************************************************
changed: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/install.yml for 172.16.10.21TASK [nfs : install package NFS] **************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/config.yml for 172.16.10.21TASK [nfs : NFS server config and edit restart] ***********************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/mkdir.yml for 172.16.10.21TASK [nfs : create NFS dir] *******************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/start_rpcbind.yml for 172.16.10.21TASK [nfs : rpcbind server start] *************************************************************************************************************************************************
ok: [172.16.10.21]TASK [nfs : include_tasks] ********************************************************************************************************************************************************
included: /app/jettech/ansible/ansible_roles/roles/nfs/tasks/start_NFS.yml for 172.16.10.21TASK [nfs : NFS server start] *****************************************************************************************************************************************************
ok: [172.16.10.21]PLAY [node] ***********************************************************************************************************************************************************************TASK [Gathering Facts] ************************************************************************************************************************************************************
ok: [172.16.10.21]
ok: [172.16.10.15]TASK [nfs_client : mount NFS server] **********************************************************************************************************************************************
ok: [172.16.10.21]
ok: [172.16.10.15]PLAY RECAP ************************************************************************************************************************************************************************
172.16.10.15 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
172.16.10.21 : ok=16 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 [root@jettoloader ansible_roles]#
2.7.6.5)检测:
[root@jettoloader k3s-ansible-master]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemonLoaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled)Active: active (running) since Wed 2022-02-09 13:54:18 CST; 28s agoMain PID: 1902 (vsftpd)CGroup: /system.slice/vsftpd.service└─1902 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.confFeb 09 13:54:18 jettoloader systemd[1]: Starting Vsftpd ftp daemon...
Feb 09 13:54:18 jettoloader systemd[1]: Started Vsftpd ftp daemon.
注意:以下文件不用添加vsftpd的role,因为nfs的meta/main.yaml 文件中已经有依赖的会在nfs之前执行vsftpd。而且vsftpd的role执行的主机和nfs的role是相同的主机
[root@jettoloader ansible_roles]# cat all.yml
---# NFS server
- hosts: registry
roles:
- nfs- hosts: node
roles:
- nfs_client