ansible配置与模块命令、playbook语法及模板 - 持续更新

安装ansible

# ubuntu
sudo apt update
sudo apt install ansible
# centos
yum- y install ansible

配置ansible

传输密钥

-i:指定公钥文件

ssh-copy-id  -i ~/.ssh/id_rsa.pub -p 22 root@192.168.0.1
#或
ssh-copy-id 192.168.0.1

批量传输密钥文件

for i in 123.123.123.1 123.123.123.2
do
ssh-copy-id   $i 
done
Liudeng2022!!!
vi /etc/hosts
123.123.123.1   host01
123.123.123.2   host02
vi /etc/ansible/hosts
# ansible_user=ubuntu ansible_pass=123456 ansible_host=192.168.5.1 ansible_port=22
# ansible_ssh_user=test ansible_ssh_pass=111111 ansible_su_pass=*I2145
# ansible_su_pass变量输入root账户密码,当ansible执行root命令时,可以不输入密码,直接执行
[hostgroup_name01]
#ansible_user=ubuntu ansible_pass=123456 ansible_host=192.168.5.1 ansible_port=22
host01
host02

[hostgroup_name01]
host03

[cluster:all]
hostgroup_name01
hostgroup_name01


[all:vars]
ansible_python_interpreter=/usr/bin/python3
#all:vars子组设置ansible_python_interpreter主机参数,该参数对于此清单中包括的所有主机均有效。 此参数可确保远程服务器使用/usr/bin/python3 Python 3可执行文件,而不是/usr/bin/python (Python 2.7),该文件在最新的Ubuntu版本中不存在。
主机列表
ansible all --list-hosts				#查看所有主机列表
ansible-inventory --list -y				#检查库存

-m:指定模块

ansible-doc  -l                      			 #列出所有模块
ansible-doc -l | grep yum          		  	     #在所有模块中过滤关键词
ansible-doc yum                      		     #查看模块帮助
ping
ansible all -m ping -u root						#测试链接 
command

command不支持bash的特性

ansible-doc  -l                      			 #列出所有模块
ansible-doc -l | grep yum          		  	     #在所有模块中过滤关键词
ansible-doc yum                      		     #查看模块帮助

ansible node1 -m command -a "uptime"			 #查看CPU负载
ansible node1 -m command -a "uname -r" 			 #查看内核版本
ansible all -a "date"                    	      #查看时间
shell

shell支持bash的特性:如ls、重定向、管道

# command不支持bash的特性 故下行报错
ansible test -m command -a "ps | wc -l"
ansible test -m command -a  "ls &"
# shell支持bash的特性
ansible test -m shell -a  "ps aux | wc -l"
ansible test -m shell -a  "touch /tmp/txt.txt"
script

script模块会把-a后面的脚本拷贝到被管理端主机,然后执行这个脚本。

ansible  test  -m script  -a  "./test.sh"
#-a后面的./test.sh是上面创建脚本的相对路径和文件名
file

file模块可以创建文件、目录、链接;修改权限与属性等(ansible-doc file)

ansible  test  -m  file  -a  "path=/tmp/file.txt state=touch"
#state=touch是创建文件,state=directory是创建目录

ansible  test  -m  file -a  "path=/tmp/file.txt owner=sshd group=adm mode=0777"  
#修改文件或目录权限,path后面指定要修改的文件名或目录名称,owner后面指定用户,group后面指定组,mode后面指定要修改的权限(0777中第一个0代表的是无特殊权限,如SUID、SGID等)

ansible test -m file -a "path=/tmp/mydir state=absent"
#state=absent代表删除(删除目录/文件)

ansible test -m file -a "src=/etc/hosts  path=/tmp/host.txt state=link"  
#给/etc/hosts文件创建一个链接文件/tmp/host.txt(src指定源文件,path是软链接文件名)
#相当于执行命令 ln -s  /etc/hosts  /tmp/host.txt
copy

将本地文件拷贝到远程主机 (ansible-doc copy)

ansible test -m copy -a "src=~/a3.txt dest=/root/"
fetch

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

ansible test -m fetch -a "src=/etc/hostname   dest=~/"
lineinfile

在修改单个文件的单行内容时可以使用lineinfile模块(ansible-doc lineinfile)。

ansible test -m lineinfile  -a "path=/etc/issue line='hello world'"
#在/etc/issue文件中添加一行内容hello world,默认添加到最后,line后面跟的是需要添加的文件内容
#基于幂等原则,若重复执行,不会创建多行内容
#匹配文件/etc/selinux/config以"SELINUX="开头的行,修改为“SELINUX=enforcing”
#若不存在则在文本最后一行添加。
- name: Ensure SELinux is set to enforcing mode
  lineinfile:
    path: /etc/selinux/config
    regexp: '^SELINUX='
    line: SELINUX=enforcing
#删除sudoers文件中以%wheel开头的行,目的是取消默认wheel组的sudo权限。
- name: Make sure group wheel is not in the sudoers configuration
  lineinfile:
    path: /etc/sudoers
    state: absent
    regexp: '^%wheel'
#匹配到127.0.0.1开头的行,将其内容修改为"127.0.0.1 localhost"
#并修改/etc/hosts文件的拥有人root和所属组root以及文件的权限644。
- name: Replace a localhost entry with our own
  lineinfile:
    path: /etc/hosts
    regexp: '^127\.0\.0\.1'
    line: 127.0.0.1 localhost
    owner: root
    group: root
    mode: '0644'
replace

replace可以替换关键词(ansible-doc replace)。

#regexp :后面是替换的旧内容。必须参数,指定一个正则表达式,可以是python正则
#replace:后面是替换的新内容。

#将/etc/issue.net文件全文所有的Kernel替换为Ocean
ansible test -m replace -a "path=/etc/issue.net regexp=Kernel replace=Ocean"

# 匹配到任意一个或多个开头的行增加注释
ansible test -m replace -a "path=/root/passwd regexp='^(.*)' replace='#\1'"

# 取消注释
ansible test -m replace -a "path=/root/passwd regexp='^#(.*)' replace='\1'"

# 匹配以 p 开头的后面有一个或者多个字符的行,并在前面添加 # 注释
ansible test -m replace -a "path=/root/passwd regexp='^(p.*)' replace='#\1'"
user

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

ansible test -m user -a "name=tuser2 uid=1010 group=adm groups=daemon,root home=/home/tuser2"
#创建账户并设置对应的账户属性,默认state的值为present,代表创建用户
#groups指定用户属于哪些附加组,home指定用户的家目录

ansible test -m user -a "name=tuser1 password={{'abc'| password_hash('sha512')}}"
#修改账户密码,用户名是tuser1,密码是abc,密码经过sha512加密

ansible test -m user -a "name=tuser2 state=absent remove=true"
#删除tuser2账户同时删除家目录、邮箱,相当于执行userdel  -r  tuser2
service

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

state:started|stopped|restarted,

enabled:yes设置开机启动。

#调用service模块,启动httpd服务
ansible test -m service -a "name=httpd state=started enabled=yes"
#调用service模块,daemon-reload
ansible test -m service -a "daemon-reload=yes"
Synchronize
ansible client01 -m synchronize -a 'src=/data/stu01 dest=/data/soft/ compress=yes delete=yes checksum=yes --exclude=.git'
setup

该模块主要用于收集信息,是通过调用facts组件来实现的。

ansible web -m setup -a 'filter=ansible_memory_mb'
ansible web -m setup -a 'filter=*mb'

setup模块filter条件:
ansible_all_ipv4_addresses:仅显示ipv4的信息。
ansible_devices:仅显示磁盘设备信息。
ansible_distribution:显示是什么系统,例:centos,suse等。
ansible_distribution_major_version:显示是系统主版本。
ansible_distribution_version:仅显示系统版本。
ansible_machine:显示系统类型,例:32位,还是64位。
ansible_eth0:仅显示eth0的信息。
ansible_hostname:仅显示主机名。
ansible_kernel:仅显示内核版本。
ansible_lvm:显示lvm相关信息。
ansible_memtotal_mb:显示系统总内存。
ansible_memfree_mb:显示可用系统内存。
ansible_memory_mb:详细显示内存情况。
ansible_swaptotal_mb:显示总的swap内存。
ansible_swapfree_mb:显示swap内存的可用内存。
ansible_mounts:显示系统磁盘挂载情况。
ansible_processor:显示cpu个数(具体显示每个cpu的型号)。
ansible_processor_vcpus:显示cpu个数(只显示总的个数)

asnible-playbook.yml 常用模板

---
- hosts: test_hosts
  remote_user: root	# 任务执行的用户
  gather_fact: yes	# Ansible 收集 facts 信息
  
  vars_prompt:
    - name: "变量名"
      prompt: "交互式获取变量"
      private: no	# 屏幕输入隐私
      confirm: yes	# 二次输入确认
  vars:
    vars_group1:
    - var1
    - var2
    vars_group2:
    - "{{vars_group1}}"
    - var3
    
  tasks:
  - name: "task1"
    lineinfile:
      path: "{{ item.path }}"
      regexp: "{{ item.regexp }}"
      line: "{{ item.line }}"
    with_items:
      - {path: "/etc/selinux/config", regexp: '\^SELINUX=', line: "SELINUX=disabled" }
    when: ansible_distribution == CentOS and var1 == '1'
    ignore_errors: yes
    tags: task1
  - name: "debug"
    debug:
      msg: "ip:{{ansible_default_ipv4.address}}"
        
- name: "include include.yml"
  include: "./include.yml"
  when: "var2 == '2'"	# 条件成立则执行,此处的var2一定是include.yml中的变量
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值