MDR Salt Upgrade.txt 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. MDR Salt Upgrade.txt
  2. https://jira.mdr.defpoint.com/browse/MSOCI-1164
  3. Done when:
  4. All salt minions are running same version (2018)
  5. All server minions are pegged to specific version (that can be changed at upgrade time)
  6. Remove yum locks for minion
  7. Notes:
  8. Packer installs 2019 repo (packer/scripts/add-saltstack-repo.sh & packer/scripts/provision-salt-minion.sh) , then os_modifications ( os_modifications.repo_update) overwrites the repo with 2018. This leaves the salt minion stuck at the 2019 version without being able to upgrade. 
  9. #salt master (two salt repo files)
  10. /etc/yum.repos.d/salt.repo (salt/fileroots/os_modifications/minion_upgrade.sls)
  11. [salt-2018.3]
  12. name=SaltStack 2018.3 Release Channel for Python 2 RHEL/Centos $releasever
  13. baseurl=https://repo.saltstack.com/yum/redhat/7/$basearch/2018.3
  14. failovermethod=priority
  15. enabled=1
  16.  
  17. /etc/yum.repos.d/salt-2018.3.repo
  18. [salt-2018.3]
  19. name=SaltStack 2018.3 Release Channel for Python 2 RHEL/Centos $releasever
  20. baseurl=https://repo.saltstack.com/yum/redhat/7/$basearch/2018.3
  21. failovermethod=priority
  22. enabled=1
  23. gpgcheck=1
  24. gpgkey=file:///etc/pki/rpm-gpg/saltstack-signing-key, file:///etc/pki/rpm-gpg/centos7-signing-key
  25.  
  26. #reposerver.msoc.defpoint.local
  27. /etc/yum.repos.d/salt.repo
  28. [salt-2018.3]
  29. name=SaltStack 2018.3 Release Channel for Python 2 RHEL/Centos $releasever
  30. baseurl=https://repo.saltstack.com/yum/redhat/7/$basearch/2018.3
  31. failovermethod=priority
  32. enabled=1
  33. gpgcheck=0
  34. Two repo files in salt, both are 2018.3; one has proxy=none other doesn't.  the salt_rhel.repo is just for RHEL and the other is for CENTOS. 
  35. salt/fileroots/os_modifications/files/salt.repo (salt/fileroots/os_modifications/repo_update.sls uses this file and it is actively pushed to CENTOS minions)
  36. salt/fileroots/os_modifications/files/salt_rhel.repo  (salt/fileroots/os_modifications/repo_update.sls uses this file and it is actively pushed to RHEL minions)
  37. /etc/yum.repos.d/salt-2018.3.repo ( not sure how this file is being pushed. possibly pushed from Chris fixing stuff )
  38. STEPS
  39. 1. remove /etc/yum.repos.d/salt-2018.3.repo from test
  40. 1.2 remove yum versionlock in test (if there are any; None found)
  41. 1.3 yum clean all ; yum makecache fast
  42. 2. use git to update os_modifications/files/salt_rhel.repo file to 2019.2.2 ( match salt master)
  43. 2.1 use salt + repo to update minion to 2019.2.2
  44. 2.5 salt minion cmd.run 'rm -rf /etc/yum.repos.d/salt-2018.3.repo'
  45. 2.5.1 salt minion cmd.run 'ls /etc/yum.repos.d/salt*'
  46. 2.6 salt salt-master* state.sls os_modifications.repo_update
  47. 2.7 salt salt-master* cmd.run 'yum clean all ; yum makecache fast'
  48. 2.8 salt minion cmd.run 'yum update salt-minion -y'
  49. 2.9 salt minion cmd.run 'yum remove salt-repo -y'
  50. 3. upgrade salt master to 2019.2.3 using repo files as a test
  51. 4. upgrade salt mininos to 2019.2.3 using repo files as a test
  52. 5. push to prod.
  53. PROBLEMS
  54. bastion.msoc.defpoint.local
  55. error: unpacking of archive failed on file /var/log/salt: cpio: lsetfilecon
  56. mailrelay.msoc.defpoint.local
  57. pillar broken
  58. PROD
  59. 1. remove dup repos
  60. 1.1 remove /etc/yum.repos.d/salt-2018.3.repo from environment (looks like it was installed with a RPM)
  61. 1.1.1 salt minion cmd.run 'yum remove salt-repo -y' (does not remove the proper salt.repo file)
  62. 1.1.2 salt minion cmd.run 'rm -rf /etc/yum.repos.d/salt-2018.3.repo' (just to make sure)
  63. 1.2 remove yum versionlock
  64. yum versionlock list
  65. 1.2.1 salt minion cmd.run 'yum versionlock delete salt-minion'
  66. 1.2.2 salt minion cmd.run 'yum versionlock delete salt'
  67. 1.2.3 salt minion cmd.run 'yum versionlock delete salt-master'
  68. 2. use salt + repo to update master/minion to 2019.2.2
  69. 2.1 use git to update os_modifications/files/salt_rhel.repo file to 2019.2.2 pin to minor release (match TEST)(https://repo.saltstack.com/yum/redhat/$releasever/$basearch/archive/2019.2.2)
  70. 2.2 Check for environment grain ( needed for repo_update state file. )
  71. 2.2.1 salt minion grains.item environment
  72. 2.6 salt salt-master* state.sls os_modifications.repo_update
  73. 2.7 salt salt-master* cmd.run 'yum clean all ; yum makecache fast'
  74. 2.7.5 salt minion cmd.run 'yum check-update | grep salt'
  75. 2.8 salt minion cmd.run 'yum update salt-minion -y'
  76. OR salt minion pkg.upgrade name=salt-minion
  77. salt minion pkg.upgrade name=salt-minion fromrepo=salt-2019.2.4
  78. 2.9 salt master cmd.run 'yum update salt-master -y'
  79. 3. ensure salt master and minions are at that minor version.
  80. 3.1 salt * test.version
  81. 6. upgrade test and prod to 2019.2.3 via repo files to ensure upgrade process works properly.
  82. 6.5 fix permissions on master to allow non-root users to be able to run ( or run highstate )
  83. 6.5.1 chmod 700 /etc/salt/master.d/
  84. 6.5.2 then restart master
  85. 7. never upgrade salt again.
  86. PROBLEMS
  87. the pillar depends on a custom grain, the custom grain depends on specific python modules. the moose servers seem to have python module issues.
  88. these commands helped fix them. python yum VS. pip
  89. ImportError: cannot import name certs
  90. pip list | grep requests
  91. yum list installed | grep requests
  92. sudo pip uninstall requests
  93. sudo pip uninstall urllib3
  94. sudo yum install python-urllib3
  95. sudo yum install python-requests
  96. pip install boto3 (this installs urllib3 via pip as a dependency!)
  97. pip install boto
  98. slsutil.renderer salt://os_modifications/repo_update.sls
  99. if the grain is wrong on the salt master, but correct with salt-call restart the minion.
  100. salt moose* grains.item environment
  101. cmd.run 'salt-call grains.get environment'
  102. cmd.run 'salt-call -ldebug --local grains.get environment'
  103. cmd.run 'salt-call -lerror --local grains.get environment'
  104. boto3 issue
  105. on indexers python3 is installed and pip points to python3 not python2
  106. /usr/local/lib/python3.6/site-packages/pip
  107. Salt root is setup with python3
  108. salt moose-splunk-indexer-1* cmd.run 'pip install boto3'
  109. salt 'moose*indexer*' cmd.run 'pip install boto3'
  110. salt-call is different connecting to python2
  111. /bin/bash: pip: command not found
  112. salt 'moose*indexer*' cmd.run "salt-call cmd.run 'pip install boto3'"
  113. resolution steps
  114. Duane will remove /usr/local/bin/pip which is pointing to python3
  115. pip should be at /use/bin/pip
  116. yum --enablerepo=epel -y reinstall python2-pip
  117. to proceed:
  118. 1. install boto3 via pip
  119. 2. salt '*.local' cmd.run 'pip install --upgrade urllib3'
  120. Permissions issue? Run this command as root:
  121. salt salt* state.sls salt_master.salt_posix_acl