ansible个人学习总结(已跳过安装部署)

一、主配置文件

  • ansible.cfg: ansible 的主配置文件

  • hosts: 主机清单,即 intentory 清单

  • roles:ansible 角色

 主配置文件重要参数详解

# 默认库文件位置,hosts中存放所有主机信息

#inventory      = /etc/ansible/hosts

# Ansible 默认搜寻模块的位置

#library        = /usr/share/my_modules/

# Ansible 通过远程传输模块到远程主机,然后远程执行,执行后在清理现场.

#remote_tmp     = ~/.ansible/tmp

# 主机通信时的默认并行进程数,默认值比较保守,可调大

#forks          = 5

# 异步执行任务时,每15s 回查任务状态

#poll_interval  = 15

# 提权

#sudo_user      = root

# 用来控制Ansible playbook 在执行sudo之前是否询问sudo密码.默认为no

#ask_sudo_pass = True

# Ansible 剧本playbook 是否会自动默认弹出弹出密码.默认为no

#ask_pass      = True

# 远程端口号

#remote_port    = 22

# 默认模块和系统之间通信的计算机语言,默认为’C’语言

#module_lang    = C

# SSH  连接超时时间

# SSH timeout

#timeout = 10

# playbook 默认远程用户

# default user to use for playbooks if user is not specified

# (/usr/bin/ansible will use current user as default)

#remote_user = root

# Ansible 日志路径

# logging is off by default unless this path is defined

# if so defined, consider logrotate

#log_path = /var/log/ansible.log

# ansible 默认使用的 command 模块

# default module name for /usr/bin/ansible

#module_name = command

注:配置文件详解参考地址   http://www.ansible.com.cn/docs/intro_configuration.html

二、ansible命令格式

ansible ad-hoc是一种通过命令行批量管理的方式

格式:ansible 主机集合 -m 模块名 -a 参数

其他参数:-k 使用密码远程 -i 指定主机列表文件

ansible all --list-hosts 查看所有主机列表

模块就是脚本(多数为python脚本),不添加模块默认command  ansible 主机集合 -a 命令参数

三、常用模块示例

ansible-doc -l 列出所有模块 空格换页

查看某个模块ansible-doc 模块名

目前共有3387个模块

ansible常用模块案例

shell模块

Command和shell模块的区别:

1、Command模块通过ssh直接远程执行命令不开启bash解释器

2、Command不支持bash特性,如管道和重定向等功能

3、所有需要调用shell的功能都无法使用

4、Shell模块不能执行交互命令,如vim,top等

ansible 主机列表 -m shell -a  ps -aux|wc -l

Shell模块支持判断(creates,removes)

ansible 主机列表 -m shell -a 创建文件 creates=文件名 有文件就不创建跳过

script模块

Script允许在本地写脚本,拷贝到被管理端并执行脚本

脚本不只是shell脚本(如python,shell脚本),可以没有-x权限

ansible 主机列表 -m script  -a /home/test.sh

file模块

File模块可以创建文件,目录,链接;修改权限与属性等

幂等性:任意次执行所产生的影响均与一次执行的影响相同

ansible test -m file -a “path=/tmp/file.txt state=touch”  #新建文件

ansible test -m file -a “path=/tmp/mydir state=directory” #创建目录

ansible test -m file -a “path=/tmp/file.txt  owner=sshd  group=adm mode=0777”

#修改文件或目录权限

ansible test -m file -a “path=/tmp/file.txt state=absent” # 删除文件

ansible test -m file -a “src=/etc/hosts  path=/tmp/hosts.txt  state=link” #创建链接

copy模块

将文件拷贝到远程主机

backup=yes 如果目标主机有同名文件,则先备份

ansible test -m copy -a “src=/tmp/a3.txt  dest=/root” #将tmp下的文件原名拷贝到root下

ansible test -m copy -a “ content=’hello the world\n ’  dest=/root/new.txt ” #无源文件也可以通过content可以直接提供文件内容进行拷贝,\n代表回车

fetch模块

将远程主机文件拷贝到本地

ansible test -m fetch -a “src=/tmp/a3.txt  dest=/root” #将远程主机a3.txt文件拷贝到本地

lineinfile | replace模块

在修改单个文件的单行内容时可以使用lineinfile模块

ansible test -m lineinfile -a “path=/home/host.txt  line=’hello world’” #在/home/host.txt内添加一行内容hello world,默认添加最后一行,基于幂等原则,重复执行不会创建多行内容

ansible test -m lineinfile -a “path=/home/host.txt  line=’hello world’  insertafter=’kernel’” #将内容插入到kernel行的后面

lineinfile会替换一整行,replace可以替换关键字

ansible test -m lineinfile -a “path=/home/host.txt  regexp=’hello’  line=’ni hao’” #通过正则匹配某一行替换为ni hao,如果有多行内容包含hello,则仅替换最后一行

user模块

user模块可以实现linux系统账户管理

ansible test -m user -a “name=user1” #远程test组主机并创建系统账户user1

ansible test -m user -a “name=user1 state=absent” #删除用户不删除家目录,删除家目录remove=true

ansible test -m user -a “name=user2 uid=1010 group=adm groups=deamon,root  home=/home/user2” #创建用户并修改设置用户属性

ansible test -m user -a “name=user3 password={{‘abc’|password_hash(‘sha512’)}}”   #设置修改账户密码

yum_repository模块

yum_repository模块可以创建或修改yum源配置文件

ansible test -m yum_repository -a name=myyum description=hello

baseurl=ftp://192.168.4.254/centos gpgcheck=0 

#创建一个新的yum源配置文件/etc/yum.repos.d/myyum.repo

#yum源文件名为myyum,该文件内容如下

[myyum]

baseurl=ftp://192.168.4.254/centos

gpgcheck=0

name=hello

ansible test -m yum_repository -a name=myyum state=absent #删除yum源

yum模块

yum模块可以安装、卸载、升级软件包

State:present(安装)|absent(卸载)|latest(升级)

ansible test -m yum -a name=unip state=present #安装unzip软件包

service模块

service模块为服务管理模块(启动、关闭、重启服务等)

state:started | stopped | restarted

enable:  yes设置开机自启

ansible test -m yum -a name=httpd state=present #安装httpd软件包

ansible test -m service -a name=httpd state=started enable=yes #启动http服务并设置开机自启

特殊模块

setup模块

1、ansible facts用于采集被管理设备的系统信息

2、所有收集的信息都被保存在变量中

3、每次执行playbook默认第一个任务就是Gathering Facts

4、使用setup模块可以查看收集到的facts信息

命令格式: ansible all -m setup -a 'filter=ansible_all_ipv4_addresses'

Facts信息                                 含义
ansible_all_ipv4_addresses     所有目标主机的 IPv4 地址列表。
ansible_all_ipv6_addresses     所有目标主机的 IPv6 地址列表。
ansible_date_time                    系统时间。
ansible_kernel                          内核版本。
ansible_default_ipv4                默认网关的 IPv4 地址。
ansible_default_ipv6                默认网关的 IPv6 地址。
ansible_distribution                  Linux 系统发行版本,例如 CentOS、Ubuntu、等。
ansible_nodename                  主机名。
ansible_pkg_mgr                     包管理器,例如 yum、apt、dpkg 等。
ansible_python_version           Python 版本。
ansible_processor_cores        CPU核数。
ansible_processor_count        逻辑 CPU 核心数,包括超线程。
ansible_cpu_info                     CPU 信息字典,包含 CPU 频率、架构等信息。
ansible_mem_total                  总内存容量。
ansible_mem_free                  可用内存容量。
ansible_mem_used                已使用内存容量。

debug模块

调试模块可以显示变量的值,可以辅助排错调试

模块有两个参数,var和msg(引用变量需要{{}})

参数默认值解释
msg(string)null输出自定义信息,如果不指定或不写msg的话,默认也会输出“null”
var(string)指定要打印的变量名,与msg参数互斥,二者只能有一个。注意:var参数中的变量不需要使用{{}}表达式,而msg中需要。
verbosity(integer)默认:0debug的调试级别,默认0是全部显示,级别调整到3是忽略内容不显示,如果verbosity参数设置为3还想像是debug内容的话,需要在命令后面加入 -vvv参数

示例

四、sudo提权操作

管理员需要先授权(修改/etc/sudoers文件)

普通用户以sudo的形式执行命令(提权后,sudo在执行命令之前)

可以通过sudo  -l 查看授权情况

上述为ansible用户通过开启NOPASSWD免密执行所有命令

五、ansible配置进阶

Ansible playbook基础

Ansible ad-hoc可以通过命令行形式远程管理其他主机
     适合执行一些临时性简单任务
Ansible playbook中文名称叫剧本
    1、将经常需要执行的任务写入一个文件(剧本)
    2、剧本中可以包含多个任务
    3、剧本写后,我们随时调用剧本,执行相关的任务命令
    4、playbook剧本要求按照YAML格式编写
    5、适合执行周期性经常执行的复杂任务

YAML是什么

是一种可读性高、用来表达数据序列的格式语言

YAML:YAML Ain't Markup Language

YAML以数据为中心,重点描述数据的关系和结构

注:详细解释地址:https://blog.csdn.net/sjw2020/article/details/121633294

Playbook语法格式和使用

playbook采用YAML格式编写

playbook文件中由一个或多个play组成

每个play中可以包含:

√ hosts(主机)、tasks(任务)

√ variables(变量)、roles(角色)、handlers等元素组成

使用ansible-playbook命令运行playbook剧本

ansible定义变量

Ansible支持十几种定义变量的方式

这里我们仅介绍其中一部分变量,根据优先级排序

√ Inventory变量

√ Host Facts变量

√ Register变量

√ Playbook变量

√ Playbook提示变量

√ 变量文件

√ 命令行变量

创建用户

ansible模块应用

firewalld模块可以配置防火墙策略,使用该模块配置防火墙策略

ansible高级语法

Error处理机制

Ansible默认在遇到error会立即停止playbook

ignore_errors

使用ignore_errors忽略错误,可以全局单个任务,写时注意格式

1.忽略错误

默认会检查命令和模块的返回状态,遇到错误就中断playbook的执行

加入参数: ignore_errors: yes

- hosts: nginx

  remote_user: root

  tasks:

    - name: ignore false

      command: /bin/false

      ignore_errors: yes

    - name: touch a file

      file: path=/tmp/test22 state=touch mode=0700 owner=root group=root

2. tags标签处理

---

- hosts: nginx

  remote_user: root

  tasks:

    - name: get process

      shell: touch /tmp/change_test2

      changed_when: false

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值