第58章 Ansiblehtml
1、Ansible基礎概述python
1.1)什麼是Ansiblemysql
1.2)Ansible能夠完成哪些功能呢?
1.3)Ansible特色linux
1.4)Ansible基礎架構(有必要了解,是知識要點) ios
2、ansible安裝nginx
2.1)ansible安裝3、Ansible Inventoryweb
4.1)什麼是ad-hocshell
4.2)ad-hoc模式的使用場景apache
4.4)使用ad-hoc執行一次遠程命令,注意觀察返回結果的顏色
Ansible是一個IT自動化的配置管理工具,自動化主要體如今Ansible集成了豐富模塊,豐富的功能的組件,能夠經過一個命令行完成一系列的操做。進而能減小咱們重複性的工做和下降維護成本(下降出錯率),以提升工做的效率。
1)批量執行遠程命令,能夠對N多臺主機同時進行命令的執行。
2)批量配置軟件服務,能夠以自動化的方式進行配置和管理服務。
3)實現軟件開發功能,jumpserver底層使用ansible來實現自動化管理。
4)編排高級的IT任務,Ansible的Playbook是一門編程語言,能夠用來描繪一套IT架構。
5)事件驅動
經過Ansible的模塊,對服務進行不一樣的事件驅動
好比:
1)修改配置後重啓
2)只修改配置文件,不重啓
3)修改配置文件後,從新加載
4)遠程啓停服管理
6)管理公有云
經過API接口的方式管理公有云,不過這方面作的不如saltstack
。saltstack
自己能夠經過saltcloud
管理各大雲廠商的雲平臺。
7)二次開發
由於語法是Python,因此便於運維進行二次開阿發。
8)任務編排
能夠經過playbook的方式來統一管理服務,而且可使用一條命令,實現一套架構的部署。
跨平臺、跨系統
幾乎不受到平臺和系統的限制,好比安裝apache
和啓動服務。
在Ubuntu
上安裝apache服務名字叫apache2
在CentOS
安裝apache服務名字叫httpd
在CentOS6
上啓動服務器使用命令:/etc/init.d/nginx start
在CentOS7
上啓動服務器使用命令:systemctl start nginx
1)容易學習,無代理模式,不像saltstack既要學客戶端與服務端,還要學客戶端與服務端中間通信協議;
2)操做靈活,體如今Ansible有較多的模塊,提供了豐富的功能,playbook則提供相似於編程語言的複雜功能;
3)簡單易用,體如今Ansible一個命令能夠完成不少事情;
4)安全可靠,由於Ansible使用了SSH協議進行通信,既穩定又安全;
5)移植性高,能夠將寫好的playbook拷貝至任意機器進行執行。
Ansible的執行流程
一、Ansible讀取playbook劇本,劇本中會記錄對哪些主機執行哪些任務。
二、首先Ansible經過主機清單找到要執行的主機,而後調用具體的模塊。
三、其次Ansible會經過鏈接插件鏈接對應的主機並推送對應的任務列表。
四、最後被管理的主機會將Ansible發送過來的任務解析爲本地Shell命令執行。
#安裝ansible的前提是要有epel源
[root@m01 ~]# vim /etc/yum.repos.d/epel.repo
[root@m01 ~]# yum install ansible
#檢查ansible版本
[root@m01 ~]# ansible --version
ansible 2.8.4
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
ansible配置文件存在優先級的問題
# nearly all parameters can be overridden in ansible-playbook
# or with command line flags. ansible will read ANSIBLE_CONFIG,
# ansible.cfg in the current working directory, .ansible.cfg in
# the home directory or /etc/ansible/ansible.cfg, whichever it
# finds first
[root@m01 ~]# rpm -ql ansible
[root@m01 ~]# zcat /usr/share/man/man1/ansible-config.1.gz
#要查看完整列表,請訪問https://docs.ansible.com/或使用ansible-config命令。
For a full list check \fI\%https://docs.ansible.com/\fP\&. or use the \fIansible\-config\fP command.
#/etc/ansible/ansible.cfg配置文件,若是存在則使用。
/etc/ansible/ansible.cfg \-\- Config file, used if present
#~/.ansible.cfg用戶配置文件,覆蓋默認配置(若是存在)
~/.ansible.cfg \-\- User config file, overrides the default config if present
#\&./ansible.cfg本地配置文件(在當前工做目錄中)假定爲(aqproject specific)(aq,若是存在,則重寫其他文件)。
\&./ansible.cfg \-\- Local config file (in current working directory) assumed to be \(aqproject specific\(aq and overrides the rest if present.
#入上所述,ANSIBLE_CONFIG環境變量將覆蓋全部其餘環境變量。
As mentioned above, the ANSIBLE_CONFIG environment variable will override all others.
1)ANSIBLE_CONFIG
2)ansible.cfg #當前項目目錄
3).ansible.cfg #當前用戶的家目錄
4)/etc/ansible/ansible.cfg #若是都沒有,則讀取/etc/ansible/ansible.cfg,它優先級最低
ansible配置文件詳解
[root@m01 ~]# cat /etc/ansible/ansible.cfg
#inventory = /etc/ansible/hosts #主機列表配置文件
#library = /usr/share/my_modules/ #庫文件存放目錄
#remote_tmp = ~/.ansible/tmp #臨時py文件存放在遠程主機目錄
#local_tmp = ~/.ansible/tmp #本機的臨時執行目錄
#forks = 5 #默認併發數
#sudo_user = root #默認sudo用戶
#ask_sudo_pass = True #每次執行是否詢問sudo的ssh密碼
#ask_pass = True #每次執行是否詢問ssh密碼
#remote_port = 22 #遠程主機端口
host_key_checking = False #跳過檢查主機指紋
log_path = /var/log/ansible.log #ansible日誌
[privilege_escalation] #若是是普通用戶則須要配置提權
#become=True
#become_method=sudo
#become_user=root
#become_ask_pass=False
Inventory文件中填寫須要被管理主機與主機組信息(邏輯上定義)。默認Inventory文件在/etc/ansible/hosts。固然也能夠自定義,而後使用-i指定Inventory文件位置。下面經過幾個場景演示如何配置Inventory文件。
3.1)場景一:基於密碼鏈接
3.二、場景二:基於密鑰鏈接,須要先建立公鑰和私鑰,並下發公鑰至被控端
1)ansible管理機下發公鑰
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8
#檢查是否存在公鑰,若已存在則沒必要更新了
[root@m01 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:KPOcbRCXTz7GXhjysaEJXaABJpZKSI+7xfQaPtjiJVY root@m01
The key's randomart image is:
+---[RSA 2048]----+
|o.o.o.. ... |
|.o+o + o |
|.o o + = = |
|. + . = X * |
| . Eo.o S X . |
| B o= + o o |
| * * + o . |
|o + . . |
| . |
+----[SHA256]-----+
#表示公鑰已存在
[root@m01 ~]# ls ~/.ssh/
id_rsa id_rsa.pub
#ansible管理機下發公鑰至web01
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@172.16.1.7'"
and check to make sure that only the key(s) you wanted were added.
#經過公鑰方式鏈接一下web02,鏈接成功後使用exit命令斷開鏈接
[root@m01 ~]# ssh 'root@172.16.1.8'
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@172.16.1.8'"
and check to make sure that only the key(s) you wanted were added.
#方式1:主機+端口+密鑰
#建立主機目錄
[root@m01 ~]# mkdir project1/
[root@m01 ~]# cd project1/
#在project1目錄下建立並配置hosts主機清單
[root@m01 project1]# vim hosts
[oldboy]
172.16.1.7
172.16.1.8
保存並退出
[root@m01 project1]# ansible oldboy -m ping -i hosts
#配置成功
172.16.1.7 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
172.16.1.8 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
=====================================================
##方式2:別名+主機+端口+密鑰
#在project1目錄下建立並配置hosts主機清單
[root@m01 project1]# vim hosts
[oldboy]
web01 ansible_ssh_host=172.16.1.7
web02 ansible_ssh_host=172.16.1.8
[root@m01 project1]# ansible oldboy -m ping -i hosts
#配置成功
web02 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
web01 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
3)列出每一個主機組下面的主機狀況
[root@m01 project1]# ansible oldboy -i hosts --list-hosts
hosts (2):
172.16.1.7
172.16.1.8
生產案例一、若是控制端和被控制端第一次通信,須要確認指紋信息,若是機器特別多少的狀況下怎麼辦?
將 Ansible 配置文件中的 host_key_checking = False 參數註釋打開便可。 但要注意ansible.cfg文件的讀取順序。
[root@m01 project1]# vim /etc/ansible/ansible.cfg
將 Ansible 配置文件中的 host_key_checking = False 參數註釋打開
#確保讀的是以下的配置文件
[root@m01 project1]# ansible --version
ansible 2.8.4
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
ad-hoc簡而言之就是「臨時命令」,執行完即結束,並不會保存。
好比在多臺機器上查看某個進程是否啓動,或拷貝指定文件到本地等等。
綠色:表明被管理端主機沒有被修改
黃色:表明被管理端主機發生變動
紅色:表明出現了故障,注意查看提示
#打印兩臺主機的磁盤狀態信息
[root@m01 project1]# ansible oldboy -m command -a "df -h" -i hosts
172.16.1.8 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.3G 17G 8% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 1014M 127M 888M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
172.16.1.7 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 18G 1.3G 17G 8% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 1014M 127M 888M 13% /boot
tmpfs 98M 0 98M 0% /run/user/0
模塊類型 | 模塊內容 |
---|---|
命令模塊 | command(默認)、shell模塊、scripts模塊 |
安裝模塊 | yum |
配置模塊 | copy、file、get_url |
啓動模塊 | service、systemd |
用戶模塊 | user、group |
任務模塊 | cron |
掛載模塊 | mount |
防火牆模塊 | firewall、selinux |
command #執行shell命令(不支持管道等特殊字符)
shell #執行shell命令
scripts #執行shell命令
yum_repository #配置yum倉庫
yum #安裝軟件
copy #變動配置文件
file #創建目錄或文件
service #啓動與中止服務
mount #掛載設備
cron #定時任務
firewalld #防火牆
get_url #下載軟件
[root@m01 project1]# ansible-doc -l #查看全部模塊說明
[root@m01 project1]# ansible-doc copy #表示指定模塊方法
[root@m01 project1]# ansible-doc -s copy #表示指定模塊參數
#查看yum命令的幫助手冊
[root@m01 ~]# ansible-doc yum
推薦直接看EXAMPLES示例
1)command
[root@m01 project1]# ansible oldboy -m command -a "ps aux|grep nginx" -i hosts
172.16.1.8 | FAILED | rc=1 >>
error: unsupported option (BSD syntax)
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).non-zero return code
172.16.1.7 | FAILED | rc=1 >>
error: unsupported option (BSD syntax)
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).non-zero return code
2)shell
[root@m01 project1]# ansible oldboy -m shell -a "ps aux|grep nginx" -i hosts
172.16.1.7 | CHANGED | rc=0 >>
root 11433 0.0 0.1 113176 1220 pts/0 S+ 19:53 0:00 /bin/sh -c ps aux|grep nginx
root 11435 0.0 0.0 112708 968 pts/0 S+ 19:53 0:00 grep nginx
172.16.1.8 | CHANGED | rc=0 >>
root 9650 0.0 0.2 47084 2048 ? Ss 07:46 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
www 9751 0.0 0.2 47088 2192 ? S 07:56 0:00 nginx: worker process
root 11599 0.0 0.1 113176 1220 pts/0 S+ 19:53 0:00 /bin/sh -c ps aux|grep nginx
root 11601 0.0 0.0 112708 968 pts/0 S+ 19:53 0:00 grep nginx
command不支持管道技術
shell支持管道技術
不指定-m 默認使用的是command模塊
3)script
[root@m01 ~]# vim vsftpd.sh
#!/usr/bin/bash
mkdir /tmp/zls
[root@m01 ~]# ansible 'web01' -m script -a '/root/vsftpd.sh'
[root@m01 ~]# ansible 'web01' -m shell -a 'ls -l /tmp'
4)安裝---yum模塊(安裝present 卸載absent 升級latest 排除exclude 指定倉庫enablerepo)
[root@m01 ~]# ansible 'web_group' -m yum -a 'name=vsftpd state=present'
#至關於:yum install -y vsftpd
[root@m01 ~]# ansible 'web_group' -m yum -a 'name=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm state=present'
#至關於:yum install -y https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm
[root@m01 ~]# ansible 'web_group' -m yum -a 'name=file:///root/nagios-4.4.3-1.el7.x86_64.rpm state=present'
#至關於:yum localinstall -y nagios-4.4.3-1.el7.x86_64.rpm
[root@m01 ~]# ansible 'web_group' -m yum -a 'name=vsftpd state=absent'
#至關於:yum remove -y vsftpd
name
httpd #指定要安裝的軟件包名稱
file:// #指定本地安裝路徑(yum localinstall 本地rpm包)
http:// #指定yum源(從遠程倉庫獲取rpm包)
state #指定使用yum的方法
installed,present #安裝軟件包
removed,absent #移除軟件包
latest #安裝最新軟件包
EXAMPLES:安裝最新版本的Apache
- name: install the latest version of Apache
yum:
name: httpd
state: latest
EXAMPLES:刪除Apache
- name: remove the Apache package
yum:
name: httpd
state: absent
EXAMPLES:從testing倉庫中安裝最新版本的Apache(present正常安裝)
- name: install the latest version of Apache from the testing repo
yum:
name: httpd
enablerepo: testing
state: present
EXAMPLES:安裝指定版本的Apache
- name: install one specific version of Apache
yum:
name: httpd-2.2.29-1.4.amzn1
state: present
EXAMPLES:更新全部的軟件包
- name: upgrade all packages
yum:
name: '*'
state: latest
EXAMPLES: 更新全部的軟件包,但排除全部內核包及foo包
- name: upgrade all packages, excluding kernel & foo related packages
yum:
name: '*'
state: latest
exclude: kernel*,foo*
EXAMPLES: 從遠程的倉庫中安裝nginx
- name: install the nginx rpm from a remote repo
yum:
name: http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.
state: present
EXAMPLES: 從本地的倉庫中安裝nginx
- name: install nginx rpm from a local file
yum:
name: /usr/local/src/nginx-release-centos-6-0.el6.ngx.noarch.rpm
state: present
EXAMPLES: 安裝組包
- name: install the 'Development tools' package group
yum:
name: "@Development tools"
state: present
#示例1、安裝當前最新的Apache軟件,若是存在則更新
[root@m01 project1]# ansible oldboy -m yum -a "name=httpd state=latest" -i hosts
#示例2、安裝當前最新的Apache軟件,經過epel倉庫安裝
[root@m01 project1]# ansible oldboy -m yum -a "name=httpd state=latest enablerepo=epel" -i hosts
#示例3、經過公網URL安裝rpm軟件
[root@m01 project1]# ansible oldboy -m yum -a "name=https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.3-2.el7.x86_64.rpm state=latest" -i hosts
#示例5、更新全部的軟件包,但排除和kernel相關的
[root@m01 project1]# ansible oldboy -m yum -a "name=* state=latest exclude=kernel*,foo*" -i hosts
#示例6、刪除Apache軟件
[root@m01 project1]# ansible oldboy -m yum -a "name=httpd state=absent" -i hosts
5)yum_repository
- name: Add repository
yum_repository:
name: epel
description: EPEL YUM repo
baseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
#添加yum倉庫
ansible 'web_group' -m yum_repository -a 'name=zls_epel,zls_base description=EPEL baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/ gpgcheck=no enabled=yes file=zls_epel'
#添加mirrorlist
ansible 'web_group' -m yum_repository -a 'name=zls_epel description=EPEL baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/ gpgcheck=no enabled=yes file=epel mirrorlist=http://mirrorlist.repoforge.org/el7/mirrors-rpmforge'
#刪除yum倉庫
ansible 'web_group' -m yum_repository -a 'name=zls_epel,zls_base file=zls_epel state=absent'
#修改yum倉庫
ansible 'web_group' -m yum_repository -a 'name=epel description=EPEL baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/ gpgcheck=no enabled=no file=epel'
name #指定倉庫名字
description #添加描述(repo文件中的name)
baseurl #指定yum倉庫的地址
gpgcheck #是否開啓校驗
yes
no
enabled #是否啓用yum倉庫
yes
no
file #指定倉庫文件名
state
absent #刪除yum倉庫
present #建立yum倉庫
ansible 'web_group' -m yum_repository -a 'name=zls_yum description=EPEL baseurl=http://www.driverzeng.com gpgcheck=no enabled=no file=zls'
1)copy
- name: Copy file with owner and permissions
copy:
src: /srv/myfiles/foo.conf
dest: /etc/foo.conf
owner: foo
group: foo
mode: '0644'
#推送文件
[root@m01 ~]# ansible 'web_group' -m copy -a 'src=/root/index.html dest=/var/www/html owner=root group=root mode=0644'
#推送文件並備份
[root@m01 ~]# ansible 'web_group' -m copy -a 'src=/root/index.html dest=/var/www/html owner=root group=root mode=0644 backup=yes'
#編輯nfs配置文件
[root@m01 ~]# ansible 'web_group' -m copy -a 'content="/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)" dest=/etc/exports'
src #指定推送的源文件
dest #指定推送的目標位置
owner #指定屬主
group #指定屬組
mode #指定權限(數字方式)
content #在指定文件中添加內容
backup #是否備份(注意:控制端和被控端,內容不一致纔會備份)
yes
no
EXAMPLES: 拷貝文件
- name: Copy file with owner and permissions
copy:
src: /srv/myfiles/foo.conf #拷貝的內容
dest: /etc/foo.conf #拷貝到目標機器上哪一個位置
owner: foo #屬主
group: foo #屬組
mode: '0644' #其權限
2)file
- name: Create an insecure file
file:
path: /work
owner: root
group: root
mode: 0755
#建立目錄 mkdir
[root@m01 ~]# ansible 'web_group' -m file -a 'path=/backup state=directory owner=adm group=adm mode=0700'
#遞歸建立目錄並受權chown -R chmod -R
[root@m01 ~]# ansible 'web_group' -m file -a 'path=/zls/mysql/db01 state=directory owner=adm group=adm mode=0700 recurse=yes'
#建立文件(前提條件,上級目錄必須存在) touch
[root@m01 ~]# ansible 'web_group' -m file -a 'path=/root/zls.txt state=touch'
#刪除目錄 rm -fr
[root@m01 ~]# ansible 'web_group' -m file -a 'path=/backup state=absent'
#作軟連接 ln -s
[root@m01 ~]# ansible 'web_group' -m file -a 'src=/root/zls.txt dest=/root/zls.txt.ori state=link'
src #指定軟連接的源文件
dest #指定軟鏈接的目標文件
path #指定建立目錄或文件
state
touch #建立文件
directory #建立目錄
absent #刪除目錄或文件
link #作軟連接
owner #指定屬主
group #指定屬組
mode #指定權限
recurse #遞歸受權
yes
no
3)get_url
- name: Download foo.conf
get_url:
url: http://example.com/path/file.conf
dest: /etc/foo.conf
mode: '0440'
#下載worldpress代碼
[root@m01 ~]# ansible 'web_group' -m get_url -a 'url=http://test.driverzeng.com/Nginx_Code/wordpress-5.0.3-zh_CN.tar.gz dest=/root mode=0777'
#下載並校驗MD5
[root@m01 ~]# ansible 'web_group' -m get_url -a 'url=http://test.driverzeng.com/Nginx_Code/test.txt dest=/root mode=0777 checksum=md5:ba1f2511fc30423bdbb183fe33f3dd0f'
url #指定下載文件的url
dest #指定下載的位置
mode #指定下載後的權限
checksum #校驗
md5 #md5校驗
sha256 #sha256校驗
1)service,systemd
[root@m01 ~]# ansible 'web_group' -m systemd -a 'name=httpd state=stopped enabled=yes'
[root@m01 ~]# ansible 'web_group' -m systemd -a 'name=httpd state=started enabled=yes'
[root@m01 ~]# ansible 'web_group' -m systemd -a 'name=httpd state=restarted enabled=yes'
[root@m01 ~]# ansible 'web_group' -m systemd -a 'name=httpd state=reloaded enabled=yes'
name #指定服務名稱
state
started #啓動
stopped #中止
restarted #重啓
reloaded #重載
enabled #是否開機自啓
yes
no
1)group
- name: Ensure group "somegroup" exists
group:
name: somegroup
state: present
#建立組
[root@m01 ~]# ansible 'web_group' -m group -a 'name=www gid=666 state=present'
#刪除組
[root@m01 ~]# ansible 'web_group' -m group -a 'name=www gid=666 state=absent'
name #指定組名
gid #指定gid
state
present #建立
absent #刪除
2)user
- name: Create a 2048-bit SSH key for user jsmith in ~jsmith/.ssh/id_rsa
user:
name: jsmith
generate_ssh_key: yes
ssh_key_bits: 2048
ssh_key_file: .ssh/id_rsa
#建立用戶
[root@m01 ~]# ansible 'web_group' -m user -a 'name=www uid=666 group=www state=present shell=/sbin/nologin create_home=false'
#刪除用戶
[root@m01 ~]# ansible 'web_group' -m user -a 'name=www uid=666 state=absent'
#建立用戶的同時建立密鑰對
[root@m01 ~]# ansible 'web_group' -m user -a 'name=zls generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa'
name #指定用戶名
uid #指定uid
group #指定屬組
groups #指定附加組
state
present #建立用戶
absent #刪除用戶
shell #指定用戶登陸的shell
/bin/bash
/sbin/nologin
create_home #是否建立家目錄
true
false
comment #添加註釋
generate_ssh_key #建立密鑰對
ssh_key_bits #指定密鑰對長度
ssh_key_file #指定密鑰文件