рд╡реИрдЧреНрд░реИрдВрдЯ рдФрд░ рд╕рд╛рд▓реНрдЯрд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рд╡реЗрдм рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдСрдЯреЛрдореЗрд╢рди

рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдПред рдЬрдм рд╕реЗ рдореИрдВрдиреЗ Google рдХреА рдорджрдж рдХреЗ рдмрд┐рдирд╛ рдРрд╕рд╛ рдХрд░рдирд╛ рд╕реАрдЦрд╛, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕реЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рдерд╛ рдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдмрдирд╛рдИ рдЬрд╛рдП рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЙрд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╕рдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛, рд▓реЗрдХрд┐рди рд╣рд░ рдмрд╛рд░ рдЬрдм рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХреБрдЫ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╛рдХрд░ рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рдерд╛ред рдореБрдЭреЗ рдФрд░ рдЪрд╛рд╣рд┐рдП рдерд╛ред
рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдореИрдВ Vagrant + SaltStack рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рдЖрдпрд╛, рдЬрд╣рд╛рдБ Vagrant рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдЕрд▓рдЧрд╛рд╡ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИ, рдФрд░ SaltStack - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рдмрдВрдзрдиред

Vagrantред


Vagrantfile рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореИрдиреЗрдЬрд░ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдорд╢реАрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд╣ рди рдХреЗрд╡рд▓ рдЖрднрд╛рд╕реА рдорд╢реАрдиреЛрдВ рдХреЛ рдЙрдард╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрдирдХреЗ "рдкреНрд░рд╛рд╡рдзрд╛рди" рд╕реЗ рднреА рдирд┐рдкрдЯ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдкрд╛рд░реНрд╢реНрд╡рд┐рдХ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред
рд╡реИрдЧреНрд░рд╛рдВрдд рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдкреНрд░рд╛рд░реВрдк .box ред рдмрдХреНрд╕реЗ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рд╣реИ - https://vagrantcloud.com/ ред рдлрд┐рд▓рд╣рд╛рд▓ рдпрд╣ рдмреАрдЯрд╛ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди, рдмрдХреНрд╕реЗ рдХреЗ "рдЯреВрдЯреЗ" рд▓рд┐рдВрдХ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреАред

Vagrantfile


Vagrantfile рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╡рд┐рд╡рд░рдг рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рд╣реИрдВ , рд▓реЗрдХрд┐рди рдореИрдВ рд╕реВрдЪреА рджреВрдВрдЧрд╛ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рд╕рд░реНрд╡рд░ рдкреВрд░реНрд╡-рд╕реНрдерд╛рдкрд┐рдд SaltStack рдШрдЯрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ debian рдкрд░ рдЪрд▓реЗрдЧрд╛ред Https://vagrantcloud.com/ рдкрд░ рдЖрдк .box рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
 config.vm.box = "mokote/debian-7" 

рдореИрдВ рдПрдХ рдирд┐рдЬреА рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХреЗ рднреАрддрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛ рдЕрдкрдирд╛ IP рдорд┐рд▓реЗрдЧрд╛ред рдЗрд╕рд╕реЗ рдЖрдк рдХрдИ рдорд╢реАрдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрди рддрдХ рдкрд╣реБрдВрдЪ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
 config.vm.network "private_network", ip: "192.168.56.107" 

рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕:
 config.vm.provider "virtualbox" do |v| v.name = "demostand" v.memory = 1024 v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] v.customize ["setextradata", :id, "--VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-root", "1"] end 

рд╣рдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ SaltStack рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдФрд░ рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдмрдирд╛рдИ рдЧрдИ рдорд╢реАрди рдкрд░ рддреИрдирд╛рдд рдХреА рдЬрд╛рдПрдЧреАред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ nfs рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдпрд╣ VirtualBox shared folders рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ :nfs => true , рд▓реЗрдХрд┐рди root рдПрдХреНрд╕реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ root ред
 config.vm.synced_folder "salt/roots/", "/srv/" config.vm.synced_folder "~/Development/web/demostand", "/var/www/demostand", id: "vagrant-root", :nfs => true 

рдпрд╣ SaltStack рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд╣реЛрд╕реНрдЯ рдХреЗ рдкреНрд░рд╛рд╡рдзрд╛рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред
salt.minion_config - рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
salt.run_highstate = true - рдорд╢реАрди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдкреНрд░рд╛рд╡рдзрд╛рди рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
salt.pillar - pillar рднрдВрдбрд╛рд░рдг рд╕реЗ рдбреЗрдЯрд╛ред
 config.vm.provision :salt do |salt| salt.minion_config = 'salt/minion' salt.run_highstate = true salt.pillar({ "database" => { "withUser" => true, "name" => "demostand", "password" => "fm2QTqimWUrk" } }) salt.pillar({"projectName" => "demostand"}) end 

рдкреВрд░реНрдг Vagrantfile рдХреЛ рдпрд╣рд╛рдБ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: https://github.com/ligser/salt-vagrant-demostand/blob/master/Vagrantfile ред

SaltStack


SaltStack рдЖрдкрдХреЛ master -> minion рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рддрд╛рдЬрд╛ minion рд╕рд╛рде minion рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдРрд╕реА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА, рдЗрд╕рд▓рд┐рдП рдкреНрд░рд╛рд╡рдзрд╛рди рдмрд┐рдирд╛ master рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
SaltStack рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рд╡рд░рдг рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ ( SaltStack рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рд░рд╛рдЬреНрдпреЛрдВ) рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП minion рд▓рд┐рдП рд╕рдВрддреБрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ SaltStack рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди SaltStack рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдереЗред

рдирдордХ / рдорд┐рдирд┐рдпрди


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, Vagrantfile рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ salt/minion рдлрд╝рд╛рдЗрд▓ Vagrantfile ред рдпрд╣ рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдорд╢реАрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред
рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдЕрддреНрдпрдВрдд рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ: file_client: local ред рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ minion рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, /srv/salt рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдерд╛ред

рд░рд╛рдЬреНрдпреЛрдВ


рд╕реНрдерд┐рддрд┐ рдкрд░ рдПрдХ рдкреВрд░реНрдг рдореИрдиреБрдЕрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╣реИ: http://docs.saltstack.com/en/latest/topics/tutorials/index.html#states ред
рд╕реНрдЯреЗрдЯреНрд╕ рдХреЛ .sls рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ .sls рд╣реИред рдЖрдорддреМрд░ рдкрд░ .sls рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рд╣реЛрддрд╛ рд╣реИред
 apache: # ID pkg: #  - installed #  

рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдХреЙрд▓ рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
 apache: pkg.installed 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ ID рд░рд╛рдЬреНрдп рд╡рд╕реНрддреБ рдХреЗ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреА рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
 apache_pkg: pkg: - name: apache - installed 

pkg рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИред installed рдЗрд╕ рд░рд╛рдЬреНрдп рдХреЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЗрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
service - рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ред рдЗрд╕рдХреЗ рд╕рд╛рде, рдЖрдк рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдпрд╛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред apache2 рд░реЛрдХрдиреЗ рд╡рд╛рд▓рд╛ рд░рд╛рдЬреНрдп:
 apache2: service.dead 

file - рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реНрдерд┐рддрд┐ред
рдЖрдорддреМрд░ рдкрд░, managed рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ FS рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ ID рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рддреЛ рд╣рдореЗрдВ name рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
source - рд╡рд╣ рд╕реНрдерд╛рди рдЬрд╣рд╛рдБ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА рд▓реА рдЧрдИ рд╣реИред salt:// - рд╕реВрдЪрдХ рдХреЛ /srv/salt , рдпрд╛ Vagrantfile рд╕рд╛рдкреЗрдХреНрд╖: salt/roots/salt ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдлрд╝рд╛рдЗрд▓реЗрдВ jinja рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рдЕрдВрджрд░ pillar рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ template: jinja рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ template: jinja рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ template: jinja ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред jinja рдХрд╛ рдЙрдкрдпреЛрдЧ рдЦреБрдж .sls рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
SaltStack рд░рд╛рдЬреНрдп рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
watch_in рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрджрд▓рддреЗ рд╕рдордп рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
require pkg рдХреА рд╕реНрдерд┐рддрд┐ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреИрдХреЗрдЬ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
 /etc/nginx/sites-available/default: file.managed: - source: salt://nginx/default - template: jinja - user: root - group: root - mode: 644 - watch_in: - service: nginx 


рдбреЗрдЯрд╛


SaltStack рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╕рд┐рд╕реНрдЯрдо рд╣реИрдВред
pillar - рдбреЗрдЯрд╛ рдЬреЛ рдХрд┐ рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред Vagrantfile рдореИрдВрдиреЗ pillar рдореЗрдВ 2 рдЪрд╛рдмрд┐рдпрд╛рдБ Vagrantfile : database - database рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯрдиреЗрдо - рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╛рдоред
grains - рд╕реНрдереИрддрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛ minion рдЕрдкрд▓реЛрдб рдХреА рдЬрд╛рдПрдЧреА рдЬрдм рдпрд╣ рд╢реБрд░реВ рд╣реЛрдЧреАред
рдореИрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ grains рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреА рдкреЗрдЪреАрджрдЧрд┐рдпреЛрдВ рдореЗрдВ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рдереА, рдЕрдЧрд░ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ SaltStack рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ: http://docs.saltstack.com/en/latest/topics/targeting/grains.html ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХрд┐рд╕реА рднреА .sls рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕рдореЗрдВ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
{{ }} - рдЖрдЙрдЯрдкреБрдЯред
{% %} - рд╕реНрдерд┐рддрд┐рдпрд╛рдВ, рдпрд╛ рдЪрдХреНрд░ред
 {{ pillar['database']['name'] }}: {% if (pillar['database']['withUser']) %} mysql_user.present: - host: localhost - password: {{ pillar['database']['password'] }} - require: - service: mysql - pkg: python-mysqldb {% endif %} 

рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, Vagrantfile рдореЗрдВ рджрд░реНрдЬ рдореВрд▓реНрдп [database][name] , pillar рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ mysql_user.present рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП ID рд░реВрдк рдореЗрдВ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред
рдорд╛рди ['database']['password'] рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

Top.sls


top.sls - рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ SaltStack рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред
рдЗрд╕рдореЗрдВ .sls рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рддреИрдпрд╛рд░ рд╡рд┐рдиреНрдпрд╛рд╕


SaltStack рдФрд░ SaltStack рдХрд╛ рддреИрдпрд╛рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди SaltStack рдкрд░ GitHub ред рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде PHP , nginx рдФрд░ mysql рдПрдХ рд╕рд░реНрд╡рд░ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
 vagrant up --provision 

рдЬрдм рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдЫрд╡рд┐рдпрд╛рдВ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдЬреА рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ IP рдХреЛ рдмрджрд▓рдирд╛ рдирд╣реАрдВ рднреВрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдирд┐рд╖реНрдХрд░реНрд╖


рд╕реНрд╡рдЪрд╛рд▓рди рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдп рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╕рд░реНрд╡рд░реЛрдВ рдХреА рддреИрдирд╛рддреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдФрд░ vagrant up рдХреЗ рд▓реЙрдиреНрдЪ vagrant up ред рдЕрдм рдХрдИ рдШрдВрдЯреЗ рдкрд╣рд▓реЗ рд▓рдЧ рд╕рдХрддреЗ рдереЗ рдЕрдм рдорд┐рдирдЯ рд▓рдЧрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд░реНрд╡рд░ рдЦреБрдж рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In220279/


All Articles