Ansible自定义静态资产以及常用模块

这篇具有很好参考价值的文章主要介绍了Ansible自定义静态资产以及常用模块。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

静态资产

文件文件,一个格式类似于INI的文件
默认情况下,Ansible的资产文件位于/etc/ansible/host,如果使用pip安装的则可能没有这文件,可以自己创建。
1、自定义资产
#自定义编写inventory.ini文件
 
1.1.1.1
2.2.2.2
3.3.3.[1:15]
test01.gyq.com
test03.gyq.com
test[05:09].gyq.com

[web_servers]
192.168.1.2
192.168.1.3
192.168.1.5

[db_servers]
192.168.2.2
192.168.2.3
192.168.1.5

[all_servers]
[all_servers:children]
db_servers
web_servers
Ansible自定义静态资产以及常用模块
1.2如何使用自定义资产
通过-i 参数指定自定义资产的位置即可(可以是全路径,也可以是相对路径)。
ansible all -i inventory.ini ... //伪指令, 不可执行
1.3 如何验证自定义资产
ansible db_servers -i inventory.ini --list-hosts
Ansible自定义静态资产以及常用模块
2、资产选择器
只对部分服务器进行操作,可以使用PATTERN资产选择器
2.1 基本语法格式
ansible PATTERN -i inventory -m module -a argument
使用案例
#选择单个IP
[root@GYQ-master ~]# ansible 1.1.1.1 -i inventory.ini --list-hosts
  hosts (1):
    1.1.1.1
#选择一组
[root@GYQ-master ~]# ansible web_servers -i inventory.ini --list-hosts
  hosts (3):
    192.168.1.2
    192.168.1.3
    192.168.1.5
#使用*号选定
[root@GYQ-master ~]# ansible 3.3.3.1* -i inventory.ini --list-hosts
  hosts (7):
    3.3.3.10
    3.3.3.11
    3.3.3.12
    3.3.3.13
    3.3.3.14
    3.3.3.15
    3.3.3.1
#使用逻辑匹配
web_server和db_servers的并集
显示两个族内的所有主机
[root@GYQ-master ~]# ansible 'web_servers:db_servers' -i inventory.ini --list-hosts
  hosts (5):
    192.168.1.2
    192.168.1.3
    192.168.1.5
    192.168.2.2
    192.168.2.3
web_server和db_servers的交集
[root@GYQ-master ~]# ansible 'web_servers:&db_servers' -i inventory.ini --list-hosts
  hosts (1):
    192.168.1.5
#在web_server中,但是不在db_servers中    排除
[root@GYQ-master ~]# ansible 'web_servers:!db_servers' -i inventory.ini --list-hosts
  hosts (2):
    192.168.1.2
    192.168.1.3
Ad-hoc命令相当于一个shell命令
命令语法格式:
ansible pattern [-i inventory] -m module -a argument
pattern 资产选择其
-i 指定资产清单文件的位置
-m 自定本次Ansible ad-hoc要执行的模块。可以类别成SHELL中的命令。
-a 模块的参数,可以类比成SHELL中的命令参数
Ansible模块类型
Ansible自定义静态资产以及常用模块
帮助文档
列举出所有的核心模块和附加模块
ansible-doc -l
查询某个模块的使用方法
ansible-doc 模块名
查询某个模块的使用方法,比较简洁的信息
ansible-doc -s 模块名
常用模块
先准备测试文件hosts
[dbservers]
192.168.40.137

[webservers]
192.168.40.138
4.1 command & shell 模块
两个模块都是在远程服务器上执行命令
但command模块是ad-hoc的默认模块,在执行ad-hoc时,若不指定模块的名字则默认使用此模块。
[root@GYQ-master ~]# ansible all -i hosts -a "echo 'hello'"
192.168.40.137 | CHANGED | rc=0 >>
hello
192.168.40.138 | CHANGED | rc=0 >>
hello
[root@GYQ-master ~]# ansible all -i hosts -m shell -a "echo 'hello'"
192.168.40.138 | CHANGED | rc=0 >>
hello
192.168.40.137 | CHANGED | rc=0 >>
hello
[root@GYQ-master ~]#
两个模块的差异
shell    模块可以执行SHELL的内置命令和特性(比如管道符)。
command模块无法执行SHELL的内置命令和特性
script模块
#ansible webservers -i hosts -m script -a "/root/a.sh"

192.168.40.138 | CHANGED => {
    "changed": true,
    "rc": 0,
    "stderr": "Shared connection to 192.168.40.138 closed.\r\n",
    "stderr_lines": [
        "Shared connection to 192.168.40.138 closed."
    ],
    "stdout": "",
    "stdout_lines": []
}
copy模块
copy 模块的主要用于管理节点和被管理节点之间的文件拷贝
经常使用到参数如下:
src指定拷贝文件的源地址dest指定拷贝文件的目标地址
backup拷贝文件前,若原始文件发生变化,则对目标文件进行备份
woner 指定新拷贝文件的所有者
group 指定新拷贝文件的所有组
mode指定新拷贝文件的权限
案例:
#拷贝文件到目标主机
[root@GYQ-master ~]# ansible webservers -i hosts -m copy -a "src=./nginx.repo dest=/etc/yum.repos.d/nginx.repo"
192.168.40.138 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "21b7750daa3e959a63aab1564d748e326d565d50",
    "dest": "/etc/yum.repos.d/nginx.repo",
    "gid": 0,
    "group": "root",
    "md5sum": "640b9f8a4cc8dc99cb1a0048f28afd4f",
    "mode": "0644",
    "owner": "root",
    "secontext": "system_u:object_r:system_conf_t:s0",
    "size": 357,
    "src": "/root/.ansible/tmp/ansible-tmp-1678688946.53-7950-171811340470478/source",
    "state": "file",
    "uid": 0
}
#查看
[root@GYQ-master ~]# ansible webservers -i hosts -a "ls /etc/yum.repos.d"
192.168.40.138 | CHANGED | rc=0 >>
CentOS-Base.repo
CentOS-CR.repo
CentOS-Debuginfo.repo
CentOS-fasttrack.repo
CentOS-Media.repo
CentOS-Sources.repo
CentOS-Vault.repo
epel.repo
epel-testing.repo
nginx.repo
[root@GYQ-master ~]#
copy 前, 在被管理节点上对原文件进行备份
ansible webservers -i hosts -m copy -a "src=./nginx.repo dest=/etc/yum.repos.d/nginx.repo backup=yes"
Ansible自定义静态资产以及常用模块
copy文件的同时对文件进行用户及用户组设置
[root@GYQ-master ~]# ansible webservers -i hosts -m copy -a "src=./nginx.repo dest=/etc/yum.repos.d/nginx.repo owner=nobody group=nobody"


192.168.40.138 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "21b7750daa3e959a63aab1564d748e326d565d50",
    "dest": "/etc/yum.repos.d/nginx.repo",
    "gid": 99,
    "group": "nobody",
    "mode": "0644",
    "owner": "nobody",
    "path": "/etc/yum.repos.d/nginx.repo",
    "secontext": "system_u:object_r:system_conf_t:s0",
    "size": 357,
    "state": "file",
    "uid": 99
}
copy文件的同时对文件进行权限设置
[root@GYQ-master ~]# ansible webservers -i hosts -m copy -a "src=./nginx.repo dest=/etc/yum.repos.d/nginx.repo mode=0755"
192.168.40.138 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "checksum": "21b7750daa3e959a63aab1564d748e326d565d50",
    "dest": "/etc/yum.repos.d/nginx.repo",
    "gid": 99,
    "group": "nobody",
    "mode": "0755",
    "owner": "nobody",
    "path": "/etc/yum.repos.d/nginx.repo",
    "secontext": "system_u:object_r:system_conf_t:s0",
    "size": 357,
    "state": "file",
    "uid": 99
}
yum_repsitory模块
添加YUM仓库
常用参数
name 仓库名称,就是仓库文件中第一行的中括号中名称,必须的参数。
description 仓库描述信息,添加时必须的参数
baseurl yum存储库"repodata"目录所在目录的URL,添加时必须的参数。它也可以是多个URL的列表。
file 仓库文件保存到被管理节点的文件名,不包含.repo。默认是name的值。
state preset确认添加仓库文件,absent 确认删除仓库文件。
gpgcheck 是否检查GPG yes | no,没有默认值,使用/etc/yum.conf中的配置
Example
添加epel源
[root@GYQ-master ~]# ansible dbservers -i hosts -m yum_repository -a "name=epel baseurl='https://download.fedoraproject.org/pub/epel/$releasever/$basearch/' description='EPEL YUM repo'"


192.168.40.137 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "repo": "epel",
    "state": "present"
}
删除epel源
[root@GYQ-master ~]# ansible dbservers -i hosts -m yum_repository -a "name=epel state=absent"
192.168.40.137 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "repo": "epel",
    "state": "absent"
}
yum模块
等同于Linux上的YUM命令,对远程服务器上的RPM包进行管理
常用参数:
name    要安装的软件包名,多个软件包以逗号(,)隔开
state    对当前指定的软件安装、一处操作(present installed latest absent removed)
    支持的参数
     - present 确认已经安装,但不升级
     - installed 确认已经安装
     - latest 确保安装,且升级为最新
     - absent 和 removed 确认已移除
案例:安装一个nginx软件
ansible webservers -i hosts -m yum -a "name=nginx state=present"    #其他安装方式一致
Ansible自定义静态资产以及常用模块
到目标主机上查看是否安装了nginx
Ansible自定义静态资产以及常用模块
移除一个软件包
ansible webservers -i hosts -m yum -a "name=nginx state=removed"
Ansible自定义静态资产以及常用模块
安装一个软件包组
ansible webservers -i hosts -m yum -a "name='@Development tools' state=present"
Ansible自定义静态资产以及常用模块
systemd模块
daemon_reload 重新载入systemd, 扫描新的或有变动的单元
enabled 是否开机自启动yes |no 
name 必选项,服务名称,比如httpd vsftpd
state 对当前服务执行启动,停止、重启、重新加载等操作
(started,stopped,restarted,reloaded)
案例:重新加载系统后台进程
[root@GYQ-master ~]# ansible webservers -i hosts -m systemd -a "daemon_reload=yes"
192.168.40.138 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "name": null,
    "status": {}
}
启动nginx服务
ansible webservers -i hosts -m systemd -a "name=nginx state=started"
Ansible自定义静态资产以及常用模块
关闭nginx服务
ansible webservers -i hosts -m systemd -a "name=nginx state=stopped"
Ansible自定义静态资产以及常用模块
group模块
在被管理节点上,对组进行管理。
常用参数:
name    组名称,必须的
system  是否为系统组,yes/no    默认是no
state     删除或者创建,present/absent,默认是present
案例:
[root@GYQ-master ~]# ansible dbservers -i hosts -m group -a "name=db_admin"
192.168.40.137 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": true,
    "gid": 1000,
    "name": "db_admin",
    "state": "present",
    "system": false
}
Ansible自定义静态资产以及常用模块
user模块
用于在被管理节点上对用户进行管理
常用参数:
name 必须的参数,指定用户名
password  设置用户的密码,这里接受一个加密的值,因为会直接存到shadow
update_password 假如设置的密码不同于原密码,则会更新密码.在1.3版本中被加入
home 指定用户的家目录
shell 设置用户的shell
comment 用户的描述信息
create_home 在创建用户时,是否创建其家目录。默认创建,假如不创建,设置为no。2.5版本之前使用createhome
group 设置用户的主组
groups 将用户加入到多个其他组中,多个用逗号隔开。
       默认会把用户从其他已经加入的组中删除。

append yes|no和groups配合使用,yes 时,不会把用户从其他已经加入的组中删除
system 设置为yes时,将会创建一个 系统账号
expires 设置用户的过期时间,值为时间戳,会转为为天数后,放在 shadow 的第8个字段里;
generate_ssh_key设置为 yles将会为用户生成密钥,这不会覆盖原来的密钥
ssh_key_type 指定用户的密钥类型,默认 rsa,具体的类型取决于被管理
节点
state 删除或添加用户, present为添加,absent 为删除;默认值present
remove 当与state=absent -起使用,删除一个用户 及关联的目录,比如家目录,邮箱目录。可选的值为: yes/no
案例:
创建用户并设置密码
#第一步:先生成加密密码
[root@GYQ-master ~]# pass=$(echo "123456" | openssl passwd -1 -stdin)
[root@GYQ-master ~]# echo $pass
$1$KAvZ0DCJ$Tp7vgBM8qPyDq5KBQqwn2/
#第二部创建用户并设置密码
ansible all -i hosts -m user -a "name=foo password=${pass}"
Ansible自定义静态资产以及常用模块
创建用户yangge,并且为其创建密钥对,并且密钥类型为:ecdsa
nsible all -i hosts -m user -a "name=yangge generate_ssh_key=yes ssh_key_type=ecdsa"
Ansible自定义静态资产以及常用模块
创建用tom,并且设置其有效期 到2023年10月1日,加入到组db_admin中,不改变原有加入的组。
ansible dbservers -i hosts -m user -a "name=tom expires=$(date +%s -d 20231001) groups=db_admin append=yes"
Ansible自定义静态资产以及常用模块
date命令说明
Ansible自定义静态资产以及常用模块
file 模块
主要用于远程主机上的文件操作
常用参数:
owner 定义文件/目录的属主
group 定义文件/目录的属组
mode 定义文件/目录的权限
path 必选项,定义文件/目录的路径
recurse 递归的设置文件的属性,只对目录有效
src 要被链接(软/硬)的源文件的路径,只应用于state=link的情况
dest 被链接到的路径,只应用于state=link的情况
state
    directory 如果目录不存在,创建目录
    file    文件不存在,则不会被创建,存在则返回文件的信息,常用于检查文件是否存在。
    link    创建软链接
    hard    创建硬链接
    touch    如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
    absent    删除目录、文件或者取消链接文件
创建一个文件
ansible all -i hosts -m file -a "path=/tmp/foo.conf state=touch"
Ansible自定义静态资产以及常用模块
改变文件所有者及权限
ansible all -i hosts -m file -a "path=/tmp/foo.conf owner=nobody group=nobody mode=0644"
Ansible自定义静态资产以及常用模块
创建一个软连接
ansible all -i hosts -m file -a "src=/tmp/foo.conf dest=/tmp/link.conf state=link"
Ansible自定义静态资产以及常用模块
创建目录
ansible all -i hosts -m file -a "path=/tmp/testdir state=directory"
Ansible自定义静态资产以及常用模块
取消一个链接·
ansible all -i hosts -m file -a "path=tmp/link.conf state=absent"
删除一个文件和目录
ansible all -i hosts -m file -a "path=/tmp/foo.conf state=absent"
ansible all -i hosts -m file -a "path=/tmp/testdir state=absent"
cron模块
管理员成节点的CRON服务。等同于Linux中的定时任务。
注意:使用Ansible创建的计划任务,是不能使用本地任务crontab -e 去编辑的,否则Ansible无法再次操作此任务了。
常用参数
name    指定一个cron job的名字。王定要指定,便于日之后删除。
minute  指定分钟,可以设置成(O-59,*,*/2等)格式。默认是*,也就是每分钟。
hour    指定小时,可以设置成(0-23,*,*/2等)格式。默认是*,也就是每小时。
day     指定天,可以设置成(1-31,*,*/2等)格式。默认是*,也就是每天。
month   指定月份,可以设置成(1-12,*,*/2等)格式。默认是*,也就是每周。
weekday 指定星期,可以设置成(O-6 for Sunday-Saturday,*等)格式。默认是*,也就是每星期。
job    指定要执行的内容,通常可以写个脚本,或者一段内容。
state    指定这个job的状态,可以是新增(present)或者是删除(absent)。默认为新增(present)
案例:
新建一个Cron Job任务
ansible all -i hosts -m cron -a "name='create new job' minute='0' job='ls -alh > /dev/null'"
Ansible自定义静态资产以及常用模块
Ansible自定义静态资产以及常用模块
删除一个CRON JOB任务
ansible all -i hosts -m cron -a "name='create new job' state=absent"
Ansible自定义静态资产以及常用模块
Ansible自定义静态资产以及常用模块
debug模块
debug模块主要用来调式时使用,通常的作用是将一个变量的值给打印出来。
常用参数:
var 直接打印一个指定的变量值
msg 打印一段可以格式化的字符串
案例:
template模块
template模块使用jinjia2格式作为文件模板,可以进行文档内变量的替换。
他的每次使用都会被ansible标记为"changed"状态。文件以.j2结尾。
常用参数:
src指定Ansible控制端的文件路径
dest指定Ansible 被控端的文件路径
owner 指定文件的属主
group指定文件的属组
mode指定文件的权限
backup 创建一个包含时间戳信息的备份文件,这样如果您以某种方式错误地破坏了原始文件,就可以将其恢复原状。yes/no
案例:
用法和copy模块基本一样,template模块的强大之处就是使用变量替换,就是可以把传递给Ansible的变量的值替换到模板中。
1.建立一个templte文件,名为hello_world.j2
#cat hello_world.j2
Hello {{var}}    !
2.执行命令,并且设置变量 var 的值为 world
#ansible all -i hosts -m template -a "src=hello_world.j2 dest=/tmp/hello_world" -e "var=world"
3.在被控主机上验证
#cat /tmp/hello_world.world
Hello world !
lineinfile
在被管理节点上,用正则匹配的方式对目标文件的一行内容修改删除等操作。
如果是在一个文件中把所有匹配到的多行统一处理统一处理,请参考replace模块。
如果相对文件中的多行进行添加/更新/删除等操作,参考blockinfile模块
常用参数
path 被管理节点的目标文件路径,必须。
state 可选值absent 删除| present 替换(默认值)。
regexp 在文件的每- -行中查找的正则表达式。对于state=present ,仅找到的最后-行将被替换。
line 要在文件中插入/替换的行。需要state=present。
create 文件不存在时,是否要创建文件并添加内容。yes/no
案例:
删除被控节点文件里的某一条内容
ansible dbservers -i hosts -m lineinfile -a "path=/etc/sudoers regexp='^%wheel' state=absent"
替换某一行
ansible dbservers -i hosts -m lineinfile -a "path=/etc/selinux/config regexp='^SELINUX=' line='SElinux=disabled' state=present"
Ansible自定义静态资产以及常用模块

文章来源地址https://www.toymoban.com/news/detail-476176.html

到了这里,关于Ansible自定义静态资产以及常用模块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ansible常用文件模块

    blockinfile:         插入、更新或删除由可定义标记包围的多行文本块 lineinfile:         确保特定行位于指定文件中,反向使用正则表达式替换行。 copy:         将本地或远程主机文件复制到受管主机的指定位置,可以设置文件属性,SELinux上下文。 fetch:         与copy相

    2023年04月19日
    浏览(33)
  • 认识ansible,了解常用的模块

    Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功能,Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个

    2024年02月21日
    浏览(32)
  • Ansible基本使用和常用模块

    1) 部署 2) 配置 3) Ans-inventory 主机清单 a.什么是主机清单 : 让 ansible 管理的节点的列表,ansible 默认读取在 /etc/ansible/hosts 文件 ,并非 /etc/hosts. b.我们会把主机清单文件存放在指定的目录中 , 运行 ansible 的时候通过 -i 选项指定主机清单文件即 可 4)  批量管理主机并执行shell命令

    2024年01月19日
    浏览(34)
  • Ansible命令格式和常用模块介绍

    ansible [群组名] -m [模块名] -a [参数] command模块为默认模块,用于远程执行命令(命令模块) 使用command模块在远程主机中执行命令时,不会经过远程主机的shell处理,在使用command模块时,如果需要执行命令中的含\\\"\\\",\\\"\\\",\\\"|\\\",\\\"\\\"等特殊符号时,这些符号功能会失效 常用参数: command模块

    2024年01月19日
    浏览(38)
  • Ansible操作MySQL常用的几个模块

    mysql_user模块用来添加,删除用户以及设置用户权限 创建MySQL数据库的用户与口令(非root@localhost用户),直接通过playbooks中的案例来说明吧。 说明,这个案例中,有提到常见的错误,例如有关login_unix_socket参数不设置,可能导致的错误。 补充:假如各个DB的期望赋予的权限不

    2024年02月06日
    浏览(36)
  • [自动化运维工具] Ansible的简单介绍与常用模块详解

    自动化运维工具,也叫 机器管理工具 。 可以实现 批量管理多台(成百上千)主机 ,是应用级别的 跨主机编排工具 。 无客户端agent存在,不需要在被控制的节点上安装额外的客户端应用 通过 ssh协议 与被控制节点通信 基于模块工作的,可以通过模块实现在被控制节点上执

    2024年02月05日
    浏览(81)
  • 🔥🔥Java开发者的Python快速进修指南:自定义模块及常用模块

    好的,按照我们平常的惯例,我先来讲一下今天这节课的内容,以及Java和Python在某些方面的相似之处。Python使用import语句来导入包,而Java也是如此。然而,两者之间的区别在于Python没有类路径的概念,它直接使用.py文件的文件名作为导入路径,并将其余的工作交给Python解释

    2024年02月05日
    浏览(72)
  • 毕设常用模块之舵机介绍以及使用方法

    舵机是一种位置伺服的驱动器,主要是由外壳、电路板、无核心马达、齿轮与位置检测器所构成。其工作原理是由接收机或者单片机发出信号给舵机,其内部有一个基准电路,产生周期为 20ms,宽度为 1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差

    2024年02月06日
    浏览(39)
  • 进阶 vue自定义指令 vue中常用自定义指令以及应用场景,案例书写

    除了 Vue 内置的一系列指令 (比如 v-model 或 v-show) 之外,Vue 还允许你注册自定义的指令 (Custom Directives)。 我们已经介绍了两种在 Vue 中重用代码的方式:组件和组合式函数。组件是主要的构建模块,而组合式函数则侧重于有状态的逻辑。另一方面,自定义指令主要是为了重用涉

    2024年02月15日
    浏览(40)
  • Node.js基本概念、特点、用途和常用模块,以及Express框架开发一个web应用

    目录 一、Node.js的基本概念和特点 二、Node.js的用途 三、Node.js的常用模块 四、使用Node.js进行Web开发 1. 安装Node.js 2. PyCharm配置Node.js 3. 使用http库编写一个web服务 4. 使用Express框架构建Web应用程序 5. 调试代码 6. 发布应用程序 参考文章  Node.js系列文章推荐阅读: JavaScript匿名函

    2024年02月07日
    浏览(86)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包