python调用salt-api

查看支持的模块:

[root@centos2 salt]# salt '*'  sys.list_modules
visual2:
    - acl
    - aliases
    - alternatives
    - archive
    - artifactory
    - at
    - blockdev
    - bridge
    - btrfs
    - buildout
    - cloud
    - cmd
    - composer
····

执行模块:

[root@centos2 salt]# vim test.py 

import salt.client
import salt.config
client = salt.client.LocalClient()
master= salt.config.client_config('/etc/salt/master')
minion = salt.config.minion_config('/etc/salt/minion')
lll=master.get('show_jid')
cmd1=client.cmd('*','test.ping')
print(cmd1)
print(lll)

执行结果:

[root@centos2 salt]# python2.6 test.py 
{'visual2': True}
False

Archive模块:
功能:实现系统层面的压缩包调用,支持gzip、gunzip、rar、tar、unrar、unzip等

[root@centos2 salt]# touch 1.sh
[root@centos2 salt]# pwd
/srv/salt
[root@centos2 salt]# salt '*' archive.gzip  /srv/salt/1.sh   #采用gzip进行压缩
visual2:
[root@centos2 salt]# ll
total 20
-rw-r--r-- 1 root root   25 Aug 15 01:17 1.sh.gz
drwxr-xr-x 2 root root 4096 Aug 15 01:15 1.txt
-rw-r--r-- 1 root root  251 Aug  6 02:02 foobarcom.sls
-rw-r--r-- 1 root root  295 Aug 15 00:43 test.py
-rw-r--r-- 1 root root  524 Aug  6 10:55 yum.sls
[root@centos2 salt]# salt '*' archive.gunzip  /srv/salt/1.sh.gz    ##采用gunzip进行解压
visual2:
[root@centos2 salt]# ll
total 16
-rw-r--r-- 1 root root    0 Aug 15 01:17 1.sh
drwxr-xr-x 2 root root 4096 Aug 15 01:15 1.txt
-rw-r--r-- 1 root root  251 Aug  6 02:02 foobarcom.sls
-rw-r--r-- 1 root root  295 Aug 15 00:43 test.py
-rw-r--r-- 1 root root  524 Aug  6 10:55 yum.sls

api调用:

client.cmd('*','archive.gunzip',['/srv/salt/1.txt.gz'])

cmd模块:
实行远程调用命令

[root@centos2 salt]# salt  '*' cmd.run  'ls'
visual2:
    111.md5
    11111
    2222

api调用如下:

client.cmd('*','cmd.run',['ls'])

执行结果如下:

[root@centos2 salt]# cat test.py 
import salt.client
import salt.config
client = salt.client.LocalClient()
master= salt.config.client_config('/etc/salt/master')
minion = salt.config.minion_config('/etc/salt/minion')
lll=master.get('show_jid')
#cmd1=client.cmd('*','test.ping')
#print(cmd1)
print(lll)

minioninfo=client.cmd('*','cmd.run',['ls'])
print(minioninfo)
#print(master)
#print(minion)
[root@centos2 salt]# python2.6 test.py 
False
{'visual2': '111.md5\n11111\n2222\nPython-3.4.6\nPython-3.4.6.tgz\nanaconda-ks.cfg\ndjango\nepel-release-6-8.noarch.rpm\ninstall.log\ninstall.log.syslog\nip_find.sh\nlnmp-install.log\nweb.py-0.38\nweb.py-0.38.tar.gz'}

cp模块
api调用如下:

client.cmd('*','cp.get_file',['salt://1,sh','/root/1.sh'])    #salt://1,sh可以换成http://ww.baidu.com/1.tar.gz之类的进行下载到指定目录

dnsutil模块
增加dns:
[root@centos2 salt]# salt '*' dnsutil.hosts_append /etc/hosts www.baidu.com

删除dns:
[root@centos2 salt]# salt '*' dnsutil.hosts_remove /etc/hosts www.baidu.com
api调用如下:

client.cmd('*','dnsutil.hosts_append',['/etc/hosts','127.0.01','www.baidu.com'])

grain模块
[root@centos2 salt]# salt '*' grains.items
api调用如下:

[root@centos2 salt]# cat test.py 
import salt.client
import salt.config
import salt.loader
client = salt.client.LocalClient()
master= salt.config.client_config('/etc/salt/master')
minion = salt.config.minion_config('/etc/salt/minion')
lll=master.get('show_jid')
#cmd1=client.cmd('*','test.ping')
#print(cmd1)
print(lll)

minioninfo=client.cmd('*','cmd.run',['ls'])
print(minioninfo)


cptxt=client.cmd('*','cp.get_file',['salt://1,sh','/root/1.sh'])
print(cptxt)
ifof=client.cmd('*','grains.items')
#ifof=client.cmd('*','grains.item',['ipv4'])
print(ifof)
#if bool(cptxt):
#    print("ok")
#else:
#    print("false")
#print(master)
#print(minion)
[root@centos2 salt]# python2.6 test.py 
False
{'visual2': '1.sh\n111.md5\n11111\n2222\nPython-3.4.6\nPython-3.4.6.tgz\nanaconda-ks.cfg\ndjango\nepel-release-6-8.noarch.rpm\ninstall.log\ninstall.log.syslog\nip_find.sh\nlnmp-install.log\nweb.py-0.38\nweb.py-0.38.tar.gz'}
{'visual2': ''}
{'visual2': {'kernel': 'Linux', 'domain': 'localdomain', 'zmqversion': '3.2.5', 'kernelrelease': '2.6.32-642.el6.x86_64', 'selinux': {'enforced': 'Disabled', 'enabled': False}, 'ip_interfaces': {'lo': ['127.0.0.1', '::1'], 'eth1': ['192.168.220.131', 'fe80::20c:29ff:fe2c:8e8b']}, 'shell': '/bin/sh', 'mem_total': 1990, 'saltversioninfo': [2015, 5, 10, 0], 'host': 'centos2', 'SSDs': [], 'mdadm': [], 'id': 'visual2', 'osrelease': '6.8', 'ps': 'ps -efH', 'server_id': 2025691337, 'ip6_interfaces': {'lo': ['::1'], 'eth1': ['fe80::20c:29ff:fe2c:8e8b']}, 'num_cpus': 1, 'hwaddr_interfaces': {'lo': '00:00:00:00:00:00', 'eth1': '00:0c:29:2c:8e:8b'}, 'osfullname': 'CentOS', 'ip4_interfaces': {'lo': ['127.0.0.1'], 'eth1': ['192.168.220.131']}, 'init': 'upstart', 'master': '192.168.220.131', 'ipv4': ['127.0.0.1', '192.168.220.131'], 'ipv6': ['::1', 'fe80::20c:29ff:fe2c:8e8b'], 'cpu_flags': ['fpu', 'vme', 'de', 'pse', 'tsc', 'msr', 'pae', 'mce', 'cx8', 'apic', 'sep', 'mtrr', 'pge', 'mca', 'cmov', 'pat', 'pse36', 'clflush', 'dts', 'mmx', 'fxsr', 'sse', 'sse2', 'ss', 'syscall', 'nx', 'pdpe1gb', 'rdtscp', 'lm', 'constant_tsc', 'up', 'arch_perfmon', 'pebs', 'bts', 'xtopology', 'tsc_reliable', 'nonstop_tsc', 'aperfmperf', 'unfair_spinlock', 'pni', 'pclmulqdq', 'ssse3', 'fma', 'cx16', 'pcid', 'sse4_1', 'sse4_2', 'x2apic', 'movbe', 'popcnt', 'tsc_deadline_timer', 'aes', 'xsave', 'avx', 'f16c', 'rdrand', 'hypervisor', 'lahf_lm', 'abm', 'ida', 'arat', 'epb', 'xsaveopt', 'pln', 'pts', 'dtherm', 'fsgsbase', 'bmi1', 'avx2', 'smep', 'bmi2', 'invpcid'], 'localhost': 'centos2.localdomain', 'lsb_distrib_id': 'CentOS', 'fqdn_ip4': ['127.0.0.1', '192.168.220.131'], 'fqdn_ip6': [], 'nodename': 'centos2.localdomain', 'saltversion': '2015.5.10', 'lsb_distrib_release': '6.8', 'pythonpath': ['/usr/bin', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk', '/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages', '/usr/lib/python2.6/site-packages', '/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info'], 'saltpath': '/usr/lib/python2.6/site-packages/salt', 'pythonversion': [2, 6, 6, 'final', 0], 'osmajorrelease': '6', 'os_family': 'RedHat', 'oscodename': 'Final', 'osfinger': 'CentOS-6', 'num_gpus': 1, 'virtual': 'VMware', 'cpu_model': 'Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz', 'fqdn': 'centos2.localdomain', 'pythonexecutable': '/usr/bin/python2.6', 'osarch': 'x86_64', 'cpuarch': 'x86_64', 'lsb_distrib_codename': 'Final', 'osrelease_info': [6, 8], 'locale_info': {'detectedencoding': 'UTF-8', 'defaultlanguage': 'en_US', 'defaultencoding': 'UTF8'}, 'gpus': [{'model': 'SVGA II Adapter', 'vendor': 'unknown'}], 'path': '/sbin:/usr/sbin:/bin:/usr/bin', 'machine_id': '2d717ab0c6782019881d4ddf0000000c', 'os': 'CentOS'}}

获取单个value,比如ipv4的值:
api如下:

client.cmd('*','grains.item',['ipv4'])

执行结果如下:

{'visual2': {'ipv4': ['127.0.0.1', '192.168.220.131']}}

file模块:

#校验所有被控主机/etc/fstab文件的md5值是否为xxxxxxxxxxxxx,一致则返回True值
salt '*' file.check_hash /etc/fstab md5=xxxxxxxxxxxxxxxxxxxxx

#校验所有被控主机文件的加密信息,支持md5、sha1、sha224、shs256、sha384、sha512加密算法
salt '*' file.get_sum /etc/passwd md5

#修改所有被控主机/etc/passwd文件的属组、用户权限、等价于chown root:root /etc/passwd
salt '*' file.chown /etc/passwd root root

#复制所有被控主机/path/to/src文件到本地的/path/to/dst文件
salt '*' file.copy /path/to/src /path/to/dst

#检查所有被控主机/etc目录是否存在,存在则返回True,检查文件是否存在使用file.file_exists方法
salt '*' file.directory_exists /etc

#获取所有被控主机/etc/passwd的stats信息
salt '*' file.stats /etc/passwd

#获取所有被控主机/etc/passwd的权限mode,如755,644
salt '*' file.get_mode /etc/passwd

#修改所有被控主机/etc/passwd的权限mode为0644
salt '*' file.set_mode /etc/passwd 0644

#在所有被控主机创建/opt/test目录
salt '*' file.mkdir /opt/test

#将所有被控主机/etc/httpd/httpd.conf文件的LogLevel参数的warn值修改为info
salt '*' file.sed /etc/httpd/httpd.conf 'LogLevel warn' 'LogLevel info'

#给所有被控主机的/tmp/test/test.conf文件追加内容‘maxclient 100’
salt '*' file.append /tmp/test/test.conf 'maxclient 100'

#删除所有被控主机的/tmp/foo文件
salt '*' file.remove /tmp/foo

api调用:

client.cmd('*','file.remove',['/tmp/foo'])

user模块:
user.present

user.present: 确保指定的账户名存在,并指定其对应的属性. 这些属性包括如下内容:

name: 指定需要管理的账户名.

uid: 指定uid, 如果不设置将配自动分配下一个有效的uid.

gid: 指定默认的组id(group id)

gid_from_name: 如果设置为_True_,默认的组id将自动设置为和本用户同名的组id

groups: 分配给该用户的组列表(a list of groups). 如果组在minion上不存在,则本state会报错. 如果设置会空,将会删除本用户所属的除了默认组之外的其他组

optional_groups: 分配给用户的组列表。 如果组在minion上不存在,则state会忽略它.

home: 关于用户的家目录(home directory).

password: 设置用户hash之后的密码.

enforce_password: 当设置为_False_时,如果设置的_password_与用户原密码不同,将保持原密码不做更改.如果没有设置_password_选项,该选项将自动忽略掉.

shell: 指定用户的login shell。 默认将设置为系统默认shell。

unique: UID唯一,默认为True.

system: 从_FIRST_SYSTEM_UID_和_LAST_SYSTEM_UID_间选择一个随机的UID.

user.absent

本部分为译者依据官方手册进行的补充,原文中并没有相关内容
user.absent 用于删除用户.其有以下选项:

name: 指定需要删除的用户名.

purge: 设置清除用户的文件(家目录)

force: 如果用户当前已登录,则absent state会失败. 设置_force_选项为True时,就算用户当前处于登录状态也会删除本用户.

当管理用户时,至少需要指定_user.present_或_user.absent_。 其他选项是可选的,比如_uid_、gid、_home_等选项没有指定是,将自动使用下一个有效的或者系统默认的.

如果需要设置密码 首选hash密码

openssl passwd -1 -salt 'cedwards'

创建用户:

# cat cedwards.sls 
cedwards:
  user.present:
    - fullname: Christer Edwards
    - password: '$1$cedward$KcHcszCMgNJkDwSID7QRH.' 
    - shell: /bin/bash
    - home: /home/cedwards
    - uid: 1002
    - gid: 1002
    - groups:
      - wheel

删除用户:

# cat userdel.sls 
cedwards:
  user.absent:
    - purge: Ture
    - force: Ture

批量创建用户:

# cat useradd.sls 
{% set users = ['jim','hwg','hyxc'] %}
{% for user in users %}
{{ user }}:
  user.present:
    - shell: /bin/bash
    - home: /home/{{ user }}
    - password: '$1$cedwards$Sy0q724HkzgJsIWMsQIkq.'
{% endfor %}

扩展:https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.cmdmod.html#salt.modules.cmdmod.run
https://docs.saltstack.com/en/latest/ref/clients/index.html
http://www.cnblogs.com/MacoLee/p/5753640.html
http://chentianwang.blog.51cto.com/9250930/1732003
http://www.cnblogs.com/pping/p/3989699.html
http://www.cnblogs.com/evilliu/articles/6137336.html

你可能感兴趣的:(python调用salt-api)